pixel-daylight-switch-gsvegetable 2.0.0 → 2.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/README.ja.md +232 -0
- package/README.md +137 -648
- package/README.zh-CN.md +232 -0
- package/app.js +69 -8
- package/package.json +3 -3
package/README.ja.md
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# Pixel Daylight Switch
|
|
2
|
+
|
|
3
|
+
[](https://github.com/GSvegetable/pixel-daylight-switch/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/pixel-daylight-switch-gsvegetable)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**言語:** [English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md)
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
*屈折するガラススイッチの中に、小さなピクセルワールドを。*
|
|
12
|
+
|
|
13
|
+
Pixel Daylight Switch は、ドラッグ操作で昼・夕暮れ・夜を切り替えられる UI コンポーネントです。ガラスレンズの中のピクセルアートの世界が、スイッチの動きに合わせて変化します。Vanilla JavaScript、WebGL2、Canvas 2D フォールバックで構成され、実行時にサードパーティ製ライブラリを必要としません。
|
|
14
|
+
|
|
15
|
+
**[ライブデモ](https://gsvegetable.github.io/pixel-daylight-switch/)** · **[パラメーター Playground](https://gsvegetable.github.io/pixel-daylight-switch/playground.html)** · **[npm パッケージ](https://www.npmjs.com/package/pixel-daylight-switch-gsvegetable)**
|
|
16
|
+
|
|
17
|
+
## 目的別リンク
|
|
18
|
+
|
|
19
|
+
| 目的 | リンク |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| スイッチを体験する | [ライブデモ](https://gsvegetable.github.io/pixel-daylight-switch/) |
|
|
22
|
+
| シーンや表示を調整する | [パラメーター Playground](https://gsvegetable.github.io/pixel-daylight-switch/playground.html) |
|
|
23
|
+
| コンポーネントを見る | [Preview](https://gsvegetable.github.io/pixel-daylight-switch/preview.html) |
|
|
24
|
+
| Web サイトに埋め込む | [embed.js](embed.js) |
|
|
25
|
+
| JavaScript プロジェクトで使う | [npm](https://www.npmjs.com/package/pixel-daylight-switch-gsvegetable) |
|
|
26
|
+
| 実装を読む | [app.js](app.js) · [style.css](style.css) |
|
|
27
|
+
| モバイルビルド | [ビルド情報](builds/README.md) · [GitHub Actions](https://github.com/GSvegetable/pixel-daylight-switch/actions/workflows/mobile-build.yml) |
|
|
28
|
+
| テスト結果 | [CI ワークフロー](https://github.com/GSvegetable/pixel-daylight-switch/actions/workflows/ci.yml) |
|
|
29
|
+
| 更新履歴 | [CHANGELOG](CHANGELOG.md) |
|
|
30
|
+
| 不具合を報告する | [Issues](https://github.com/GSvegetable/pixel-daylight-switch/issues) |
|
|
31
|
+
|
|
32
|
+
## 主な機能
|
|
33
|
+
|
|
34
|
+
- 田園風景、日本の街並み、モダンなアパート、海辺の灯台、山小屋の 5 シーン。
|
|
35
|
+
- WebGL2 によるガラスの屈折表現。利用できない場合は Canvas 2D にフォールバック。
|
|
36
|
+
- ドラッグ、タップ、クリック、キーボードによる操作。
|
|
37
|
+
- 動き、慣性、バウンス、屈折、ガラス表現、ワールド速度、天候、シーンをカスタマイズ可能。
|
|
38
|
+
- 1 ページに複数の独立したインスタンスを配置可能。
|
|
39
|
+
- switch セマンティクス、状態通知、`prefers-reduced-motion` に対応。
|
|
40
|
+
- 動的なアプリケーション向けに `mount()` と `unmount()` を提供。
|
|
41
|
+
- ドキュメントが非表示、またはコンポーネントが画面外にある場合は描画を一時停止。
|
|
42
|
+
|
|
43
|
+
## クイックスタート:ブラウザーで使用
|
|
44
|
+
|
|
45
|
+
HTML にマウント要素を配置し、ランタイムを読み込みます。
|
|
46
|
+
|
|
47
|
+
```html
|
|
48
|
+
<div data-ld-part="toggle-daylight" style="width: min(100%, 800px);">
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<script defer src="https://gsvegetable.github.io/pixel-daylight-switch/app.js"></script>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
ブラウザーランタイムがマウント要素を検出し、コンポーネント UI を生成します。マウント要素には有効な幅を指定してください。
|
|
55
|
+
|
|
56
|
+
### 1 つのスクリプトで埋め込む
|
|
57
|
+
|
|
58
|
+
表示したい位置に次のスクリプトを追加します。
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<script src="https://gsvegetable.github.io/pixel-daylight-switch/embed.js"></script>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
ローダーがコンテナ、スタイル、ランタイムを自動挿入します。現在は既定設定のインスタンスを 1 つ生成し、最大表示サイズを固定します。レイアウトや属性を細かく制御する場合は、上記のマウント要素方式を使用してください。
|
|
65
|
+
|
|
66
|
+
## npm からインストール
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npm install pixel-daylight-switch-gsvegetable
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**ES Modules**
|
|
73
|
+
|
|
74
|
+
```js
|
|
75
|
+
import PixelDaylightSwitch from 'pixel-daylight-switch-gsvegetable';
|
|
76
|
+
|
|
77
|
+
const root = document.querySelector('[data-ld-part="toggle-daylight"]');
|
|
78
|
+
PixelDaylightSwitch.mount(root);
|
|
79
|
+
|
|
80
|
+
// DOM から root を削除する前に呼び出します。
|
|
81
|
+
PixelDaylightSwitch.unmount(root);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**CommonJS**
|
|
85
|
+
|
|
86
|
+
```js
|
|
87
|
+
const PixelDaylightSwitch = require('pixel-daylight-switch-gsvegetable');
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
ESM と CommonJS の両方を提供します。SSR 環境でもインポートできますが、`mount()` はブラウザー上で対象要素が存在してから呼び出してください。
|
|
91
|
+
|
|
92
|
+
## 設定属性
|
|
93
|
+
|
|
94
|
+
すべて任意の設定で、マウント要素に指定します。省略時または無効な値の場合はデフォルト値が使われます。
|
|
95
|
+
|
|
96
|
+
| HTML 属性 | デフォルト | 説明 |
|
|
97
|
+
| --- | ---: | --- |
|
|
98
|
+
| `data-speed` | `9.5` | スイッチの基本応答速度。0 より大きい値。 |
|
|
99
|
+
| `data-refraction` | `1.24` | ガラスレンズの屈折強度。0 より大きい値。 |
|
|
100
|
+
| `data-bezel` | `0.046` | ガラスの縁の相対的な厚さ。0 より大きい値。 |
|
|
101
|
+
| `data-start-night` | `false` | 文字列 `"true"` の場合、夜の状態から開始。 |
|
|
102
|
+
| `data-friction` | `0.6` | リリース後の慣性減衰。範囲 `0.1–0.9`。 |
|
|
103
|
+
| `data-bounce` | `3.2` | 端での跳ね返り。範囲 `0–12`。 |
|
|
104
|
+
| `data-dispersion` | `0.05` | ガラス端の RGB 色分散。範囲 `0–0.25`。 |
|
|
105
|
+
| `data-shine` | `0.44` | 昼間のガラスハイライト強度。範囲 `0–1.5`。 |
|
|
106
|
+
| `data-time-speed` | `1` | ワールドの時間倍率。範囲 `0–8`、`0` で停止。 |
|
|
107
|
+
| `data-weather` | `default` | `default` または `snow`。不明な値は `default` に戻ります。 |
|
|
108
|
+
| `data-scene` | `countryside` | `countryside`、`japanese-street`、`apartment`、`seaside`、`mountain-cabin`。 |
|
|
109
|
+
|
|
110
|
+
例:
|
|
111
|
+
|
|
112
|
+
```html
|
|
113
|
+
<div
|
|
114
|
+
data-ld-part="toggle-daylight"
|
|
115
|
+
data-start-night="true"
|
|
116
|
+
data-scene="seaside"
|
|
117
|
+
data-weather="snow"
|
|
118
|
+
data-time-speed="1.4"
|
|
119
|
+
data-refraction="1.3">
|
|
120
|
+
</div>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## イベントと状態
|
|
124
|
+
|
|
125
|
+
ルート要素の CSS カスタムプロパティ `--night` が遷移状態を示します。`0` は昼、`1` は夜、その間の値は遷移中です。
|
|
126
|
+
|
|
127
|
+
確定した昼夜状態が変化すると、ルート要素からバブリングし Shadow DOM の境界を越える `daylight:change` イベントが発生します。`event.detail.night` は boolean 値です。アニメーションの各フレームでは発生しません。
|
|
128
|
+
|
|
129
|
+
```js
|
|
130
|
+
const root = document.querySelector('[data-ld-part="toggle-daylight"]');
|
|
131
|
+
|
|
132
|
+
root.addEventListener('daylight:change', (event) => {
|
|
133
|
+
console.log(event.detail.night ? 'Night' : 'Day');
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## 描画・アクセシビリティ・パフォーマンス
|
|
138
|
+
|
|
139
|
+
- WebGL2 でガラスの屈折を描画し、利用できない場合は Canvas 2D に切り替えます。
|
|
140
|
+
- コンテナサイズに合わせて描画領域を調整します。
|
|
141
|
+
- ドキュメントが非表示、または画面外の場合は描画を一時停止します。
|
|
142
|
+
- キーボード操作、switch セマンティクス、状態通知に対応。
|
|
143
|
+
- OS の `prefers-reduced-motion` 設定を尊重します。
|
|
144
|
+
|
|
145
|
+
実際の性能はブラウザー、GPU、デバイスピクセル比、表示中のインスタンス数によって異なります。
|
|
146
|
+
|
|
147
|
+
## 開発とテスト
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
git clone https://github.com/GSvegetable/pixel-daylight-switch.git
|
|
151
|
+
cd pixel-daylight-switch
|
|
152
|
+
npm test
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Chromium のブラウザー回帰テスト:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm install --no-save @playwright/test@1.56.1
|
|
159
|
+
npx playwright install chromium
|
|
160
|
+
npm run test:browser
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
GitHub Actions は Node.js 18、20、22 でパッケージと SSR のチェックを実行し、Chromium の操作・モバイル回帰テストも実行します。[CI の実行結果](https://github.com/GSvegetable/pixel-daylight-switch/actions/workflows/ci.yml) を確認してください。
|
|
164
|
+
|
|
165
|
+
## Android / iOS
|
|
166
|
+
|
|
167
|
+
Capacitor 8 アプリには、田園の家、日本の街並み、モダンな部屋、海辺の灯台、山小屋の 5 シーンを切り替えるコントロールと、雪を降らせるオプションを追加しました。共通レンダラーを再利用し、ガラスシェーダーと昼夜のドラッグ操作はそのまま維持します。端末の言語に応じて日本語、簡体字中国語、英語を表示します。縦向きでは縦方向のレイアウト、横向きの幅広い画面ではスイッチとシーン・天気コントロールを左右に配置し、横向きの小型スマートフォンではコンパクトな縦レイアウトに切り替わります。GitHub Actions は Android Debug APK と未署名の iOS Simulator アーカイブを生成します。これらは開発用成果物であり、ストア公開用ではありません。Android APK は Play Store リリースではなく、iOS Simulator 版は実機の iPhone / iPad にはインストールできません。[モバイルビルド情報](builds/README.md) と [ビルドワークフロー](https://github.com/GSvegetable/pixel-daylight-switch/actions/workflows/mobile-build.yml) を参照してください。
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
### Web ページへの埋め込み
|
|
172
|
+
|
|
173
|
+
基本的な昼夜スイッチを 1 つ表示するだけなら、依存関係のインストールは不要です。次の 1 行を HTML に貼り付けてください。
|
|
174
|
+
|
|
175
|
+
```html
|
|
176
|
+
<script src="https://gsvegetable.github.io/pixel-daylight-switch/embed.js"></script>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
スタイルとデフォルトシーンのスイッチを自動挿入します。シーンや天気のカスタマイズ、複数インスタンス、配置の制御には、上記の npm API と `data-scene` / `data-weather` 属性を使用してください。
|
|
180
|
+
|
|
181
|
+
### 独自の Android / iOS Capacitor アプリへの統合
|
|
182
|
+
|
|
183
|
+
このリポジトリが現在提供するのは **Capacitor アプリのテンプレートとビルドスクリプト**であり、単独でインストールできるネイティブ UI プラグインではありません。既存の Capacitor 8 プロジェクトには、`mobile/`、`app.js`、`style.css`、`scripts/prepare-mobile.cjs` を統合し、次を実行します。
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npm install
|
|
187
|
+
npm run mobile:prepare
|
|
188
|
+
npm run mobile:android:init # Android 初回作成
|
|
189
|
+
npm run mobile:android # 以降の同期
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
iOS は初回に `npm run mobile:ios:init`、以降は `npm run mobile:ios` を実行します(macOS と Xcode が必要です)。`npm run mobile:open:android` / `npm run mobile:open:ios` でネイティブプロジェクトを開けます。正確なスクリプトは [package.json](package.json) を参照してください。
|
|
193
|
+
|
|
194
|
+
## リポジトリ構成
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
pixel-daylight-switch/
|
|
198
|
+
├── .github/workflows/ # CI、モバイルビルド、npm 公開
|
|
199
|
+
├── assets/
|
|
200
|
+
│ └── scene-gallery.png # 5 シーンの一覧画像
|
|
201
|
+
├── builds/
|
|
202
|
+
│ └── README.md # モバイル成果物の説明(バイナリは Actions が生成)
|
|
203
|
+
├── mobile/
|
|
204
|
+
│ ├── index.html # Capacitor アプリの入口
|
|
205
|
+
│ └── mobile.css # モバイル専用レイアウト
|
|
206
|
+
├── scripts/
|
|
207
|
+
│ └── prepare-mobile.cjs # Capacitor 用 Web ランタイム準備
|
|
208
|
+
├── tests/
|
|
209
|
+
│ ├── browser/ # Playwright 操作・モバイル回帰テスト
|
|
210
|
+
│ ├── fixture.html
|
|
211
|
+
│ ├── mobile-smoke.cjs
|
|
212
|
+
│ ├── package-smoke.cjs
|
|
213
|
+
│ └── server.cjs
|
|
214
|
+
├── app.js # コンポーネント、シーン、入力、描画
|
|
215
|
+
├── style.css # コンポーネントのスタイル
|
|
216
|
+
├── embed.js # 1 スクリプト埋め込みローダー
|
|
217
|
+
├── index.html # ライブデモ
|
|
218
|
+
├── preview.html # コンポーネントプレビュー
|
|
219
|
+
├── playground.html # パラメーター Playground
|
|
220
|
+
├── index.mjs / index.cjs # ESM / CommonJS エントリー
|
|
221
|
+
├── package.json # npm メタデータとスクリプト
|
|
222
|
+
├── capacitor.config.json # Capacitor 設定
|
|
223
|
+
├── playwright.config.cjs # ブラウザーテスト設定
|
|
224
|
+
├── CHANGELOG.md
|
|
225
|
+
├── llms.txt
|
|
226
|
+
├── LICENSE
|
|
227
|
+
└── README*.md # 英語・簡体字中国語・日本語の README
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## ライセンス
|
|
231
|
+
|
|
232
|
+
[Unlicense](LICENSE) に基づき公開されています。個人・商用を問わず、帰属表示なしで自由にコピー、変更、公開、配布、利用できます。無保証で提供されます。
|