Jelajahi Sumber

docs: added scenes to docs with provider context

alvarosabu 2 tahun lalu
induk
melakukan
e3da1ea2f3

+ 0 - 262
docs/.vitepress/cache/deps/@huntersofbook_plausible-vue.js

@@ -1,262 +0,0 @@
-import {
-  inject
-} from "./chunk-LZPJ5JBW.js";
-import "./chunk-JC4IRQUL.js";
-
-// node_modules/.pnpm/defu@6.1.2/node_modules/defu/dist/defu.mjs
-function isObject(value) {
-  return value !== null && typeof value === "object";
-}
-function _defu(baseObject, defaults, namespace = ".", merger) {
-  if (!isObject(defaults)) {
-    return _defu(baseObject, {}, namespace, merger);
-  }
-  const object = Object.assign({}, defaults);
-  for (const key in baseObject) {
-    if (key === "__proto__" || key === "constructor") {
-      continue;
-    }
-    const value = baseObject[key];
-    if (value === null || value === void 0) {
-      continue;
-    }
-    if (merger && merger(object, key, value, namespace)) {
-      continue;
-    }
-    if (Array.isArray(value) && Array.isArray(object[key])) {
-      object[key] = [...value, ...object[key]];
-    } else if (isObject(value) && isObject(object[key])) {
-      object[key] = _defu(
-        value,
-        object[key],
-        (namespace ? `${namespace}.` : "") + key.toString(),
-        merger
-      );
-    } else {
-      object[key] = value;
-    }
-  }
-  return object;
-}
-function createDefu(merger) {
-  return (...arguments_) => (
-    // eslint-disable-next-line unicorn/no-array-reduce
-    arguments_.reduce((p, c) => _defu(p, c, "", merger), {})
-  );
-}
-var defu = createDefu();
-var defuFn = createDefu((object, key, currentValue) => {
-  if (typeof object[key] !== "undefined" && typeof currentValue === "function") {
-    object[key] = currentValue(object[key]);
-    return true;
-  }
-});
-var defuArrayFn = createDefu((object, key, currentValue) => {
-  if (Array.isArray(object[key]) && typeof currentValue === "function") {
-    object[key] = currentValue(object[key]);
-    return true;
-  }
-});
-
-// node_modules/.pnpm/plausible-tracker@0.3.8/node_modules/plausible-tracker/build/module/lib/request.js
-function sendEvent(eventName, data, options) {
-  const isLocalhost = /^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*:)*?:?0*1$/.test(location.hostname) || location.protocol === "file:";
-  if (!data.trackLocalhost && isLocalhost) {
-    return console.warn("[Plausible] Ignoring event because website is running locally");
-  }
-  try {
-    if (window.localStorage.plausible_ignore === "true") {
-      return console.warn('[Plausible] Ignoring event because "plausible_ignore" is set to "true" in localStorage');
-    }
-  } catch (e) {
-    null;
-  }
-  const payload = {
-    n: eventName,
-    u: data.url,
-    d: data.domain,
-    r: data.referrer,
-    w: data.deviceWidth,
-    h: data.hashMode ? 1 : 0,
-    p: options && options.props ? JSON.stringify(options.props) : void 0
-  };
-  const req = new XMLHttpRequest();
-  req.open("POST", `${data.apiHost}/api/event`, true);
-  req.setRequestHeader("Content-Type", "text/plain");
-  req.send(JSON.stringify(payload));
-  req.onreadystatechange = () => {
-    if (req.readyState !== 4)
-      return;
-    if (options && options.callback) {
-      options.callback();
-    }
-  };
-}
-
-// node_modules/.pnpm/plausible-tracker@0.3.8/node_modules/plausible-tracker/build/module/lib/tracker.js
-function Plausible(defaults) {
-  const getConfig = () => ({
-    hashMode: false,
-    trackLocalhost: false,
-    url: location.href,
-    domain: location.hostname,
-    referrer: document.referrer || null,
-    deviceWidth: window.innerWidth,
-    apiHost: "https://plausible.io",
-    ...defaults
-  });
-  const trackEvent = (eventName, options, eventData) => {
-    sendEvent(eventName, { ...getConfig(), ...eventData }, options);
-  };
-  const trackPageview = (eventData, options) => {
-    trackEvent("pageview", options, eventData);
-  };
-  const enableAutoPageviews = () => {
-    const page = () => trackPageview();
-    const originalPushState = history.pushState;
-    if (originalPushState) {
-      history.pushState = function(data, title, url) {
-        originalPushState.apply(this, [data, title, url]);
-        page();
-      };
-      addEventListener("popstate", page);
-    }
-    if (defaults && defaults.hashMode) {
-      addEventListener("hashchange", page);
-    }
-    trackPageview();
-    return function cleanup() {
-      if (originalPushState) {
-        history.pushState = originalPushState;
-        removeEventListener("popstate", page);
-      }
-      if (defaults && defaults.hashMode) {
-        removeEventListener("hashchange", page);
-      }
-    };
-  };
-  const enableAutoOutboundTracking = (targetNode = document, observerInit = {
-    subtree: true,
-    childList: true,
-    attributes: true,
-    attributeFilter: ["href"]
-  }) => {
-    function trackClick(event) {
-      trackEvent("Outbound Link: Click", { props: { url: this.href } });
-      if (!(typeof process !== "undefined" && process && false)) {
-        setTimeout(() => {
-          location.href = this.href;
-        }, 150);
-      }
-      event.preventDefault();
-    }
-    const tracked = /* @__PURE__ */ new Set();
-    function addNode(node) {
-      if (node instanceof HTMLAnchorElement) {
-        if (node.host !== location.host) {
-          node.addEventListener("click", trackClick);
-          tracked.add(node);
-        }
-      } else if ("querySelectorAll" in node) {
-        node.querySelectorAll("a").forEach(addNode);
-      }
-    }
-    function removeNode(node) {
-      if (node instanceof HTMLAnchorElement) {
-        node.removeEventListener("click", trackClick);
-        tracked.delete(node);
-      } else if ("querySelectorAll" in node) {
-        node.querySelectorAll("a").forEach(removeNode);
-      }
-    }
-    const observer = new MutationObserver((mutations) => {
-      mutations.forEach((mutation) => {
-        if (mutation.type === "attributes") {
-          removeNode(mutation.target);
-          addNode(mutation.target);
-        } else if (mutation.type === "childList") {
-          mutation.addedNodes.forEach(addNode);
-          mutation.removedNodes.forEach(removeNode);
-        }
-      });
-    });
-    targetNode.querySelectorAll("a").forEach(addNode);
-    observer.observe(targetNode, observerInit);
-    return function cleanup() {
-      tracked.forEach((a) => {
-        a.removeEventListener("click", trackClick);
-      });
-      tracked.clear();
-      observer.disconnect();
-    };
-  };
-  return {
-    trackEvent,
-    trackPageview,
-    enableAutoPageviews,
-    enableAutoOutboundTracking
-  };
-}
-
-// node_modules/.pnpm/plausible-tracker@0.3.8/node_modules/plausible-tracker/build/module/index.js
-var module_default = Plausible;
-
-// node_modules/.pnpm/@huntersofbook+plausible-vue@1.0.0/node_modules/@huntersofbook/plausible-vue/dist/index.mjs
-var loadScript = (source, options = {}) => {
-  return new Promise((resolve, reject) => {
-    const head = document.head || document.getElementsByTagName("head")[0];
-    const script = document.createElement("script");
-    const {
-      src,
-      type = options.partytown ? "text/partytown" : "text/javascript",
-      defer = false,
-      async = false,
-      ...restAttrs
-    } = options;
-    script.type = type;
-    script.defer = defer;
-    script.async = async;
-    script.src = src || source;
-    script.setAttribute("data-domain", options["data-domain"]);
-    Object.keys(restAttrs).forEach((key) => {
-      script[key] = restAttrs[key];
-    });
-    head.appendChild(script);
-    script.onload = resolve;
-    script.onerror = reject;
-  });
-};
-var createPlausible = (options) => {
-  const plausible = {
-    install(app) {
-      const data = defu(options.init, {
-        apiHost: "https://plausible.io",
-        enableAutoPageviews: true
-      });
-      const plausible2 = module_default(data);
-      if (options.settings.enableAutoPageviews === true)
-        plausible2.enableAutoPageviews();
-      if (options.settings.enableAutoOutboundTracking === true)
-        plausible2.enableAutoOutboundTracking();
-      loadScript(`${data.apiHost}/js/script.js`, {
-        "defer": true,
-        "data-domain": data.apiHost || "https://plausible.io",
-        "partytown": options.partytown || false
-      });
-      app.config.globalProperties.$plausible = plausible2;
-      app.provide("$plausible", plausible2);
-    }
-  };
-  return plausible;
-};
-var usePlausible = () => {
-  const plausible = inject("$plausible");
-  return {
-    ...plausible
-  };
-};
-export {
-  createPlausible,
-  usePlausible
-};
-//# sourceMappingURL=@huntersofbook_plausible-vue.js.map

File diff ditekan karena terlalu besar
+ 0 - 3
docs/.vitepress/cache/deps/@huntersofbook_plausible-vue.js.map


File diff ditekan karena terlalu besar
+ 112 - 880
docs/.vitepress/cache/deps/@tresjs_cientos.js


File diff ditekan karena terlalu besar
+ 0 - 1
docs/.vitepress/cache/deps/@tresjs_cientos.js.map


+ 38 - 0
docs/.vitepress/cache/deps/@tresjs_core.js

@@ -0,0 +1,38 @@
+import {
+  $,
+  G,
+  L,
+  Ne,
+  ce,
+  dt,
+  gt,
+  j,
+  lt,
+  me,
+  nt,
+  se,
+  tt,
+  vt,
+  wt
+} from "./chunk-ZUTZQNJG.js";
+import "./chunk-UMTEG5DH.js";
+import "./chunk-LZPJ5JBW.js";
+import "./chunk-JC4IRQUL.js";
+export {
+  Ne as CameraType,
+  lt as TresCanvas,
+  G as catalogue,
+  wt as default,
+  se as extend,
+  gt as isProd,
+  nt as trasverseObjects,
+  ce as useCamera,
+  dt as useLoader,
+  j as useLogger,
+  me as useRaycaster,
+  $ as useRenderLoop,
+  tt as useRenderer,
+  vt as useTexture,
+  L as useTres
+};
+//# sourceMappingURL=@tresjs_core.js.map

+ 7 - 0
docs/.vitepress/cache/deps/@tresjs_core.js.map

@@ -0,0 +1,7 @@
+{
+  "version": 3,
+  "sources": [],
+  "sourcesContent": [],
+  "mappings": "",
+  "names": []
+}

+ 28 - 19
docs/.vitepress/cache/deps/_metadata.json

@@ -1,59 +1,68 @@
 {
-  "hash": "c17ae1f0",
-  "browserHash": "5bb77dae",
+  "hash": "02bd31c1",
+  "browserHash": "823e2554",
   "optimized": {
     "vue": {
       "src": "../../../../node_modules/.pnpm/vue@3.2.47/node_modules/vue/dist/vue.runtime.esm-bundler.js",
       "file": "vue.js",
-      "fileHash": "d044c9b0",
-      "needsInterop": false
-    },
-    "@huntersofbook/plausible-vue": {
-      "src": "../../../../node_modules/.pnpm/@huntersofbook+plausible-vue@1.0.0/node_modules/@huntersofbook/plausible-vue/dist/index.mjs",
-      "file": "@huntersofbook_plausible-vue.js",
-      "fileHash": "848179d8",
+      "fileHash": "e62c8883",
       "needsInterop": false
     },
     "three": {
-      "src": "../../../../node_modules/.pnpm/three@0.151.2/node_modules/three/build/three.module.js",
+      "src": "../../../../node_modules/.pnpm/three@0.151.3/node_modules/three/build/three.module.js",
       "file": "three.js",
-      "fileHash": "7beb728f",
+      "fileHash": "36538c0a",
       "needsInterop": false
     },
     "@tresjs/cientos": {
-      "src": "../../../../node_modules/.pnpm/@tresjs+cientos@2.0.0-alpha.5_three@0.151.2/node_modules/@tresjs/cientos/dist/trescientos.js",
+      "src": "../../../../node_modules/.pnpm/@tresjs+cientos@2.0.0-alpha.5_three@0.151.3/node_modules/@tresjs/cientos/dist/trescientos.js",
       "file": "@tresjs_cientos.js",
-      "fileHash": "8825b321",
+      "fileHash": "ef210087",
       "needsInterop": false
     },
     "@stackblitz/sdk": {
       "src": "../../../../node_modules/.pnpm/@stackblitz+sdk@1.8.2/node_modules/@stackblitz/sdk/bundles/sdk.m.js",
       "file": "@stackblitz_sdk.js",
-      "fileHash": "9c76117e",
+      "fileHash": "0b9798ce",
       "needsInterop": false
     },
     "gsap": {
       "src": "../../../../node_modules/.pnpm/gsap@3.11.5/node_modules/gsap/index.js",
       "file": "gsap.js",
-      "fileHash": "a4e1e619",
+      "fileHash": "5d5aba65",
       "needsInterop": false
     },
     "@vueuse/core": {
       "src": "../../../../node_modules/.pnpm/@vueuse+core@9.13.0/node_modules/@vueuse/core/index.mjs",
       "file": "@vueuse_core.js",
-      "fileHash": "78c5386e",
+      "fileHash": "c8b219d1",
+      "needsInterop": false
+    },
+    "three/src/math/MathUtils": {
+      "src": "../../../../node_modules/.pnpm/three@0.151.3/node_modules/three/src/math/MathUtils.js",
+      "file": "three_src_math_MathUtils.js",
+      "fileHash": "b451a408",
       "needsInterop": false
     },
     "@alvarosabu/utils": {
       "src": "../../../../node_modules/.pnpm/@alvarosabu+utils@2.3.0/node_modules/@alvarosabu/utils/dist/as-utils.js",
       "file": "@alvarosabu_utils.js",
-      "fileHash": "da5ce369",
+      "fileHash": "e66a408e",
+      "needsInterop": false
+    },
+    "@tresjs/core": {
+      "src": "../../../../node_modules/.pnpm/@tresjs+core@2.0.0-alpha.1_three@0.151.3+vue@3.2.47/node_modules/@tresjs/core/dist/tres.js",
+      "file": "@tresjs_core.js",
+      "fileHash": "013cca1c",
       "needsInterop": false
     }
   },
   "chunks": {
-    "chunk-XEKPWTXV": {
-      "file": "chunk-XEKPWTXV.js"
+    "chunk-ZUTZQNJG": {
+      "file": "chunk-ZUTZQNJG.js"
+    },
+    "chunk-UMTEG5DH": {
+      "file": "chunk-UMTEG5DH.js"
     },
     "chunk-LZPJ5JBW": {
       "file": "chunk-LZPJ5JBW.js"

+ 2 - 2
docs/.vitepress/cache/deps/chunk-XEKPWTXV.js → docs/.vitepress/cache/deps/chunk-UMTEG5DH.js

@@ -2,7 +2,7 @@ import {
   __export
 } from "./chunk-JC4IRQUL.js";
 
-// node_modules/.pnpm/three@0.151.2/node_modules/three/build/three.module.js
+// node_modules/.pnpm/three@0.151.3/node_modules/three/build/three.module.js
 var three_module_exports = {};
 __export(three_module_exports, {
   ACESFilmicToneMapping: () => ACESFilmicToneMapping,
@@ -30489,4 +30489,4 @@ three/build/three.module.js:
    * SPDX-License-Identifier: MIT
    *)
 */
-//# sourceMappingURL=chunk-XEKPWTXV.js.map
+//# sourceMappingURL=chunk-UMTEG5DH.js.map

File diff ditekan karena terlalu besar
+ 1 - 1
docs/.vitepress/cache/deps/chunk-UMTEG5DH.js.map


+ 853 - 0
docs/.vitepress/cache/deps/chunk-ZUTZQNJG.js

@@ -0,0 +1,853 @@
+import {
+  ACESFilmicToneMapping,
+  Clock,
+  Color,
+  LinearEncoding,
+  LoadingManager,
+  MathUtils,
+  Mesh,
+  NoToneMapping,
+  OrthographicCamera,
+  PCFShadowMap,
+  PCFSoftShadowMap,
+  PerspectiveCamera,
+  Raycaster,
+  Scene,
+  TextureLoader,
+  Vector2,
+  WebGLRenderer,
+  sRGBEncoding,
+  three_module_exports
+} from "./chunk-UMTEG5DH.js";
+import {
+  computed,
+  createRenderer,
+  defineComponent,
+  getCurrentInstance,
+  getCurrentScope,
+  h,
+  nextTick,
+  onMounted,
+  onScopeDispose,
+  readonly,
+  ref,
+  shallowReactive,
+  shallowRef,
+  toRef,
+  toRefs,
+  unref,
+  watch,
+  watchEffect
+} from "./chunk-LZPJ5JBW.js";
+
+// node_modules/.pnpm/@vueuse+shared@9.13.0_vue@3.2.47/node_modules/@vueuse/shared/index.mjs
+var _a;
+var isClient = typeof window !== "undefined";
+var isFunction = (val) => typeof val === "function";
+var isString = (val) => typeof val === "string";
+var noop = () => {
+};
+var isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);
+function resolveUnref(r) {
+  return typeof r === "function" ? r() : unref(r);
+}
+function identity(arg) {
+  return arg;
+}
+function tryOnScopeDispose(fn) {
+  if (getCurrentScope()) {
+    onScopeDispose(fn);
+    return true;
+  }
+  return false;
+}
+function createEventHook() {
+  const fns = [];
+  const off = (fn) => {
+    const index = fns.indexOf(fn);
+    if (index !== -1)
+      fns.splice(index, 1);
+  };
+  const on = (fn) => {
+    fns.push(fn);
+    const offFn = () => off(fn);
+    tryOnScopeDispose(offFn);
+    return {
+      off: offFn
+    };
+  };
+  const trigger = (param) => {
+    fns.forEach((fn) => fn(param));
+  };
+  return {
+    on,
+    off,
+    trigger
+  };
+}
+function tryOnMounted(fn, sync = true) {
+  if (getCurrentInstance())
+    onMounted(fn);
+  else if (sync)
+    fn();
+  else
+    nextTick(fn);
+}
+
+// node_modules/.pnpm/@vueuse+core@9.13.0_vue@3.2.47/node_modules/@vueuse/core/index.mjs
+function unrefElement(elRef) {
+  var _a2;
+  const plain = resolveUnref(elRef);
+  return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain;
+}
+var defaultWindow = isClient ? window : void 0;
+var defaultDocument = isClient ? window.document : void 0;
+var defaultNavigator = isClient ? window.navigator : void 0;
+var defaultLocation = isClient ? window.location : void 0;
+function useEventListener(...args) {
+  let target;
+  let events;
+  let listeners;
+  let options;
+  if (isString(args[0]) || Array.isArray(args[0])) {
+    [events, listeners, options] = args;
+    target = defaultWindow;
+  } else {
+    [target, events, listeners, options] = args;
+  }
+  if (!target)
+    return noop;
+  if (!Array.isArray(events))
+    events = [events];
+  if (!Array.isArray(listeners))
+    listeners = [listeners];
+  const cleanups = [];
+  const cleanup = () => {
+    cleanups.forEach((fn) => fn());
+    cleanups.length = 0;
+  };
+  const register = (el, event, listener, options2) => {
+    el.addEventListener(event, listener, options2);
+    return () => el.removeEventListener(event, listener, options2);
+  };
+  const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => {
+    cleanup();
+    if (!el)
+      return;
+    cleanups.push(...events.flatMap((event) => {
+      return listeners.map((listener) => register(el, event, listener, options2));
+    }));
+  }, { immediate: true, flush: "post" });
+  const stop = () => {
+    stopWatch();
+    cleanup();
+  };
+  tryOnScopeDispose(stop);
+  return stop;
+}
+function useSupported(callback, sync = false) {
+  const isSupported = ref();
+  const update = () => isSupported.value = Boolean(callback());
+  update();
+  tryOnMounted(update, sync);
+  return isSupported;
+}
+var _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
+var globalKey = "__vueuse_ssr_handlers__";
+_global[globalKey] = _global[globalKey] || {};
+var handlers = _global[globalKey];
+function useDevicePixelRatio({
+  window: window2 = defaultWindow
+} = {}) {
+  const pixelRatio = ref(1);
+  if (window2) {
+    let observe = function() {
+      pixelRatio.value = window2.devicePixelRatio;
+      cleanup();
+      media = window2.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);
+      media.addEventListener("change", observe, { once: true });
+    }, cleanup = function() {
+      media == null ? void 0 : media.removeEventListener("change", observe);
+    };
+    let media;
+    observe();
+    tryOnScopeDispose(cleanup);
+  }
+  return { pixelRatio };
+}
+var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
+var __hasOwnProp$g = Object.prototype.hasOwnProperty;
+var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
+var __objRest$2 = (source, exclude) => {
+  var target = {};
+  for (var prop in source)
+    if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0)
+      target[prop] = source[prop];
+  if (source != null && __getOwnPropSymbols$g)
+    for (var prop of __getOwnPropSymbols$g(source)) {
+      if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop))
+        target[prop] = source[prop];
+    }
+  return target;
+};
+function useResizeObserver(target, callback, options = {}) {
+  const _a2 = options, { window: window2 = defaultWindow } = _a2, observerOptions = __objRest$2(_a2, ["window"]);
+  let observer;
+  const isSupported = useSupported(() => window2 && "ResizeObserver" in window2);
+  const cleanup = () => {
+    if (observer) {
+      observer.disconnect();
+      observer = void 0;
+    }
+  };
+  const stopWatch = watch(() => unrefElement(target), (el) => {
+    cleanup();
+    if (isSupported.value && window2 && el) {
+      observer = new ResizeObserver(callback);
+      observer.observe(el, observerOptions);
+    }
+  }, { immediate: true, flush: "post" });
+  const stop = () => {
+    cleanup();
+    stopWatch();
+  };
+  tryOnScopeDispose(stop);
+  return {
+    isSupported,
+    stop
+  };
+}
+function useRafFn(fn, options = {}) {
+  const {
+    immediate = true,
+    window: window2 = defaultWindow
+  } = options;
+  const isActive = ref(false);
+  let previousFrameTimestamp = 0;
+  let rafId = null;
+  function loop(timestamp2) {
+    if (!isActive.value || !window2)
+      return;
+    const delta = timestamp2 - previousFrameTimestamp;
+    fn({ delta, timestamp: timestamp2 });
+    previousFrameTimestamp = timestamp2;
+    rafId = window2.requestAnimationFrame(loop);
+  }
+  function resume() {
+    if (!isActive.value && window2) {
+      isActive.value = true;
+      rafId = window2.requestAnimationFrame(loop);
+    }
+  }
+  function pause() {
+    isActive.value = false;
+    if (rafId != null && window2) {
+      window2.cancelAnimationFrame(rafId);
+      rafId = null;
+    }
+  }
+  if (immediate)
+    resume();
+  tryOnScopeDispose(pause);
+  return {
+    isActive: readonly(isActive),
+    pause,
+    resume
+  };
+}
+function useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {
+  const { window: window2 = defaultWindow, box = "content-box" } = options;
+  const isSVG = computed(() => {
+    var _a2, _b;
+    return (_b = (_a2 = unrefElement(target)) == null ? void 0 : _a2.namespaceURI) == null ? void 0 : _b.includes("svg");
+  });
+  const width = ref(initialSize.width);
+  const height = ref(initialSize.height);
+  useResizeObserver(target, ([entry]) => {
+    const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;
+    if (window2 && isSVG.value) {
+      const $elem = unrefElement(target);
+      if ($elem) {
+        const styles = window2.getComputedStyle($elem);
+        width.value = parseFloat(styles.width);
+        height.value = parseFloat(styles.height);
+      }
+    } else {
+      if (boxSize) {
+        const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];
+        width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);
+        height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);
+      } else {
+        width.value = entry.contentRect.width;
+        height.value = entry.contentRect.height;
+      }
+    }
+  }, options);
+  watch(() => unrefElement(target), (ele) => {
+    width.value = ele ? initialSize.width : 0;
+    height.value = ele ? initialSize.height : 0;
+  });
+  return {
+    width,
+    height
+  };
+}
+var defaultState = {
+  x: 0,
+  y: 0,
+  pointerId: 0,
+  pressure: 0,
+  tiltX: 0,
+  tiltY: 0,
+  width: 0,
+  height: 0,
+  twist: 0,
+  pointerType: null
+};
+var keys = Object.keys(defaultState);
+var SwipeDirection;
+(function(SwipeDirection2) {
+  SwipeDirection2["UP"] = "UP";
+  SwipeDirection2["RIGHT"] = "RIGHT";
+  SwipeDirection2["DOWN"] = "DOWN";
+  SwipeDirection2["LEFT"] = "LEFT";
+  SwipeDirection2["NONE"] = "NONE";
+})(SwipeDirection || (SwipeDirection = {}));
+var __defProp = Object.defineProperty;
+var __getOwnPropSymbols = Object.getOwnPropertySymbols;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __propIsEnum = Object.prototype.propertyIsEnumerable;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __spreadValues = (a, b2) => {
+  for (var prop in b2 || (b2 = {}))
+    if (__hasOwnProp.call(b2, prop))
+      __defNormalProp(a, prop, b2[prop]);
+  if (__getOwnPropSymbols)
+    for (var prop of __getOwnPropSymbols(b2)) {
+      if (__propIsEnum.call(b2, prop))
+        __defNormalProp(a, prop, b2[prop]);
+    }
+  return a;
+};
+var _TransitionPresets = {
+  easeInSine: [0.12, 0, 0.39, 0],
+  easeOutSine: [0.61, 1, 0.88, 1],
+  easeInOutSine: [0.37, 0, 0.63, 1],
+  easeInQuad: [0.11, 0, 0.5, 0],
+  easeOutQuad: [0.5, 1, 0.89, 1],
+  easeInOutQuad: [0.45, 0, 0.55, 1],
+  easeInCubic: [0.32, 0, 0.67, 0],
+  easeOutCubic: [0.33, 1, 0.68, 1],
+  easeInOutCubic: [0.65, 0, 0.35, 1],
+  easeInQuart: [0.5, 0, 0.75, 0],
+  easeOutQuart: [0.25, 1, 0.5, 1],
+  easeInOutQuart: [0.76, 0, 0.24, 1],
+  easeInQuint: [0.64, 0, 0.78, 0],
+  easeOutQuint: [0.22, 1, 0.36, 1],
+  easeInOutQuint: [0.83, 0, 0.17, 1],
+  easeInExpo: [0.7, 0, 0.84, 0],
+  easeOutExpo: [0.16, 1, 0.3, 1],
+  easeInOutExpo: [0.87, 0, 0.13, 1],
+  easeInCirc: [0.55, 0, 1, 0.45],
+  easeOutCirc: [0, 0.55, 0.45, 1],
+  easeInOutCirc: [0.85, 0, 0.15, 1],
+  easeInBack: [0.36, 0, 0.66, -0.56],
+  easeOutBack: [0.34, 1.56, 0.64, 1],
+  easeInOutBack: [0.68, -0.6, 0.32, 1.6]
+};
+var TransitionPresets = __spreadValues({
+  linear: identity
+}, _TransitionPresets);
+function useWindowSize(options = {}) {
+  const {
+    window: window2 = defaultWindow,
+    initialWidth = Infinity,
+    initialHeight = Infinity,
+    listenOrientation = true,
+    includeScrollbar = true
+  } = options;
+  const width = ref(initialWidth);
+  const height = ref(initialHeight);
+  const update = () => {
+    if (window2) {
+      if (includeScrollbar) {
+        width.value = window2.innerWidth;
+        height.value = window2.innerHeight;
+      } else {
+        width.value = window2.document.documentElement.clientWidth;
+        height.value = window2.document.documentElement.clientHeight;
+      }
+    }
+  };
+  update();
+  tryOnMounted(update);
+  useEventListener("resize", update, { passive: true });
+  if (listenOrientation)
+    useEventListener("orientationchange", update, { passive: true });
+  return { width, height };
+}
+
+// node_modules/.pnpm/@tresjs+core@2.0.0-alpha.1_three@0.151.3+vue@3.2.47/node_modules/@tresjs/core/dist/tres.js
+var G = ref({ uuid: MathUtils.generateUUID() });
+var se = (e) => void Object.assign(G.value, e);
+var Ne = ((e) => (e.Perspective = "Perspective", e.Orthographic = "Orthographic", e))(Ne || {});
+var qe = 45;
+var y;
+function ce() {
+  const { state: e, setState: t, aspectRatio: r } = L();
+  function o(a = "Perspective", s) {
+    var l, p, m;
+    if (a === "Perspective") {
+      const { near: d, far: w, fov: v } = s || {
+        near: 0.1,
+        far: 1e3,
+        fov: qe
+      };
+      y = new PerspectiveCamera(v, ((l = e.aspectRatio) == null ? void 0 : l.value) || window.innerWidth / window.innerHeight, d, w), (p = e.cameras) == null || p.push(y);
+    } else {
+      const { left: d, right: w, top: v, bottom: g, near: E, far: x } = s || {
+        left: -100,
+        right: 100,
+        top: 100,
+        bottom: -100,
+        near: 0.1,
+        far: 1e3
+      };
+      y = new OrthographicCamera(d, w, v, g, E, x), (m = e.cameras) == null || m.push(y);
+    }
+    return e.camera = y, t("camera", e.camera), y;
+  }
+  function n() {
+    var a;
+    e.camera instanceof PerspectiveCamera && e.aspectRatio && (e.camera.aspect = e.aspectRatio.value), (a = e.camera) == null || a.updateProjectionMatrix();
+  }
+  function i(a) {
+    var s;
+    (s = e.cameras) == null || s.push(a), a instanceof PerspectiveCamera && e.aspectRatio && (a.aspect = e.aspectRatio.value), a.updateProjectionMatrix(), t("camera", a);
+  }
+  function c() {
+    e.cameras = [];
+  }
+  return watchEffect(() => {
+    r != null && r.value && n();
+  }), {
+    activeCamera: toRef(e, "camera"),
+    createCamera: o,
+    updateCamera: n,
+    pushCamera: i,
+    clearCameras: c
+  };
+}
+var ue = createEventHook();
+var le = createEventHook();
+var V = createEventHook();
+var b = new Clock();
+var A = 0;
+var k = 0;
+var { pause: Je, resume: Ke, isActive: Xe } = useRafFn(
+  () => {
+    ue.trigger({ delta: A, elapsed: k, clock: b }), le.trigger({ delta: A, elapsed: k, clock: b }), V.trigger({ delta: A, elapsed: k, clock: b });
+  },
+  { immediate: false }
+);
+V.on(() => {
+  A = b.getDelta(), k = b.getElapsedTime();
+});
+function $() {
+  return {
+    onBeforeLoop: ue.on,
+    onLoop: le.on,
+    onAfterLoop: V.on,
+    pause: Je,
+    resume: Ke,
+    isActive: Xe
+  };
+}
+function Ye(e) {
+  return e instanceof Color ? e : Array.isArray(e) ? new Color(...e) : new Color(e);
+}
+var B = {
+  realistic: {
+    outputEncoding: sRGBEncoding,
+    toneMapping: ACESFilmicToneMapping,
+    toneMappingExposure: 3,
+    shadowMap: {
+      enabled: true,
+      type: PCFSoftShadowMap
+    }
+  }
+};
+var fe = (e, t) => {
+  for (const r of Object.keys(t))
+    t[r] instanceof Object && Object.assign(t[r], fe(e[r], t[r]));
+  return Object.assign(e || {}, t), e;
+};
+var Qe = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot";
+var Ze = et(Qe);
+function I(e) {
+  return e.replace(/-([a-z])/g, (t, r) => r.toUpperCase());
+}
+function et(e, t) {
+  const r = /* @__PURE__ */ Object.create(null), o = e.split(",");
+  for (let n = 0; n < o.length; n++)
+    r[o[n]] = true;
+  return t ? (n) => !!r[n.toLowerCase()] : (n) => !!r[n];
+}
+var f = shallowRef();
+var H = ref(false);
+function tt(e, t, r) {
+  const {
+    alpha: o = true,
+    antialias: n = true,
+    depth: i,
+    logarithmicDepthBuffer: c,
+    failIfMajorPerformanceCaveat: a,
+    precision: s,
+    premultipliedAlpha: l,
+    stencil: p,
+    shadows: m = false,
+    shadowMapType: d = PCFShadowMap,
+    physicallyCorrectLights: w = false,
+    useLegacyLights: v = false,
+    outputEncoding: g = LinearEncoding,
+    toneMapping: E = NoToneMapping,
+    toneMappingExposure: x = 1,
+    context: de = void 0,
+    powerPreference: ve = "default",
+    preserveDrawingBuffer: ge = false,
+    clearColor: C,
+    windowSize: we = false,
+    preset: he = void 0
+  } = toRefs(r), { setState: D } = L(), { width: N, height: q } = resolveUnref(we) ? useWindowSize() : useElementSize(t), { logError: ye } = j(), { pixelRatio: J } = useDevicePixelRatio(), { pause: Me, resume: Ce } = $(), F = computed(() => N.value / q.value), K = () => {
+    f.value && (f.value.setSize(N.value, q.value), f.value.setPixelRatio(Math.min(J.value, 2)));
+  }, X = () => {
+    if (!f.value)
+      return;
+    const h2 = resolveUnref(he);
+    if (h2) {
+      h2 in B || ye("Renderer Preset must be one of these: " + Object.keys(B).join(", ")), fe(f.value, B[h2]);
+      return;
+    }
+    f.value.shadowMap.enabled = resolveUnref(m), f.value.shadowMap.type = resolveUnref(d), f.value.toneMapping = resolveUnref(E) || NoToneMapping, f.value.toneMappingExposure = resolveUnref(x), f.value.outputEncoding = resolveUnref(g) || LinearEncoding, C != null && C.value && f.value.setClearColor(Ye(resolveUnref(C))), f.value.useLegacyLights = resolveUnref(v);
+  }, be = () => {
+    const h2 = unrefElement(e);
+    h2 && (f.value = new WebGLRenderer({
+      canvas: h2,
+      alpha: resolveUnref(o),
+      antialias: resolveUnref(n),
+      context: resolveUnref(de),
+      depth: resolveUnref(i),
+      failIfMajorPerformanceCaveat: resolveUnref(a),
+      logarithmicDepthBuffer: resolveUnref(c),
+      powerPreference: resolveUnref(ve),
+      precision: resolveUnref(s),
+      stencil: resolveUnref(p),
+      preserveDrawingBuffer: resolveUnref(ge),
+      premultipliedAlpha: resolveUnref(l)
+    }), D("renderer", f.value), D("clock", new Clock()), D("aspectRatio", F), X(), K(), Ce(), H.value = true);
+  }, Le = () => {
+    f.value && (f.value.dispose(), f.value = void 0, H.value = false, Me());
+  };
+  return watch([F, J], K), watch(
+    [m, d, g, v, E, x, C],
+    X
+  ), watch(
+    () => [e, t],
+    () => {
+      unrefElement(e) && unrefElement(t) && be();
+    },
+    { immediate: true, deep: true }
+  ), {
+    renderer: f,
+    isReady: H,
+    dispose: Le,
+    aspectRatio: F
+  };
+}
+var pe = (e) => !!e && e.constructor === Array;
+function nt(e) {
+  const t = { nodes: {}, materials: {} };
+  return e && e.traverse((r) => {
+    r.name && (t.nodes[r.name] = r), r.material && !t.materials[r.material.name] && (t.materials[r.material.name] = r.material);
+  }), t;
+}
+async function dt(e, t, r, o, n) {
+  const { logError: i } = j(), c = new e();
+  n && n(c), r && r(c);
+  const s = (Array.isArray(t) ? t : [t]).map(
+    (l) => new Promise((p, m) => {
+      c.load(
+        l,
+        (d) => {
+          d.scene && Object.assign(d, nt(d.scene)), p(d);
+        },
+        o,
+        (d) => m(i("[useLoader] - Failed to load resource", d))
+      );
+    })
+  );
+  return pe(t) ? await Promise.all(s) : await s[0];
+}
+async function vt(e) {
+  const t = new LoadingManager(), r = new TextureLoader(t), o = (n) => new Promise((i, c) => {
+    r.load(
+      n,
+      (a) => i(a),
+      () => null,
+      () => {
+        c(new Error("[useTextures] - Failed to load texture"));
+      }
+    );
+  });
+  if (pe(e)) {
+    const n = await Promise.all(e.map((i) => o(i)));
+    return e.length > 1 ? n : n[0];
+  } else {
+    const { map: n, displacementMap: i, normalMap: c, roughnessMap: a, metalnessMap: s, aoMap: l } = e;
+    return {
+      map: n ? await o(n) : null,
+      displacementMap: i ? await o(i) : null,
+      normalMap: c ? await o(c) : null,
+      roughnessMap: a ? await o(a) : null,
+      metalnessMap: s ? await o(s) : null,
+      aoMap: l ? await o(l) : null
+    };
+  }
+}
+var R = shallowReactive({
+  camera: void 0,
+  cameras: [],
+  aspectRatio: computed(() => window.innerWidth / window.innerHeight)
+});
+function L() {
+  function e(r) {
+    return R[r];
+  }
+  function t(r, o) {
+    R[r] = o;
+  }
+  return {
+    state: R,
+    ...toRefs(R),
+    getState: e,
+    setState: t
+  };
+}
+var ee = shallowRef(new Raycaster());
+var S = ref(new Vector2());
+var at = ref(null);
+function me() {
+  const { setState: e } = L();
+  e("raycaster", ee.value), e("pointer", S), e("currentInstance", at);
+  function t(r) {
+    S.value.x = r.clientX / window.innerWidth * 2 - 1, S.value.y = -(r.clientY / window.innerHeight) * 2 + 1;
+  }
+  return window.addEventListener("pointermove", t), {
+    raycaster: ee,
+    pointer: S
+  };
+}
+var gt = true;
+var te = "[TresJS ▲ ■ ●] ";
+function j() {
+  function e(o, n) {
+    console.error(`${te} ${o}`, n || "");
+  }
+  function t(o) {
+    console.warn(`${te} ${o}`);
+  }
+  function r(o, n) {
+  }
+  return {
+    logError: e,
+    logWarning: t,
+    logMessage: r
+  };
+}
+var { logWarning: rt } = j();
+function ot(e) {
+  for (const t in e)
+    if (t.indexOf("on") === 0)
+      return true;
+  return false;
+}
+var T = null;
+var it = {
+  createElement(e, t, r, o) {
+    if (e === "template" || Ze(e))
+      return null;
+    let n;
+    if (o === null && (o = {}), o != null && o.args ? n = new G.value[e.replace("Tres", "")](...o.args) : n = new G.value[e.replace("Tres", "")](), n.isCamera) {
+      (!(o != null && o.position) || o != null && o.position.every((c) => c == 0)) && rt(
+        // eslint-disable-next-line max-len
+        "Camera is positioned at the center of the scene [0,0,0], if this is not intentional try setting a position if your scene seems empty 🤗"
+      );
+      const { pushCamera: i } = ce();
+      i(n);
+    }
+    return (o == null ? void 0 : o.attach) === void 0 && (n.isMaterial ? n.attach = "material" : n.isBufferGeometry && (n.attach = "geometry")), n;
+  },
+  insert(e, t, r) {
+    if (T === null && t.isScene && (T = t), t === null && (t = T), t != null && t.isObject3D && (e != null && e.isObject3D)) {
+      const a = r ? t.children.indexOf(r) : 0;
+      e.parent = t, t.children.splice(a, 0, e), e.dispatchEvent({ type: "added" });
+    } else
+      typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[t == null ? void 0 : t.attach], t && (t[e.attach] = e));
+    const { onLoop: o } = $();
+    let n = null, i = null;
+    const { raycaster: c } = me();
+    e && e instanceof Mesh && ot(e) && (o(() => {
+      var a, s, l;
+      if (t != null && t.children && e && c) {
+        const p = c.value.intersectObjects(t.children);
+        p.length > 0 && p[0].object.uuid === e.uuid ? (i = p[0], (n === null || n.object.uuid !== (i == null ? void 0 : i.object.uuid)) && ((a = e.onPointerEnter) == null || a.call(e, i)), (s = e.onPointerMove) == null || s.call(e, i)) : (i = null, n !== null && ((l = e.onPointerLeave) == null || l.call(e, n))), n = i;
+      }
+    }), useEventListener(window, "click", () => {
+      var a;
+      i !== null && ((a = e.onClick) == null || a.call(e, i));
+    }));
+  },
+  remove(e) {
+    if (!e)
+      return;
+    const t = e.parentNode;
+    t && t.removeChild(e);
+  },
+  patchProp(e, t, r, o) {
+    if (e) {
+      let n = e, i = t;
+      const c = I(i);
+      let a = n == null ? void 0 : n[c];
+      if (e.parent || (e.parent = T), i.includes("-") && a === void 0) {
+        const l = i.split("-");
+        a = l.reduce((p, m) => p[I(m)], n), i = l.pop(), a != null && a.set || (n = l.reduce((p, m) => p[I(m)], n));
+      }
+      let s = o;
+      if (s === "" && (s = true), isFunction(a))
+        return;
+      !(a != null && a.set) && !isFunction(a) ? n[c] = s : a.constructor === s.constructor && (a != null && a.copy) ? a == null || a.copy(s) : Array.isArray(s) ? a.set(...s) : !a.isColor && a.setScalar ? a.setScalar(s) : a.set(s);
+    }
+  },
+  parentNode(e) {
+    return (e == null ? void 0 : e.parent) || null;
+  },
+  createText: () => void 0,
+  createComment: () => void 0,
+  setText: () => void 0,
+  setElementText: () => void 0,
+  nextSibling: () => void 0,
+  querySelector: () => void 0,
+  setScopeId: () => void 0,
+  cloneNode: () => void 0,
+  insertStaticContent: () => void 0
+};
+var { createApp: st } = createRenderer(it);
+var ct = (e) => {
+  const t = st(r);
+  function r() {
+    return e && e.default ? e.default() : [];
+  }
+  return t;
+};
+se(three_module_exports);
+var { logWarning: ut } = j();
+var lt = defineComponent({
+  name: "TresCanvas",
+  props: [
+    "shadows",
+    "shadowMapType",
+    "physicallyCorrectLights",
+    "useLegacyLights",
+    "outputEncoding",
+    "toneMapping",
+    "toneMappingExposure",
+    "context",
+    "powerPreference",
+    "preserveDrawingBuffer",
+    "clearColor",
+    "windowSize",
+    "preset"
+  ],
+  setup(e, { slots: t, expose: r }) {
+    e.physicallyCorrectLights === true && ut("physicallyCorrectLights is deprecated, useLegacyLights is now false by default");
+    const o = ref(), n = ref(), i = new Scene(), { setState: c } = L();
+    c("scene", i);
+    function a() {
+      const { renderer: p } = tt(n, o, e), { activeCamera: m } = ce(), { onLoop: d } = $(), { raycaster: w, pointer: v } = me();
+      d(() => {
+        var g;
+        m.value && (w.value.setFromCamera(v.value, m.value), (g = p.value) == null || g.render(i, m.value));
+      });
+    }
+    watch(n, a);
+    let s;
+    function l() {
+      s = ct(t), s.provide("useTres", L()), s.provide("extend", se), s.mount(i);
+    }
+    return l(), r({
+      scene: i
+    }), () => h(
+      h(
+        "div",
+        {
+          ref: o,
+          style: {
+            position: "relative",
+            width: "100%",
+            height: "100%",
+            pointerEvents: "auto",
+            touchAction: "none"
+          }
+        },
+        [
+          h(
+            "div",
+            {
+              style: {
+                width: "100%",
+                height: "100%"
+              }
+            },
+            [
+              h("canvas", {
+                ref: n,
+                style: {
+                  display: "block",
+                  width: "100%",
+                  height: "100%",
+                  position: e.windowSize ? "fixed" : "absolute",
+                  top: 0,
+                  left: 0
+                }
+              })
+            ]
+          )
+        ]
+      )
+    );
+  }
+});
+var wt = {
+  install(e) {
+    e.component("TresCanvas", lt);
+  }
+};
+
+export {
+  G,
+  se,
+  Ne,
+  ce,
+  $,
+  tt,
+  nt,
+  dt,
+  vt,
+  L,
+  me,
+  gt,
+  j,
+  lt,
+  wt
+};
+//# sourceMappingURL=chunk-ZUTZQNJG.js.map

File diff ditekan karena terlalu besar
+ 3 - 0
docs/.vitepress/cache/deps/chunk-ZUTZQNJG.js.map


+ 1 - 1
docs/.vitepress/cache/deps/three.js

@@ -408,7 +408,7 @@ import {
   ZeroStencilOp,
   _SRGBAFormat,
   sRGBEncoding
-} from "./chunk-XEKPWTXV.js";
+} from "./chunk-UMTEG5DH.js";
 import "./chunk-JC4IRQUL.js";
 export {
   ACESFilmicToneMapping,

+ 208 - 0
docs/.vitepress/cache/deps/three_src_math_MathUtils.js

@@ -0,0 +1,208 @@
+import "./chunk-JC4IRQUL.js";
+
+// node_modules/.pnpm/three@0.151.3/node_modules/three/src/math/MathUtils.js
+var _lut = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"];
+var _seed = 1234567;
+var DEG2RAD = Math.PI / 180;
+var RAD2DEG = 180 / Math.PI;
+function generateUUID() {
+  const d0 = Math.random() * 4294967295 | 0;
+  const d1 = Math.random() * 4294967295 | 0;
+  const d2 = Math.random() * 4294967295 | 0;
+  const d3 = Math.random() * 4294967295 | 0;
+  const uuid = _lut[d0 & 255] + _lut[d0 >> 8 & 255] + _lut[d0 >> 16 & 255] + _lut[d0 >> 24 & 255] + "-" + _lut[d1 & 255] + _lut[d1 >> 8 & 255] + "-" + _lut[d1 >> 16 & 15 | 64] + _lut[d1 >> 24 & 255] + "-" + _lut[d2 & 63 | 128] + _lut[d2 >> 8 & 255] + "-" + _lut[d2 >> 16 & 255] + _lut[d2 >> 24 & 255] + _lut[d3 & 255] + _lut[d3 >> 8 & 255] + _lut[d3 >> 16 & 255] + _lut[d3 >> 24 & 255];
+  return uuid.toLowerCase();
+}
+function clamp(value, min, max) {
+  return Math.max(min, Math.min(max, value));
+}
+function euclideanModulo(n, m) {
+  return (n % m + m) % m;
+}
+function mapLinear(x, a1, a2, b1, b2) {
+  return b1 + (x - a1) * (b2 - b1) / (a2 - a1);
+}
+function inverseLerp(x, y, value) {
+  if (x !== y) {
+    return (value - x) / (y - x);
+  } else {
+    return 0;
+  }
+}
+function lerp(x, y, t) {
+  return (1 - t) * x + t * y;
+}
+function damp(x, y, lambda, dt) {
+  return lerp(x, y, 1 - Math.exp(-lambda * dt));
+}
+function pingpong(x, length = 1) {
+  return length - Math.abs(euclideanModulo(x, length * 2) - length);
+}
+function smoothstep(x, min, max) {
+  if (x <= min)
+    return 0;
+  if (x >= max)
+    return 1;
+  x = (x - min) / (max - min);
+  return x * x * (3 - 2 * x);
+}
+function smootherstep(x, min, max) {
+  if (x <= min)
+    return 0;
+  if (x >= max)
+    return 1;
+  x = (x - min) / (max - min);
+  return x * x * x * (x * (x * 6 - 15) + 10);
+}
+function randInt(low, high) {
+  return low + Math.floor(Math.random() * (high - low + 1));
+}
+function randFloat(low, high) {
+  return low + Math.random() * (high - low);
+}
+function randFloatSpread(range) {
+  return range * (0.5 - Math.random());
+}
+function seededRandom(s) {
+  if (s !== void 0)
+    _seed = s;
+  let t = _seed += 1831565813;
+  t = Math.imul(t ^ t >>> 15, t | 1);
+  t ^= t + Math.imul(t ^ t >>> 7, t | 61);
+  return ((t ^ t >>> 14) >>> 0) / 4294967296;
+}
+function degToRad(degrees) {
+  return degrees * DEG2RAD;
+}
+function radToDeg(radians) {
+  return radians * RAD2DEG;
+}
+function isPowerOfTwo(value) {
+  return (value & value - 1) === 0 && value !== 0;
+}
+function ceilPowerOfTwo(value) {
+  return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));
+}
+function floorPowerOfTwo(value) {
+  return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));
+}
+function setQuaternionFromProperEuler(q, a, b, c, order) {
+  const cos = Math.cos;
+  const sin = Math.sin;
+  const c2 = cos(b / 2);
+  const s2 = sin(b / 2);
+  const c13 = cos((a + c) / 2);
+  const s13 = sin((a + c) / 2);
+  const c1_3 = cos((a - c) / 2);
+  const s1_3 = sin((a - c) / 2);
+  const c3_1 = cos((c - a) / 2);
+  const s3_1 = sin((c - a) / 2);
+  switch (order) {
+    case "XYX":
+      q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);
+      break;
+    case "YZY":
+      q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);
+      break;
+    case "ZXZ":
+      q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);
+      break;
+    case "XZX":
+      q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);
+      break;
+    case "YXY":
+      q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);
+      break;
+    case "ZYZ":
+      q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);
+      break;
+    default:
+      console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + order);
+  }
+}
+function denormalize(value, array) {
+  switch (array.constructor) {
+    case Float32Array:
+      return value;
+    case Uint16Array:
+      return value / 65535;
+    case Uint8Array:
+      return value / 255;
+    case Int16Array:
+      return Math.max(value / 32767, -1);
+    case Int8Array:
+      return Math.max(value / 127, -1);
+    default:
+      throw new Error("Invalid component type.");
+  }
+}
+function normalize(value, array) {
+  switch (array.constructor) {
+    case Float32Array:
+      return value;
+    case Uint16Array:
+      return Math.round(value * 65535);
+    case Uint8Array:
+      return Math.round(value * 255);
+    case Int16Array:
+      return Math.round(value * 32767);
+    case Int8Array:
+      return Math.round(value * 127);
+    default:
+      throw new Error("Invalid component type.");
+  }
+}
+var MathUtils = {
+  DEG2RAD,
+  RAD2DEG,
+  generateUUID,
+  clamp,
+  euclideanModulo,
+  mapLinear,
+  inverseLerp,
+  lerp,
+  damp,
+  pingpong,
+  smoothstep,
+  smootherstep,
+  randInt,
+  randFloat,
+  randFloatSpread,
+  seededRandom,
+  degToRad,
+  radToDeg,
+  isPowerOfTwo,
+  ceilPowerOfTwo,
+  floorPowerOfTwo,
+  setQuaternionFromProperEuler,
+  normalize,
+  denormalize
+};
+export {
+  DEG2RAD,
+  MathUtils,
+  RAD2DEG,
+  ceilPowerOfTwo,
+  clamp,
+  damp,
+  degToRad,
+  denormalize,
+  euclideanModulo,
+  floorPowerOfTwo,
+  generateUUID,
+  inverseLerp,
+  isPowerOfTwo,
+  lerp,
+  mapLinear,
+  normalize,
+  pingpong,
+  radToDeg,
+  randFloat,
+  randFloatSpread,
+  randInt,
+  seededRandom,
+  setQuaternionFromProperEuler,
+  smootherstep,
+  smoothstep
+};
+//# sourceMappingURL=three_src_math_MathUtils.js.map

File diff ditekan karena terlalu besar
+ 3 - 0
docs/.vitepress/cache/deps/three_src_math_MathUtils.js.map


+ 8 - 1
docs/.vitepress/config.ts

@@ -2,6 +2,7 @@ import Unocss from 'unocss/vite'
 import svgLoader from 'vite-svg-loader'
 import { defineConfig } from 'vitepress'
 import { resolve } from 'pathe'
+import Components from 'unplugin-vue-components/vite'
 
 export default defineConfig({
   title: 'TresJS',
@@ -95,7 +96,13 @@ export default defineConfig({
     ],
   },
   vite: {
-    plugins: [svgLoader(), Unocss()],
+    plugins: [
+      svgLoader(),
+      Unocss(),
+      Components({
+        dirs: ['./theme/components'],
+      }),
+    ],
     resolve: {
       alias: {
         '/@': resolve(__dirname, '../../src'),

+ 27 - 0
docs/.vitepress/theme/components/DonutExample.vue

@@ -0,0 +1,27 @@
+<script setup lang="ts">
+import { TresCanvas } from '@tresjs/core'
+import { BasicShadowMap, sRGBEncoding, NoToneMapping } from 'three'
+
+import { OrbitControls } from '@tresjs/cientos'
+
+const gl = {
+  clearColor: '#82DBC5',
+  shadows: true,
+  alpha: false,
+  shadowMapType: BasicShadowMap,
+  outputEncoding: sRGBEncoding,
+  toneMapping: NoToneMapping,
+}
+</script>
+
+<template>
+  <TresCanvas v-bind="gl">
+    <TresPerspectiveCamera :position="[3, 3, 3]" />
+    <OrbitControls />
+    <TresMesh>
+      <TresTorusGeometry :args="[1, 0.5, 16, 32]" />
+      <TresMeshBasicMaterial color="orange" />
+    </TresMesh>
+    <TresAmbientLight :intensity="1" />
+  </TresCanvas>
+</template>

+ 1 - 1
docs/.vitepress/theme/components/FirstScene.vue

@@ -18,9 +18,9 @@ onMounted(() => {
 
 <template>
   <TresCanvas clear-color="#82DBC5" shadows alpha physically-correct-lights :output-encoding="sRGBEncoding">
-    <OrbitControls />
     <TresPerspectiveCamera :position="[11, 11, 11]" :fov="45" :aspect="1" :near="0.1" :far="1000" />
 
+    <OrbitControls />
     <TresMesh :position="[-2, 6, 0]" :rotation="[0, Math.PI, 0]" cast-shadow>
       <TresConeGeometry :args="[1, 1.5, 3]" />
       <TresMeshToonMaterial color="#82DBC5" />

+ 2 - 6
docs/.vitepress/theme/index.ts

@@ -3,10 +3,10 @@ import 'uno.css'
 import DefaultTheme from 'vitepress/theme'
 import './config.css'
 import FirstScene from './components/FirstScene.vue'
-import { createPlausible } from '@huntersofbook/plausible-vue'
 
 import StackBlitzEmbed from './components/StackBlitzEmbed.vue'
 import EmbedExperiment from './components/EmbedExperiment.vue'
+import DonutExample from './components/DonutExample.vue'
 
 import TresLayout from './TresLayout.vue'
 
@@ -29,13 +29,9 @@ export default {
     ctx.app.component('FirstScene', FirstScene)
     ctx.app.component('StackBlitzEmbed', StackBlitzEmbed)
     ctx.app.component('EmbedExperiment', EmbedExperiment)
+    ctx.app.component('DonutExample', DonutExample)
 
     /* ctx.app.use(plausible) */
   },
   Layout: TresLayout,
-  /* Layout() {
-    return h(DefaultTheme.Layout, null, {
-      'home-hero-image': () => h('div', null, 'Hello'),
-    })
-  }, */
 }

+ 3 - 0
docs/examples/orbit-controls.md

@@ -36,6 +36,7 @@ Now you can use the `TresOrbitControls` component in your scene.
 ```vue
 <template>
   <TresCanvas shadows alpha>
+    <TresPerspectiveCamera :args="[45," 1, 0.1, 1000] />
     <TresOrbitControls v-if="state.renderer" :args="[state.camera, state.renderer?.domElement]" />
   </TresCanvas>
 </template>
@@ -65,6 +66,7 @@ const { state } = useThree()
 </script>
 <template>
   <TresCanvas shadows alpha>
+    <TresPerspectiveCamera :args="[45," 1, 0.1, 1000] />
     <TresOrbitControls v-if="state.renderer" :args="[state.camera, state.renderer?.domElement]" />
   </TresCanvas>
 </template>
@@ -81,6 +83,7 @@ It just works. 💯
 ```vue
 <template>
   <TresCanvas shadows alpha>
+    <TresPerspectiveCamera :args="[45," 1, 0.1, 1000] />
     <OrbitControls />
   </TresCanvas>
 </template>

+ 3 - 1
docs/guide/your-first-scene.md

@@ -85,6 +85,8 @@ Now let's see how we can easily achieve the same with **TresJS**. To do that we
 Notice that we don't need to import anything, that's because **TresJS** automatically generate a **Vue Component based on the Three Object you want to use in CamelCase with a Tres prefix**. For example, if you want to use an `AmbientLight` you would use `<TresAmbientLight />` component.
 :::
 
-<EmbedExperiment src="https://playground.tresjs.org/experiments/tres-donut/" />
+<ClientOnly>
+    <DonutExample style="aspect-ratio: 16/9; height: auto; margin: 2rem 0; border-radius: 8px; overflow:hidden;"/>
+</ClientOnly>
 
 From here onwards you can start adding more objects to your scene and start playing with the properties of the components to see how they affect the scene.

+ 2 - 0
package.json

@@ -56,6 +56,7 @@
     "vue": "^3.2.47"
   },
   "dependencies": {
+    "-": "^0.0.1",
     "@alvarosabu/utils": "^2.3.0",
     "@vueuse/core": "^9.13.0"
   },
@@ -88,6 +89,7 @@
     "three": "latest",
     "unocss": "^0.48.0",
     "unplugin": "^1.3.1",
+    "unplugin-vue-components": "^0.24.1",
     "vite": "^4.1.4",
     "vite-plugin-banner": "^0.7.0",
     "vite-plugin-dts": "2.1.0",

+ 62 - 12
pnpm-lock.yaml

@@ -4,6 +4,7 @@ importers:
 
   .:
     specifiers:
+      '-': ^0.0.1
       '@alvarosabu/prettier-config': ^1.2.0
       '@alvarosabu/utils': ^2.3.0
       '@huntersofbook/plausible-vue': ^1.0.0
@@ -34,6 +35,7 @@ importers:
       three: latest
       unocss: ^0.48.0
       unplugin: ^1.3.1
+      unplugin-vue-components: ^0.24.1
       vite: ^4.1.4
       vite-plugin-banner: ^0.7.0
       vite-plugin-dts: 2.1.0
@@ -44,6 +46,7 @@ importers:
       vitest: ^0.29.2
       vue-demi: ^0.13.11
     dependencies:
+      '-': 0.0.1
       '@alvarosabu/utils': 2.3.0
       '@vueuse/core': 9.13.0
     devDependencies:
@@ -51,7 +54,7 @@ importers:
       '@huntersofbook/plausible-vue': 1.0.0
       '@release-it/conventional-changelog': 5.1.1_release-it@15.9.1
       '@stackblitz/sdk': 1.8.2
-      '@tresjs/cientos': 2.0.0-alpha.5_three@0.151.2
+      '@tresjs/cientos': 2.0.0-alpha.5_three@0.151.3
       '@types/three': 0.150.1
       '@typescript-eslint/eslint-plugin': 5.56.0_cnkxirszkzb4o6ts7gbclno24e
       '@typescript-eslint/parser': 5.56.0_eslint@8.36.0
@@ -72,9 +75,10 @@ importers:
       rollup-plugin-analyzer: 4.0.0
       rollup-plugin-copy: 3.4.0
       rollup-plugin-visualizer: 5.9.0
-      three: 0.151.2
+      three: 0.151.3
       unocss: 0.48.5_vite@4.1.4
       unplugin: 1.3.1
+      unplugin-vue-components: 0.24.1
       vite: 4.1.4
       vite-plugin-banner: 0.7.0
       vite-plugin-dts: 2.1.0_vite@4.1.4
@@ -192,6 +196,10 @@ importers:
 
 packages:
 
+  /-/0.0.1:
+    resolution: {integrity: sha512-3HfneK3DGAm05fpyj20sT3apkNcvPpCuccOThOPdzz8sY7GgQGe0l93XH9bt+YzibcTIgUAIMoyVJI740RtgyQ==}
+    dev: false
+
   /@algolia/autocomplete-core/1.7.4:
     resolution: {integrity: sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==}
     dependencies:
@@ -1135,21 +1143,21 @@ packages:
     engines: {node: '>= 10'}
     dev: true
 
-  /@tresjs/cientos/2.0.0-alpha.5_three@0.151.2:
+  /@tresjs/cientos/2.0.0-alpha.5_three@0.151.3:
     resolution: {integrity: sha512-8SCxT8rIZ/5bPWLsp/T/YwqbmkoQ8OdRJfAKU2WrOVZpr01tpn6w+T6jFQDb8uFDiHatYR0PdHT7LejUi2tORw==}
     peerDependencies:
       three: latest
     dependencies:
-      '@tresjs/core': 2.0.0-alpha.1_three@0.151.2+vue@3.2.47
+      '@tresjs/core': 2.0.0-alpha.1_three@0.151.3+vue@3.2.47
       '@vueuse/core': 9.13.0_vue@3.2.47
-      three: 0.151.2
-      three-stdlib: 2.21.8_three@0.151.2
+      three: 0.151.3
+      three-stdlib: 2.21.8_three@0.151.3
       vue: 3.2.47
     transitivePeerDependencies:
       - '@vue/composition-api'
     dev: true
 
-  /@tresjs/core/2.0.0-alpha.1_three@0.151.2+vue@3.2.47:
+  /@tresjs/core/2.0.0-alpha.1_three@0.151.3+vue@3.2.47:
     resolution: {integrity: sha512-yxsVnhKmpzsvDzr35wLymHj42sK3DIN32RJHc4o2Ds1R8K6dOL/Qh7hs5QSG+Ebydi2oDSlmLp3Qv3lK+4qxHA==}
     peerDependencies:
       three: latest
@@ -1157,7 +1165,7 @@ packages:
     dependencies:
       '@alvarosabu/utils': 2.3.0
       '@vueuse/core': 9.13.0_vue@3.2.47
-      three: 0.151.2
+      three: 0.151.3
       vue: 3.2.47
     transitivePeerDependencies:
       - '@vue/composition-api'
@@ -4654,6 +4662,13 @@ packages:
       '@jridgewell/sourcemap-codec': 1.4.14
     dev: true
 
+  /magic-string/0.30.0:
+    resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
+    engines: {node: '>=12'}
+    dependencies:
+      '@jridgewell/sourcemap-codec': 1.4.14
+    dev: true
+
   /make-dir/3.1.0:
     resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
     engines: {node: '>=8'}
@@ -4763,6 +4778,13 @@ packages:
       brace-expansion: 2.0.1
     dev: true
 
+  /minimatch/7.4.5:
+    resolution: {integrity: sha512-OzOamaOmNBJZUv2qqY1OSWa+++4YPpOkLgkc0w30Oov5ufKlWWXnFUl0l4dgmSv5Shq/zRVkEOXAe2NaqO4l5Q==}
+    engines: {node: '>=10'}
+    dependencies:
+      brace-expansion: 2.0.1
+    dev: true
+
   /minimist-options/4.1.0:
     resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
     engines: {node: '>= 6'}
@@ -6178,7 +6200,7 @@ packages:
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
     dev: true
 
-  /three-stdlib/2.21.8_three@0.151.2:
+  /three-stdlib/2.21.8_three@0.151.3:
     resolution: {integrity: sha512-kqisiKvO4mSy59v5vWqBQSH8famLxp7Z51LxpMJI9GwDxqODaW02rhIwmjYDEzZWNFpjZpoDHVGbdpeHf8h3SA==}
     peerDependencies:
       three: '>=0.122.0'
@@ -6193,15 +6215,15 @@ packages:
       mmd-parser: 1.0.4
       opentype.js: 1.3.4
       potpack: 1.0.2
-      three: 0.151.2
+      three: 0.151.3
       zstddec: 0.0.2
     dev: true
 
   /three/0.150.1:
     resolution: {integrity: sha512-5C1MqKUWaHYo13BX0Q64qcdwImgnnjSOFgBscOzAo8MYCzEtqfQqorEKMcajnA3FHy1yVlIe9AmaMQ0OQracNA==}
 
-  /three/0.151.2:
-    resolution: {integrity: sha512-tGaLRP2H6++tj2JumHD25slhFAx0C619rl6G6Utjq7JTrDGJwDxpu+J2XpnYIUMfEmhNvIFDQJfp79JtKmNBWw==}
+  /three/0.151.3:
+    resolution: {integrity: sha512-+vbuqxFy8kzLeO5MgpBHUvP/EAiecaDwDuOPPDe6SbrZr96kccF0ktLngXc7xA7bzyd3N0t2f6mw3Z9y6JCojQ==}
     dev: true
 
   /through/2.3.8:
@@ -6503,6 +6525,34 @@ packages:
     engines: {node: '>= 0.8'}
     dev: true
 
+  /unplugin-vue-components/0.24.1:
+    resolution: {integrity: sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==}
+    engines: {node: '>=14'}
+    peerDependencies:
+      '@babel/parser': ^7.15.8
+      '@nuxt/kit': ^3.2.2
+      vue: 2 || 3
+    peerDependenciesMeta:
+      '@babel/parser':
+        optional: true
+      '@nuxt/kit':
+        optional: true
+    dependencies:
+      '@antfu/utils': 0.7.2
+      '@rollup/pluginutils': 5.0.2
+      chokidar: 3.5.3
+      debug: 4.3.4
+      fast-glob: 3.2.12
+      local-pkg: 0.4.3
+      magic-string: 0.30.0
+      minimatch: 7.4.5
+      resolve: 1.22.1
+      unplugin: 1.3.1
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+    dev: true
+
   /unplugin/1.3.1:
     resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==}
     dependencies:

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini