ose-plugin 0.1.2 → 0.1.4
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 +5 -4
- package/index.d.ts +10 -1
- package/package.json +1 -1
- package/schema/theme.schema.json +5 -0
- package/schema/widget.schema.json +9 -0
- package/templates/widget/widget.css +3 -3
- package/validate.mjs +20 -0
package/README.md
CHANGED
|
@@ -311,10 +311,11 @@ npx ose-plugin check <папка> --json # для скриптов и CI
|
|
|
311
311
|
|
|
312
312
|
## Ограничения
|
|
313
313
|
|
|
314
|
-
-
|
|
315
|
-
|
|
316
|
-
-
|
|
317
|
-
|
|
314
|
+
- Код пакета живёт в рамке-песочнице (`iframe` без доступа к странице оверлея),
|
|
315
|
+
но сеть ей доступна — ставить можно только доверенный код.
|
|
316
|
+
- 3D-виджет и его тема — два пакета: в одном каталоге один манифест, а тема
|
|
317
|
+
ссылается на тип виджета через `threeDWidgets`.
|
|
318
|
+
- Установка — папкой или zip; обновления и подписи — следующий этап.
|
|
318
319
|
|
|
319
320
|
## Публикация в npm
|
|
320
321
|
|
package/index.d.ts
CHANGED
|
@@ -122,8 +122,11 @@ declare namespace Ose {
|
|
|
122
122
|
readCssVar?: (name: string) => string;
|
|
123
123
|
t?: (key: string, params?: Record<string, unknown>) => string;
|
|
124
124
|
escapeHtml?: (text: string) => string;
|
|
125
|
+
escapeAttr?: (text: string) => string;
|
|
126
|
+
formatMoney?: (value: number) => string;
|
|
127
|
+
currencySymbol?: (code: string) => string;
|
|
125
128
|
resolveMediaUrl?: (path: string) => string;
|
|
126
|
-
|
|
129
|
+
ICONS?: Record<string, string>;
|
|
127
130
|
[key: string]: unknown;
|
|
128
131
|
}
|
|
129
132
|
|
|
@@ -257,6 +260,10 @@ declare namespace Ose {
|
|
|
257
260
|
entry: string;
|
|
258
261
|
styles?: string[];
|
|
259
262
|
icon?: string;
|
|
263
|
+
/** 3D-виджет: canvas или 3d-webgl. По умолчанию — обычный DOM-виджет. */
|
|
264
|
+
renderType?: "2d" | "canvas" | "3d-webgl";
|
|
265
|
+
/** Семейство темы; обязательно для 3D-виджета. */
|
|
266
|
+
theme?: string;
|
|
260
267
|
defaultGeometry?: Partial<Pick<Geometry, "x" | "y" | "w" | "h">>;
|
|
261
268
|
minW?: number;
|
|
262
269
|
minH?: number;
|
|
@@ -267,6 +274,8 @@ declare namespace Ose {
|
|
|
267
274
|
kind: "theme";
|
|
268
275
|
tokens: Record<`--${string}`, string>;
|
|
269
276
|
css?: string;
|
|
277
|
+
/** Типы 3D-виджетов этой темы: включаются тумблером «3D» на карточке. */
|
|
278
|
+
threeDWidgets?: string[];
|
|
270
279
|
}
|
|
271
280
|
}
|
|
272
281
|
|
package/package.json
CHANGED
package/schema/theme.schema.json
CHANGED
|
@@ -52,6 +52,11 @@
|
|
|
52
52
|
"type": "string",
|
|
53
53
|
"pattern": "\\.css$",
|
|
54
54
|
"description": "CSS-файл внутри пакета; правила пишутся под [data-theme=\"plugin:<id>\"]."
|
|
55
|
+
},
|
|
56
|
+
"threeDWidgets": {
|
|
57
|
+
"type": "array",
|
|
58
|
+
"description": "Типы 3D-виджетов этой темы (plugin:<id>): на карточке появится тумблер «3D», и они включатся вместе с ним.",
|
|
59
|
+
"items": { "type": "string" }
|
|
55
60
|
}
|
|
56
61
|
},
|
|
57
62
|
"additionalProperties": true
|
|
@@ -55,6 +55,15 @@
|
|
|
55
55
|
"type": "string",
|
|
56
56
|
"description": "Ключ из shared/icons.js; неизвестный заменяется на widgetCustom."
|
|
57
57
|
},
|
|
58
|
+
"renderType": {
|
|
59
|
+
"enum": ["2d", "canvas", "3d-webgl"],
|
|
60
|
+
"description": "canvas и 3d-webgl — 3D-виджет: он попадает в набор темы и рисуется на холсте внутри песочницы."
|
|
61
|
+
},
|
|
62
|
+
"theme": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"minLength": 1,
|
|
65
|
+
"description": "Семейство темы. Обязательно для 3D-виджета: по нему он включается и выключается вместе с набором."
|
|
66
|
+
},
|
|
58
67
|
"defaultGeometry": {
|
|
59
68
|
"type": "object",
|
|
60
69
|
"description": "Положение и размер в процентах холста (0–100).",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Стили пакета действуют
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
Стили пакета действуют только внутри рамки виджета: они не заденут ни
|
|
3
|
+
встроенные виджеты, ни остальную страницу. Корневой элемент виджета помечен
|
|
4
|
+
data-type="plugin:{{id}}" — по нему и ограничивайте правила.
|
|
5
5
|
*/
|
|
6
6
|
.widget-instance[data-type="plugin:{{id}}"] {
|
|
7
7
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
|
package/validate.mjs
CHANGED
|
@@ -179,6 +179,15 @@ function checkWidget(packageDir, manifest, errors, warnings) {
|
|
|
179
179
|
|
|
180
180
|
checkGeometry(manifest, errors, warnings);
|
|
181
181
|
checkSettings(manifest, errors, warnings);
|
|
182
|
+
|
|
183
|
+
// 3D-виджет рисует на canvas: приложение отличит его от обычного по этим
|
|
184
|
+
// полям и включит вместе с набором темы.
|
|
185
|
+
const renderType = manifest.renderType === undefined ? "2d" : manifest.renderType;
|
|
186
|
+
if (!["2d", "canvas", "3d-webgl"].includes(renderType)) {
|
|
187
|
+
errors.push(`renderType «${String(manifest.renderType)}» неизвестен: 2d, canvas или 3d-webgl`);
|
|
188
|
+
} else if (renderType !== "2d" && !text(manifest.theme)) {
|
|
189
|
+
errors.push("3D-виджету (canvas или 3d-webgl) нужно поле theme — семейство темы");
|
|
190
|
+
}
|
|
182
191
|
}
|
|
183
192
|
|
|
184
193
|
function checkTheme(packageDir, manifest, errors, warnings) {
|
|
@@ -200,6 +209,17 @@ function checkTheme(packageDir, manifest, errors, warnings) {
|
|
|
200
209
|
checkFile(packageDir, manifest.css, ".css", "css", errors);
|
|
201
210
|
}
|
|
202
211
|
}
|
|
212
|
+
|
|
213
|
+
if (manifest.threeDWidgets !== undefined) {
|
|
214
|
+
if (!Array.isArray(manifest.threeDWidgets)) {
|
|
215
|
+
errors.push("threeDWidgets должен быть массивом типов");
|
|
216
|
+
} else {
|
|
217
|
+
manifest.threeDWidgets.forEach((kind) => {
|
|
218
|
+
if (typeof kind !== "string") errors.push("threeDWidgets содержит не строку");
|
|
219
|
+
else if (!text(kind)) warnings.push("пустой тип в threeDWidgets пропускается");
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
203
223
|
}
|
|
204
224
|
|
|
205
225
|
/** Проверить один пакет: папку с widget.json или theme.json. */
|