@almadar/ui 5.63.2 → 5.64.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.
@@ -43,6 +43,7 @@ var THREE3 = require('three');
43
43
  var GLTFLoader_js = require('three/examples/jsm/loaders/GLTFLoader.js');
44
44
  var OBJLoader_js = require('three/examples/jsm/loaders/OBJLoader.js');
45
45
  var GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader');
46
+ var SkeletonUtils = require('three/examples/jsm/utils/SkeletonUtils');
46
47
  var fiber = require('@react-three/fiber');
47
48
  var drei = require('@react-three/drei');
48
49
  var patterns = require('@almadar/patterns');
@@ -45460,7 +45461,8 @@ function ModelLoader({
45460
45461
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
45461
45462
  const model = React93.useMemo(() => {
45462
45463
  if (!loadedModel) return null;
45463
- const cloned = loadedModel.clone();
45464
+ const cloned = SkeletonUtils.clone(loadedModel);
45465
+ cloned.updateMatrixWorld(true);
45464
45466
  cloned.traverse((child) => {
45465
45467
  if (child instanceof THREE3__namespace.Mesh) {
45466
45468
  child.castShadow = castShadow;
@@ -45475,7 +45477,8 @@ function ModelLoader({
45475
45477
  const size = new THREE3__namespace.Vector3();
45476
45478
  box.getSize(size);
45477
45479
  const maxDim = Math.max(size.x, size.y, size.z);
45478
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
45480
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
45481
+ return 1 / maxDim;
45479
45482
  }, [model]);
45480
45483
  const scaleArray = React93.useMemo(() => {
45481
45484
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
package/dist/avl/index.js CHANGED
@@ -43,6 +43,7 @@ import * as THREE3 from 'three';
43
43
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
44
44
  import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
45
45
  import { GLTFLoader as GLTFLoader$1 } from 'three/examples/jsm/loaders/GLTFLoader';
46
+ import { clone } from 'three/examples/jsm/utils/SkeletonUtils';
46
47
  import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber';
47
48
  import { Billboard, Grid as Grid$1, OrbitControls } from '@react-three/drei';
48
49
  import { getPatternDefinition, getComponentForPattern as getComponentForPattern$1, isEntityAwarePattern } from '@almadar/patterns';
@@ -45413,7 +45414,8 @@ function ModelLoader({
45413
45414
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
45414
45415
  const model = useMemo(() => {
45415
45416
  if (!loadedModel) return null;
45416
- const cloned = loadedModel.clone();
45417
+ const cloned = clone(loadedModel);
45418
+ cloned.updateMatrixWorld(true);
45417
45419
  cloned.traverse((child) => {
45418
45420
  if (child instanceof THREE3.Mesh) {
45419
45421
  child.castShadow = castShadow;
@@ -45428,7 +45430,8 @@ function ModelLoader({
45428
45430
  const size = new THREE3.Vector3();
45429
45431
  box.getSize(size);
45430
45432
  const maxDim = Math.max(size.x, size.y, size.z);
45431
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
45433
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
45434
+ return 1 / maxDim;
45432
45435
  }, [model]);
45433
45436
  const scaleArray = useMemo(() => {
45434
45437
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -7,6 +7,7 @@ var jsxRuntime = require('react/jsx-runtime');
7
7
  var drei = require('@react-three/drei');
8
8
  var logger = require('@almadar/logger');
9
9
  var GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader');
10
+ var SkeletonUtils = require('three/examples/jsm/utils/SkeletonUtils');
10
11
  var OrbitControls_js = require('three/examples/jsm/controls/OrbitControls.js');
11
12
  var GLTFLoader_js = require('three/examples/jsm/loaders/GLTFLoader.js');
12
13
  var OBJLoader_js = require('three/examples/jsm/loaders/OBJLoader.js');
@@ -392,7 +393,8 @@ function ModelLoader({
392
393
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
393
394
  const model = React11.useMemo(() => {
394
395
  if (!loadedModel) return null;
395
- const cloned = loadedModel.clone();
396
+ const cloned = SkeletonUtils.clone(loadedModel);
397
+ cloned.updateMatrixWorld(true);
396
398
  cloned.traverse((child) => {
397
399
  if (child instanceof THREE6__namespace.Mesh) {
398
400
  child.castShadow = castShadow;
@@ -407,7 +409,8 @@ function ModelLoader({
407
409
  const size = new THREE6__namespace.Vector3();
408
410
  box.getSize(size);
409
411
  const maxDim = Math.max(size.x, size.y, size.z);
410
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
412
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
413
+ return 1 / maxDim;
411
414
  }, [model]);
412
415
  const scaleArray = React11.useMemo(() => {
413
416
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -6,6 +6,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { OrbitControls, Billboard, Grid, Stars, Sparkles, Html, RoundedBox } from '@react-three/drei';
7
7
  import { createLogger } from '@almadar/logger';
8
8
  import { GLTFLoader as GLTFLoader$1 } from 'three/examples/jsm/loaders/GLTFLoader';
9
+ import { clone } from 'three/examples/jsm/utils/SkeletonUtils';
9
10
  import { OrbitControls as OrbitControls$1 } from 'three/examples/jsm/controls/OrbitControls.js';
10
11
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
11
12
  import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
@@ -368,7 +369,8 @@ function ModelLoader({
368
369
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
369
370
  const model = useMemo(() => {
370
371
  if (!loadedModel) return null;
371
- const cloned = loadedModel.clone();
372
+ const cloned = clone(loadedModel);
373
+ cloned.updateMatrixWorld(true);
372
374
  cloned.traverse((child) => {
373
375
  if (child instanceof THREE6.Mesh) {
374
376
  child.castShadow = castShadow;
@@ -383,7 +385,8 @@ function ModelLoader({
383
385
  const size = new THREE6.Vector3();
384
386
  box.getSize(size);
385
387
  const maxDim = Math.max(size.x, size.y, size.z);
386
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
388
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
389
+ return 1 / maxDim;
387
390
  }, [model]);
388
391
  const scaleArray = useMemo(() => {
389
392
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -45,6 +45,7 @@ var THREE3 = require('three');
45
45
  var GLTFLoader_js = require('three/examples/jsm/loaders/GLTFLoader.js');
46
46
  var OBJLoader_js = require('three/examples/jsm/loaders/OBJLoader.js');
47
47
  var GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader');
48
+ var SkeletonUtils = require('three/examples/jsm/utils/SkeletonUtils');
48
49
  var fiber = require('@react-three/fiber');
49
50
  var drei = require('@react-three/drei');
50
51
  var patterns = require('@almadar/patterns');
@@ -44014,7 +44015,8 @@ function ModelLoader({
44014
44015
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
44015
44016
  const model = React79.useMemo(() => {
44016
44017
  if (!loadedModel) return null;
44017
- const cloned = loadedModel.clone();
44018
+ const cloned = SkeletonUtils.clone(loadedModel);
44019
+ cloned.updateMatrixWorld(true);
44018
44020
  cloned.traverse((child) => {
44019
44021
  if (child instanceof THREE3__namespace.Mesh) {
44020
44022
  child.castShadow = castShadow;
@@ -44029,7 +44031,8 @@ function ModelLoader({
44029
44031
  const size = new THREE3__namespace.Vector3();
44030
44032
  box.getSize(size);
44031
44033
  const maxDim = Math.max(size.x, size.y, size.z);
44032
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
44034
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
44035
+ return 1 / maxDim;
44033
44036
  }, [model]);
44034
44037
  const scaleArray = React79.useMemo(() => {
44035
44038
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -46,6 +46,7 @@ import * as THREE3 from 'three';
46
46
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
47
47
  import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
48
48
  import { GLTFLoader as GLTFLoader$1 } from 'three/examples/jsm/loaders/GLTFLoader';
49
+ import { clone } from 'three/examples/jsm/utils/SkeletonUtils';
49
50
  import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber';
50
51
  import { Billboard, Grid as Grid$1, OrbitControls } from '@react-three/drei';
51
52
  import { getPatternDefinition as getPatternDefinition$1, getComponentForPattern as getComponentForPattern$1 } from '@almadar/patterns';
@@ -43968,7 +43969,8 @@ function ModelLoader({
43968
43969
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
43969
43970
  const model = useMemo(() => {
43970
43971
  if (!loadedModel) return null;
43971
- const cloned = loadedModel.clone();
43972
+ const cloned = clone(loadedModel);
43973
+ cloned.updateMatrixWorld(true);
43972
43974
  cloned.traverse((child) => {
43973
43975
  if (child instanceof THREE3.Mesh) {
43974
43976
  child.castShadow = castShadow;
@@ -43983,7 +43985,8 @@ function ModelLoader({
43983
43985
  const size = new THREE3.Vector3();
43984
43986
  box.getSize(size);
43985
43987
  const maxDim = Math.max(size.x, size.y, size.z);
43986
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
43988
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
43989
+ return 1 / maxDim;
43987
43990
  }, [model]);
43988
43991
  const scaleArray = useMemo(() => {
43989
43992
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -10,7 +10,7 @@
10
10
  * - Never listens to events
11
11
  */
12
12
  import React from 'react';
13
- import type { EntityWith } from '@almadar/core';
13
+ import type { EntityWith, AssetUrl } from '@almadar/core';
14
14
  import type { DisplayStateProps } from '../../core/organisms/types';
15
15
  /** A hero CTA: a plain `{ label, href }` object (FieldValue-compatible — a `type`,
16
16
  * not `interface`, so it's assignable to the entity-row `FieldValue` index sig). */
@@ -29,7 +29,7 @@ export interface HeroRow {
29
29
  secondaryAction?: HeroAction;
30
30
  installCommand?: string;
31
31
  image?: {
32
- src?: string;
32
+ src?: AssetUrl;
33
33
  alt?: string;
34
34
  };
35
35
  imagePosition?: 'below' | 'right' | 'background';
@@ -10,7 +10,7 @@
10
10
  * - Never listens to events
11
11
  */
12
12
  import React from 'react';
13
- import type { EntityWith } from '@almadar/core';
13
+ import type { EntityWith, AssetUrl } from '@almadar/core';
14
14
  import type { DisplayStateProps } from '../../core/organisms/types';
15
15
  /** The per-showcase entity fields this organism reads (FieldValue-compatible; `image`
16
16
  * is a plain `{ src, alt }` object, `accentColor` a string). */
@@ -18,7 +18,7 @@ export interface ShowcaseRow {
18
18
  title: string;
19
19
  description?: string;
20
20
  image?: {
21
- src?: string;
21
+ src?: AssetUrl;
22
22
  alt?: string;
23
23
  };
24
24
  href?: string;
@@ -9,7 +9,7 @@
9
9
  * - No events (display-only)
10
10
  */
11
11
  import React from 'react';
12
- import type { EntityWith } from '@almadar/core';
12
+ import type { EntityWith, AssetUrl } from '@almadar/core';
13
13
  import type { DisplayStateProps } from '../../core/organisms/types';
14
14
  /** The per-member entity fields this organism reads (FieldValue-compatible;
15
15
  * `avatar` is a string url/initials). */
@@ -18,7 +18,7 @@ export interface TeamMemberRow {
18
18
  nameAr?: string;
19
19
  role?: string;
20
20
  bio?: string;
21
- avatar?: string;
21
+ avatar?: AssetUrl;
22
22
  }
23
23
  export interface TeamOrganismProps extends DisplayStateProps {
24
24
  entity?: EntityWith<TeamMemberRow> | readonly EntityWith<TeamMemberRow>[];
@@ -45,6 +45,7 @@ var THREE3 = require('three');
45
45
  var GLTFLoader_js = require('three/examples/jsm/loaders/GLTFLoader.js');
46
46
  var OBJLoader_js = require('three/examples/jsm/loaders/OBJLoader.js');
47
47
  var GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader');
48
+ var SkeletonUtils = require('three/examples/jsm/utils/SkeletonUtils');
48
49
  var fiber = require('@react-three/fiber');
49
50
  var drei = require('@react-three/drei');
50
51
  var patterns = require('@almadar/patterns');
@@ -43261,7 +43262,8 @@ function ModelLoader({
43261
43262
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
43262
43263
  const model = React85.useMemo(() => {
43263
43264
  if (!loadedModel) return null;
43264
- const cloned = loadedModel.clone();
43265
+ const cloned = SkeletonUtils.clone(loadedModel);
43266
+ cloned.updateMatrixWorld(true);
43265
43267
  cloned.traverse((child) => {
43266
43268
  if (child instanceof THREE3__namespace.Mesh) {
43267
43269
  child.castShadow = castShadow;
@@ -43276,7 +43278,8 @@ function ModelLoader({
43276
43278
  const size = new THREE3__namespace.Vector3();
43277
43279
  box.getSize(size);
43278
43280
  const maxDim = Math.max(size.x, size.y, size.z);
43279
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
43281
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
43282
+ return 1 / maxDim;
43280
43283
  }, [model]);
43281
43284
  const scaleArray = React85.useMemo(() => {
43282
43285
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -45,6 +45,7 @@ import * as THREE3 from 'three';
45
45
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
46
46
  import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
47
47
  import { GLTFLoader as GLTFLoader$1 } from 'three/examples/jsm/loaders/GLTFLoader';
48
+ import { clone } from 'three/examples/jsm/utils/SkeletonUtils';
48
49
  import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber';
49
50
  import { Billboard, Grid as Grid$1, OrbitControls } from '@react-three/drei';
50
51
  import { getPatternDefinition, getComponentForPattern as getComponentForPattern$1 } from '@almadar/patterns';
@@ -43214,7 +43215,8 @@ function ModelLoader({
43214
43215
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
43215
43216
  const model = useMemo(() => {
43216
43217
  if (!loadedModel) return null;
43217
- const cloned = loadedModel.clone();
43218
+ const cloned = clone(loadedModel);
43219
+ cloned.updateMatrixWorld(true);
43218
43220
  cloned.traverse((child) => {
43219
43221
  if (child instanceof THREE3.Mesh) {
43220
43222
  child.castShadow = castShadow;
@@ -43229,7 +43231,8 @@ function ModelLoader({
43229
43231
  const size = new THREE3.Vector3();
43230
43232
  box.getSize(size);
43231
43233
  const maxDim = Math.max(size.x, size.y, size.z);
43232
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
43234
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
43235
+ return 1 / maxDim;
43233
43236
  }, [model]);
43234
43237
  const scaleArray = useMemo(() => {
43235
43238
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -45,6 +45,7 @@ var THREE3 = require('three');
45
45
  var GLTFLoader_js = require('three/examples/jsm/loaders/GLTFLoader.js');
46
46
  var OBJLoader_js = require('three/examples/jsm/loaders/OBJLoader.js');
47
47
  var GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader');
48
+ var SkeletonUtils = require('three/examples/jsm/utils/SkeletonUtils');
48
49
  var fiber = require('@react-three/fiber');
49
50
  var drei = require('@react-three/drei');
50
51
  var patterns = require('@almadar/patterns');
@@ -42959,7 +42960,8 @@ function ModelLoader({
42959
42960
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
42960
42961
  const model = React84.useMemo(() => {
42961
42962
  if (!loadedModel) return null;
42962
- const cloned = loadedModel.clone();
42963
+ const cloned = SkeletonUtils.clone(loadedModel);
42964
+ cloned.updateMatrixWorld(true);
42963
42965
  cloned.traverse((child) => {
42964
42966
  if (child instanceof THREE3__namespace.Mesh) {
42965
42967
  child.castShadow = castShadow;
@@ -42974,7 +42976,8 @@ function ModelLoader({
42974
42976
  const size = new THREE3__namespace.Vector3();
42975
42977
  box.getSize(size);
42976
42978
  const maxDim = Math.max(size.x, size.y, size.z);
42977
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
42979
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
42980
+ return 1 / maxDim;
42978
42981
  }, [model]);
42979
42982
  const scaleArray = React84.useMemo(() => {
42980
42983
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
@@ -45,6 +45,7 @@ import * as THREE3 from 'three';
45
45
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
46
46
  import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
47
47
  import { GLTFLoader as GLTFLoader$1 } from 'three/examples/jsm/loaders/GLTFLoader';
48
+ import { clone } from 'three/examples/jsm/utils/SkeletonUtils';
48
49
  import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber';
49
50
  import { Billboard, Grid as Grid$1, OrbitControls } from '@react-three/drei';
50
51
  import { getPatternDefinition, getComponentForPattern as getComponentForPattern$1 } from '@almadar/patterns';
@@ -42912,7 +42913,8 @@ function ModelLoader({
42912
42913
  const { model: loadedModel, isLoading, error } = useGLTFModel(url, resourceBasePath);
42913
42914
  const model = useMemo(() => {
42914
42915
  if (!loadedModel) return null;
42915
- const cloned = loadedModel.clone();
42916
+ const cloned = clone(loadedModel);
42917
+ cloned.updateMatrixWorld(true);
42916
42918
  cloned.traverse((child) => {
42917
42919
  if (child instanceof THREE3.Mesh) {
42918
42920
  child.castShadow = castShadow;
@@ -42927,7 +42929,8 @@ function ModelLoader({
42927
42929
  const size = new THREE3.Vector3();
42928
42930
  box.getSize(size);
42929
42931
  const maxDim = Math.max(size.x, size.y, size.z);
42930
- return maxDim > 0 && Number.isFinite(maxDim) ? 1 / maxDim : 1;
42932
+ if (!Number.isFinite(maxDim) || maxDim < 0.05) return 1;
42933
+ return 1 / maxDim;
42931
42934
  }, [model]);
42932
42935
  const scaleArray = useMemo(() => {
42933
42936
  const base = typeof scale === "number" ? [scale, scale, scale] : scale;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "5.63.2",
3
+ "version": "5.64.0",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "sideEffects": [