@vyr/engine 0.0.39 → 0.0.40

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/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@vyr/engine",
3
- "version": "0.0.39",
3
+ "version": "0.0.40",
4
4
  "description": "",
5
5
  "main": "./src/index.ts",
6
6
  "author": "",
7
7
  "license": "MIT",
8
8
  "dependencies": {
9
- "@vyr/locale": "0.0.39",
9
+ "@vyr/locale": "0.0.40",
10
10
  "decamelize-keys": "^2.0.1",
11
11
  "camelcase-keys": "^10.0.1",
12
12
  "tinycolor2": "1.6.0",
@@ -18,5 +18,84 @@ export interface HTML extends Descriptor {
18
18
  */
19
19
  visible: boolean
20
20
 
21
+ /**
22
+ * HTML属性集合
23
+ *
24
+ * 提供结构化的方式定义和管理HTML元素的所有原生属性。
25
+ * style和classNames为基础通用属性,其余属性参照DSL定义。
26
+ *
27
+ * classNames(共享CSS类名列表)
28
+ *
29
+ * 引用在Scene的sharedCSSStyle中定义的共享样式类。
30
+ * 这些类名应用于当前HTML节点,提供可复用的视觉样式效果。
31
+ *
32
+ * 设计原则:
33
+ * 1. 使用共享样式类而不是重复定义相同的样式
34
+ * 2. 组合多个类名实现复杂的视觉效果
35
+ * 3. 类名中定义的样式可以被行内样式(style)覆盖
36
+ *
37
+ * 工作流程:
38
+ * 1. 在Scene的sharedCSSStyle中定义共享样式类
39
+ * 2. 在此属性中引用这些类名
40
+ * 3. 渲染时自动应用对应的样式规则
41
+ *
42
+ * 特性说明:
43
+ * - 支持多个类名组合:['theme-primary', 'shadow-large', 'rounded']
44
+ * - 类名样式可以被行内样式覆盖
45
+ * - 支持伪类状态(如:hover、:active)
46
+ * - 支持动画类名引用animations中定义的动画
47
+ *
48
+ * ✅ 正确使用示例:
49
+ * 1. 应用主题样式:['theme-primary', 'font-heading']
50
+ * 2. 添加视觉效果:['shadow-medium', 'rounded-corner']
51
+ * 3. 应用动画效果:['fade-in-animation']
52
+ * 4. 状态样式组合:['button-base', 'hover-effect', 'active-state']
53
+ *
54
+ * ❌ 错误使用示例:
55
+ * 1. 直接在此处定义样式字符串(应在sharedCSSStyle中定义)
56
+ * 2. 包含布局尺寸的类名(布局应由自身的style控制)
57
+ *
58
+ * style(HTML元素行内样式定义)
59
+ *
60
+ * 用于定义单个HTML节点的私有样式属性,优先级高于共享CSS样式。
61
+ * 每个属性对应一个CSS样式规则,采用大驼峰命名(CamelCase)。
62
+ *
63
+ * 设计原则:
64
+ * 1. 行内样式具有最高优先级,会覆盖外部样式表中的相同属性
65
+ * 2. 适合定义节点特有的样式,避免与共享样式冲突
66
+ * 3. 对于可复用的样式,建议使用Scene中的共享样式
67
+ * 4. 样式优先级:行内样式(大驼峰) > 共享样式(kebab-case) > 浏览器默认
68
+ *
69
+ * @example
70
+ * // Scene中定义的共享样式:
71
+ * sharedCSSStyle: {
72
+ * classNames: {
73
+ * '.theme-primary': {
74
+ * 'background-color': '#007bff',
75
+ * 'color': '#ffffff'
76
+ * },
77
+ * '.shadow-medium': {
78
+ * 'box-shadow': '0 4px 8px rgba(0,0,0,0.1)'
79
+ * },
80
+ * '.fade-in': {
81
+ * 'animation': 'fade-in 0.5s ease-in-out'
82
+ * }
83
+ * },
84
+ * animations: {
85
+ * 'fade-in': {
86
+ * '0%': { 'opacity': '0' },
87
+ * '100%': { 'opacity': '1' }
88
+ * }
89
+ * }
90
+ * }
91
+ *
92
+ * // HTML节点中定义HTML属性集合
93
+ * htmlAttributes: {
94
+ * // 与行内样式组合使用(行内样式优先级更高):
95
+ * classNames: ['theme-primary'], // 共享背景色和文字颜色
96
+ * style: { margin: '8px 0' },
97
+ * }
98
+ *
99
+ */
21
100
  htmlAttributes: HtmlAttributes
22
101
  }
@@ -1,5 +1,5 @@
1
1
  import { DeserializationObject } from "../Serialization"
2
- import { HtmlAttributes, InputAttributesSchema } from "../schema"
2
+ import { InputAttributes, InputAttributesSchema } from "../schema"
3
3
  import { Descriptor } from "./Descriptor"
4
4
  import { HTML } from "./HTML"
5
5
 
@@ -18,7 +18,7 @@ export class Input extends Descriptor implements HTML {
18
18
 
19
19
  visible: boolean
20
20
 
21
- htmlAttributes: HtmlAttributes
21
+ htmlAttributes: InputAttributes
22
22
 
23
23
  constructor(descriptor: Partial<DeserializationObject<Input>> = {}) {
24
24
  super(descriptor)
@@ -94,11 +94,6 @@ export class Scene extends Descriptor {
94
94
  */
95
95
  camera: string
96
96
 
97
- /**
98
- * 共享CSS样式对象
99
- * 包含类名样式和动画定义,可在场景内的服务节点间共享
100
- * 用于实现样式复用和统一管理
101
- */
102
97
  sharedCSSStyle: SharedCSSStyle
103
98
 
104
99
  constructor(descriptor: Partial<DeserializationObject> = {}) {
@@ -34,25 +34,6 @@ export const HTMLStyleSchema = z.object({
34
34
  height: z.string().default(''),
35
35
  }).catchall(z.string())
36
36
 
37
- /**
38
- * HTML元素行内样式定义
39
- *
40
- * 用于定义单个HTML节点的私有样式属性,优先级高于共享CSS样式。
41
- * 每个属性对应一个CSS样式规则,采用大驼峰命名(CamelCase)。
42
- *
43
- * 设计原则:
44
- * 1. 行内样式具有最高优先级,会覆盖外部样式表中的相同属性
45
- * 2. 适合定义节点特有的样式,避免与共享样式冲突
46
- * 3. 对于可复用的样式,建议使用Scene中的共享样式
47
- * 4. 样式优先级:行内样式(大驼峰) > 共享样式(kebab-case) > 浏览器默认
48
- *
49
- * 强制使用border-box的原因:
50
- * - 确保布局行为的一致性和可预测性
51
- * - width/height = 内容宽度/高度 + padding + border
52
- * - 添加padding或border不会改变元素的实际占用空间
53
- * - 简化响应式布局的计算,精确控制尺寸
54
- * - 避免组件嵌套时混合盒模型带来的计算复杂度
55
- */
56
37
  export type HTMLStyle = z.infer<typeof HTMLStyleSchema>
57
38
 
58
39
  const ClassNamesSchema = z.array(z.string()).default([])
@@ -70,88 +51,8 @@ export const HtmlAttributesSchema = z.object({
70
51
  * CSS类名集合 - 所有HTML元素通用
71
52
  */
72
53
  classNames: ClassNamesSchema,
73
-
74
54
  }).default({ style: HTMLStyleSchema.parse({}), classNames: ClassNamesSchema.parse([]) })
75
55
 
76
- /**
77
- * HTML属性集合
78
- *
79
- * 提供结构化的方式定义和管理HTML元素的所有原生属性。
80
- * style和classNames为基础通用属性,其余属性参照DSL定义。
81
- *
82
- * classNames(共享CSS类名列表)
83
- *
84
- * 引用在Scene的sharedCSSStyle中定义的共享样式类。
85
- * 这些类名应用于当前HTML节点,提供可复用的视觉样式效果。
86
- *
87
- * 设计原则:
88
- * 1. 使用共享样式类而不是重复定义相同的样式
89
- * 2. 组合多个类名实现复杂的视觉效果
90
- * 3. 类名中定义的样式可以被行内样式(style)覆盖
91
- *
92
- * 工作流程:
93
- * 1. 在Scene的sharedCSSStyle中定义共享样式类
94
- * 2. 在此属性中引用这些类名
95
- * 3. 渲染时自动应用对应的样式规则
96
- *
97
- * 特性说明:
98
- * - 支持多个类名组合:['theme-primary', 'shadow-large', 'rounded']
99
- * - 类名样式可以被行内样式覆盖
100
- * - 支持伪类状态(如:hover、:active)
101
- * - 支持动画类名引用animations中定义的动画
102
- *
103
- * ✅ 正确使用示例:
104
- * 1. 应用主题样式:['theme-primary', 'font-heading']
105
- * 2. 添加视觉效果:['shadow-medium', 'rounded-corner']
106
- * 3. 应用动画效果:['fade-in-animation']
107
- * 4. 状态样式组合:['button-base', 'hover-effect', 'active-state']
108
- *
109
- * ❌ 错误使用示例:
110
- * 1. 直接在此处定义样式字符串(应在sharedCSSStyle中定义)
111
- * 2. 包含布局尺寸的类名(布局应由自身的style控制)
112
- *
113
- * style(HTML元素行内样式定义)
114
- *
115
- * 用于定义单个HTML节点的私有样式属性,优先级高于共享CSS样式。
116
- * 每个属性对应一个CSS样式规则,采用大驼峰命名(CamelCase)。
117
- *
118
- * 设计原则:
119
- * 1. 行内样式具有最高优先级,会覆盖外部样式表中的相同属性
120
- * 2. 适合定义节点特有的样式,避免与共享样式冲突
121
- * 3. 对于可复用的样式,建议使用Scene中的共享样式
122
- * 4. 样式优先级:行内样式(大驼峰) > 共享样式(kebab-case) > 浏览器默认
123
- *
124
- * @example
125
- * // Scene中定义的共享样式:
126
- * sharedCSSStyle: {
127
- * classNames: {
128
- * '.theme-primary': {
129
- * 'background-color': '#007bff',
130
- * 'color': '#ffffff'
131
- * },
132
- * '.shadow-medium': {
133
- * 'box-shadow': '0 4px 8px rgba(0,0,0,0.1)'
134
- * },
135
- * '.fade-in': {
136
- * 'animation': 'fade-in 0.5s ease-in-out'
137
- * }
138
- * },
139
- * animations: {
140
- * 'fade-in': {
141
- * '0%': { 'opacity': '0' },
142
- * '100%': { 'opacity': '1' }
143
- * }
144
- * }
145
- * }
146
- *
147
- * // HTML节点中定义HTML属性集合
148
- * htmlAttributes: {
149
- * // 与行内样式组合使用(行内样式优先级更高):
150
- * classNames: ['theme-primary'], // 共享背景色和文字颜色
151
- * style: { margin: '8px 0' },
152
- * }
153
- *
154
- */
155
56
  export type HtmlAttributes = z.infer<typeof HtmlAttributesSchema>
156
57
 
157
58
  export const InputAttributesSchema = z.object({
@@ -234,3 +135,5 @@ export const InputAttributesSchema = z.object({
234
135
  capture: z.union([z.string(), z.boolean()]).optional(),
235
136
  }).default({ style: HTMLStyleSchema.parse({}), classNames: ClassNamesSchema.parse([]) })
236
137
 
138
+ export type InputAttributes = z.infer<typeof InputAttributesSchema>
139
+