@sequent-org/ifc-viewer 1.0.5-ci.9.0 → 1.0.6-ci.11.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.
package/README.md CHANGED
@@ -4,12 +4,58 @@ IFC 3D model viewer component for web applications. Основан на Three.js
4
4
 
5
5
  **✨ Полностью автономный пакет** - не требует внешних CSS фреймворков (Tailwind, Bootstrap и т.д.).
6
6
 
7
+ ## ⚡ Быстрый старт для интеграции
8
+
9
+ ### Минимальная настройка
10
+
11
+ 1. **Установите пакет:**
12
+ ```bash
13
+ npm install @sequent-org/ifc-viewer
14
+ ```
15
+
16
+ 2. **Скопируйте WASM файл (один раз):**
17
+ ```bash
18
+ cp node_modules/web-ifc/web-ifc.wasm public/wasm/
19
+ ```
20
+
21
+ 3. **Используйте в коде:**
22
+ ```javascript
23
+ import { IfcViewer } from '@sequent-org/ifc-viewer'
24
+
25
+ const viewer = new IfcViewer({
26
+ container: '#viewer-container',
27
+ ifcUrl: '/path/to/model.ifc'
28
+ })
29
+
30
+ await viewer.init()
31
+ ```
32
+
33
+ **Готово!** Пакет автоматически найдет WASM файл по стандартным путям.
34
+
7
35
  ## 🚀 Установка
8
36
 
9
37
  ```bash
10
38
  npm install @sequent-org/ifc-viewer
11
39
  ```
12
40
 
41
+ ### 📁 Настройка WASM файла
42
+
43
+ После установки пакета скопируйте WASM файл в публичную папку:
44
+
45
+ ```bash
46
+ # Скопируйте web-ifc.wasm в папку public/wasm/
47
+ cp node_modules/web-ifc/web-ifc.wasm public/wasm/
48
+ ```
49
+
50
+ **Умный поиск:** Пакет автоматически ищет WASM файл по популярным путям:
51
+ - `/wasm/web-ifc.wasm` (рекомендуемый)
52
+ - `/web-ifc.wasm`
53
+ - `/wasm/`
54
+ - `/node_modules/web-ifc/web-ifc.wasm`
55
+ - И другие стандартные пути
56
+
57
+ **Важно:** Пакет использует парсинг в главном потоке (Web Workers отключены) для максимальной совместимости с различными окружениями.
58
+
13
59
  ## 📋 Основное использование
14
60
 
15
61
  ### Простой пример
@@ -24,6 +70,21 @@ const viewer = new IfcViewer({
24
70
  // showSidebar: false (по умолчанию)
25
71
  // showControls: false (по умолчанию)
26
72
  // showToolbar: true (по умолчанию)
73
+ // wasmUrl: null (автоматически определяет путь к WASM)
74
+ })
75
+
76
+ await viewer.init()
77
+ ```
78
+
79
+ ### Пример с кастомным WASM путем
80
+
81
+ ```javascript
82
+ import { IfcViewer } from '@sequent-org/ifc-viewer'
83
+
84
+ const viewer = new IfcViewer({
85
+ container: document.getElementById('viewer-container'),
86
+ ifcUrl: '/models/building.ifc',
87
+ wasmUrl: '/custom-path/web-ifc.wasm' // Кастомный путь к WASM файлу
27
88
  })
28
89
 
29
90
  await viewer.init()
@@ -56,26 +117,52 @@ function showIfcModal(ifcUrl) {
56
117
 
57
118
  **Настройка WASM файла в Laravel:**
58
119
 
59
- 1. Скопируйте `web-ifc.wasm` в папку `public/storage/`:
120
+ 1. **Скопируйте WASM файл в public папку:**
60
121
  ```bash
61
- cp node_modules/web-ifc/web-ifc.wasm public/storage/
122
+ cp node_modules/web-ifc/web-ifc.wasm public/wasm/
62
123
  ```
63
124
 
64
- 2. Или используйте символическую ссылку:
125
+ 2. **Или используйте Laravel Storage:**
65
126
  ```bash
127
+ cp node_modules/web-ifc/web-ifc.wasm storage/app/public/
66
128
  php artisan storage:link
67
- # Затем скопируйте файл в storage/app/public/
68
129
  ```
69
130
 
70
- 3. Альтернативно, укажите путь к файлу в `node_modules`:
131
+ 3. **Для кастомных путей:**
71
132
  ```javascript
72
133
  const viewer = new IfcViewer({
73
134
  container: container,
74
135
  ifcUrl: ifcUrl,
75
- wasmUrl: '/node_modules/web-ifc/web-ifc.wasm'
136
+ wasmUrl: '/storage/web-ifc.wasm' // Путь к WASM в Laravel storage
76
137
  })
77
138
  ```
78
139
 
140
+ **Важно для Laravel:** Убедитесь, что Vite настроен для обслуживания статических файлов из `public/` папки.
141
+
142
+ ## 🔧 Особенности и совместимость
143
+
144
+ ### ✅ Что включено в пакет
145
+
146
+ - **Автономные стили** - не требует Tailwind CSS, Bootstrap или других фреймворков
147
+ - **Умный поиск WASM** - автоматический поиск по популярным путям
148
+ - **Отключенные Web Workers** - парсинг в главном потоке для максимальной совместимости
149
+ - **Fallback защита** - автоматическое переключение на резервные пути при ошибках WASM
150
+ - **Обработка ошибок** - graceful degradation при критических ошибках
151
+ - **Поддержка wasmUrl** - гибкая настройка пути к WASM файлу
152
+
153
+ ### 🚫 Что НЕ включено
154
+
155
+ - **IFCWorker** - Web Workers отключены для предотвращения проблем интеграции
156
+ - **Внешние зависимости** - все стили и ресурсы включены в пакет
157
+ - **WASM файл** - нужно скопировать из node_modules (один раз)
158
+
159
+ ### 🎯 Совместимость
160
+
161
+ - **Браузеры:** Chrome 80+, Firefox 75+, Safari 13+, Edge 80+
162
+ - **Фреймворки:** React, Vue, Angular, Laravel, Next.js, Nuxt.js
163
+ - **Сборщики:** Vite, Webpack, Rollup
164
+ - **Серверы:** Node.js, PHP, Python, .NET
165
+
79
166
  ### Загрузка пользовательского файла
80
167
 
81
168
  ```javascript
@@ -315,6 +402,56 @@ Failed to load web-ifc.wasm
315
402
  - Проверьте консоль на предупреждения о `wasmUrl`
316
403
  - Убедитесь, что файл `web-ifc.wasm` существует и доступен
317
404
 
405
+ ### Проблемы с Web Workers
406
+
407
+ **Ошибка IFCWorker:**
408
+ ```
409
+ Failed to load IFCWorker.js
410
+ ```
411
+
412
+ **Решение:** Эта ошибка не должна возникать, так как Web Workers отключены в пакете. Если она появляется:
413
+
414
+ 1. **Проверьте версию пакета:**
415
+ ```bash
416
+ npm list @sequent-org/ifc-viewer
417
+ ```
418
+
419
+ 2. **Очистите кэш:**
420
+ ```bash
421
+ npm cache clean --force
422
+ rm -rf node_modules package-lock.json
423
+ npm install
424
+ ```
425
+
426
+ 3. **Проверьте консоль браузера** - должно быть сообщение "Web Workers отключены"
427
+
428
+ ### Проблемы интеграции
429
+
430
+ **Ошибка при импорте:**
431
+ ```
432
+ Cannot resolve module '@sequent-org/ifc-viewer'
433
+ ```
434
+
435
+ **Решения:**
436
+ 1. **Убедитесь в правильной установке:**
437
+ ```bash
438
+ npm install @sequent-org/ifc-viewer
439
+ ```
440
+
441
+ 2. **Проверьте package.json:**
442
+ ```json
443
+ {
444
+ "dependencies": {
445
+ "@sequent-org/ifc-viewer": "^1.0.1"
446
+ }
447
+ }
448
+ ```
449
+
450
+ 3. **Для TypeScript проектов:**
451
+ ```typescript
452
+ import { IfcViewer } from '@sequent-org/ifc-viewer'
453
+ ```
454
+
318
455
  ## 🔧 Системные требования
319
456
 
320
457
  - Node.js >= 16
@@ -322,6 +459,40 @@ Failed to load web-ifc.wasm
322
459
  - Для работы требуются файлы `web-ifc.wasm` в публичной папке проекта
323
460
  - Поддержка ES6 модулей в браузере
324
461
 
462
+ ## 👨‍💻 Информация для разработчиков
463
+
464
+ ### Архитектура пакета
465
+
466
+ - **IfcViewer** - основной класс-обертка для интеграции
467
+ - **IfcService** - сервис загрузки и парсинга IFC файлов
468
+ - **Viewer** - Three.js сцена и рендеринг
469
+ - **IfcTreeView** - компонент дерева IFC структуры
470
+
471
+ ### Ключевые особенности
472
+
473
+ - **Web Workers отключены** - парсинг в главном потоке
474
+ - **IFCWorker исключен** - предотвращает проблемы интеграции
475
+ - **Fallback защита** - множественные пути к WASM файлу
476
+ - **Автономные стили** - встроенные CSS без внешних зависимостей
477
+
478
+ ### Для ассистентов по интеграции
479
+
480
+ При помощи с интеграцией пакета учитывайте:
481
+
482
+ 1. **Обязательно скопируйте WASM файл** в публичную папку проекта (один раз)
483
+ 2. **Web Workers отключены** - не пытайтесь их включить
484
+ 3. **Используйте параметр wasmUrl** для кастомных путей к WASM файлу
485
+ 4. **Пакет полностью автономен** - не требует внешних CSS фреймворков
486
+ 5. **Поддерживает все современные фреймворки** - React, Vue, Angular, Laravel
487
+ 6. **Умный поиск WASM** - автоматически найдет файл по стандартным путям
488
+
489
+ ### Отладка
490
+
491
+ - Проверьте консоль на сообщение "Web Workers отключены"
492
+ - Убедитесь, что WASM файл скопирован в публичную папку
493
+ - Используйте DevTools → Network для проверки загрузки ресурсов
494
+ - При проблемах используйте параметр `wasmUrl` для кастомного пути
495
+
325
496
  ## 📄 Лицензия
326
497
 
327
498
  MIT License
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sequent-org/ifc-viewer",
3
3
  "private": false,
4
- "version": "1.0.5-ci.9.0",
4
+ "version": "1.0.6-ci.11.0",
5
5
  "type": "module",
6
6
  "description": "IFC 3D model viewer component for web applications",
7
7
  "main": "src/index.js",
@@ -14,7 +14,6 @@
14
14
  },
15
15
  "files": [
16
16
  "src/",
17
- "public/wasm/",
18
17
  "README.md"
19
18
  ],
20
19
  "keywords": [
@@ -2,12 +2,8 @@
2
2
  // Требует three@^0.149 и web-ifc-three совместимой версии
3
3
 
4
4
  import { IFCLoader } from "web-ifc-three/IFCLoader";
5
- // Абсолютный URL до wasm-асета из папки public (Vite подставит корректный путь)
6
- import WEBIFC_WASM_URL from '/wasm/web-ifc.wasm?url';
7
- // URL собранного воркера через Vite (даёт корректный путь для useWebWorkers)
8
- // Важно: используем ?url, чтобы получить сырой URL ассета и создать классический Worker,
9
- // т.к. web-ifc-three создаёт воркер без { type: 'module' }
10
- import IFCWorkerUrl from 'web-ifc-three/IFCWorker.js?url';
5
+ // Примечание: IFCWorker не используется, так как мы отключаем Web Workers
6
+ // для стабильности работы в различных окружениях
11
7
 
12
8
  export class IfcService {
13
9
  /**
@@ -28,8 +24,14 @@ export class IfcService {
28
24
  init() {
29
25
  try {
30
26
  this.loader = new IFCLoader();
31
- // Отключаем Web Worker: временно парсим в главном потоке для стабильности
32
- try { this.loader.ifcManager.useWebWorkers?.(false); } catch(_) {}
27
+ // Отключаем Web Workers: парсим в главном потоке для стабильности
28
+ // Это предотвращает проблемы с загрузкой IFCWorker в различных окружениях
29
+ try {
30
+ this.loader.ifcManager.useWebWorkers?.(false);
31
+ console.log('IfcService: Web Workers отключены, парсинг в главном потоке');
32
+ } catch (error) {
33
+ console.warn('IfcService: не удалось отключить Web Workers:', error.message);
34
+ }
33
35
 
34
36
  // Настройка пути к WASM файлу с улучшенной обработкой ошибок
35
37
  this._setupWasmPath();
@@ -77,18 +79,15 @@ export class IfcService {
77
79
  paths.push(this.wasmUrl);
78
80
  }
79
81
 
80
- // 2. Пути по умолчанию
81
- try {
82
- const wasmDir = new URL('.', WEBIFC_WASM_URL).href;
83
- paths.push(wasmDir);
84
- } catch (_) {}
85
-
86
- try {
87
- paths.push(WEBIFC_WASM_URL);
88
- } catch (_) {}
89
-
90
- // 3. Резервные пути
91
- paths.push('/wasm/', '/wasm/web-ifc.wasm', '/web-ifc.wasm');
82
+ // 2. Популярные пути по умолчанию
83
+ paths.push(
84
+ '/wasm/web-ifc.wasm', // Стандартный путь в public/wasm/
85
+ '/web-ifc.wasm', // Корневой путь
86
+ '/wasm/', // Директория wasm
87
+ '/node_modules/web-ifc/web-ifc.wasm', // Прямо из node_modules
88
+ './web-ifc.wasm', // Относительный путь
89
+ 'web-ifc.wasm' // Просто имя файла
90
+ );
92
91
 
93
92
  return paths;
94
93
  }
Binary file