@xrift/world-components 0.26.1 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/components/Portal/__tests__/utils.test.d.ts +2 -0
  2. package/dist/components/Portal/__tests__/utils.test.d.ts.map +1 -0
  3. package/dist/components/Portal/__tests__/utils.test.js +56 -0
  4. package/dist/components/Portal/__tests__/utils.test.js.map +1 -0
  5. package/dist/components/Portal/components/PortalGlow/index.d.ts +7 -0
  6. package/dist/components/Portal/components/PortalGlow/index.d.ts.map +1 -0
  7. package/dist/components/Portal/components/PortalGlow/index.js +64 -0
  8. package/dist/components/Portal/components/PortalGlow/index.js.map +1 -0
  9. package/dist/components/Portal/components/PortalParticles/index.d.ts +9 -0
  10. package/dist/components/Portal/components/PortalParticles/index.d.ts.map +1 -0
  11. package/dist/components/Portal/components/PortalParticles/index.js +110 -0
  12. package/dist/components/Portal/components/PortalParticles/index.js.map +1 -0
  13. package/dist/components/Portal/components/PortalPedestal/index.d.ts +6 -0
  14. package/dist/components/Portal/components/PortalPedestal/index.d.ts.map +1 -0
  15. package/dist/components/Portal/components/PortalPedestal/index.js +57 -0
  16. package/dist/components/Portal/components/PortalPedestal/index.js.map +1 -0
  17. package/dist/components/Portal/components/PortalThumbnail/index.d.ts +7 -0
  18. package/dist/components/Portal/components/PortalThumbnail/index.d.ts.map +1 -0
  19. package/dist/components/Portal/components/PortalThumbnail/index.js +130 -0
  20. package/dist/components/Portal/components/PortalThumbnail/index.js.map +1 -0
  21. package/dist/components/Portal/components/PortalVortex/index.d.ts +10 -0
  22. package/dist/components/Portal/components/PortalVortex/index.d.ts.map +1 -0
  23. package/dist/components/Portal/components/PortalVortex/index.js +41 -0
  24. package/dist/components/Portal/components/PortalVortex/index.js.map +1 -0
  25. package/dist/components/Portal/constants.d.ts +11 -0
  26. package/dist/components/Portal/constants.d.ts.map +1 -0
  27. package/dist/components/Portal/constants.js +10 -0
  28. package/dist/components/Portal/constants.js.map +1 -0
  29. package/dist/components/Portal/hooks.d.ts +10 -0
  30. package/dist/components/Portal/hooks.d.ts.map +1 -0
  31. package/dist/components/Portal/hooks.js +13 -0
  32. package/dist/components/Portal/hooks.js.map +1 -0
  33. package/dist/components/Portal/index.d.ts +4 -0
  34. package/dist/components/Portal/index.d.ts.map +1 -0
  35. package/dist/components/Portal/index.js +22 -0
  36. package/dist/components/Portal/index.js.map +1 -0
  37. package/dist/components/Portal/shaders/noise.d.ts +2 -0
  38. package/dist/components/Portal/shaders/noise.d.ts.map +1 -0
  39. package/dist/components/Portal/shaders/noise.js +82 -0
  40. package/dist/components/Portal/shaders/noise.js.map +1 -0
  41. package/dist/components/Portal/shaders/portalFragment.d.ts +2 -0
  42. package/dist/components/Portal/shaders/portalFragment.d.ts.map +1 -0
  43. package/dist/components/Portal/shaders/portalFragment.js +45 -0
  44. package/dist/components/Portal/shaders/portalFragment.js.map +1 -0
  45. package/dist/components/Portal/shaders/portalVertex.d.ts +2 -0
  46. package/dist/components/Portal/shaders/portalVertex.d.ts.map +1 -0
  47. package/dist/components/Portal/shaders/portalVertex.js +11 -0
  48. package/dist/components/Portal/shaders/portalVertex.js.map +1 -0
  49. package/dist/components/Portal/types.d.ts +21 -0
  50. package/dist/components/Portal/types.d.ts.map +1 -0
  51. package/dist/components/Portal/types.js +2 -0
  52. package/dist/components/Portal/types.js.map +1 -0
  53. package/dist/components/Portal/utils.d.ts +11 -0
  54. package/dist/components/Portal/utils.d.ts.map +1 -0
  55. package/dist/components/Portal/utils.js +31 -0
  56. package/dist/components/Portal/utils.js.map +1 -0
  57. package/dist/contexts/ConfirmContext.d.ts +35 -0
  58. package/dist/contexts/ConfirmContext.d.ts.map +1 -0
  59. package/dist/contexts/ConfirmContext.js +32 -0
  60. package/dist/contexts/ConfirmContext.js.map +1 -0
  61. package/dist/contexts/InstanceContext.d.ts +48 -0
  62. package/dist/contexts/InstanceContext.d.ts.map +1 -0
  63. package/dist/contexts/InstanceContext.js +55 -0
  64. package/dist/contexts/InstanceContext.js.map +1 -0
  65. package/dist/contexts/InstanceInfoContext.d.ts +39 -0
  66. package/dist/contexts/InstanceInfoContext.d.ts.map +1 -0
  67. package/dist/contexts/InstanceInfoContext.js +42 -0
  68. package/dist/contexts/InstanceInfoContext.js.map +1 -0
  69. package/dist/contexts/PortalContext.d.ts +39 -0
  70. package/dist/contexts/PortalContext.d.ts.map +1 -0
  71. package/dist/contexts/PortalContext.js +42 -0
  72. package/dist/contexts/PortalContext.js.map +1 -0
  73. package/dist/contexts/WorldContext.d.ts +46 -0
  74. package/dist/contexts/WorldContext.d.ts.map +1 -0
  75. package/dist/contexts/WorldContext.js +45 -0
  76. package/dist/contexts/WorldContext.js.map +1 -0
  77. package/dist/contexts/XRiftContext.d.ts +19 -1
  78. package/dist/contexts/XRiftContext.d.ts.map +1 -1
  79. package/dist/contexts/XRiftContext.js +11 -2
  80. package/dist/contexts/XRiftContext.js.map +1 -1
  81. package/dist/hooks/useConfirm.d.ts +19 -0
  82. package/dist/hooks/useConfirm.d.ts.map +1 -0
  83. package/dist/hooks/useConfirm.js +24 -0
  84. package/dist/hooks/useConfirm.js.map +1 -0
  85. package/dist/hooks/useInstance.d.ts +18 -0
  86. package/dist/hooks/useInstance.d.ts.map +1 -0
  87. package/dist/hooks/useInstance.js +54 -0
  88. package/dist/hooks/useInstance.js.map +1 -0
  89. package/dist/hooks/usePortalNavigation.d.ts +10 -0
  90. package/dist/hooks/usePortalNavigation.d.ts.map +1 -0
  91. package/dist/hooks/usePortalNavigation.js +46 -0
  92. package/dist/hooks/usePortalNavigation.js.map +1 -0
  93. package/dist/hooks/useWorld.d.ts +14 -0
  94. package/dist/hooks/useWorld.d.ts.map +1 -0
  95. package/dist/hooks/useWorld.js +31 -0
  96. package/dist/hooks/useWorld.js.map +1 -0
  97. package/dist/index.d.ts +7 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +7 -0
  100. package/dist/index.js.map +1 -1
  101. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ import { PORTAL_DEFAULTS } from './constants';
2
+ /**
3
+ * Propsにデフォルト値を適用して返す
4
+ */
5
+ export const usePortalProps = (props) => {
6
+ const { instanceId, position = PORTAL_DEFAULTS.position, rotation = PORTAL_DEFAULTS.rotation, } = props;
7
+ return {
8
+ instanceId,
9
+ position,
10
+ rotation,
11
+ };
12
+ };
13
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/components/Portal/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,EAAE;IAC7C,MAAM,EACJ,UAAU,EACV,QAAQ,GAAG,eAAe,CAAC,QAAQ,EACnC,QAAQ,GAAG,eAAe,CAAC,QAAQ,GACpC,GAAG,KAAK,CAAA;IAET,OAAO;QACL,UAAU;QACV,QAAQ;QACR,QAAQ;KACT,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Props } from './types';
2
+ export type { Props as PortalProps } from './types';
3
+ export declare const Portal: (props: Props) => import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Portal/index.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,YAAY,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,SAAS,CAAA;AAUnD,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,4CA8DlC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from '@react-three/drei';
3
+ import { useInstance } from '../../hooks/useInstance';
4
+ import { PortalGlow } from './components/PortalGlow';
5
+ import { PortalParticles } from './components/PortalParticles';
6
+ import { PortalPedestal } from './components/PortalPedestal';
7
+ import { PortalThumbnail } from './components/PortalThumbnail';
8
+ import { PortalVortex } from './components/PortalVortex';
9
+ import { PORTAL_DEFAULTS } from './constants';
10
+ import { usePortalProps } from './hooks';
11
+ const PARTICLE_COUNT = 30;
12
+ /** サムネイル上部からのラベル位置を計算 */
13
+ const portalRadius = PORTAL_DEFAULTS.portalRadius;
14
+ const thumbnailBaseY = portalRadius * 0.15 + 0.15 + portalRadius * 0.7;
15
+ const thumbnailHalfSize = portalRadius * (2 / 3);
16
+ const LABEL_BASE_Y = thumbnailBaseY + thumbnailHalfSize;
17
+ export const Portal = (props) => {
18
+ const { instanceId, position, rotation, } = usePortalProps(props);
19
+ const { info, navigateWithConfirm } = useInstance(instanceId);
20
+ return (_jsxs("group", { position: position, rotation: rotation, children: [_jsx(PortalVortex, { color: PORTAL_DEFAULTS.color, secondaryColor: PORTAL_DEFAULTS.secondaryColor, intensity: PORTAL_DEFAULTS.intensity, rotationSpeed: PORTAL_DEFAULTS.rotationSpeed, portalRadius: PORTAL_DEFAULTS.portalRadius }), _jsx(PortalThumbnail, { thumbnailUrl: info?.world.thumbnailUrl ?? undefined, portalRadius: PORTAL_DEFAULTS.portalRadius }), _jsx(PortalGlow, { color: PORTAL_DEFAULTS.secondaryColor, intensity: PORTAL_DEFAULTS.intensity }), _jsx(PortalParticles, { particleCount: PARTICLE_COUNT, color: PORTAL_DEFAULTS.secondaryColor, portalRadius: PORTAL_DEFAULTS.portalRadius, rotationSpeed: PORTAL_DEFAULTS.rotationSpeed }), _jsx(PortalPedestal, { onEnter: navigateWithConfirm }), info && (_jsxs(_Fragment, { children: [_jsx(Text, { position: [0, LABEL_BASE_Y + 0.3, 0], fontSize: 0.12, color: "white", anchorX: "center", anchorY: "bottom", maxWidth: 1.6, children: info.world.name }), _jsx(Text, { position: [0, LABEL_BASE_Y + 0.17, 0], fontSize: 0.07, color: "#cccccc", anchorX: "center", anchorY: "bottom", maxWidth: 1.6, children: info.name })] }))] }));
21
+ };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Portal/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAKxC,MAAM,cAAc,GAAG,EAAE,CAAA;AAEzB,yBAAyB;AACzB,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAA;AACjD,MAAM,cAAc,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,YAAY,GAAG,GAAG,CAAA;AACtE,MAAM,iBAAiB,GAAG,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AAChD,MAAM,YAAY,GAAG,cAAc,GAAG,iBAAiB,CAAA;AAEvD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;IACrC,MAAM,EACJ,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAEzB,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IAE7D,OAAO,CACL,iBAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,aAC3C,KAAC,YAAY,IACX,KAAK,EAAE,eAAe,CAAC,KAAK,EAC5B,cAAc,EAAE,eAAe,CAAC,cAAc,EAC9C,SAAS,EAAE,eAAe,CAAC,SAAS,EACpC,aAAa,EAAE,eAAe,CAAC,aAAa,EAC5C,YAAY,EAAE,eAAe,CAAC,YAAY,GAC1C,EACF,KAAC,eAAe,IACd,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,SAAS,EACnD,YAAY,EAAE,eAAe,CAAC,YAAY,GAC1C,EACF,KAAC,UAAU,IACT,KAAK,EAAE,eAAe,CAAC,cAAc,EACrC,SAAS,EAAE,eAAe,CAAC,SAAS,GACpC,EACF,KAAC,eAAe,IACd,aAAa,EAAE,cAAc,EAC7B,KAAK,EAAE,eAAe,CAAC,cAAc,EACrC,YAAY,EAAE,eAAe,CAAC,YAAY,EAC1C,aAAa,EAAE,eAAe,CAAC,aAAa,GAC5C,EACF,KAAC,cAAc,IAAC,OAAO,EAAE,mBAAmB,GAAI,EAG/C,IAAI,IAAI,CACP,8BACE,KAAC,IAAI,IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC,EACpC,QAAQ,EAAE,IAAI,EACd,KAAK,EAAC,OAAO,EACb,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAC,QAAQ,EAChB,QAAQ,EAAE,GAAG,YAEZ,IAAI,CAAC,KAAK,CAAC,IAAI,GACX,EAEP,KAAC,IAAI,IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC,EACrC,QAAQ,EAAE,IAAI,EACd,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAC,QAAQ,EAChB,QAAQ,EAAE,GAAG,YAEZ,IAAI,CAAC,IAAI,GACL,IACN,CACJ,IACK,CACT,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const simplexNoise3D = "\nvec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x) {\n return mod289(((x * 34.0) + 1.0) * x);\n}\n\nvec4 taylorInvSqrt(vec4 r) {\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nfloat snoise(vec3 v) {\n const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n vec3 i = floor(v + dot(v, C.yyy));\n vec3 x0 = v - i + dot(i, C.xxx);\n\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min(g.xyz, l.zxy);\n vec3 i2 = max(g.xyz, l.zxy);\n\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n\n i = mod289(i);\n vec4 p = permute(permute(permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0));\n\n float n_ = 0.142857142857;\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z);\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_);\n\n vec4 x = x_ * ns.x + ns.yyyy;\n vec4 y = y_ * ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4(x.xy, y.xy);\n vec4 b1 = vec4(x.zw, y.zw);\n\n vec4 s0 = floor(b0) * 2.0 + 1.0;\n vec4 s1 = floor(b1) * 2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;\n vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;\n\n vec3 p0 = vec3(a0.xy, h.x);\n vec3 p1 = vec3(a0.zw, h.y);\n vec3 p2 = vec3(a1.xy, h.z);\n vec3 p3 = vec3(a1.zw, h.w);\n\n vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n vec4 m = max(0.6 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);\n m = m * m;\n return 42.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n}\n";
2
+ //# sourceMappingURL=noise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../../../src/components/Portal/shaders/noise.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc,s3DA4E1B,CAAA"}
@@ -0,0 +1,82 @@
1
+ // Simplex 3D Noise - GLSL
2
+ // Author: Ian McEwan, Ashima Arts
3
+ // License: MIT License
4
+ // https://github.com/ashima/webgl-noise
5
+ export const simplexNoise3D = /* glsl */ `
6
+ vec3 mod289(vec3 x) {
7
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
8
+ }
9
+
10
+ vec4 mod289(vec4 x) {
11
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
12
+ }
13
+
14
+ vec4 permute(vec4 x) {
15
+ return mod289(((x * 34.0) + 1.0) * x);
16
+ }
17
+
18
+ vec4 taylorInvSqrt(vec4 r) {
19
+ return 1.79284291400159 - 0.85373472095314 * r;
20
+ }
21
+
22
+ float snoise(vec3 v) {
23
+ const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);
24
+ const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
25
+
26
+ vec3 i = floor(v + dot(v, C.yyy));
27
+ vec3 x0 = v - i + dot(i, C.xxx);
28
+
29
+ vec3 g = step(x0.yzx, x0.xyz);
30
+ vec3 l = 1.0 - g;
31
+ vec3 i1 = min(g.xyz, l.zxy);
32
+ vec3 i2 = max(g.xyz, l.zxy);
33
+
34
+ vec3 x1 = x0 - i1 + C.xxx;
35
+ vec3 x2 = x0 - i2 + C.yyy;
36
+ vec3 x3 = x0 - D.yyy;
37
+
38
+ i = mod289(i);
39
+ vec4 p = permute(permute(permute(
40
+ i.z + vec4(0.0, i1.z, i2.z, 1.0))
41
+ + i.y + vec4(0.0, i1.y, i2.y, 1.0))
42
+ + i.x + vec4(0.0, i1.x, i2.x, 1.0));
43
+
44
+ float n_ = 0.142857142857;
45
+ vec3 ns = n_ * D.wyz - D.xzx;
46
+
47
+ vec4 j = p - 49.0 * floor(p * ns.z * ns.z);
48
+
49
+ vec4 x_ = floor(j * ns.z);
50
+ vec4 y_ = floor(j - 7.0 * x_);
51
+
52
+ vec4 x = x_ * ns.x + ns.yyyy;
53
+ vec4 y = y_ * ns.x + ns.yyyy;
54
+ vec4 h = 1.0 - abs(x) - abs(y);
55
+
56
+ vec4 b0 = vec4(x.xy, y.xy);
57
+ vec4 b1 = vec4(x.zw, y.zw);
58
+
59
+ vec4 s0 = floor(b0) * 2.0 + 1.0;
60
+ vec4 s1 = floor(b1) * 2.0 + 1.0;
61
+ vec4 sh = -step(h, vec4(0.0));
62
+
63
+ vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;
64
+ vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;
65
+
66
+ vec3 p0 = vec3(a0.xy, h.x);
67
+ vec3 p1 = vec3(a0.zw, h.y);
68
+ vec3 p2 = vec3(a1.xy, h.z);
69
+ vec3 p3 = vec3(a1.zw, h.w);
70
+
71
+ vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
72
+ p0 *= norm.x;
73
+ p1 *= norm.y;
74
+ p2 *= norm.z;
75
+ p3 *= norm.w;
76
+
77
+ vec4 m = max(0.6 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);
78
+ m = m * m;
79
+ return 42.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
80
+ }
81
+ `;
82
+ //# sourceMappingURL=noise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../../../src/components/Portal/shaders/noise.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,kCAAkC;AAClC,uBAAuB;AACvB,wCAAwC;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4ExC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const portalFragmentShader = "\n\nvec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x) {\n return mod289(((x * 34.0) + 1.0) * x);\n}\n\nvec4 taylorInvSqrt(vec4 r) {\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nfloat snoise(vec3 v) {\n const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n vec3 i = floor(v + dot(v, C.yyy));\n vec3 x0 = v - i + dot(i, C.xxx);\n\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min(g.xyz, l.zxy);\n vec3 i2 = max(g.xyz, l.zxy);\n\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n\n i = mod289(i);\n vec4 p = permute(permute(permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0));\n\n float n_ = 0.142857142857;\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z);\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_);\n\n vec4 x = x_ * ns.x + ns.yyyy;\n vec4 y = y_ * ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4(x.xy, y.xy);\n vec4 b1 = vec4(x.zw, y.zw);\n\n vec4 s0 = floor(b0) * 2.0 + 1.0;\n vec4 s1 = floor(b1) * 2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;\n vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;\n\n vec3 p0 = vec3(a0.xy, h.x);\n vec3 p1 = vec3(a0.zw, h.y);\n vec3 p2 = vec3(a1.xy, h.z);\n vec3 p3 = vec3(a1.zw, h.w);\n\n vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n vec4 m = max(0.6 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);\n m = m * m;\n return 42.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n}\n\n\nuniform float uTime;\nuniform vec3 uColor;\nuniform vec3 uSecondaryColor;\nuniform float uIntensity;\n\nvarying vec2 vUv;\nvarying vec3 vPosition;\n\nvoid main() {\n // 3D\u4F4D\u7F6E\u304B\u3089\u89D2\u5EA6\u3092\u8A08\u7B97\uFF08UV\u7D99\u304E\u76EE\u306A\u3057\uFF09\n float angle = atan(vPosition.z, vPosition.x);\n float height = vUv.y; // 0=\u9802\u70B9, 1=\u5E95\u9762\n\n // \u9AD8\u3055\u306B\u5FDC\u3058\u3066\u306D\u3058\u308A\uFF08\u9802\u70B9\u5074\u307B\u3069\u5F37\u304F\u306D\u3058\u308C\u308B\uFF09\n float twistedAngle = angle - (1.0 - height) * 3.0;\n\n // \u30B9\u30C8\u30E9\u30A4\u30D7\u30D1\u30BF\u30FC\u30F3\n float arms = 8.0;\n float rawPattern = sin(twistedAngle * arms) * 0.5 + 0.5;\n float radialPattern = smoothstep(0.2, 0.6, rawPattern);\n\n // \u7DE9\u3084\u304B\u306A\u8108\u52D5\n float pulse = sin(uTime * 2.0) * 0.08 + 0.92;\n\n // \u5E95\u9762\u5074\uFF08\u4E0A\uFF09\u3092\u660E\u308B\u304F\u3001\u9802\u70B9\u5074\uFF08\u4E0B\uFF09\u3092\u6697\u304F\n float heightBrightness = smoothstep(0.0, 0.5, height);\n\n // \u8DDD\u96E2\u30D9\u30FC\u30B9\u306E\u8272\u6DF7\u5408\uFF08\u9802\u70B9=\u30E1\u30A4\u30F3\u30AB\u30E9\u30FC\u3001\u5E95\u9762=\u30B5\u30D6\u30AB\u30E9\u30FC\uFF09\n vec3 baseColor = mix(uColor, uSecondaryColor, height);\n\n // \u6700\u7D42\u8272\u5408\u6210\n float brightness = (radialPattern * 0.7 + heightBrightness * 0.3) * pulse * uIntensity;\n vec3 finalColor = baseColor * brightness;\n\n // \u9802\u70B9\u4ED8\u8FD1\u3092\u30D5\u30A7\u30FC\u30C9\u30A2\u30A6\u30C8\n float alpha = smoothstep(0.0, 0.5, height) * clamp(brightness, 0.0, 1.0);\n\n gl_FragColor = vec4(finalColor, alpha);\n}\n";
2
+ //# sourceMappingURL=portalFragment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portalFragment.d.ts","sourceRoot":"","sources":["../../../../src/components/Portal/shaders/portalFragment.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,mgHA0ChC,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { simplexNoise3D } from './noise';
2
+ export const portalFragmentShader = /* glsl */ `
3
+ ${simplexNoise3D}
4
+
5
+ uniform float uTime;
6
+ uniform vec3 uColor;
7
+ uniform vec3 uSecondaryColor;
8
+ uniform float uIntensity;
9
+
10
+ varying vec2 vUv;
11
+ varying vec3 vPosition;
12
+
13
+ void main() {
14
+ // 3D位置から角度を計算(UV継ぎ目なし)
15
+ float angle = atan(vPosition.z, vPosition.x);
16
+ float height = vUv.y; // 0=頂点, 1=底面
17
+
18
+ // 高さに応じてねじり(頂点側ほど強くねじれる)
19
+ float twistedAngle = angle - (1.0 - height) * 3.0;
20
+
21
+ // ストライプパターン
22
+ float arms = 8.0;
23
+ float rawPattern = sin(twistedAngle * arms) * 0.5 + 0.5;
24
+ float radialPattern = smoothstep(0.2, 0.6, rawPattern);
25
+
26
+ // 緩やかな脈動
27
+ float pulse = sin(uTime * 2.0) * 0.08 + 0.92;
28
+
29
+ // 底面側(上)を明るく、頂点側(下)を暗く
30
+ float heightBrightness = smoothstep(0.0, 0.5, height);
31
+
32
+ // 距離ベースの色混合(頂点=メインカラー、底面=サブカラー)
33
+ vec3 baseColor = mix(uColor, uSecondaryColor, height);
34
+
35
+ // 最終色合成
36
+ float brightness = (radialPattern * 0.7 + heightBrightness * 0.3) * pulse * uIntensity;
37
+ vec3 finalColor = baseColor * brightness;
38
+
39
+ // 頂点付近をフェードアウト
40
+ float alpha = smoothstep(0.0, 0.5, height) * clamp(brightness, 0.0, 1.0);
41
+
42
+ gl_FragColor = vec4(finalColor, alpha);
43
+ }
44
+ `;
45
+ //# sourceMappingURL=portalFragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portalFragment.js","sourceRoot":"","sources":["../../../../src/components/Portal/shaders/portalFragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExC,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;EAC7C,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCf,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const portalVertexShader = "\nvarying vec2 vUv;\nvarying vec3 vPosition;\n\nvoid main() {\n vUv = uv;\n vPosition = position;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n";
2
+ //# sourceMappingURL=portalVertex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portalVertex.d.ts","sourceRoot":"","sources":["../../../../src/components/Portal/shaders/portalVertex.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,wLAS9B,CAAA"}
@@ -0,0 +1,11 @@
1
+ export const portalVertexShader = /* glsl */ `
2
+ varying vec2 vUv;
3
+ varying vec3 vPosition;
4
+
5
+ void main() {
6
+ vUv = uv;
7
+ vPosition = position;
8
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
9
+ }
10
+ `;
11
+ //# sourceMappingURL=portalVertex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portalVertex.js","sourceRoot":"","sources":["../../../../src/components/Portal/shaders/portalVertex.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;;;;;;;;;CAS5C,CAAA"}
@@ -0,0 +1,21 @@
1
+ import type { Vector3Tuple } from 'three';
2
+ export interface Props {
3
+ instanceId: string;
4
+ position?: Vector3Tuple;
5
+ rotation?: Vector3Tuple;
6
+ }
7
+ export interface PortalUniforms {
8
+ uTime: {
9
+ value: number;
10
+ };
11
+ uColor: {
12
+ value: [number, number, number];
13
+ };
14
+ uSecondaryColor: {
15
+ value: [number, number, number];
16
+ };
17
+ uIntensity: {
18
+ value: number;
19
+ };
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Portal/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEzC,MAAM,WAAW,KAAK;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACxB,MAAM,EAAE;QAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC3C,eAAe,EAAE;QAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IACpD,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/Portal/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * パーティクルの初期位置を生成する
3
+ * 渦巻き軌道上にランダムに配置
4
+ */
5
+ export declare const generateParticlePositions: (count: number, radius: number, aspectRatio: number) => Float32Array;
6
+ /**
7
+ * パーティクルの初期速度パラメータを生成する
8
+ * 各パーティクルの角速度・半径方向速度の基準値
9
+ */
10
+ export declare const generateParticleVelocities: (count: number) => Float32Array;
11
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/Portal/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,YAgB9F,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,OAAO,MAAM,KAAG,YAS1D,CAAA"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * パーティクルの初期位置を生成する
3
+ * 渦巻き軌道上にランダムに配置
4
+ */
5
+ export const generateParticlePositions = (count, radius, aspectRatio) => {
6
+ const positions = new Float32Array(count * 3);
7
+ for (let i = 0; i < count; i++) {
8
+ const angle = Math.random() * Math.PI * 2;
9
+ const dist = Math.random() * radius;
10
+ const x = Math.cos(angle) * dist;
11
+ const y = Math.sin(angle) * dist * aspectRatio;
12
+ const z = (Math.random() - 0.5) * 0.2;
13
+ positions[i * 3] = x;
14
+ positions[i * 3 + 1] = y;
15
+ positions[i * 3 + 2] = z;
16
+ }
17
+ return positions;
18
+ };
19
+ /**
20
+ * パーティクルの初期速度パラメータを生成する
21
+ * 各パーティクルの角速度・半径方向速度の基準値
22
+ */
23
+ export const generateParticleVelocities = (count) => {
24
+ const velocities = new Float32Array(count * 2); // [angularSpeed, radialPhase] per particle
25
+ for (let i = 0; i < count; i++) {
26
+ velocities[i * 2] = 0.5 + Math.random() * 1.5; // 角速度: 0.5〜2.0
27
+ velocities[i * 2 + 1] = Math.random() * Math.PI * 2; // 初期位相
28
+ }
29
+ return velocities;
30
+ };
31
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/Portal/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,WAAmB,EAAgB,EAAE;IAC5G,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAA;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,WAAW,CAAA;QAC9C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QAErC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACpB,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACxB,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAa,EAAgB,EAAE;IACxE,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA,CAAC,2CAA2C;IAE1F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAA,CAAC,eAAe;QAC7D,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA,CAAC,OAAO;IAC7D,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface ConfirmOptions {
3
+ title?: string;
4
+ message: string;
5
+ confirmLabel?: string;
6
+ cancelLabel?: string;
7
+ }
8
+ export interface ConfirmContextValue {
9
+ requestConfirm: (options: ConfirmOptions) => Promise<boolean>;
10
+ }
11
+ /**
12
+ * 開発環境用のデフォルト実装(window.confirm)
13
+ * プラットフォーム側が実装を注入しない場合に使用される
14
+ */
15
+ export declare const createDefaultConfirmImplementation: () => ConfirmContextValue;
16
+ /**
17
+ * 確認モーダル機能を提供する Context
18
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
19
+ */
20
+ export declare const ConfirmContext: import("react").Context<ConfirmContextValue | null>;
21
+ interface Props {
22
+ value: ConfirmContextValue;
23
+ children: ReactNode;
24
+ }
25
+ /**
26
+ * 確認モーダル機能を提供する ContextProvider
27
+ */
28
+ export declare const ConfirmProvider: ({ value, children }: Props) => import("react/jsx-runtime").JSX.Element;
29
+ /**
30
+ * 確認モーダルの Context を取得する hook
31
+ * @throws {Error} ConfirmProvider の外で呼び出された場合
32
+ */
33
+ export declare const useConfirmContext: () => ConfirmContextValue;
34
+ export {};
35
+ //# sourceMappingURL=ConfirmContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmContext.d.ts","sourceRoot":"","sources":["../../src/contexts/ConfirmContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AAEjE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D;AAED;;;GAGG;AACH,eAAO,MAAM,kCAAkC,QAAO,mBAEpD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,qDAAkD,CAAA;AAE7E,UAAU,KAAK;IACb,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,qBAAqB,KAAK,4CAEzD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,mBAMpC,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ /**
4
+ * 開発環境用のデフォルト実装(window.confirm)
5
+ * プラットフォーム側が実装を注入しない場合に使用される
6
+ */
7
+ export const createDefaultConfirmImplementation = () => ({
8
+ requestConfirm: (options) => Promise.resolve(window.confirm(options.message)),
9
+ });
10
+ /**
11
+ * 確認モーダル機能を提供する Context
12
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
13
+ */
14
+ export const ConfirmContext = createContext(null);
15
+ /**
16
+ * 確認モーダル機能を提供する ContextProvider
17
+ */
18
+ export const ConfirmProvider = ({ value, children }) => {
19
+ return _jsx(ConfirmContext.Provider, { value: value, children: children });
20
+ };
21
+ /**
22
+ * 確認モーダルの Context を取得する hook
23
+ * @throws {Error} ConfirmProvider の外で呼び出された場合
24
+ */
25
+ export const useConfirmContext = () => {
26
+ const context = useContext(ConfirmContext);
27
+ if (!context) {
28
+ throw new Error('useConfirmContext must be used within ConfirmProvider');
29
+ }
30
+ return context;
31
+ };
32
+ //# sourceMappingURL=ConfirmContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmContext.js","sourceRoot":"","sources":["../../src/contexts/ConfirmContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,MAAM,OAAO,CAAA;AAajE;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAwB,EAAE,CAAC,CAAC;IAC5E,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAA;AAO7E;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAS,EAAE,EAAE;IAC5D,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAAA;AACpF,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAwB,EAAE;IACzD,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { WorldInfo } from './WorldContext';
3
+ export interface InstanceInfo {
4
+ id: string;
5
+ name: string;
6
+ description: string | null;
7
+ currentUsers: number;
8
+ maxCapacity: number;
9
+ isPublic: boolean;
10
+ allowGuests: boolean;
11
+ owner?: {
12
+ id: string;
13
+ displayName: string;
14
+ userIconUrl?: string | null;
15
+ };
16
+ world: WorldInfo;
17
+ }
18
+ export interface InstanceContextValue {
19
+ /** instanceId からインスタンス情報を取得 */
20
+ getInstanceInfo: (instanceId: string) => Promise<InstanceInfo>;
21
+ /** 指定インスタンスへ遷移 */
22
+ navigateToInstance: (instanceId: string) => void;
23
+ }
24
+ /**
25
+ * 開発環境用のデフォルト実装(console.log のみ)
26
+ * プラットフォーム側が実装を注入しない場合に使用される
27
+ */
28
+ export declare const createDefaultInstanceImplementation: () => InstanceContextValue;
29
+ /**
30
+ * インスタンス情報の取得・遷移機能を提供する Context
31
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
32
+ */
33
+ export declare const InstanceContext: import("react").Context<InstanceContextValue | null>;
34
+ interface Props {
35
+ value: InstanceContextValue;
36
+ children: ReactNode;
37
+ }
38
+ /**
39
+ * インスタンス情報の取得・遷移機能を提供する ContextProvider
40
+ */
41
+ export declare const InstanceProvider: ({ value, children }: Props) => import("react/jsx-runtime").JSX.Element;
42
+ /**
43
+ * インスタンスの Context を取得する hook
44
+ * @throws {Error} InstanceProvider の外で呼び出された場合
45
+ */
46
+ export declare const useInstanceContext: () => InstanceContextValue;
47
+ export {};
48
+ //# sourceMappingURL=InstanceContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceContext.d.ts","sourceRoot":"","sources":["../../src/contexts/InstanceContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;QACV,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC5B,CAAA;IACD,KAAK,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9D,kBAAkB;IAClB,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD;AAED;;;GAGG;AACH,eAAO,MAAM,mCAAmC,QAAO,oBA0BrD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,sDAAmD,CAAA;AAE/E,UAAU,KAAK;IACb,KAAK,EAAE,oBAAoB,CAAA;IAC3B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,qBAAqB,KAAK,4CAE1D,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,oBAMrC,CAAA"}
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ /**
4
+ * 開発環境用のデフォルト実装(console.log のみ)
5
+ * プラットフォーム側が実装を注入しない場合に使用される
6
+ */
7
+ export const createDefaultInstanceImplementation = () => ({
8
+ getInstanceInfo: async (instanceId) => {
9
+ console.log('[Instance] getInstanceInfo called', instanceId);
10
+ return {
11
+ id: '',
12
+ name: '',
13
+ description: null,
14
+ currentUsers: 0,
15
+ maxCapacity: 0,
16
+ isPublic: false,
17
+ allowGuests: false,
18
+ world: {
19
+ id: '',
20
+ name: '',
21
+ description: null,
22
+ thumbnailUrl: null,
23
+ isPublic: false,
24
+ instanceCount: 0,
25
+ totalVisitCount: 0,
26
+ uniqueVisitorCount: 0,
27
+ favoriteCount: 0,
28
+ },
29
+ };
30
+ },
31
+ navigateToInstance: (instanceId) => console.log('[Instance] navigateToInstance called', instanceId),
32
+ });
33
+ /**
34
+ * インスタンス情報の取得・遷移機能を提供する Context
35
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
36
+ */
37
+ export const InstanceContext = createContext(null);
38
+ /**
39
+ * インスタンス情報の取得・遷移機能を提供する ContextProvider
40
+ */
41
+ export const InstanceProvider = ({ value, children }) => {
42
+ return _jsx(InstanceContext.Provider, { value: value, children: children });
43
+ };
44
+ /**
45
+ * インスタンスの Context を取得する hook
46
+ * @throws {Error} InstanceProvider の外で呼び出された場合
47
+ */
48
+ export const useInstanceContext = () => {
49
+ const context = useContext(InstanceContext);
50
+ if (!context) {
51
+ throw new Error('useInstanceContext must be used within InstanceProvider');
52
+ }
53
+ return context;
54
+ };
55
+ //# sourceMappingURL=InstanceContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceContext.js","sourceRoot":"","sources":["../../src/contexts/InstanceContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,MAAM,OAAO,CAAA;AA0BjE;;;GAGG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAyB,EAAE,CAAC,CAAC;IAC9E,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,UAAU,CAAC,CAAA;QAC5D,OAAO;YACL,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,EAAE;YACR,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE;gBACL,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,IAAI;gBACjB,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,KAAK;gBACf,aAAa,EAAE,CAAC;gBAChB,eAAe,EAAE,CAAC;gBAClB,kBAAkB,EAAE,CAAC;gBACrB,aAAa,EAAE,CAAC;aACjB;SACF,CAAA;IACH,CAAC;IACD,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE,CACjC,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,UAAU,CAAC;CAClE,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAA8B,IAAI,CAAC,CAAA;AAO/E;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAS,EAAE,EAAE;IAC7D,OAAO,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA4B,CAAA;AACtF,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAyB,EAAE;IAC3D,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface InstanceInfo {
3
+ instanceName: string;
4
+ worldName: string;
5
+ thumbnailUrl: string | null;
6
+ currentUsers: number;
7
+ maxCapacity: number;
8
+ }
9
+ export interface InstanceInfoContextValue {
10
+ /** instanceId からインスタンス情報を取得 */
11
+ getInstanceInfo: (instanceId: string) => Promise<InstanceInfo>;
12
+ /** 指定インスタンスへ遷移 */
13
+ navigateToInstance: (instanceId: string) => void;
14
+ }
15
+ /**
16
+ * 開発環境用のデフォルト実装(console.log のみ)
17
+ * プラットフォーム側が実装を注入しない場合に使用される
18
+ */
19
+ export declare const createDefaultInstanceInfoImplementation: () => InstanceInfoContextValue;
20
+ /**
21
+ * インスタンス情報の取得・遷移機能を提供する Context
22
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
23
+ */
24
+ export declare const InstanceInfoContext: import("react").Context<InstanceInfoContextValue | null>;
25
+ interface Props {
26
+ value: InstanceInfoContextValue;
27
+ children: ReactNode;
28
+ }
29
+ /**
30
+ * インスタンス情報の取得・遷移機能を提供する ContextProvider
31
+ */
32
+ export declare const InstanceInfoProvider: ({ value, children }: Props) => import("react/jsx-runtime").JSX.Element;
33
+ /**
34
+ * インスタンス情報の Context を取得する hook
35
+ * @throws {Error} InstanceInfoProvider の外で呼び出された場合
36
+ */
37
+ export declare const useInstanceInfoContext: () => InstanceInfoContextValue;
38
+ export {};
39
+ //# sourceMappingURL=InstanceInfoContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceInfoContext.d.ts","sourceRoot":"","sources":["../../src/contexts/InstanceInfoContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AAEjE,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9D,kBAAkB;IAClB,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD;AAED;;;GAGG;AACH,eAAO,MAAM,uCAAuC,QAAO,wBAazD,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,0DAAuD,CAAA;AAEvF,UAAU,KAAK;IACb,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,qBAAqB,KAAK,4CAE9D,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAO,wBAMzC,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ /**
4
+ * 開発環境用のデフォルト実装(console.log のみ)
5
+ * プラットフォーム側が実装を注入しない場合に使用される
6
+ */
7
+ export const createDefaultInstanceInfoImplementation = () => ({
8
+ getInstanceInfo: async (instanceId) => {
9
+ console.log('[InstanceInfo] getInstanceInfo called', instanceId);
10
+ return {
11
+ instanceName: '',
12
+ worldName: '',
13
+ thumbnailUrl: null,
14
+ currentUsers: 0,
15
+ maxCapacity: 0,
16
+ };
17
+ },
18
+ navigateToInstance: (instanceId) => console.log('[InstanceInfo] navigateToInstance called', instanceId),
19
+ });
20
+ /**
21
+ * インスタンス情報の取得・遷移機能を提供する Context
22
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
23
+ */
24
+ export const InstanceInfoContext = createContext(null);
25
+ /**
26
+ * インスタンス情報の取得・遷移機能を提供する ContextProvider
27
+ */
28
+ export const InstanceInfoProvider = ({ value, children }) => {
29
+ return _jsx(InstanceInfoContext.Provider, { value: value, children: children });
30
+ };
31
+ /**
32
+ * インスタンス情報の Context を取得する hook
33
+ * @throws {Error} InstanceInfoProvider の外で呼び出された場合
34
+ */
35
+ export const useInstanceInfoContext = () => {
36
+ const context = useContext(InstanceInfoContext);
37
+ if (!context) {
38
+ throw new Error('useInstanceInfoContext must be used within InstanceInfoProvider');
39
+ }
40
+ return context;
41
+ };
42
+ //# sourceMappingURL=InstanceInfoContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceInfoContext.js","sourceRoot":"","sources":["../../src/contexts/InstanceInfoContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,MAAM,OAAO,CAAA;AAiBjE;;;GAGG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAA6B,EAAE,CAAC,CAAC;IACtF,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,UAAU,CAAC,CAAA;QAChE,OAAO;YACL,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;SACf,CAAA;IACH,CAAC;IACD,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE,CACjC,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,UAAU,CAAC;CACtE,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAkC,IAAI,CAAC,CAAA;AAOvF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAS,EAAE,EAAE;IACjE,OAAO,KAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAgC,CAAA;AAC9F,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAA6B,EAAE;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}