@c4h/chuci 0.1.0 → 0.2.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/CHANGELOG.md +32 -32
- package/LICENSE +20 -20
- package/README.ja.md +143 -143
- package/README.md +224 -224
- package/dist/chuci.js +9067 -6595
- package/dist/chuci.umd.js +164 -165
- package/dist/index.d.ts +1 -0
- package/package.json +36 -33
- package/src/components/swiper/cc-swiper-slide.ts +49 -49
- package/src/components/swiper/cc-swiper-styles.ts +28 -28
- package/src/components/swiper/cc-swiper.ts +379 -361
- package/src/components/swiper/swiper-styles.css +4 -4
- package/src/components/viewer/cc-viewer-3dmodel.ts +491 -491
- package/src/components/viewer/cc-viewer-base.ts +278 -278
- package/src/components/viewer/cc-viewer-gaussian.ts +380 -380
- package/src/components/viewer/cc-viewer-image.ts +189 -189
- package/src/components/viewer/cc-viewer-panorama.ts +85 -85
- package/src/components/viewer/cc-viewer-styles.ts +55 -55
- package/src/components/viewer/cc-viewer-video.ts +109 -109
- package/src/components/viewer/cc-viewer-youtube.ts +75 -75
- package/src/components/viewer/cc-viewer.ts +290 -290
- package/src/index.ts +24 -24
- package/src/types/css-modules.d.ts +1 -1
- package/src/types/global.d.ts +10 -10
- package/src/utils/base-element.ts +76 -76
- package/dist/assets/azumaya_panorama1.png +0 -0
- package/dist/chuci.cjs +0 -4483
- package/dist/index-8VMexD2a.cjs +0 -255
- package/dist/index-kvsisbKS.js +0 -2125
- package/dist/index.html +0 -241
- package/dist/test-image.html +0 -63
package/README.md
CHANGED
|
@@ -1,225 +1,225 @@
|
|
|
1
|
-
# Chuci (楚辞)
|
|
2
|
-
|
|
3
|
-
[](https://github.com/code4history/Chuci/actions/workflows/ci.yml)
|
|
4
|
-
[](https://www.npmjs.com/package/@c4h/chuci)
|
|
5
|
-
[](https://opensource.org/licenses/MIT)
|
|
6
|
-
|
|
7
|
-
A standalone multimedia swiper and viewer web components library extracted from [Quyuan](https://github.com/code4history/Quyuan). Provides touch-enabled carousel and multimedia viewers without any framework dependencies.
|
|
8
|
-
|
|
9
|
-
## Features
|
|
10
|
-
|
|
11
|
-
- 🚀 **Framework-agnostic**: Pure Web Components, works with any framework or vanilla JS
|
|
12
|
-
- 📱 **Touch-enabled**: Built on Swiper.js for smooth touch interactions
|
|
13
|
-
- 🎬 **Multiple media types**: Support for images, panoramas, videos, YouTube, 3D models, and Gaussian splats
|
|
14
|
-
- 🔧 **Zero dependencies**: All dependencies are bundled (no Lit dependency)
|
|
15
|
-
- 📦 **Lightweight**: Optimized bundle size with tree-shaking support
|
|
16
|
-
- 🛠️ **TypeScript**: Full TypeScript support with type definitions
|
|
17
|
-
|
|
18
|
-
## Installation
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npm install @c4h/chuci
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Usage
|
|
25
|
-
|
|
26
|
-
### Basic Swiper
|
|
27
|
-
|
|
28
|
-
```html
|
|
29
|
-
<cc-swiper>
|
|
30
|
-
<cc-swiper-slide
|
|
31
|
-
thumbnail-url="thumb1.jpg"
|
|
32
|
-
image-url="full1.jpg"
|
|
33
|
-
image-type="image"
|
|
34
|
-
caption="First image">
|
|
35
|
-
</cc-swiper-slide>
|
|
36
|
-
<cc-swiper-slide
|
|
37
|
-
thumbnail-url="thumb2.jpg"
|
|
38
|
-
image-url="full2.jpg"
|
|
39
|
-
image-type="image"
|
|
40
|
-
caption="Second image">
|
|
41
|
-
</cc-swiper-slide>
|
|
42
|
-
</cc-swiper>
|
|
43
|
-
|
|
44
|
-
<script type="module">
|
|
45
|
-
import '@c4h/chuci'
|
|
46
|
-
</script>
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Programmatic Usage
|
|
50
|
-
|
|
51
|
-
```javascript
|
|
52
|
-
import '@c4h/chuci';
|
|
53
|
-
|
|
54
|
-
// Get swiper element
|
|
55
|
-
const swiper = document.querySelector('cc-swiper');
|
|
56
|
-
|
|
57
|
-
// Open viewer programmatically
|
|
58
|
-
swiper.openViewer('path/to/image.jpg', 'image', 0);
|
|
59
|
-
|
|
60
|
-
// Listen to slide changes
|
|
61
|
-
swiper.addEventListener('slidechange', (e) => {
|
|
62
|
-
console.log('Current slide:', e.detail.activeIndex);
|
|
63
|
-
});
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### With Thumbnails Gallery
|
|
67
|
-
|
|
68
|
-
```html
|
|
69
|
-
<cc-swiper has-thumb>
|
|
70
|
-
<cc-swiper-slide thumbnail-url="..." image-url="..." image-type="image"></cc-swiper-slide>
|
|
71
|
-
<cc-swiper-slide thumbnail-url="..." image-url="..." image-type="image"></cc-swiper-slide>
|
|
72
|
-
</cc-swiper>
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Autoplay
|
|
76
|
-
|
|
77
|
-
```html
|
|
78
|
-
<cc-swiper autoplay>
|
|
79
|
-
<!-- slides -->
|
|
80
|
-
</cc-swiper>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Supported Media Types
|
|
84
|
-
|
|
85
|
-
- **image**: Regular images (jpg, png, gif, etc.)
|
|
86
|
-
- **panorama**: 360° panoramic images
|
|
87
|
-
- **youtube**: YouTube videos (provide YouTube URL)
|
|
88
|
-
- **video**: HTML5 videos (mp4, webm, etc.)
|
|
89
|
-
- **3dmodel**: 3D models (OBJ/MTL format)
|
|
90
|
-
- **gaussian**: Gaussian splatting files (.splat, .ply)
|
|
91
|
-
|
|
92
|
-
## Components
|
|
93
|
-
|
|
94
|
-
### `<cc-swiper>`
|
|
95
|
-
|
|
96
|
-
Main carousel component.
|
|
97
|
-
|
|
98
|
-
**Attributes:**
|
|
99
|
-
- `has-thumb`: Show thumbnail gallery
|
|
100
|
-
- `autoplay`: Enable autoplay
|
|
101
|
-
|
|
102
|
-
**Methods:**
|
|
103
|
-
- `openViewer(imageUrl: string, imageType: string, slideIndex?: number)`: Programmatically open viewer
|
|
104
|
-
|
|
105
|
-
**Events:**
|
|
106
|
-
- `slidechange`: Fired when slide changes
|
|
107
|
-
|
|
108
|
-
### `<cc-swiper-slide>`
|
|
109
|
-
|
|
110
|
-
Individual slide component.
|
|
111
|
-
|
|
112
|
-
**Attributes:**
|
|
113
|
-
- `thumbnail-url`: URL for thumbnail image
|
|
114
|
-
- `image-url`: URL for full media
|
|
115
|
-
- `image-type`: Media type (see supported types above)
|
|
116
|
-
- `caption`: Optional caption text
|
|
117
|
-
|
|
118
|
-
### Viewer Components
|
|
119
|
-
|
|
120
|
-
All viewer components inherit from `CcViewerBase` and support:
|
|
121
|
-
|
|
122
|
-
**Methods:**
|
|
123
|
-
- `open(url: string)`: Open viewer with media
|
|
124
|
-
- `close()`: Close viewer
|
|
125
|
-
|
|
126
|
-
**Properties:**
|
|
127
|
-
- `showPrevButton`: Show/hide previous button
|
|
128
|
-
- `showNextButton`: Show/hide next button
|
|
129
|
-
|
|
130
|
-
### Media-specific Examples
|
|
131
|
-
|
|
132
|
-
#### 3D Model Viewer
|
|
133
|
-
```html
|
|
134
|
-
<cc-swiper-slide
|
|
135
|
-
thumbnail-url="thumb.jpg"
|
|
136
|
-
image-url="model.obj"
|
|
137
|
-
image-type="3dmodel"
|
|
138
|
-
material-url="model.mtl"
|
|
139
|
-
debug-mode="true"
|
|
140
|
-
camera-position="0,1,5"
|
|
141
|
-
camera-target="0,0,0"
|
|
142
|
-
show-texture="true">
|
|
143
|
-
</cc-swiper-slide>
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
#### Gaussian Splatting Viewer
|
|
147
|
-
```html
|
|
148
|
-
<cc-swiper-slide
|
|
149
|
-
thumbnail-url="thumb.jpg"
|
|
150
|
-
image-url="scene.splat"
|
|
151
|
-
image-type="gaussian"
|
|
152
|
-
debug-mode="true"
|
|
153
|
-
camera-position="0,0,10">
|
|
154
|
-
</cc-swiper-slide>
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
#### YouTube Video
|
|
158
|
-
```html
|
|
159
|
-
<cc-swiper-slide
|
|
160
|
-
thumbnail-url="thumb.jpg"
|
|
161
|
-
image-url="https://www.youtube.com/watch?v=VIDEO_ID"
|
|
162
|
-
image-type="youtube">
|
|
163
|
-
</cc-swiper-slide>
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## Styling
|
|
167
|
-
|
|
168
|
-
CSS Custom Properties:
|
|
169
|
-
|
|
170
|
-
```css
|
|
171
|
-
cc-swiper {
|
|
172
|
-
--cc-slider-theme-color: #007aff;
|
|
173
|
-
--cc-slider-navigation-color: #007aff;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
cc-viewer {
|
|
177
|
-
--cc-viewer-z-index: 1000;
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## Browser Support
|
|
182
|
-
|
|
183
|
-
Works in all modern browsers that support Web Components:
|
|
184
|
-
- Chrome/Edge 79+
|
|
185
|
-
- Firefox 63+
|
|
186
|
-
- Safari 12.1+
|
|
187
|
-
|
|
188
|
-
## Development
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
# Install dependencies
|
|
192
|
-
pnpm install
|
|
193
|
-
|
|
194
|
-
# Start development server
|
|
195
|
-
pnpm run dev
|
|
196
|
-
|
|
197
|
-
# Run tests
|
|
198
|
-
pnpm test
|
|
199
|
-
|
|
200
|
-
# Build library
|
|
201
|
-
pnpm run build
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
## License
|
|
205
|
-
|
|
206
|
-
MIT License - see LICENSE file for details.
|
|
207
|
-
|
|
208
|
-
## Migration from Quyuan
|
|
209
|
-
|
|
210
|
-
If you're migrating from the original Quyuan implementation:
|
|
211
|
-
|
|
212
|
-
1. Change imports from `quyuan` to `@c4h/chuci`
|
|
213
|
-
2. Component names remain the same (`cc-swiper`, `cc-swiper-slide`, etc.)
|
|
214
|
-
3. 3D model URLs no longer use pipe-separated format:
|
|
215
|
-
```html
|
|
216
|
-
<!-- Old -->
|
|
217
|
-
<cc-swiper-slide image-url="model.obj|model.mtl" ...>
|
|
218
|
-
|
|
219
|
-
<!-- New -->
|
|
220
|
-
<cc-swiper-slide image-url="model.obj" material-url="model.mtl" ...>
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
## Credits
|
|
224
|
-
|
|
1
|
+
# Chuci (楚辞)
|
|
2
|
+
|
|
3
|
+
[](https://github.com/code4history/Chuci/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/@c4h/chuci)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
A standalone multimedia swiper and viewer web components library extracted from [Quyuan](https://github.com/code4history/Quyuan). Provides touch-enabled carousel and multimedia viewers without any framework dependencies.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- 🚀 **Framework-agnostic**: Pure Web Components, works with any framework or vanilla JS
|
|
12
|
+
- 📱 **Touch-enabled**: Built on Swiper.js for smooth touch interactions
|
|
13
|
+
- 🎬 **Multiple media types**: Support for images, panoramas, videos, YouTube, 3D models, and Gaussian splats
|
|
14
|
+
- 🔧 **Zero dependencies**: All dependencies are bundled (no Lit dependency)
|
|
15
|
+
- 📦 **Lightweight**: Optimized bundle size with tree-shaking support
|
|
16
|
+
- 🛠️ **TypeScript**: Full TypeScript support with type definitions
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install @c4h/chuci
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
### Basic Swiper
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<cc-swiper>
|
|
30
|
+
<cc-swiper-slide
|
|
31
|
+
thumbnail-url="thumb1.jpg"
|
|
32
|
+
image-url="full1.jpg"
|
|
33
|
+
image-type="image"
|
|
34
|
+
caption="First image">
|
|
35
|
+
</cc-swiper-slide>
|
|
36
|
+
<cc-swiper-slide
|
|
37
|
+
thumbnail-url="thumb2.jpg"
|
|
38
|
+
image-url="full2.jpg"
|
|
39
|
+
image-type="image"
|
|
40
|
+
caption="Second image">
|
|
41
|
+
</cc-swiper-slide>
|
|
42
|
+
</cc-swiper>
|
|
43
|
+
|
|
44
|
+
<script type="module">
|
|
45
|
+
import '@c4h/chuci'
|
|
46
|
+
</script>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Programmatic Usage
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
import '@c4h/chuci';
|
|
53
|
+
|
|
54
|
+
// Get swiper element
|
|
55
|
+
const swiper = document.querySelector('cc-swiper');
|
|
56
|
+
|
|
57
|
+
// Open viewer programmatically
|
|
58
|
+
swiper.openViewer('path/to/image.jpg', 'image', 0);
|
|
59
|
+
|
|
60
|
+
// Listen to slide changes
|
|
61
|
+
swiper.addEventListener('slidechange', (e) => {
|
|
62
|
+
console.log('Current slide:', e.detail.activeIndex);
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### With Thumbnails Gallery
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<cc-swiper has-thumb>
|
|
70
|
+
<cc-swiper-slide thumbnail-url="..." image-url="..." image-type="image"></cc-swiper-slide>
|
|
71
|
+
<cc-swiper-slide thumbnail-url="..." image-url="..." image-type="image"></cc-swiper-slide>
|
|
72
|
+
</cc-swiper>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Autoplay
|
|
76
|
+
|
|
77
|
+
```html
|
|
78
|
+
<cc-swiper autoplay>
|
|
79
|
+
<!-- slides -->
|
|
80
|
+
</cc-swiper>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Supported Media Types
|
|
84
|
+
|
|
85
|
+
- **image**: Regular images (jpg, png, gif, etc.)
|
|
86
|
+
- **panorama**: 360° panoramic images
|
|
87
|
+
- **youtube**: YouTube videos (provide YouTube URL)
|
|
88
|
+
- **video**: HTML5 videos (mp4, webm, etc.)
|
|
89
|
+
- **3dmodel**: 3D models (OBJ/MTL format)
|
|
90
|
+
- **gaussian**: Gaussian splatting files (.splat, .ply)
|
|
91
|
+
|
|
92
|
+
## Components
|
|
93
|
+
|
|
94
|
+
### `<cc-swiper>`
|
|
95
|
+
|
|
96
|
+
Main carousel component.
|
|
97
|
+
|
|
98
|
+
**Attributes:**
|
|
99
|
+
- `has-thumb`: Show thumbnail gallery
|
|
100
|
+
- `autoplay`: Enable autoplay
|
|
101
|
+
|
|
102
|
+
**Methods:**
|
|
103
|
+
- `openViewer(imageUrl: string, imageType: string, slideIndex?: number)`: Programmatically open viewer
|
|
104
|
+
|
|
105
|
+
**Events:**
|
|
106
|
+
- `slidechange`: Fired when slide changes
|
|
107
|
+
|
|
108
|
+
### `<cc-swiper-slide>`
|
|
109
|
+
|
|
110
|
+
Individual slide component.
|
|
111
|
+
|
|
112
|
+
**Attributes:**
|
|
113
|
+
- `thumbnail-url`: URL for thumbnail image
|
|
114
|
+
- `image-url`: URL for full media
|
|
115
|
+
- `image-type`: Media type (see supported types above)
|
|
116
|
+
- `caption`: Optional caption text
|
|
117
|
+
|
|
118
|
+
### Viewer Components
|
|
119
|
+
|
|
120
|
+
All viewer components inherit from `CcViewerBase` and support:
|
|
121
|
+
|
|
122
|
+
**Methods:**
|
|
123
|
+
- `open(url: string)`: Open viewer with media
|
|
124
|
+
- `close()`: Close viewer
|
|
125
|
+
|
|
126
|
+
**Properties:**
|
|
127
|
+
- `showPrevButton`: Show/hide previous button
|
|
128
|
+
- `showNextButton`: Show/hide next button
|
|
129
|
+
|
|
130
|
+
### Media-specific Examples
|
|
131
|
+
|
|
132
|
+
#### 3D Model Viewer
|
|
133
|
+
```html
|
|
134
|
+
<cc-swiper-slide
|
|
135
|
+
thumbnail-url="thumb.jpg"
|
|
136
|
+
image-url="model.obj"
|
|
137
|
+
image-type="3dmodel"
|
|
138
|
+
material-url="model.mtl"
|
|
139
|
+
debug-mode="true"
|
|
140
|
+
camera-position="0,1,5"
|
|
141
|
+
camera-target="0,0,0"
|
|
142
|
+
show-texture="true">
|
|
143
|
+
</cc-swiper-slide>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### Gaussian Splatting Viewer
|
|
147
|
+
```html
|
|
148
|
+
<cc-swiper-slide
|
|
149
|
+
thumbnail-url="thumb.jpg"
|
|
150
|
+
image-url="scene.splat"
|
|
151
|
+
image-type="gaussian"
|
|
152
|
+
debug-mode="true"
|
|
153
|
+
camera-position="0,0,10">
|
|
154
|
+
</cc-swiper-slide>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
#### YouTube Video
|
|
158
|
+
```html
|
|
159
|
+
<cc-swiper-slide
|
|
160
|
+
thumbnail-url="thumb.jpg"
|
|
161
|
+
image-url="https://www.youtube.com/watch?v=VIDEO_ID"
|
|
162
|
+
image-type="youtube">
|
|
163
|
+
</cc-swiper-slide>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Styling
|
|
167
|
+
|
|
168
|
+
CSS Custom Properties:
|
|
169
|
+
|
|
170
|
+
```css
|
|
171
|
+
cc-swiper {
|
|
172
|
+
--cc-slider-theme-color: #007aff;
|
|
173
|
+
--cc-slider-navigation-color: #007aff;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
cc-viewer {
|
|
177
|
+
--cc-viewer-z-index: 1000;
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Browser Support
|
|
182
|
+
|
|
183
|
+
Works in all modern browsers that support Web Components:
|
|
184
|
+
- Chrome/Edge 79+
|
|
185
|
+
- Firefox 63+
|
|
186
|
+
- Safari 12.1+
|
|
187
|
+
|
|
188
|
+
## Development
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# Install dependencies
|
|
192
|
+
pnpm install
|
|
193
|
+
|
|
194
|
+
# Start development server
|
|
195
|
+
pnpm run dev
|
|
196
|
+
|
|
197
|
+
# Run tests
|
|
198
|
+
pnpm test
|
|
199
|
+
|
|
200
|
+
# Build library
|
|
201
|
+
pnpm run build
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## License
|
|
205
|
+
|
|
206
|
+
MIT License - see LICENSE file for details.
|
|
207
|
+
|
|
208
|
+
## Migration from Quyuan
|
|
209
|
+
|
|
210
|
+
If you're migrating from the original Quyuan implementation:
|
|
211
|
+
|
|
212
|
+
1. Change imports from `quyuan` to `@c4h/chuci`
|
|
213
|
+
2. Component names remain the same (`cc-swiper`, `cc-swiper-slide`, etc.)
|
|
214
|
+
3. 3D model URLs no longer use pipe-separated format:
|
|
215
|
+
```html
|
|
216
|
+
<!-- Old -->
|
|
217
|
+
<cc-swiper-slide image-url="model.obj|model.mtl" ...>
|
|
218
|
+
|
|
219
|
+
<!-- New -->
|
|
220
|
+
<cc-swiper-slide image-url="model.obj" material-url="model.mtl" ...>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Credits
|
|
224
|
+
|
|
225
225
|
Extracted from [Quyuan](https://github.com/code4history/Quyuan) by Code for History.
|