opencode-skills-collection 4.0.69 → 4.0.70
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/bundled-skills/.antigravity-install-manifest.json +39 -1
- package/bundled-skills/api-integration-architect/SKILL.md +241 -0
- package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
- package/bundled-skills/apify-integration-development/SKILL.md +168 -0
- package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
- package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
- package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
- package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
- package/bundled-skills/architecture-review/README.md +42 -0
- package/bundled-skills/architecture-review/SKILL.md +77 -0
- package/bundled-skills/architecture-review/examples.md +11 -0
- package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
- package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
- package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
- package/bundled-skills/architecture-review/reference/graph.md +15 -0
- package/bundled-skills/architecture-review/reference/mcp.md +14 -0
- package/bundled-skills/architecture-review/reference/workflow.md +15 -0
- package/bundled-skills/architecture-review/templates/architecture-review.md +21 -0
- package/bundled-skills/code-review-sensei/SKILL.md +177 -0
- package/bundled-skills/codebase-onboarding/README.md +42 -0
- package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
- package/bundled-skills/codebase-onboarding/examples.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
- package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
- package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
- package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
- package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
- package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
- package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
- package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -0
- package/bundled-skills/dependency-analysis/README.md +42 -0
- package/bundled-skills/dependency-analysis/SKILL.md +76 -0
- package/bundled-skills/dependency-analysis/examples.md +11 -0
- package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
- package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
- package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
- package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
- package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
- package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
- package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
- package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -0
- package/bundled-skills/eas-app-stores/SKILL.md +197 -0
- package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
- package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
- package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
- package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
- package/bundled-skills/eas-hosting/SKILL.md +448 -0
- package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/SKILL.md +75 -0
- package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/references/metrics.md +98 -0
- package/bundled-skills/eas-observe/references/queries.md +403 -0
- package/bundled-skills/eas-observe/references/setup.md +476 -0
- package/bundled-skills/eas-observe/references/third-party.md +136 -0
- package/bundled-skills/eas-simulator/SKILL.md +251 -0
- package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
- package/bundled-skills/eas-simulator/references/controllers.md +135 -0
- package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
- package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
- package/bundled-skills/eas-workflows/SKILL.md +119 -0
- package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
- package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
- package/bundled-skills/expo-animation/LICENSE +21 -0
- package/bundled-skills/expo-animation/RECIPES.md +385 -0
- package/bundled-skills/expo-animation/SKILL.md +295 -0
- package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
- package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
- package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
- package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
- package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1832 -0
- package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +324 -0
- package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
- package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
- package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
- package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
- package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -0
- package/bundled-skills/gpt-taste/SKILL.md +8 -1
- package/bundled-skills/hf-cli/SKILL.md +263 -0
- package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
- package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
- package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/bundled-skills/huggingface-datasets/SKILL.md +130 -0
- package/bundled-skills/jev-social/SKILL.md +182 -0
- package/bundled-skills/longbridge-derivatives/SKILL.md +117 -0
- package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
- package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
- package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
- package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
- package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
- package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
- package/bundled-skills/longbridge-quant/SKILL.md +151 -0
- package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
- package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
- package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
- package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
- package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
- package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
- package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
- package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
- package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
- package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
- package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
- package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
- package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
- package/bundled-skills/longbridge-research/SKILL.md +187 -0
- package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
- package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
- package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
- package/bundled-skills/longbridge-research/references/consensus.md +92 -0
- package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
- package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
- package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
- package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
- package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
- package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
- package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
- package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
- package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
- package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
- package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
- package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
- package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
- package/bundled-skills/longbridge-research/references/investors.md +87 -0
- package/bundled-skills/longbridge-research/references/onchain.md +70 -0
- package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
- package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
- package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
- package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
- package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
- package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -0
- package/bundled-skills/makepad-2-0-animation/SKILL.md +318 -0
- package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
- package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
- package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
- package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
- package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
- package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
- package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
- package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
- package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
- package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
- package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
- package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -0
- package/bundled-skills/meeting-distiller-pro/SKILL.md +120 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
- package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -0
- package/bundled-skills/remotion-captions/SKILL.md +57 -0
- package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-captions/display-captions.md +190 -0
- package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
- package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
- package/bundled-skills/remotion-create/SKILL.md +106 -0
- package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-create/tailwind.md +11 -0
- package/bundled-skills/remotion-create/video-layout.md +9 -0
- package/bundled-skills/remotion-docs/SKILL.md +67 -0
- package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
- package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/SKILL.md +48 -0
- package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/transparent-videos.md +106 -0
- package/bundled-skills/saas-pricing-strategist/SKILL.md +169 -0
- package/bundled-skills/score-eval/SKILL.md +35 -0
- package/bundled-skills/writing-guidelines/SKILL.md +60 -0
- package/package.json +1 -1
- package/skills_index.json +980 -3
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
# Makepad 2.0 Animator Reference
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Animator system drives `instance()` variables on draw shaders over time, enabling hover effects, transitions, and looping animations. It operates on independent animation tracks called "groups" that run simultaneously without interfering.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Animator Structure
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
animator: Animator{
|
|
13
|
+
<group_name>: {
|
|
14
|
+
default: @<state_name> // initial state (@ prefix required)
|
|
15
|
+
<state_name>: AnimatorState{
|
|
16
|
+
from: { ... } // transition timing
|
|
17
|
+
ease: <EaseFunction> // optional ease override
|
|
18
|
+
redraw: true // optional: force redraw each frame
|
|
19
|
+
apply: { ... } // target values
|
|
20
|
+
}
|
|
21
|
+
<state_name>: AnimatorState{ ... }
|
|
22
|
+
}
|
|
23
|
+
<group_name>: { ... } // multiple groups allowed
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## CRITICAL: Widget Animator Support
|
|
30
|
+
|
|
31
|
+
NOT all widgets have an `animator` field. If you add `animator: Animator{...}` to a widget that doesn't support it, the definition is **silently ignored** -- no error, no hover, nothing happens.
|
|
32
|
+
|
|
33
|
+
### Widgets that SUPPORT Animator
|
|
34
|
+
`View`, `SolidView`, `RoundedView`, `ScrollXView`, `ScrollYView`, `ScrollXYView`, `Button`, `ButtonFlat`, `ButtonFlatter`, `CheckBox`, `Toggle`, `RadioButton`, `LinkLabel`, `TextInput`
|
|
35
|
+
|
|
36
|
+
### Widgets that DO NOT Support Animator
|
|
37
|
+
`Label`, `H1`-`H4`, `P`, `TextBox`, `Image`, `Icon`, `Markdown`, `Html`, `Slider`, `DropDown`, `Splitter`, `Hr`, `Filler`
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Groups
|
|
42
|
+
|
|
43
|
+
Each group is an independent animation track. Common groups:
|
|
44
|
+
- `hover` -- mouse hover in/out
|
|
45
|
+
- `focus` -- keyboard focus
|
|
46
|
+
- `active` -- toggled/checked state (CheckBox, Toggle, RadioButton)
|
|
47
|
+
- `disabled` -- disabled state
|
|
48
|
+
- `time` -- continuous/looping time-based animation
|
|
49
|
+
|
|
50
|
+
Multiple groups animate simultaneously without interfering with each other.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## The `from` Block
|
|
55
|
+
|
|
56
|
+
Controls when and how the transition plays. Keys are state names being transitioned FROM, or `all` as a catch-all.
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
// From any state, animate over 0.2 seconds
|
|
60
|
+
from: {all: Forward {duration: 0.2}}
|
|
61
|
+
|
|
62
|
+
// Instant from any state
|
|
63
|
+
from: {all: Snap}
|
|
64
|
+
|
|
65
|
+
// Different timing depending on origin state
|
|
66
|
+
from: {
|
|
67
|
+
all: Forward {duration: 0.1} // default
|
|
68
|
+
down: Forward {duration: 0.01} // faster when coming from "down"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## The `apply` Block
|
|
75
|
+
|
|
76
|
+
Target values to animate TO. The structure mirrors the widget's property tree. Keys are the widget's sub-objects (like `draw_bg`, `draw_text`), values are the shader instance variables to animate.
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
// Animate single properties
|
|
80
|
+
apply: {
|
|
81
|
+
draw_bg: {hover: 1.0}
|
|
82
|
+
draw_text: {hover: 1.0}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Multiple properties in one block
|
|
86
|
+
apply: {
|
|
87
|
+
draw_bg: {down: 1.0, hover: 0.5}
|
|
88
|
+
draw_text: {down: 1.0, hover: 0.5}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Non-draw properties (widget's own fields)
|
|
92
|
+
apply: {
|
|
93
|
+
opened: 1.0
|
|
94
|
+
active: 0.0
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## snap() -- Instant Jump
|
|
101
|
+
|
|
102
|
+
Wrapping a value in `snap()` makes it jump instantly instead of interpolating:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
apply: {
|
|
106
|
+
draw_bg: {down: snap(1.0), hover: 1.0} // down jumps, hover interpolates
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## timeline() -- Keyframes
|
|
113
|
+
|
|
114
|
+
Animate through multiple values over the duration using time/value pairs (times 0.0-1.0):
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
apply: {
|
|
118
|
+
draw_bg: {anim_time: timeline(0.0 0.0 1.0 1.0)} // linear 0 to 1
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Play Types (Transition Modes)
|
|
125
|
+
|
|
126
|
+
| Type | Syntax | Description |
|
|
127
|
+
|------|--------|-------------|
|
|
128
|
+
| Forward | `Forward {duration: 0.2}` | Play once forward |
|
|
129
|
+
| Snap | `Snap` | Instant, no interpolation |
|
|
130
|
+
| Reverse | `Reverse {duration: 0.2, end: 1.0}` | Play in reverse |
|
|
131
|
+
| Loop | `Loop {duration: 1.0, end: 1000000000.0}` | Repeat forward |
|
|
132
|
+
| ReverseLoop | `ReverseLoop {duration: 1.0, end: 1.0}` | Repeat in reverse |
|
|
133
|
+
| BounceLoop | `BounceLoop {duration: 1.0, end: 1.0}` | Bounce back and forth |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Ease Functions
|
|
138
|
+
|
|
139
|
+
### Standard Easing
|
|
140
|
+
```
|
|
141
|
+
Linear // default
|
|
142
|
+
InQuad OutQuad InOutQuad
|
|
143
|
+
InCubic OutCubic InOutCubic
|
|
144
|
+
InQuart OutQuart InOutQuart
|
|
145
|
+
InQuint OutQuint InOutQuint
|
|
146
|
+
InSine OutSine InOutSine
|
|
147
|
+
InExp OutExp InOutExp
|
|
148
|
+
InCirc OutCirc InOutCirc
|
|
149
|
+
InElastic OutElastic InOutElastic
|
|
150
|
+
InBack OutBack InOutBack
|
|
151
|
+
InBounce OutBounce InOutBounce
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Parametric Easing
|
|
155
|
+
```
|
|
156
|
+
ExpDecay {d1: 0.82, d2: 0.97, max: 100}
|
|
157
|
+
Pow {begin: 0.0, end: 1.0}
|
|
158
|
+
Bezier {cp0: 0.0, cp1: 0.0, cp2: 1.0, cp3: 1.0}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Usage:
|
|
162
|
+
```
|
|
163
|
+
off: AnimatorState{
|
|
164
|
+
from: {all: Forward {duration: 0.3}}
|
|
165
|
+
ease: OutCubic
|
|
166
|
+
apply: {draw_bg: {hover: 0.0}}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Hoverable Label Pattern
|
|
173
|
+
|
|
174
|
+
Label does NOT support Animator. To make hoverable/clickable text, wrap a Label inside a View with animator + cursor.
|
|
175
|
+
|
|
176
|
+
CRITICAL: Always set `new_batch: true` on any View that has `show_bg: true` AND contains text children. Without it, when the hover activates and the background becomes opaque, it covers the text -- making text disappear on hover.
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
View{
|
|
180
|
+
width: Fill height: Fit
|
|
181
|
+
cursor: MouseCursor.Hand
|
|
182
|
+
new_batch: true
|
|
183
|
+
show_bg: true
|
|
184
|
+
draw_bg +: {
|
|
185
|
+
color: uniform(#0000)
|
|
186
|
+
color_hover: uniform(#fff2)
|
|
187
|
+
hover: instance(0.0)
|
|
188
|
+
pixel: fn(){
|
|
189
|
+
return Pal.premul(self.color.mix(self.color_hover, self.hover))
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
animator: Animator{
|
|
193
|
+
hover: {
|
|
194
|
+
default: @off
|
|
195
|
+
off: AnimatorState{
|
|
196
|
+
from: {all: Forward {duration: 0.15}}
|
|
197
|
+
apply: {draw_bg: {hover: 0.0}}
|
|
198
|
+
}
|
|
199
|
+
on: AnimatorState{
|
|
200
|
+
from: {all: Forward {duration: 0.15}}
|
|
201
|
+
apply: {draw_bg: {hover: 1.0}}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
label := Label{text: "hoverable item" draw_text.color: #fff}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Hoverable List Item Pattern
|
|
212
|
+
|
|
213
|
+
For list items, use `label :=` to declare the inner Label so each instance can override its text:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
let HoverItem = View{
|
|
217
|
+
width: Fill height: Fit
|
|
218
|
+
padding: theme.mspace_2
|
|
219
|
+
cursor: MouseCursor.Hand
|
|
220
|
+
new_batch: true
|
|
221
|
+
show_bg: true
|
|
222
|
+
draw_bg +: {
|
|
223
|
+
color: uniform(#0000)
|
|
224
|
+
color_hover: uniform(#fff2)
|
|
225
|
+
hover: instance(0.0)
|
|
226
|
+
pixel: fn(){
|
|
227
|
+
return self.color.mix(self.color_hover, self.hover)
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
animator: Animator{
|
|
231
|
+
hover: {
|
|
232
|
+
default: @off
|
|
233
|
+
off: AnimatorState{
|
|
234
|
+
from: {all: Forward {duration: 0.15}}
|
|
235
|
+
apply: {draw_bg: {hover: 0.0}}
|
|
236
|
+
}
|
|
237
|
+
on: AnimatorState{
|
|
238
|
+
from: {all: Forward {duration: 0.15}}
|
|
239
|
+
apply: {draw_bg: {hover: 1.0}}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
label := Label{text: "item" draw_text.color: #fff}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Complete Button Animator Example
|
|
250
|
+
|
|
251
|
+
This example shows all four standard animation groups (disabled, hover, focus, time) plus a three-state hover group (off/on/down):
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
animator: Animator{
|
|
255
|
+
disabled: {
|
|
256
|
+
default: @off
|
|
257
|
+
off: AnimatorState{
|
|
258
|
+
from: {all: Forward {duration: 0.}}
|
|
259
|
+
apply: {
|
|
260
|
+
draw_bg: {disabled: 0.0}
|
|
261
|
+
draw_text: {disabled: 0.0}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
on: AnimatorState{
|
|
265
|
+
from: {all: Forward {duration: 0.2}}
|
|
266
|
+
apply: {
|
|
267
|
+
draw_bg: {disabled: 1.0}
|
|
268
|
+
draw_text: {disabled: 1.0}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
hover: {
|
|
273
|
+
default: @off
|
|
274
|
+
off: AnimatorState{
|
|
275
|
+
from: {all: Forward {duration: 0.1}}
|
|
276
|
+
apply: {
|
|
277
|
+
draw_bg: {down: 0.0, hover: 0.0}
|
|
278
|
+
draw_text: {down: 0.0, hover: 0.0}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
on: AnimatorState{
|
|
282
|
+
from: {
|
|
283
|
+
all: Forward {duration: 0.1}
|
|
284
|
+
down: Forward {duration: 0.01}
|
|
285
|
+
}
|
|
286
|
+
apply: {
|
|
287
|
+
draw_bg: {down: 0.0, hover: snap(1.0)}
|
|
288
|
+
draw_text: {down: 0.0, hover: snap(1.0)}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
down: AnimatorState{
|
|
292
|
+
from: {all: Forward {duration: 0.2}}
|
|
293
|
+
apply: {
|
|
294
|
+
draw_bg: {down: snap(1.0), hover: 1.0}
|
|
295
|
+
draw_text: {down: snap(1.0), hover: 1.0}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
focus: {
|
|
300
|
+
default: @off
|
|
301
|
+
off: AnimatorState{
|
|
302
|
+
from: {all: Snap}
|
|
303
|
+
apply: {
|
|
304
|
+
draw_bg: {focus: 0.0}
|
|
305
|
+
draw_text: {focus: 0.0}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
on: AnimatorState{
|
|
309
|
+
from: {all: Snap}
|
|
310
|
+
apply: {
|
|
311
|
+
draw_bg: {focus: 1.0}
|
|
312
|
+
draw_text: {focus: 1.0}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
time: {
|
|
317
|
+
default: @off
|
|
318
|
+
off: AnimatorState{
|
|
319
|
+
from: {all: Forward {duration: 0.}}
|
|
320
|
+
apply: {}
|
|
321
|
+
}
|
|
322
|
+
on: AnimatorState{
|
|
323
|
+
from: {all: Loop {duration: 1.0, end: 1000000000.0}}
|
|
324
|
+
apply: {
|
|
325
|
+
draw_bg: {anim_time: timeline(0.0 0.0 1.0 1.0)}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Button draw_bg Instance Variables
|
|
335
|
+
|
|
336
|
+
These are per-instance floats driven by the Animator:
|
|
337
|
+
- `hover`, `down`, `focus`, `disabled`
|
|
338
|
+
|
|
339
|
+
Color uniforms (each with `_hover`, `_down`, `_focus`, `_disabled` variants):
|
|
340
|
+
- `color`, `border_color`, `icon_color`
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## CheckBox/Toggle draw_bg Instance Variables
|
|
345
|
+
|
|
346
|
+
Animator-driven: `hover`, `down`, `focus`, `active`, `disabled`
|
|
347
|
+
|
|
348
|
+
Uniforms: `size`, `border_size`, `border_radius`
|
|
349
|
+
|
|
350
|
+
Color uniforms (each with `_hover`, `_down`, `_active`, `_focus`, `_disabled` variants):
|
|
351
|
+
- `color`, `border_color`, `mark_color`
|
|
352
|
+
- Also: `mark_size`
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## Rust Struct Setup for Animated Widgets
|
|
357
|
+
|
|
358
|
+
```rust
|
|
359
|
+
// The widget struct needs Animator derive
|
|
360
|
+
#[derive(Script, ScriptHook, Widget, Animator)]
|
|
361
|
+
pub struct MyAnimatedWidget {
|
|
362
|
+
#[source] source: ScriptObjectRef,
|
|
363
|
+
#[apply_default] animator: Animator,
|
|
364
|
+
#[walk] walk: Walk,
|
|
365
|
+
#[layout] layout: Layout,
|
|
366
|
+
#[redraw] #[live] draw_bg: DrawQuad,
|
|
367
|
+
#[live] draw_text: DrawText,
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Continuous Time Animation
|
|
374
|
+
|
|
375
|
+
Use the `time` group with `Loop` play type for continuous shader animations. Access the animated value in shaders via `self.draw_pass.time` for elapsed time, or use the `anim_time` instance variable driven by `timeline()`.
|
|
376
|
+
|
|
377
|
+
```
|
|
378
|
+
time: {
|
|
379
|
+
default: @off
|
|
380
|
+
off: AnimatorState{
|
|
381
|
+
from: {all: Forward {duration: 0.}}
|
|
382
|
+
apply: {}
|
|
383
|
+
}
|
|
384
|
+
on: AnimatorState{
|
|
385
|
+
from: {all: Loop {duration: 1.0, end: 1000000000.0}}
|
|
386
|
+
apply: {
|
|
387
|
+
draw_bg: {anim_time: timeline(0.0 0.0 1.0 1.0)}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## Instance vs Uniform for Animation
|
|
396
|
+
|
|
397
|
+
- `instance()` -- per-draw-call value, varies per widget instance, animatable by Animator. Use for: hover, down, focus, active, disabled, per-widget colors, scale/pan.
|
|
398
|
+
- `uniform()` -- shared across all instances of the same shader variant. Cannot be animated. Use for: theme constants, border_size, border_radius, base theme colors.
|
|
399
|
+
|
|
400
|
+
```
|
|
401
|
+
draw_bg +: {
|
|
402
|
+
hover: instance(0.0) // each button has its own hover state
|
|
403
|
+
color: uniform(theme.color_x) // shared base color for all instances
|
|
404
|
+
color_hover: instance(theme.color_y) // per-instance if color varies
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## FoldHeader Animation
|
|
411
|
+
|
|
412
|
+
FoldHeader has a built-in `active` animation group that drives an `opened` float:
|
|
413
|
+
|
|
414
|
+
```
|
|
415
|
+
FoldHeader{
|
|
416
|
+
body_walk: Walk{...}
|
|
417
|
+
animator: Animator{
|
|
418
|
+
active: {
|
|
419
|
+
default: @on
|
|
420
|
+
off: AnimatorState{
|
|
421
|
+
from: {all: Forward {duration: 0.2}}
|
|
422
|
+
apply: {opened: 0.0}
|
|
423
|
+
}
|
|
424
|
+
on: AnimatorState{
|
|
425
|
+
from: {all: Forward {duration: 0.2}}
|
|
426
|
+
apply: {opened: 1.0}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
header: View{ height: Fit ... }
|
|
431
|
+
body: View{ ... }
|
|
432
|
+
}
|
|
433
|
+
```
|