@v-ibe/core 0.1.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/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/DI/__tests__/scoped-container-dependencies.test.d.ts +1 -0
- package/dist/DI/bootstrap.d.ts +18 -0
- package/dist/DI/decorators/inject.d.ts +37 -0
- package/dist/DI/decorators/inject.js +45 -0
- package/dist/DI/decorators/service.d.ts +24 -0
- package/dist/DI/decorators/service.js +13 -0
- package/dist/DI/di-container.d.ts +53 -0
- package/dist/DI/di-container.js +158 -0
- package/dist/DI/lifecycle.d.ts +37 -0
- package/dist/DI/lifecycle.js +6 -0
- package/dist/DI/scoped-container.d.ts +68 -0
- package/dist/DI/scoped-container.js +193 -0
- package/dist/DI/service-metadata.d.ts +32 -0
- package/dist/DI/service-metadata.js +31 -0
- package/dist/DI/types.d.ts +4 -0
- package/dist/behaviors/__tests__/behavior-system.test.d.ts +1 -0
- package/dist/behaviors/behavior-manager.d.ts +60 -0
- package/dist/behaviors/behavior-manager.js +131 -0
- package/dist/behaviors/behavior-registry.d.ts +68 -0
- package/dist/behaviors/behavior-registry.js +105 -0
- package/dist/behaviors/constants.d.ts +16 -0
- package/dist/behaviors/constants.js +8 -0
- package/dist/behaviors/decorators.d.ts +87 -0
- package/dist/behaviors/decorators.js +46 -0
- package/dist/behaviors/index.d.ts +4 -0
- package/dist/components/__tests__/host.test.d.ts +1 -0
- package/dist/components/app-tree.d.ts +49 -0
- package/dist/components/app-tree.js +122 -0
- package/dist/components/base-component.d.ts +85 -0
- package/dist/components/base-component.js +438 -0
- package/dist/components/decorators/component.d.ts +27 -0
- package/dist/components/decorators/component.js +47 -0
- package/dist/components/decorators/prop.d.ts +14 -0
- package/dist/components/decorators/prop.js +37 -0
- package/dist/components/types.d.ts +26 -0
- package/dist/core.d.ts +23 -0
- package/dist/core.js +8 -0
- package/dist/custom-components/__tests__/for.test.d.ts +1 -0
- package/dist/custom-components/__tests__/show.test.d.ts +1 -0
- package/dist/custom-components/for.d.ts +58 -0
- package/dist/custom-components/for.js +313 -0
- package/dist/custom-components/index.d.ts +2 -0
- package/dist/custom-components/show.d.ts +78 -0
- package/dist/custom-components/show.js +88 -0
- package/dist/data-management/cache/cache-invalidate.decorator.d.ts +35 -0
- package/dist/data-management/cache/cache-invalidate.decorator.js +21 -0
- package/dist/data-management/cache/cache-metadata.d.ts +15 -0
- package/dist/data-management/cache/cache-provider.interface.d.ts +67 -0
- package/dist/data-management/cache/cache-tags.decorator.d.ts +52 -0
- package/dist/data-management/cache/cache-tags.decorator.js +13 -0
- package/dist/data-management/cache/cache-update.decorator.d.ts +28 -0
- package/dist/data-management/cache/cache-update.decorator.js +21 -0
- package/dist/data-management/cache/cache.decorator.d.ts +28 -0
- package/dist/data-management/cache/cache.decorator.js +13 -0
- package/dist/data-management/cache/index.d.ts +11 -0
- package/dist/data-management/cache/local-storage-cache.d.ts +40 -0
- package/dist/data-management/cache/local-storage-cache.js +268 -0
- package/dist/data-management/cache/memory-cache.d.ts +37 -0
- package/dist/data-management/cache/memory-cache.js +149 -0
- package/dist/data-management/cache/session-storage-cache.d.ts +35 -0
- package/dist/data-management/cache/session-storage-cache.js +242 -0
- package/dist/data-management/cache/ttl.decorator.d.ts +31 -0
- package/dist/data-management/cache/ttl.decorator.js +34 -0
- package/dist/data-management/decorators/consume.d.ts +29 -0
- package/dist/data-management/decorators/consume.js +28 -0
- package/dist/data-management/decorators/id.d.ts +28 -0
- package/dist/data-management/decorators/id.js +19 -0
- package/dist/data-management/decorators/model.d.ts +48 -0
- package/dist/data-management/decorators/model.js +24 -0
- package/dist/data-management/decorators/prop.d.ts +43 -0
- package/dist/data-management/decorators/prop.js +32 -0
- package/dist/data-management/index.d.ts +13 -0
- package/dist/data-management/store/json-to-model.d.ts +45 -0
- package/dist/data-management/store/json-to-model.js +36 -0
- package/dist/data-management/store/store.d.ts +108 -0
- package/dist/data-management/store/store.js +207 -0
- package/dist/data-management/store/types.d.ts +53 -0
- package/dist/events-handler/decorators/emit.d.ts +29 -0
- package/dist/events-handler/decorators/emit.js +51 -0
- package/dist/events-handler/event-decorators.d.ts +1 -0
- package/dist/events-handler/event-emitter.service.d.ts +21 -0
- package/dist/events-handler/event-emitter.service.js +85 -0
- package/dist/events-handler/event-types.d.ts +12 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.js +121 -0
- package/dist/jsx/dynamic/__tests__/granular-array-renderer.test.d.ts +1 -0
- package/dist/jsx/dynamic/__tests__/jsx-array-rendering.test.d.ts +1 -0
- package/dist/jsx/dynamic/array-renderer.d.ts +2 -0
- package/dist/jsx/dynamic/array-renderer.js +133 -0
- package/dist/jsx/dynamic/child-renderer.d.ts +1 -0
- package/dist/jsx/dynamic/child-renderer.js +180 -0
- package/dist/jsx/dynamic/dom-utils.d.ts +5 -0
- package/dist/jsx/dynamic/dom-utils.js +22 -0
- package/dist/jsx/dynamic/granular-array-renderer.d.ts +16 -0
- package/dist/jsx/dynamic/granular-array-renderer.js +153 -0
- package/dist/jsx/dynamic/node-renderer.d.ts +2 -0
- package/dist/jsx/dynamic/props-handler.d.ts +3 -0
- package/dist/jsx/dynamic/props-handler.js +281 -0
- package/dist/jsx/dynamic/text-renderer.d.ts +2 -0
- package/dist/jsx/jsx-dev-runtime.d.ts +2 -0
- package/dist/jsx/jsx-runtime.d.ts +3 -0
- package/dist/jsx/types.d.ts +35 -0
- package/dist/jsx/types.js +4 -0
- package/dist/jsx-dev-runtime.d.ts +2 -0
- package/dist/jsx-dev-runtime.js +8 -0
- package/dist/jsx-runtime.d.ts +2 -0
- package/dist/jsx-runtime.js +11 -0
- package/dist/reactivity/__tests__/context-stack.test.d.ts +1 -0
- package/dist/reactivity/__tests__/nested-effects-untrack.test.d.ts +22 -0
- package/dist/reactivity/context-scope.d.ts +57 -0
- package/dist/reactivity/context-scope.js +35 -0
- package/dist/reactivity/decorators/__tests__/ctx-integration.test.d.ts +5 -0
- package/dist/reactivity/decorators/__tests__/ctx-loop.test.d.ts +10 -0
- package/dist/reactivity/decorators/__tests__/state-intelligent.test.d.ts +1 -0
- package/dist/reactivity/decorators/computed.d.ts +6 -0
- package/dist/reactivity/decorators/computed.js +17 -0
- package/dist/reactivity/decorators/create-event-decorator.d.ts +5 -0
- package/dist/reactivity/decorators/create-event-decorator.js +28 -0
- package/dist/reactivity/decorators/ctx.d.ts +9 -0
- package/dist/reactivity/decorators/ctx.js +91 -0
- package/dist/reactivity/decorators/effect.d.ts +9 -0
- package/dist/reactivity/decorators/effect.js +24 -0
- package/dist/reactivity/decorators/resource.d.ts +48 -0
- package/dist/reactivity/decorators/resource.js +20 -0
- package/dist/reactivity/decorators/state.d.ts +8 -0
- package/dist/reactivity/decorators/state.js +68 -0
- package/dist/reactivity/decorators/store.d.ts +6 -0
- package/dist/reactivity/decorators/store.js +25 -0
- package/dist/reactivity/phase-scheduler.d.ts +81 -0
- package/dist/reactivity/phase-scheduler.js +88 -0
- package/dist/reactivity/phase-scheduler.test.d.ts +1 -0
- package/dist/reactivity/reactive-cache.d.ts +21 -0
- package/dist/reactivity/reactive-cache.js +31 -0
- package/dist/reactivity/reactive-cache.test.d.ts +1 -0
- package/dist/reactivity/reactive-context.d.ts +152 -0
- package/dist/reactivity/reactive-context.js +184 -0
- package/dist/reactivity/signals/__tests__/composicion-automatica.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-1-estructura-basica.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-2-registro-subscribers.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-3-notificaciones-basicas.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-4-comparacion-valores.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-5-tracking-automatico.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-6-anti-glitch.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-7-objetos-anidados.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-8-observable-array-support.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite-shallow-tracking.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/effect.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-1-estructura-basica.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-2-metodos-mutadores.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-3-tracking-por-indice.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-4-tracking-length.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-5-tracking-mutation.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-6-metodos-no-mutadores.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-7-composicion-bidireccional.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-8-proxies.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-9-derived-cache-optimization.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/resource.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/signal.test.d.ts +1 -0
- package/dist/reactivity/signals/array-strategies.d.ts +120 -0
- package/dist/reactivity/signals/array-strategies.js +261 -0
- package/dist/reactivity/signals/composite.d.ts +89 -0
- package/dist/reactivity/signals/composite.js +145 -0
- package/dist/reactivity/signals/computed.d.ts +61 -0
- package/dist/reactivity/signals/computed.js +107 -0
- package/dist/reactivity/signals/computed.test.d.ts +1 -0
- package/dist/reactivity/signals/derived.d.ts +10 -0
- package/dist/reactivity/signals/derived.js +24 -0
- package/dist/reactivity/signals/effect.d.ts +27 -0
- package/dist/reactivity/signals/effect.js +46 -0
- package/dist/reactivity/signals/event.d.ts +9 -0
- package/dist/reactivity/signals/event.js +15 -0
- package/dist/reactivity/signals/reactive-array.d.ts +133 -0
- package/dist/reactivity/signals/reactive-array.js +490 -0
- package/dist/reactivity/signals/reactive-proxy.d.ts +54 -0
- package/dist/reactivity/signals/reactive-proxy.js +299 -0
- package/dist/reactivity/signals/reactive-tracking.test.d.ts +1 -0
- package/dist/reactivity/signals/resource.d.ts +9 -0
- package/dist/reactivity/signals/resource.js +58 -0
- package/dist/reactivity/signals/signal.d.ts +39 -0
- package/dist/reactivity/signals/signal.js +56 -0
- package/dist/reactivity/signals/subscription-management.test.d.ts +1 -0
- package/dist/reactivity/types.d.ts +12 -0
- package/dist/router/__tests__/link-behavior-active-class.test.d.ts +1 -0
- package/dist/router/__tests__/loop-detector.test.d.ts +1 -0
- package/dist/router/__tests__/params-container-resolution.test.d.ts +1 -0
- package/dist/router/__tests__/router-generated-routes.test.d.ts +1 -0
- package/dist/router/__tests__/router-params-granular.test.d.ts +1 -0
- package/dist/router/__tests__/router-params-simple.test.d.ts +1 -0
- package/dist/router/__tests__/router-query-params.test.d.ts +1 -0
- package/dist/router/__tests__/router-route-candidates.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-app-articles.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-debug.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-integration.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-this.test.d.ts +1 -0
- package/dist/router/decorators/base-policy.d.ts +141 -0
- package/dist/router/decorators/base-policy.js +63 -0
- package/dist/router/decorators/index.d.ts +6 -0
- package/dist/router/decorators/params.d.ts +31 -0
- package/dist/router/decorators/params.js +97 -0
- package/dist/router/decorators/route-metadata.d.ts +11 -0
- package/dist/router/decorators/route-metadata.js +23 -0
- package/dist/router/decorators/route.d.ts +39 -0
- package/dist/router/decorators/route.js +7 -0
- package/dist/router/link.behavior.d.ts +87 -0
- package/dist/router/link.behavior.js +227 -0
- package/dist/router/policy-evaluator.d.ts +81 -0
- package/dist/router/policy-evaluator.js +209 -0
- package/dist/router/route-view.d.ts +56 -0
- package/dist/router/route-view.js +156 -0
- package/dist/router/router.d.ts +67 -0
- package/dist/router/router.js +308 -0
- package/dist/router/static-analysis/index.d.ts +37 -0
- package/dist/router/static-analysis/parser.d.ts +14 -0
- package/dist/router/static-analysis/parser.js +147 -0
- package/dist/router/static-analysis/scanner.d.ts +27 -0
- package/dist/router/static-analysis/scanner.js +91 -0
- package/dist/router/trie.d.ts +14 -0
- package/dist/router/trie.js +126 -0
- package/dist/router/trie.types.d.ts +36 -0
- package/dist/styles/base-style-sheet.d.ts +96 -0
- package/dist/styles/base-style-sheet.js +149 -0
- package/dist/styles/decorators/factories.d.ts +76 -0
- package/dist/styles/decorators/factories.js +11 -0
- package/dist/styles/decorators/keyframes.d.ts +238 -0
- package/dist/styles/decorators/keyframes.js +79 -0
- package/dist/styles/decorators/rule.d.ts +177 -0
- package/dist/styles/decorators/rule.js +72 -0
- package/dist/styles/decorators/scope.d.ts +66 -0
- package/dist/styles/decorators/scope.js +17 -0
- package/dist/styles/decorators/style.d.ts +1 -0
- package/dist/styles/decorators/style.js +20 -0
- package/dist/styles/decorators/useStyles.d.ts +5 -0
- package/dist/styles/decorators/useStyles.js +29 -0
- package/dist/styles/global-styles-registry.d.ts +72 -0
- package/dist/styles/global-styles-registry.js +155 -0
- package/dist/types.d.ts +1 -0
- package/dist/vite-plugins/__tests__/jsx-control-flow-transform.test.d.ts +1 -0
- package/dist/vite-plugins/index.d.ts +4 -0
- package/dist/vite-plugins/index.js +10 -0
- package/dist/vite-plugins/jsx-contextual.d.ts +7 -0
- package/dist/vite-plugins/jsx-contextual.js +53 -0
- package/dist/vite-plugins/jsx-control-flow-transform.d.ts +60 -0
- package/dist/vite-plugins/jsx-control-flow-transform.js +180 -0
- package/dist/vite-plugins/jsx-signals.d.ts +2 -0
- package/dist/vite-plugins/jsx-signals.js +124 -0
- package/dist/vite-plugins/router/route-generator-plugin.d.ts +63 -0
- package/dist/vite-plugins/router/route-generator-plugin.js +310 -0
- package/package.json +85 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive CSS Properties Interface
|
|
3
|
+
* Provides type safety and autocomplete for CSS declarations
|
|
4
|
+
*/
|
|
5
|
+
export interface CSSProperties {
|
|
6
|
+
display?: 'block' | 'inline' | 'inline-block' | 'flex' | 'inline-flex' | 'grid' | 'inline-grid' | 'none' | 'contents' | 'table' | 'table-row' | 'table-cell' | string;
|
|
7
|
+
visibility?: 'visible' | 'hidden' | 'collapse';
|
|
8
|
+
opacity?: number | string;
|
|
9
|
+
position?: 'static' | 'relative' | 'absolute' | 'fixed' | 'sticky';
|
|
10
|
+
top?: number | string;
|
|
11
|
+
right?: number | string;
|
|
12
|
+
bottom?: number | string;
|
|
13
|
+
left?: number | string;
|
|
14
|
+
inset?: number | string;
|
|
15
|
+
zIndex?: number | string;
|
|
16
|
+
flexDirection?: 'row' | 'row-reverse' | 'column' | 'column-reverse';
|
|
17
|
+
flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
|
|
18
|
+
justifyContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch';
|
|
19
|
+
alignItems?: 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
|
20
|
+
alignContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'stretch';
|
|
21
|
+
gap?: number | string;
|
|
22
|
+
rowGap?: number | string;
|
|
23
|
+
columnGap?: number | string;
|
|
24
|
+
flex?: number | string;
|
|
25
|
+
flexGrow?: number;
|
|
26
|
+
flexShrink?: number;
|
|
27
|
+
flexBasis?: number | string;
|
|
28
|
+
alignSelf?: 'auto' | 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
|
29
|
+
order?: number;
|
|
30
|
+
gridTemplateColumns?: string;
|
|
31
|
+
gridTemplateRows?: string;
|
|
32
|
+
gridTemplateAreas?: string;
|
|
33
|
+
gridAutoColumns?: string;
|
|
34
|
+
gridAutoRows?: string;
|
|
35
|
+
gridAutoFlow?: 'row' | 'column' | 'dense' | 'row dense' | 'column dense';
|
|
36
|
+
gridArea?: string;
|
|
37
|
+
gridColumn?: string;
|
|
38
|
+
gridRow?: string;
|
|
39
|
+
gridColumnStart?: string | number;
|
|
40
|
+
gridColumnEnd?: string | number;
|
|
41
|
+
gridRowStart?: string | number;
|
|
42
|
+
gridRowEnd?: string | number;
|
|
43
|
+
width?: number | string;
|
|
44
|
+
height?: number | string;
|
|
45
|
+
minWidth?: number | string;
|
|
46
|
+
maxWidth?: number | string;
|
|
47
|
+
minHeight?: number | string;
|
|
48
|
+
maxHeight?: number | string;
|
|
49
|
+
boxSizing?: 'content-box' | 'border-box';
|
|
50
|
+
margin?: number | string;
|
|
51
|
+
marginTop?: number | string;
|
|
52
|
+
marginRight?: number | string;
|
|
53
|
+
marginBottom?: number | string;
|
|
54
|
+
marginLeft?: number | string;
|
|
55
|
+
marginBlock?: number | string;
|
|
56
|
+
marginInline?: number | string;
|
|
57
|
+
padding?: number | string;
|
|
58
|
+
paddingTop?: number | string;
|
|
59
|
+
paddingRight?: number | string;
|
|
60
|
+
paddingBottom?: number | string;
|
|
61
|
+
paddingLeft?: number | string;
|
|
62
|
+
paddingBlock?: number | string;
|
|
63
|
+
paddingInline?: number | string;
|
|
64
|
+
color?: string;
|
|
65
|
+
fontSize?: number | string;
|
|
66
|
+
fontFamily?: string;
|
|
67
|
+
fontWeight?: number | 'normal' | 'bold' | 'lighter' | 'bolder' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
|
|
68
|
+
fontStyle?: 'normal' | 'italic' | 'oblique';
|
|
69
|
+
lineHeight?: number | string;
|
|
70
|
+
letterSpacing?: number | string;
|
|
71
|
+
textAlign?: 'left' | 'right' | 'center' | 'justify' | 'start' | 'end';
|
|
72
|
+
textDecoration?: string;
|
|
73
|
+
textTransform?: 'none' | 'capitalize' | 'uppercase' | 'lowercase';
|
|
74
|
+
textOverflow?: 'clip' | 'ellipsis' | string;
|
|
75
|
+
whiteSpace?: 'normal' | 'nowrap' | 'pre' | 'pre-wrap' | 'pre-line' | 'break-spaces';
|
|
76
|
+
wordBreak?: 'normal' | 'break-all' | 'keep-all' | 'break-word';
|
|
77
|
+
wordWrap?: 'normal' | 'break-word';
|
|
78
|
+
background?: string;
|
|
79
|
+
backgroundColor?: string;
|
|
80
|
+
backgroundImage?: string;
|
|
81
|
+
backgroundSize?: string;
|
|
82
|
+
backgroundPosition?: string;
|
|
83
|
+
backgroundRepeat?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat' | 'space' | 'round';
|
|
84
|
+
backgroundAttachment?: 'scroll' | 'fixed' | 'local';
|
|
85
|
+
backgroundClip?: 'border-box' | 'padding-box' | 'content-box' | 'text';
|
|
86
|
+
border?: string;
|
|
87
|
+
borderWidth?: number | string;
|
|
88
|
+
borderStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double' | 'groove' | 'ridge' | 'inset' | 'outset';
|
|
89
|
+
borderColor?: string;
|
|
90
|
+
borderRadius?: number | string;
|
|
91
|
+
borderTop?: string;
|
|
92
|
+
borderRight?: string;
|
|
93
|
+
borderBottom?: string;
|
|
94
|
+
borderLeft?: string;
|
|
95
|
+
borderTopWidth?: number | string;
|
|
96
|
+
borderRightWidth?: number | string;
|
|
97
|
+
borderBottomWidth?: number | string;
|
|
98
|
+
borderLeftWidth?: number | string;
|
|
99
|
+
borderTopColor?: string;
|
|
100
|
+
borderRightColor?: string;
|
|
101
|
+
borderBottomColor?: string;
|
|
102
|
+
borderLeftColor?: string;
|
|
103
|
+
borderTopLeftRadius?: number | string;
|
|
104
|
+
borderTopRightRadius?: number | string;
|
|
105
|
+
borderBottomLeftRadius?: number | string;
|
|
106
|
+
borderBottomRightRadius?: number | string;
|
|
107
|
+
outline?: string;
|
|
108
|
+
outlineWidth?: number | string;
|
|
109
|
+
outlineStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double';
|
|
110
|
+
outlineColor?: string;
|
|
111
|
+
outlineOffset?: number | string;
|
|
112
|
+
boxShadow?: string;
|
|
113
|
+
textShadow?: string;
|
|
114
|
+
filter?: string;
|
|
115
|
+
backdropFilter?: string;
|
|
116
|
+
transform?: string;
|
|
117
|
+
transformOrigin?: string;
|
|
118
|
+
transition?: string;
|
|
119
|
+
transitionProperty?: string;
|
|
120
|
+
transitionDuration?: string;
|
|
121
|
+
transitionTimingFunction?: string;
|
|
122
|
+
transitionDelay?: string;
|
|
123
|
+
animation?: string;
|
|
124
|
+
animationName?: string;
|
|
125
|
+
animationDuration?: string;
|
|
126
|
+
animationTimingFunction?: string;
|
|
127
|
+
animationDelay?: string;
|
|
128
|
+
animationIterationCount?: number | 'infinite';
|
|
129
|
+
animationDirection?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
|
|
130
|
+
animationFillMode?: 'none' | 'forwards' | 'backwards' | 'both';
|
|
131
|
+
animationPlayState?: 'running' | 'paused';
|
|
132
|
+
overflow?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'clip';
|
|
133
|
+
overflowX?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'clip';
|
|
134
|
+
overflowY?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'clip';
|
|
135
|
+
clip?: string;
|
|
136
|
+
clipPath?: string;
|
|
137
|
+
cursor?: 'auto' | 'default' | 'pointer' | 'wait' | 'text' | 'move' | 'not-allowed' | 'help' | 'grab' | 'grabbing' | string;
|
|
138
|
+
pointerEvents?: 'auto' | 'none' | 'visiblePainted' | 'visibleFill' | 'visibleStroke' | 'visible' | 'painted' | 'fill' | 'stroke' | 'all';
|
|
139
|
+
userSelect?: 'none' | 'auto' | 'text' | 'contain' | 'all';
|
|
140
|
+
content?: string;
|
|
141
|
+
listStyle?: string;
|
|
142
|
+
listStyleType?: string;
|
|
143
|
+
listStylePosition?: 'inside' | 'outside';
|
|
144
|
+
listStyleImage?: string;
|
|
145
|
+
tableLayout?: 'auto' | 'fixed';
|
|
146
|
+
borderCollapse?: 'collapse' | 'separate';
|
|
147
|
+
borderSpacing?: number | string;
|
|
148
|
+
captionSide?: 'top' | 'bottom';
|
|
149
|
+
emptyCells?: 'show' | 'hide';
|
|
150
|
+
verticalAlign?: 'baseline' | 'sub' | 'super' | 'top' | 'text-top' | 'middle' | 'bottom' | 'text-bottom' | number | string;
|
|
151
|
+
objectFit?: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down';
|
|
152
|
+
objectPosition?: string;
|
|
153
|
+
float?: 'none' | 'left' | 'right';
|
|
154
|
+
clear?: 'none' | 'left' | 'right' | 'both';
|
|
155
|
+
resize?: 'none' | 'both' | 'horizontal' | 'vertical';
|
|
156
|
+
[key: `--${string}`]: string | number;
|
|
157
|
+
[key: string]: any;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Keyframe selector type
|
|
161
|
+
* Supports percentage values ('0%', '50%', '100%') and keywords ('from', 'to')
|
|
162
|
+
*/
|
|
163
|
+
export type KeyframeSelector = 'from' | 'to' | `${number}%`;
|
|
164
|
+
/**
|
|
165
|
+
* Keyframes definition type
|
|
166
|
+
* Maps keyframe selectors to CSS properties
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* {
|
|
170
|
+
* '0%': { transform: 'rotate(0deg)' },
|
|
171
|
+
* '100%': { transform: 'rotate(360deg)' },
|
|
172
|
+
* }
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* {
|
|
176
|
+
* 'from': { opacity: 0 },
|
|
177
|
+
* 'to': { opacity: 1 },
|
|
178
|
+
* }
|
|
179
|
+
*/
|
|
180
|
+
export type KeyframesDefinition = {
|
|
181
|
+
[K in KeyframeSelector]?: CSSProperties;
|
|
182
|
+
} & {
|
|
183
|
+
[key: string]: CSSProperties | undefined;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* @Keyframes Decorator - Type-safe reactive CSS keyframe animations
|
|
187
|
+
*
|
|
188
|
+
* Creates a @keyframes CSS rule that can be referenced by animation properties.
|
|
189
|
+
* Supports reactive values - keyframes will update when signals change.
|
|
190
|
+
*
|
|
191
|
+
* @param name - The animation name to use in CSS (e.g., 'spin', 'fadeIn')
|
|
192
|
+
*
|
|
193
|
+
* Usage:
|
|
194
|
+
* ```typescript
|
|
195
|
+
* class MyStyles extends BaseStyleSheet {
|
|
196
|
+
* @State rotationEnd = 360;
|
|
197
|
+
*
|
|
198
|
+
* @Keyframes('spin')
|
|
199
|
+
* get spinAnimation() {
|
|
200
|
+
* return {
|
|
201
|
+
* '0%': { transform: 'rotate(0deg)' },
|
|
202
|
+
* '100%': { transform: `rotate(${this.rotationEnd}deg)` }, // Reactive!
|
|
203
|
+
* };
|
|
204
|
+
* }
|
|
205
|
+
*
|
|
206
|
+
* @Rule('.spinner')
|
|
207
|
+
* get spinnerStyles() {
|
|
208
|
+
* return {
|
|
209
|
+
* animation: 'spin 1s linear infinite',
|
|
210
|
+
* };
|
|
211
|
+
* }
|
|
212
|
+
* }
|
|
213
|
+
* ```
|
|
214
|
+
*
|
|
215
|
+
* @example Multiple keyframe stops
|
|
216
|
+
* ```typescript
|
|
217
|
+
* @Keyframes('bounce')
|
|
218
|
+
* get bounceAnimation() {
|
|
219
|
+
* return {
|
|
220
|
+
* '0%': { transform: 'translateY(0)' },
|
|
221
|
+
* '50%': { transform: 'translateY(-20px)' },
|
|
222
|
+
* '100%': { transform: 'translateY(0)' },
|
|
223
|
+
* };
|
|
224
|
+
* }
|
|
225
|
+
* ```
|
|
226
|
+
*
|
|
227
|
+
* @example Using 'from' and 'to' keywords
|
|
228
|
+
* ```typescript
|
|
229
|
+
* @Keyframes('fadeIn')
|
|
230
|
+
* get fadeInAnimation() {
|
|
231
|
+
* return {
|
|
232
|
+
* 'from': { opacity: 0 },
|
|
233
|
+
* 'to': { opacity: 1 },
|
|
234
|
+
* };
|
|
235
|
+
* }
|
|
236
|
+
* ```
|
|
237
|
+
*/
|
|
238
|
+
export declare function Keyframes(name: string): <This extends object, Value extends KeyframesDefinition | undefined>(target: (this: This) => Value, context: ClassGetterDecoratorContext<This, Value>) => (this: This) => Value;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { effect } from "../../reactivity/signals/effect.js";
|
|
2
|
+
function camelToKebab(str) {
|
|
3
|
+
return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
|
|
4
|
+
}
|
|
5
|
+
const unitlessProperties = /* @__PURE__ */ new Set([
|
|
6
|
+
"opacity",
|
|
7
|
+
"z-index",
|
|
8
|
+
"font-weight",
|
|
9
|
+
"line-height",
|
|
10
|
+
"flex-grow",
|
|
11
|
+
"flex-shrink",
|
|
12
|
+
"flex",
|
|
13
|
+
"order",
|
|
14
|
+
"zoom",
|
|
15
|
+
"grid-column",
|
|
16
|
+
"grid-row",
|
|
17
|
+
"grid-column-start",
|
|
18
|
+
"grid-column-end",
|
|
19
|
+
"grid-row-start",
|
|
20
|
+
"grid-row-end",
|
|
21
|
+
"animation-iteration-count"
|
|
22
|
+
]);
|
|
23
|
+
function formatCSSValue(property, value) {
|
|
24
|
+
if (value === null || value === void 0) {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
if (typeof value === "number" && !unitlessProperties.has(property)) {
|
|
28
|
+
return `${value}px`;
|
|
29
|
+
}
|
|
30
|
+
return String(value);
|
|
31
|
+
}
|
|
32
|
+
function cssObjectToString(styles) {
|
|
33
|
+
return Object.entries(styles).filter(([_, value]) => value !== null && value !== void 0).map(([property, value]) => {
|
|
34
|
+
const cssProperty = camelToKebab(property);
|
|
35
|
+
const cssValue = formatCSSValue(cssProperty, value);
|
|
36
|
+
return `${cssProperty}: ${cssValue}`;
|
|
37
|
+
}).join("; ");
|
|
38
|
+
}
|
|
39
|
+
function keyframesObjectToString(name, keyframes) {
|
|
40
|
+
const keyframeRules = Object.entries(keyframes).filter(([_, styles]) => styles !== null && styles !== void 0).map(([selector, styles]) => {
|
|
41
|
+
const cssContent = cssObjectToString(styles);
|
|
42
|
+
return `${selector} { ${cssContent}; }`;
|
|
43
|
+
}).join(" ");
|
|
44
|
+
return `@keyframes ${name} { ${keyframeRules} }`;
|
|
45
|
+
}
|
|
46
|
+
function Keyframes(name) {
|
|
47
|
+
return function(target, context) {
|
|
48
|
+
if (context.kind !== "getter") {
|
|
49
|
+
throw new Error("@Keyframes can only be applied to getters");
|
|
50
|
+
}
|
|
51
|
+
const getterName = String(context.name);
|
|
52
|
+
context.addInitializer(function() {
|
|
53
|
+
const keyframesSelector = `@keyframes ${name}`;
|
|
54
|
+
const indexSymbol = Symbol(`css_keyframes_${name}_${getterName}`);
|
|
55
|
+
const cleanup = effect(() => {
|
|
56
|
+
const keyframesObject = target.call(this);
|
|
57
|
+
if (!keyframesObject || typeof keyframesObject !== "object") {
|
|
58
|
+
console.warn(`@Keyframes('${name}'): Getter '${getterName}' must return a KeyframesDefinition object`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const cssText = keyframesObjectToString(name, keyframesObject);
|
|
62
|
+
if (typeof this.updateSpecificRule === "function") {
|
|
63
|
+
this.updateSpecificRule(keyframesSelector, cssText, indexSymbol);
|
|
64
|
+
} else {
|
|
65
|
+
console.error(`@Keyframes decorator requires BaseStyleSheet.updateSpecificRule method`);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
if (typeof this.registerCleanup === "function") {
|
|
69
|
+
this.registerCleanup(cleanup.dispose);
|
|
70
|
+
} else {
|
|
71
|
+
console.error(`@Keyframes decorator requires BaseStyleSheet.registerCleanup method`);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return target;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
Keyframes
|
|
79
|
+
};
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive CSS Properties Interface
|
|
3
|
+
* Provides type safety and autocomplete for CSS declarations
|
|
4
|
+
*/
|
|
5
|
+
export interface CSSProperties {
|
|
6
|
+
display?: 'block' | 'inline' | 'inline-block' | 'flex' | 'inline-flex' | 'grid' | 'inline-grid' | 'none' | 'contents' | 'table' | 'table-row' | 'table-cell' | string;
|
|
7
|
+
visibility?: 'visible' | 'hidden' | 'collapse';
|
|
8
|
+
opacity?: number | string;
|
|
9
|
+
position?: 'static' | 'relative' | 'absolute' | 'fixed' | 'sticky';
|
|
10
|
+
top?: number | string;
|
|
11
|
+
right?: number | string;
|
|
12
|
+
bottom?: number | string;
|
|
13
|
+
left?: number | string;
|
|
14
|
+
inset?: number | string;
|
|
15
|
+
zIndex?: number | string;
|
|
16
|
+
flexDirection?: 'row' | 'row-reverse' | 'column' | 'column-reverse';
|
|
17
|
+
flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
|
|
18
|
+
justifyContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch';
|
|
19
|
+
alignItems?: 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
|
20
|
+
alignContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'stretch';
|
|
21
|
+
gap?: number | string;
|
|
22
|
+
rowGap?: number | string;
|
|
23
|
+
columnGap?: number | string;
|
|
24
|
+
flex?: number | string;
|
|
25
|
+
flexGrow?: number;
|
|
26
|
+
flexShrink?: number;
|
|
27
|
+
flexBasis?: number | string;
|
|
28
|
+
alignSelf?: 'auto' | 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
|
|
29
|
+
order?: number;
|
|
30
|
+
gridTemplateColumns?: string;
|
|
31
|
+
gridTemplateRows?: string;
|
|
32
|
+
gridTemplateAreas?: string;
|
|
33
|
+
gridAutoColumns?: string;
|
|
34
|
+
gridAutoRows?: string;
|
|
35
|
+
gridAutoFlow?: 'row' | 'column' | 'dense' | 'row dense' | 'column dense';
|
|
36
|
+
gridArea?: string;
|
|
37
|
+
gridColumn?: string;
|
|
38
|
+
gridRow?: string;
|
|
39
|
+
gridColumnStart?: string | number;
|
|
40
|
+
gridColumnEnd?: string | number;
|
|
41
|
+
gridRowStart?: string | number;
|
|
42
|
+
gridRowEnd?: string | number;
|
|
43
|
+
width?: number | string;
|
|
44
|
+
height?: number | string;
|
|
45
|
+
minWidth?: number | string;
|
|
46
|
+
maxWidth?: number | string;
|
|
47
|
+
minHeight?: number | string;
|
|
48
|
+
maxHeight?: number | string;
|
|
49
|
+
boxSizing?: 'content-box' | 'border-box';
|
|
50
|
+
margin?: number | string;
|
|
51
|
+
marginTop?: number | string;
|
|
52
|
+
marginRight?: number | string;
|
|
53
|
+
marginBottom?: number | string;
|
|
54
|
+
marginLeft?: number | string;
|
|
55
|
+
marginBlock?: number | string;
|
|
56
|
+
marginInline?: number | string;
|
|
57
|
+
padding?: number | string;
|
|
58
|
+
paddingTop?: number | string;
|
|
59
|
+
paddingRight?: number | string;
|
|
60
|
+
paddingBottom?: number | string;
|
|
61
|
+
paddingLeft?: number | string;
|
|
62
|
+
paddingBlock?: number | string;
|
|
63
|
+
paddingInline?: number | string;
|
|
64
|
+
color?: string;
|
|
65
|
+
fontSize?: number | string;
|
|
66
|
+
fontFamily?: string;
|
|
67
|
+
fontWeight?: number | 'normal' | 'bold' | 'lighter' | 'bolder' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
|
|
68
|
+
fontStyle?: 'normal' | 'italic' | 'oblique';
|
|
69
|
+
lineHeight?: number | string;
|
|
70
|
+
letterSpacing?: number | string;
|
|
71
|
+
textAlign?: 'left' | 'right' | 'center' | 'justify' | 'start' | 'end';
|
|
72
|
+
textDecoration?: string;
|
|
73
|
+
textTransform?: 'none' | 'capitalize' | 'uppercase' | 'lowercase';
|
|
74
|
+
textOverflow?: 'clip' | 'ellipsis' | string;
|
|
75
|
+
whiteSpace?: 'normal' | 'nowrap' | 'pre' | 'pre-wrap' | 'pre-line' | 'break-spaces';
|
|
76
|
+
wordBreak?: 'normal' | 'break-all' | 'keep-all' | 'break-word';
|
|
77
|
+
wordWrap?: 'normal' | 'break-word';
|
|
78
|
+
background?: string;
|
|
79
|
+
backgroundColor?: string;
|
|
80
|
+
backgroundImage?: string;
|
|
81
|
+
backgroundSize?: string;
|
|
82
|
+
backgroundPosition?: string;
|
|
83
|
+
backgroundRepeat?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat' | 'space' | 'round';
|
|
84
|
+
backgroundAttachment?: 'scroll' | 'fixed' | 'local';
|
|
85
|
+
backgroundClip?: 'border-box' | 'padding-box' | 'content-box' | 'text';
|
|
86
|
+
border?: string;
|
|
87
|
+
borderWidth?: number | string;
|
|
88
|
+
borderStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double' | 'groove' | 'ridge' | 'inset' | 'outset';
|
|
89
|
+
borderColor?: string;
|
|
90
|
+
borderRadius?: number | string;
|
|
91
|
+
borderTop?: string;
|
|
92
|
+
borderRight?: string;
|
|
93
|
+
borderBottom?: string;
|
|
94
|
+
borderLeft?: string;
|
|
95
|
+
borderTopWidth?: number | string;
|
|
96
|
+
borderRightWidth?: number | string;
|
|
97
|
+
borderBottomWidth?: number | string;
|
|
98
|
+
borderLeftWidth?: number | string;
|
|
99
|
+
borderTopColor?: string;
|
|
100
|
+
borderRightColor?: string;
|
|
101
|
+
borderBottomColor?: string;
|
|
102
|
+
borderLeftColor?: string;
|
|
103
|
+
borderTopLeftRadius?: number | string;
|
|
104
|
+
borderTopRightRadius?: number | string;
|
|
105
|
+
borderBottomLeftRadius?: number | string;
|
|
106
|
+
borderBottomRightRadius?: number | string;
|
|
107
|
+
outline?: string;
|
|
108
|
+
outlineWidth?: number | string;
|
|
109
|
+
outlineStyle?: 'none' | 'solid' | 'dashed' | 'dotted' | 'double';
|
|
110
|
+
outlineColor?: string;
|
|
111
|
+
outlineOffset?: number | string;
|
|
112
|
+
boxShadow?: string;
|
|
113
|
+
textShadow?: string;
|
|
114
|
+
filter?: string;
|
|
115
|
+
backdropFilter?: string;
|
|
116
|
+
transform?: string;
|
|
117
|
+
transformOrigin?: string;
|
|
118
|
+
transition?: string;
|
|
119
|
+
transitionProperty?: string;
|
|
120
|
+
transitionDuration?: string;
|
|
121
|
+
transitionTimingFunction?: string;
|
|
122
|
+
transitionDelay?: string;
|
|
123
|
+
animation?: string;
|
|
124
|
+
animationName?: string;
|
|
125
|
+
animationDuration?: string;
|
|
126
|
+
animationTimingFunction?: string;
|
|
127
|
+
animationDelay?: string;
|
|
128
|
+
animationIterationCount?: number | 'infinite';
|
|
129
|
+
animationDirection?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
|
|
130
|
+
animationFillMode?: 'none' | 'forwards' | 'backwards' | 'both';
|
|
131
|
+
animationPlayState?: 'running' | 'paused';
|
|
132
|
+
overflow?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'clip';
|
|
133
|
+
overflowX?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'clip';
|
|
134
|
+
overflowY?: 'visible' | 'hidden' | 'scroll' | 'auto' | 'clip';
|
|
135
|
+
clip?: string;
|
|
136
|
+
clipPath?: string;
|
|
137
|
+
cursor?: 'auto' | 'default' | 'pointer' | 'wait' | 'text' | 'move' | 'not-allowed' | 'help' | 'grab' | 'grabbing' | string;
|
|
138
|
+
pointerEvents?: 'auto' | 'none' | 'visiblePainted' | 'visibleFill' | 'visibleStroke' | 'visible' | 'painted' | 'fill' | 'stroke' | 'all';
|
|
139
|
+
userSelect?: 'none' | 'auto' | 'text' | 'contain' | 'all';
|
|
140
|
+
content?: string;
|
|
141
|
+
listStyle?: string;
|
|
142
|
+
listStyleType?: string;
|
|
143
|
+
listStylePosition?: 'inside' | 'outside';
|
|
144
|
+
listStyleImage?: string;
|
|
145
|
+
tableLayout?: 'auto' | 'fixed';
|
|
146
|
+
borderCollapse?: 'collapse' | 'separate';
|
|
147
|
+
borderSpacing?: number | string;
|
|
148
|
+
captionSide?: 'top' | 'bottom';
|
|
149
|
+
emptyCells?: 'show' | 'hide';
|
|
150
|
+
verticalAlign?: 'baseline' | 'sub' | 'super' | 'top' | 'text-top' | 'middle' | 'bottom' | 'text-bottom' | number | string;
|
|
151
|
+
objectFit?: 'fill' | 'contain' | 'cover' | 'none' | 'scale-down';
|
|
152
|
+
objectPosition?: string;
|
|
153
|
+
float?: 'none' | 'left' | 'right';
|
|
154
|
+
clear?: 'none' | 'left' | 'right' | 'both';
|
|
155
|
+
resize?: 'none' | 'both' | 'horizontal' | 'vertical';
|
|
156
|
+
[key: `--${string}`]: string | number;
|
|
157
|
+
[key: string]: any;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* @Rule Decorator - Type-safe reactive CSS rules
|
|
161
|
+
*
|
|
162
|
+
* Usage:
|
|
163
|
+
* ```typescript
|
|
164
|
+
* class MyStyles extends BaseStyleSheet {
|
|
165
|
+
* @State width = 100;
|
|
166
|
+
*
|
|
167
|
+
* @Rule(':host')
|
|
168
|
+
* get hostStyles() {
|
|
169
|
+
* return {
|
|
170
|
+
* display: 'grid',
|
|
171
|
+
* width: this.width, // Reactive!
|
|
172
|
+
* };
|
|
173
|
+
* }
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
export declare function Rule(selector: string): <This extends object, Value extends CSSProperties | undefined>(target: (this: This) => Value, context: ClassGetterDecoratorContext<This, Value>) => (this: This) => Value;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { effect } from "../../reactivity/signals/effect.js";
|
|
2
|
+
function camelToKebab(str) {
|
|
3
|
+
return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
|
|
4
|
+
}
|
|
5
|
+
const unitlessProperties = /* @__PURE__ */ new Set([
|
|
6
|
+
"opacity",
|
|
7
|
+
"z-index",
|
|
8
|
+
"font-weight",
|
|
9
|
+
"line-height",
|
|
10
|
+
"flex-grow",
|
|
11
|
+
"flex-shrink",
|
|
12
|
+
"flex",
|
|
13
|
+
"order",
|
|
14
|
+
"zoom",
|
|
15
|
+
"grid-column",
|
|
16
|
+
"grid-row",
|
|
17
|
+
"grid-column-start",
|
|
18
|
+
"grid-column-end",
|
|
19
|
+
"grid-row-start",
|
|
20
|
+
"grid-row-end",
|
|
21
|
+
"animation-iteration-count"
|
|
22
|
+
]);
|
|
23
|
+
function formatCSSValue(property, value) {
|
|
24
|
+
if (value === null || value === void 0) {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
if (typeof value === "number" && !unitlessProperties.has(property)) {
|
|
28
|
+
return `${value}px`;
|
|
29
|
+
}
|
|
30
|
+
return String(value);
|
|
31
|
+
}
|
|
32
|
+
function cssObjectToString(styles) {
|
|
33
|
+
return Object.entries(styles).filter(([_, value]) => value !== null && value !== void 0).map(([property, value]) => {
|
|
34
|
+
const cssProperty = camelToKebab(property);
|
|
35
|
+
const cssValue = formatCSSValue(cssProperty, value);
|
|
36
|
+
return `${cssProperty}: ${cssValue}`;
|
|
37
|
+
}).join("; ");
|
|
38
|
+
}
|
|
39
|
+
function Rule(selector) {
|
|
40
|
+
return function(target, context) {
|
|
41
|
+
if (context.kind !== "getter") {
|
|
42
|
+
throw new Error("@Rule can only be applied to getters");
|
|
43
|
+
}
|
|
44
|
+
const getterName = String(context.name);
|
|
45
|
+
context.addInitializer(function() {
|
|
46
|
+
const indexSymbol = Symbol(`css_rule_${selector}_${getterName}`);
|
|
47
|
+
const cleanup = effect(() => {
|
|
48
|
+
const stylesObject = target.call(this);
|
|
49
|
+
if (!stylesObject || typeof stylesObject !== "object") {
|
|
50
|
+
console.warn(`@Rule('${selector}'): Getter '${getterName}' must return a CSSProperties object`);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const cssContent = cssObjectToString(stylesObject);
|
|
54
|
+
const cssText = `${selector} { ${cssContent}; }`;
|
|
55
|
+
if (typeof this.updateSpecificRule === "function") {
|
|
56
|
+
this.updateSpecificRule(selector, cssText, indexSymbol);
|
|
57
|
+
} else {
|
|
58
|
+
console.error(`@Rule decorator requires BaseStyleSheet.updateSpecificRule method`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
if (typeof this.registerCleanup === "function") {
|
|
62
|
+
this.registerCleanup(cleanup.dispose);
|
|
63
|
+
} else {
|
|
64
|
+
console.error(`@Rule decorator requires BaseStyleSheet.registerCleanup method`);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return target;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export {
|
|
71
|
+
Rule
|
|
72
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decoradores de Scope para Estilos
|
|
3
|
+
*
|
|
4
|
+
* Estos decoradores marcan las clases de estilos con su alcance (scope):
|
|
5
|
+
* - @Shared: Los estilos se aplican a todos los shadow roots (compartidos globalmente)
|
|
6
|
+
* - @ForDocument: Los estilos se aplican al documento real (en el <head>)
|
|
7
|
+
*
|
|
8
|
+
* Si una clase de estilos no tiene ningún decorador, se considera "local"
|
|
9
|
+
* y solo se aplica al componente específico que la declara.
|
|
10
|
+
*/
|
|
11
|
+
export type StyleScope = 'local' | 'shared' | 'document';
|
|
12
|
+
/**
|
|
13
|
+
* Marca una clase de estilos como compartida globalmente.
|
|
14
|
+
* Los estilos @Shared se insertan en todos los shadow roots de la aplicación.
|
|
15
|
+
*
|
|
16
|
+
* Uso:
|
|
17
|
+
* ```typescript
|
|
18
|
+
* @Shared
|
|
19
|
+
* class GlobalTheme extends BaseStyleSheet {
|
|
20
|
+
* styles() {
|
|
21
|
+
* return (
|
|
22
|
+
* <>
|
|
23
|
+
* <Rule selector=":host">
|
|
24
|
+
* color: {() => this.theme.primaryColor};
|
|
25
|
+
* </Rule>
|
|
26
|
+
* </>
|
|
27
|
+
* );
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function Shared<T extends {
|
|
33
|
+
new (...args: any[]): {};
|
|
34
|
+
}>(target: T, context?: ClassDecoratorContext): T;
|
|
35
|
+
/**
|
|
36
|
+
* Marca una clase de estilos para aplicarse al documento completo.
|
|
37
|
+
* Los estilos @ForDocument se insertan en el <head> del documento.
|
|
38
|
+
*
|
|
39
|
+
* Uso:
|
|
40
|
+
* ```typescript
|
|
41
|
+
* @ForDocument
|
|
42
|
+
* class DocumentReset extends BaseStyleSheet {
|
|
43
|
+
* styles() {
|
|
44
|
+
* return (
|
|
45
|
+
* <>
|
|
46
|
+
* <Rule selector="*, *::before, *::after">
|
|
47
|
+
* box-sizing: border-box;
|
|
48
|
+
* </Rule>
|
|
49
|
+
* <Rule selector="body">
|
|
50
|
+
* margin: 0;
|
|
51
|
+
* padding: 0;
|
|
52
|
+
* </Rule>
|
|
53
|
+
* </>
|
|
54
|
+
* );
|
|
55
|
+
* }
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function ForDocument<T extends {
|
|
60
|
+
new (...args: any[]): {};
|
|
61
|
+
}>(target: T, context?: ClassDecoratorContext): T;
|
|
62
|
+
/**
|
|
63
|
+
* Obtiene el scope de una clase de estilos.
|
|
64
|
+
* Si no tiene decorador, retorna 'local' por defecto.
|
|
65
|
+
*/
|
|
66
|
+
export declare function getStyleScope(StyleClass: any): StyleScope;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const STYLE_SCOPE_KEY = Symbol("styleScope");
|
|
2
|
+
function Shared(target, context) {
|
|
3
|
+
target[STYLE_SCOPE_KEY] = "shared";
|
|
4
|
+
return target;
|
|
5
|
+
}
|
|
6
|
+
function ForDocument(target, context) {
|
|
7
|
+
target[STYLE_SCOPE_KEY] = "document";
|
|
8
|
+
return target;
|
|
9
|
+
}
|
|
10
|
+
function getStyleScope(StyleClass) {
|
|
11
|
+
return StyleClass[STYLE_SCOPE_KEY] || "local";
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
ForDocument,
|
|
15
|
+
Shared,
|
|
16
|
+
getStyleScope
|
|
17
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Style(selector: string): <This extends object, Value>(target: (this: This) => Value, context: ClassGetterDecoratorContext<This, Value>) => void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
function Style(selector) {
|
|
2
|
+
return function(target, context) {
|
|
3
|
+
if (context.kind !== "getter") {
|
|
4
|
+
throw new Error("@Rule solo se puede aplicar a getters de clase.");
|
|
5
|
+
}
|
|
6
|
+
context.addInitializer(function() {
|
|
7
|
+
if (!this.constructor.__pendingRules) {
|
|
8
|
+
this.constructor.__pendingRules = [];
|
|
9
|
+
}
|
|
10
|
+
this.constructor.__pendingRules.push({
|
|
11
|
+
selector,
|
|
12
|
+
styleGetter: target.bind(this),
|
|
13
|
+
ruleIndexKey: Symbol(`css_rule_index_${String(context.name)}`)
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export {
|
|
19
|
+
Style
|
|
20
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BaseComponent } from '../../components/base-component';
|
|
2
|
+
import { BaseStyleSheet } from '../base-style-sheet';
|
|
3
|
+
type BaseComponentConstructor = new (...args: any[]) => BaseComponent;
|
|
4
|
+
export declare function UseStyles<StylesClass extends BaseStyleSheet>(StylesConstructor: new () => StylesClass): <T extends BaseComponentConstructor>(target: T, context: ClassDecoratorContext<T>) => T;
|
|
5
|
+
export {};
|