@fugood/bricks-project 2.25.0-beta.3 → 2.25.0-beta.33

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.
Files changed (151) hide show
  1. package/compile/action-name-map.ts +61 -0
  2. package/compile/index.ts +205 -17
  3. package/package.json +2 -2
  4. package/package.json.bak +2 -2
  5. package/skills/bricks-ctor/SKILL.md +3 -1
  6. package/skills/bricks-ctor/rules/animation.md +3 -2
  7. package/skills/bricks-ctor/rules/architecture-patterns.md +12 -0
  8. package/skills/bricks-ctor/rules/automations.md +11 -0
  9. package/skills/bricks-ctor/rules/buttress.md +97 -8
  10. package/skills/bricks-ctor/rules/data-calculation.md +5 -5
  11. package/skills/bricks-ctor/rules/verification-toolchain.md +177 -0
  12. package/skills/bricks-design/SKILL.md +160 -45
  13. package/skills/bricks-design/references/architecture-truths.md +132 -0
  14. package/skills/bricks-design/references/avoiding-complexity.md +91 -0
  15. package/skills/bricks-design/references/design-critique.md +195 -0
  16. package/skills/bricks-design/references/design-languages.md +265 -0
  17. package/skills/bricks-design/references/performance.md +116 -0
  18. package/skills/bricks-design/references/presentation-and-slideshow.md +137 -0
  19. package/skills/bricks-design/references/translating-inputs.md +152 -0
  20. package/skills/bricks-design/references/variations-and-tweaks.md +124 -0
  21. package/skills/bricks-design/references/when-the-brief-is-branded.md +284 -0
  22. package/skills/bricks-design/references/when-the-brief-is-vague.md +85 -0
  23. package/skills/bricks-design/references/workflow.md +134 -0
  24. package/skills/bricks-ux/SKILL.md +120 -0
  25. package/skills/bricks-ux/references/accessibility.md +162 -0
  26. package/skills/bricks-ux/references/flow-states.md +175 -0
  27. package/skills/bricks-ux/references/interaction-archetypes.md +189 -0
  28. package/skills/bricks-ux/references/monitoring-screens.md +153 -0
  29. package/skills/bricks-ux/references/pressable-composition.md +126 -0
  30. package/skills/bricks-ux/references/user-journey.md +168 -0
  31. package/skills/bricks-ux/references/ux-critique.md +256 -0
  32. package/tools/_git-author.ts +10 -2
  33. package/tools/_last-pushed-commit.ts +28 -0
  34. package/tools/_shell.ts +8 -1
  35. package/tools/deploy.ts +15 -0
  36. package/tools/mcp-tools/compile.ts +17 -7
  37. package/tools/mcp-tools/media.ts +4 -1
  38. package/tools/preview-main.mjs +18 -5
  39. package/tools/pull.ts +91 -16
  40. package/tools/push-config.ts +118 -0
  41. package/types/{animation.ts → animation.d.ts} +24 -8
  42. package/types/{automation.ts → automation.d.ts} +16 -20
  43. package/types/{brick-base.ts → brick-base.d.ts} +1 -1
  44. package/types/bricks/{Camera.ts → Camera.d.ts} +8 -8
  45. package/types/bricks/{Chart.ts → Chart.d.ts} +4 -4
  46. package/types/bricks/{GenerativeMedia.ts → GenerativeMedia.d.ts} +15 -15
  47. package/types/bricks/{Icon.ts → Icon.d.ts} +7 -7
  48. package/types/bricks/{Image.ts → Image.d.ts} +21 -9
  49. package/types/bricks/{Items.ts → Items.d.ts} +7 -7
  50. package/types/bricks/{Lottie.ts → Lottie.d.ts} +10 -10
  51. package/types/bricks/{Maps.ts → Maps.d.ts} +11 -11
  52. package/types/bricks/{QrCode.ts → QrCode.d.ts} +7 -7
  53. package/types/bricks/{Rect.ts → Rect.d.ts} +7 -7
  54. package/types/bricks/{RichText.ts → RichText.d.ts} +12 -9
  55. package/types/bricks/{Rive.ts → Rive.d.ts} +9 -9
  56. package/types/bricks/Scene3D.d.ts +596 -0
  57. package/types/bricks/{Sketch.ts → Sketch.d.ts} +11 -9
  58. package/types/bricks/{Slideshow.ts → Slideshow.d.ts} +7 -7
  59. package/types/bricks/{Svg.ts → Svg.d.ts} +7 -7
  60. package/types/bricks/{Text.ts → Text.d.ts} +9 -9
  61. package/types/bricks/{TextInput.ts → TextInput.d.ts} +10 -10
  62. package/types/bricks/{Video.ts → Video.d.ts} +12 -12
  63. package/types/bricks/{VideoStreaming.ts → VideoStreaming.d.ts} +10 -10
  64. package/types/bricks/{WebRtcStream.ts → WebRtcStream.d.ts} +1 -1
  65. package/types/bricks/{WebView.ts → WebView.d.ts} +4 -4
  66. package/types/bricks/{index.ts → index.d.ts} +1 -0
  67. package/types/{common.ts → common.d.ts} +3 -6
  68. package/types/data-calc-command/base.d.ts +57 -0
  69. package/types/data-calc-command/collection.d.ts +418 -0
  70. package/types/data-calc-command/color.d.ts +432 -0
  71. package/types/data-calc-command/constant.d.ts +50 -0
  72. package/types/data-calc-command/datetime.d.ts +147 -0
  73. package/types/data-calc-command/file.d.ts +129 -0
  74. package/types/data-calc-command/index.d.ts +13 -0
  75. package/types/data-calc-command/iteratee.d.ts +23 -0
  76. package/types/data-calc-command/logictype.d.ts +190 -0
  77. package/types/data-calc-command/math.d.ts +275 -0
  78. package/types/data-calc-command/object.d.ts +119 -0
  79. package/types/data-calc-command/sandbox.d.ts +58 -0
  80. package/types/data-calc-command/string.d.ts +407 -0
  81. package/types/{data-calc.ts → data-calc.d.ts} +1 -0
  82. package/types/{data.ts → data.d.ts} +4 -2
  83. package/types/generators/{Assistant.ts → Assistant.d.ts} +19 -0
  84. package/types/generators/{LlmGgml.ts → LlmGgml.d.ts} +38 -0
  85. package/types/generators/{LlmMlx.ts → LlmMlx.d.ts} +1 -0
  86. package/types/generators/{SpeechToTextGgml.ts → SpeechToTextGgml.d.ts} +1 -0
  87. package/types/generators/{SttAppleBuiltin.ts → SttAppleBuiltin.d.ts} +9 -4
  88. package/types/generators/{ThermalPrinter.ts → ThermalPrinter.d.ts} +9 -7
  89. package/types/{subspace.ts → subspace.d.ts} +1 -1
  90. package/utils/data.ts +2 -2
  91. package/utils/event-props.ts +17 -0
  92. package/utils/id.ts +78 -27
  93. package/skills/bricks-design/LICENSE.txt +0 -180
  94. package/types/data-calc-command.ts +0 -7005
  95. /package/types/{canvas.ts → canvas.d.ts} +0 -0
  96. /package/types/{data-calc-script.ts → data-calc-script.d.ts} +0 -0
  97. /package/types/generators/{AlarmClock.ts → AlarmClock.d.ts} +0 -0
  98. /package/types/generators/{BleCentral.ts → BleCentral.d.ts} +0 -0
  99. /package/types/generators/{BlePeripheral.ts → BlePeripheral.d.ts} +0 -0
  100. /package/types/generators/{CanvasMap.ts → CanvasMap.d.ts} +0 -0
  101. /package/types/generators/{CastlesPay.ts → CastlesPay.d.ts} +0 -0
  102. /package/types/generators/{DataBank.ts → DataBank.d.ts} +0 -0
  103. /package/types/generators/{File.ts → File.d.ts} +0 -0
  104. /package/types/generators/{GraphQl.ts → GraphQl.d.ts} +0 -0
  105. /package/types/generators/{Http.ts → Http.d.ts} +0 -0
  106. /package/types/generators/{HttpServer.ts → HttpServer.d.ts} +0 -0
  107. /package/types/generators/{Information.ts → Information.d.ts} +0 -0
  108. /package/types/generators/{Intent.ts → Intent.d.ts} +0 -0
  109. /package/types/generators/{Iterator.ts → Iterator.d.ts} +0 -0
  110. /package/types/generators/{Keyboard.ts → Keyboard.d.ts} +0 -0
  111. /package/types/generators/{LlmAnthropicCompat.ts → LlmAnthropicCompat.d.ts} +0 -0
  112. /package/types/generators/{LlmAppleBuiltin.ts → LlmAppleBuiltin.d.ts} +0 -0
  113. /package/types/generators/{LlmMediaTekNeuroPilot.ts → LlmMediaTekNeuroPilot.d.ts} +0 -0
  114. /package/types/generators/{LlmOnnx.ts → LlmOnnx.d.ts} +0 -0
  115. /package/types/generators/{LlmOpenAiCompat.ts → LlmOpenAiCompat.d.ts} +0 -0
  116. /package/types/generators/{LlmQualcommAiEngine.ts → LlmQualcommAiEngine.d.ts} +0 -0
  117. /package/types/generators/{Mcp.ts → Mcp.d.ts} +0 -0
  118. /package/types/generators/{McpServer.ts → McpServer.d.ts} +0 -0
  119. /package/types/generators/{MediaFlow.ts → MediaFlow.d.ts} +0 -0
  120. /package/types/generators/{MqttBroker.ts → MqttBroker.d.ts} +0 -0
  121. /package/types/generators/{MqttClient.ts → MqttClient.d.ts} +0 -0
  122. /package/types/generators/{Question.ts → Question.d.ts} +0 -0
  123. /package/types/generators/{RealtimeTranscription.ts → RealtimeTranscription.d.ts} +0 -0
  124. /package/types/generators/{RerankerGgml.ts → RerankerGgml.d.ts} +0 -0
  125. /package/types/generators/{SerialPort.ts → SerialPort.d.ts} +0 -0
  126. /package/types/generators/{SoundPlayer.ts → SoundPlayer.d.ts} +0 -0
  127. /package/types/generators/{SoundRecorder.ts → SoundRecorder.d.ts} +0 -0
  128. /package/types/generators/{SpeechToTextOnnx.ts → SpeechToTextOnnx.d.ts} +0 -0
  129. /package/types/generators/{SpeechToTextPlatform.ts → SpeechToTextPlatform.d.ts} +0 -0
  130. /package/types/generators/{SqLite.ts → SqLite.d.ts} +0 -0
  131. /package/types/generators/{Step.ts → Step.d.ts} +0 -0
  132. /package/types/generators/{Tcp.ts → Tcp.d.ts} +0 -0
  133. /package/types/generators/{TcpServer.ts → TcpServer.d.ts} +0 -0
  134. /package/types/generators/{TextToSpeechAppleBuiltin.ts → TextToSpeechAppleBuiltin.d.ts} +0 -0
  135. /package/types/generators/{TextToSpeechGgml.ts → TextToSpeechGgml.d.ts} +0 -0
  136. /package/types/generators/{TextToSpeechOnnx.ts → TextToSpeechOnnx.d.ts} +0 -0
  137. /package/types/generators/{TextToSpeechOpenAiLike.ts → TextToSpeechOpenAiLike.d.ts} +0 -0
  138. /package/types/generators/{Tick.ts → Tick.d.ts} +0 -0
  139. /package/types/generators/{Udp.ts → Udp.d.ts} +0 -0
  140. /package/types/generators/{VadGgml.ts → VadGgml.d.ts} +0 -0
  141. /package/types/generators/{VadOnnx.ts → VadOnnx.d.ts} +0 -0
  142. /package/types/generators/{VadTraditional.ts → VadTraditional.d.ts} +0 -0
  143. /package/types/generators/{VectorStore.ts → VectorStore.d.ts} +0 -0
  144. /package/types/generators/{Watchdog.ts → Watchdog.d.ts} +0 -0
  145. /package/types/generators/{WebCrawler.ts → WebCrawler.d.ts} +0 -0
  146. /package/types/generators/{WebRtc.ts → WebRtc.d.ts} +0 -0
  147. /package/types/generators/{WebSocket.ts → WebSocket.d.ts} +0 -0
  148. /package/types/generators/{index.ts → index.d.ts} +0 -0
  149. /package/types/{index.ts → index.d.ts} +0 -0
  150. /package/types/{switch.ts → switch.d.ts} +0 -0
  151. /package/types/{system.ts → system.d.ts} +0 -0
@@ -0,0 +1,118 @@
1
+ import { readFile, writeFile } from 'node:fs/promises'
2
+ import { parseArgs } from 'util'
3
+ import { sh } from './_shell'
4
+ import { buildCommitArgs } from './_git-author'
5
+ import { writeLastPushedCommit } from './_last-pushed-commit'
6
+
7
+ const cwd = process.cwd()
8
+
9
+ const readJson = async (p: string) => JSON.parse(await readFile(p, 'utf8'))
10
+
11
+ const {
12
+ values: { 'auto-commit': autoCommit, 'no-check': noCheck, 'no-validate': noValidate, yes, help },
13
+ } = parseArgs({
14
+ args: process.argv.slice(2),
15
+ options: {
16
+ 'auto-commit': { type: 'boolean' },
17
+ 'no-check': { type: 'boolean' },
18
+ 'no-validate': { type: 'boolean' },
19
+ yes: { type: 'boolean', short: 'y' },
20
+ help: { type: 'boolean', short: 'h' },
21
+ },
22
+ allowPositionals: true,
23
+ })
24
+
25
+ if (help) {
26
+ console.log(`Push compiled config to BRICKS without creating a release.
27
+
28
+ Options:
29
+ --auto-commit Auto-commit unstaged changes before pushing
30
+ --no-check Skip the conflict guard (don't pass --last-commit-id)
31
+ --no-validate Skip server-side config schema validation
32
+ -y, --yes Skip all prompts
33
+ -h, --help Show this help message`)
34
+ process.exit(0)
35
+ }
36
+
37
+ // Detect git repo (mirrors deploy.ts)
38
+ const { exitCode } = await sh`cd ${cwd} && git status`.quiet().nothrow()
39
+ const isGitRepo = exitCode === 0
40
+
41
+ if (!isGitRepo && !yes) {
42
+ const confirmContinue = prompt('No git repository found, continue? (y/n)')
43
+ if (confirmContinue !== 'y') throw new Error('Update cancelled')
44
+ }
45
+
46
+ // Read application.json + compiled config
47
+ const app = await readJson(`${cwd}/application.json`)
48
+ const config = await readJson(`${cwd}/.bricks/build/application-config.json`)
49
+
50
+ // Handle unstaged changes the same way deploy.ts does.
51
+ let commitId = ''
52
+ let parentCommitId = ''
53
+ if (isGitRepo) {
54
+ const unstagedChanges = await sh`cd ${cwd} && git diff --name-only --diff-filter=ACMR`.text()
55
+ if (unstagedChanges) {
56
+ if (autoCommit) {
57
+ // Capture the pre-commit HEAD so we can use it as the conflict-check
58
+ // baseline (the server should still hold it from the prior deploy).
59
+ parentCommitId = (await sh`cd ${cwd} && git rev-parse HEAD`.nothrow().text()).trim()
60
+ await sh`cd ${cwd} && git add -A`
61
+ const commitArgs = await buildCommitArgs(cwd, ['chore: update bricks config'])
62
+ await sh`cd ${cwd} && git ${commitArgs}`
63
+ } else {
64
+ throw new Error('Unstaged changes found, please commit or stash your changes before updating')
65
+ }
66
+ }
67
+ commitId = (await sh`cd ${cwd} && git rev-parse HEAD`.text()).trim()
68
+ }
69
+
70
+ // Auto-derive --last-commit-id for the server-side conflict guard.
71
+ // - parent of the auto-commit (server still holds it from the prior deploy)
72
+ // - current HEAD (clean tree — server should be at the same commit too)
73
+ let lastCommitId: string | undefined
74
+ if (!noCheck) {
75
+ if (parentCommitId) lastCommitId = parentCommitId
76
+ else if (commitId) lastCommitId = commitId
77
+ }
78
+
79
+ if (!yes) {
80
+ const confirm = prompt('Are you sure you want to push the new config? (y/n)')
81
+ if (confirm !== 'y') throw new Error('Update cancelled')
82
+ }
83
+
84
+ const isModule = app.type === 'module'
85
+ const command = isModule ? 'module' : 'app'
86
+
87
+ const updateConfig = {
88
+ ...config,
89
+ bricks_project_last_commit_id: commitId || undefined,
90
+ }
91
+ const configPath = `${cwd}/.bricks/build/push-config.json`
92
+ await writeFile(configPath, JSON.stringify(updateConfig))
93
+
94
+ const args = ['bricks', command, 'update', app.id, '-f', configPath, '--json']
95
+ if (noValidate) args.push('--no-validate')
96
+ if (lastCommitId) args.push('--last-commit-id', lastCommitId)
97
+
98
+ const result = await sh`${args}`.quiet().nothrow()
99
+
100
+ if (result.exitCode !== 0) {
101
+ const output = result.stderr.toString() || result.stdout.toString()
102
+ try {
103
+ const json = JSON.parse(output)
104
+ throw new Error(json.error?.message || json.error || 'Update failed')
105
+ } catch {
106
+ throw new Error(output || 'Update failed')
107
+ }
108
+ }
109
+
110
+ const output = JSON.parse(result.stdout.toString())
111
+
112
+ // Record the commit we just pushed from so a later pull can use it as the
113
+ // merge base regardless of what the server stores in
114
+ // bricks_project_last_commit_id (which may be an opaque nanoid for
115
+ // content-only edits).
116
+ if (commitId) await writeLastPushedCommit(cwd, commitId)
117
+
118
+ console.log(`${isModule ? 'Module' : 'App'} config updated: ${output.target?.name || app.name}`)
@@ -44,10 +44,21 @@ export interface AnimationTimingConfig {
44
44
  export interface AnimationSpringConfig {
45
45
  __type: 'AnimationSpringConfig'
46
46
  toValue: number // BRICKS Grid unit
47
- friction: number
48
- tension: number
49
- speed: number
50
- bounciness: number
47
+ // Use one spring parameter family: tension/friction, speed/bounciness,
48
+ // or stiffness/damping/mass.
49
+ friction?: number
50
+ tension?: number
51
+ speed?: number
52
+ bounciness?: number
53
+ stiffness?: number
54
+ damping?: number
55
+ mass?: number
56
+ velocity?: number
57
+ delay?: number
58
+ isInteraction?: boolean
59
+ overshootClamping?: boolean
60
+ restDisplacementThreshold?: number
61
+ restSpeedThreshold?: number
51
62
  }
52
63
 
53
64
  export interface AnimationDecayConfig {
@@ -62,7 +73,7 @@ export interface AnimationDef {
62
73
  __typename: 'Animation'
63
74
  id: string
64
75
  alias?: string
65
- title: string
76
+ title?: string
66
77
  description?: string
67
78
  hideShortRef?: boolean
68
79
  runType?: 'once' | 'loop'
@@ -93,8 +104,13 @@ export interface AnimationComposeDef {
93
104
 
94
105
  export type Animation = AnimationDef | AnimationComposeDef
95
106
 
107
+ // Animation event handlers accept either a direct Animation or a getter that
108
+ // returns one. The getter form is useful for lazy/forward references between
109
+ // animations defined across files.
110
+ export type AnimationOrGetter = Animation | (() => Animation)
111
+
96
112
  export interface AnimationBasicEvents {
97
- showStart?: Animation
98
- standby?: Animation
99
- breatheStart?: Animation
113
+ showStart?: AnimationOrGetter
114
+ standby?: AnimationOrGetter
115
+ breatheStart?: AnimationOrGetter
100
116
  }
@@ -83,9 +83,22 @@ export type TestMethodName =
83
83
  | 'delay'
84
84
 
85
85
  /**
86
- * Run array types for each test method
87
- * Each method has a specific signature: [methodName, ...args]
86
+ * Union type for all test method run arrays
88
87
  */
88
+ export type TestMethodRun =
89
+ | TestMethodRunBrickPress
90
+ | TestMethodRunBrickExists
91
+ | TestMethodRunWaitUntilBrickExists
92
+ | TestMethodRunWaitUntilEventTrigger
93
+ | TestMethodRunWaitUntilCanvasChange
94
+ | TestMethodRunKeydown
95
+ | TestMethodRunKeyup
96
+ | TestMethodRunHttpRequest
97
+ | TestMethodRunAssertProperty
98
+ | TestMethodRunWaitUntilPropertyChange
99
+ | TestMethodRunExecuteAction
100
+ | TestMethodRunMatchScreenshot
101
+ | TestMethodRunDelay
89
102
 
90
103
  // [methodName, subspaceId, brickId, options?]
91
104
  export type TestMethodRunBrickPress = ['brick_press', SubspaceRef, BrickRef, Record<string, any>?]
@@ -157,24 +170,6 @@ export type TestMethodRunMatchScreenshot = ['match_screenshot', string, number?,
157
170
  // [methodName, subspaceId?, propertyId?, defaultValue?]
158
171
  export type TestMethodRunDelay = ['delay', SubspaceRef?, DataRef?, number?]
159
172
 
160
- /**
161
- * Union type for all test method run arrays
162
- */
163
- export type TestMethodRun =
164
- | TestMethodRunBrickPress
165
- | TestMethodRunBrickExists
166
- | TestMethodRunWaitUntilBrickExists
167
- | TestMethodRunWaitUntilEventTrigger
168
- | TestMethodRunWaitUntilCanvasChange
169
- | TestMethodRunKeydown
170
- | TestMethodRunKeyup
171
- | TestMethodRunHttpRequest
172
- | TestMethodRunAssertProperty
173
- | TestMethodRunWaitUntilPropertyChange
174
- | TestMethodRunExecuteAction
175
- | TestMethodRunMatchScreenshot
176
- | TestMethodRunDelay
177
-
178
173
  /**
179
174
  * Test case definition
180
175
  */
@@ -203,6 +198,7 @@ export type LocalSyncMode = 'main-only' | 'minor-only'
203
198
  export interface AutomationTest {
204
199
  __typename: 'AutomationTest'
205
200
  id: string
201
+ alias?: string
206
202
  title: string
207
203
  hideShortRef?: boolean
208
204
  timeout: number
@@ -1,7 +1,7 @@
1
1
  /* Auto generated by build script */
2
2
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from './switch'
3
3
  import type { Data, DataLink } from './data'
4
- import type { Animation, AnimationBasicEvents } from './animation'
4
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from './animation'
5
5
  import type {
6
6
  Brick,
7
7
  EventAction,
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -213,13 +213,13 @@ Default property:
213
213
  faceDetected?: () => Data<Array<{ [key: string]: any }>>
214
214
  }
215
215
  animation?: AnimationBasicEvents & {
216
- stateChange?: Animation
217
- recordStart?: Animation
218
- recordEnd?: Animation
219
- barcodeRead?: Animation
220
- pictureTaken?: Animation
221
- recordFinish?: Animation
222
- mountError?: Animation
216
+ stateChange?: AnimationOrGetter
217
+ recordStart?: AnimationOrGetter
218
+ recordEnd?: AnimationOrGetter
219
+ barcodeRead?: AnimationOrGetter
220
+ pictureTaken?: AnimationOrGetter
221
+ recordFinish?: AnimationOrGetter
222
+ mountError?: AnimationOrGetter
223
223
  }
224
224
  }
225
225
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -343,9 +343,9 @@ Default property:
343
343
  >
344
344
  }
345
345
  animation?: AnimationBasicEvents & {
346
- onRender?: Animation
347
- onPress?: Animation
348
- onLegendSelectChanged?: Animation
346
+ onRender?: AnimationOrGetter
347
+ onPress?: AnimationOrGetter
348
+ onLegendSelectChanged?: AnimationOrGetter
349
349
  }
350
350
  }
351
351
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -250,20 +250,20 @@ Default property:
250
250
  loading?: () => Data<boolean>
251
251
  }
252
252
  animation?: AnimationBasicEvents & {
253
- generativeMediaOnPress?: Animation
254
- generativeMediaOnPressIn?: Animation
255
- generativeMediaOnPressOut?: Animation
256
- generativeMediaOnLongPress?: Animation
257
- generativeMediaOnFocus?: Animation
258
- generativeMediaOnBlur?: Animation
259
- onSuccess?: Animation
260
- onError?: Animation
261
- promptStart?: Animation
262
- promptSuccess?: Animation
263
- promptError?: Animation
264
- loadStart?: Animation
265
- loadSuccess?: Animation
266
- loadError?: Animation
253
+ generativeMediaOnPress?: AnimationOrGetter
254
+ generativeMediaOnPressIn?: AnimationOrGetter
255
+ generativeMediaOnPressOut?: AnimationOrGetter
256
+ generativeMediaOnLongPress?: AnimationOrGetter
257
+ generativeMediaOnFocus?: AnimationOrGetter
258
+ generativeMediaOnBlur?: AnimationOrGetter
259
+ onSuccess?: AnimationOrGetter
260
+ onError?: AnimationOrGetter
261
+ promptStart?: AnimationOrGetter
262
+ promptSuccess?: AnimationOrGetter
263
+ promptError?: AnimationOrGetter
264
+ loadStart?: AnimationOrGetter
265
+ loadSuccess?: AnimationOrGetter
266
+ loadError?: AnimationOrGetter
267
267
  }
268
268
  }
269
269
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -66,12 +66,12 @@ Default property:
66
66
  brickFocusing?: () => Data<boolean>
67
67
  }
68
68
  animation?: AnimationBasicEvents & {
69
- onPress?: Animation
70
- onPressIn?: Animation
71
- onPressOut?: Animation
72
- onLongPress?: Animation
73
- onFocus?: Animation
74
- onBlur?: Animation
69
+ onPress?: AnimationOrGetter
70
+ onPressIn?: AnimationOrGetter
71
+ onPressOut?: AnimationOrGetter
72
+ onLongPress?: AnimationOrGetter
73
+ onFocus?: AnimationOrGetter
74
+ onBlur?: AnimationOrGetter
75
75
  }
76
76
  }
77
77
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -25,6 +25,10 @@ Default property:
25
25
  "templateType": "${}",
26
26
  "fadeDuration": 0,
27
27
  "blurBackgroundRadius": 8,
28
+ "imageFilterEnabled": false,
29
+ "imageFilterBlur": 0,
30
+ "imageFilterBlurMode": "clamp",
31
+ "imageFilterColorMatrix": [],
28
32
  "loadSystemIos": "auto",
29
33
  "loadSystemAndroid": "auto"
30
34
  }
@@ -50,6 +54,14 @@ Default property:
50
54
  enableBlurBackground?: boolean | DataLink
51
55
  /* The blur radius of the blur filter added to the image background */
52
56
  blurBackgroundRadius?: number | DataLink
57
+ /* Enable Skia image filters. When disabled, Image uses the normal platform image renderer. */
58
+ imageFilterEnabled?: boolean | DataLink
59
+ /* Blur amount for the Skia image filter. */
60
+ imageFilterBlur?: number | DataLink
61
+ /* Tile mode for the Skia blur image filter. */
62
+ imageFilterBlurMode?: 'clamp' | 'decal' | 'repeat' | 'mirror' | DataLink
63
+ /* Optional 4x5 color matrix for the Skia image filter. Provide 20 numbers. */
64
+ imageFilterColorMatrix?: Array<number | DataLink> | DataLink
53
65
  /* [iOS] The use priority of image loading system (Auto: sdwebimage, fallback to default if failed) */
54
66
  loadSystemIos?: 'auto' | 'sdwebimage' | 'default' | DataLink
55
67
  /* [Android] The use priority of image loading system (Auto: glide, fallback to fresco if failed) */
@@ -80,14 +92,14 @@ Default property:
80
92
  brickFocusing?: () => Data<boolean>
81
93
  }
82
94
  animation?: AnimationBasicEvents & {
83
- onPress?: Animation
84
- onPressIn?: Animation
85
- onPressOut?: Animation
86
- onLongPress?: Animation
87
- onFocus?: Animation
88
- onBlur?: Animation
89
- onLoad?: Animation
90
- onError?: Animation
95
+ onPress?: AnimationOrGetter
96
+ onPressIn?: AnimationOrGetter
97
+ onPressOut?: AnimationOrGetter
98
+ onLongPress?: AnimationOrGetter
99
+ onFocus?: AnimationOrGetter
100
+ onBlur?: AnimationOrGetter
101
+ onLoad?: AnimationOrGetter
102
+ onError?: AnimationOrGetter
91
103
  }
92
104
  }
93
105
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -438,12 +438,12 @@ Default property:
438
438
  pageIsOutOfBound?: () => Data<boolean>
439
439
  }
440
440
  animation?: AnimationBasicEvents & {
441
- onPageRender?: Animation
442
- onPageChange?: Animation
443
- onPageOutOfBound?: Animation
444
- onIntoDetailMode?: Animation
445
- onIntoListMode?: Animation
446
- onError?: Animation
441
+ onPageRender?: AnimationOrGetter
442
+ onPageChange?: AnimationOrGetter
443
+ onPageOutOfBound?: AnimationOrGetter
444
+ onIntoDetailMode?: AnimationOrGetter
445
+ onIntoListMode?: AnimationOrGetter
446
+ onError?: AnimationOrGetter
447
447
  }
448
448
  }
449
449
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -133,15 +133,15 @@ Default property:
133
133
  brickFocusing?: () => Data<boolean>
134
134
  }
135
135
  animation?: AnimationBasicEvents & {
136
- onPress?: Animation
137
- onPressIn?: Animation
138
- onPressOut?: Animation
139
- onLongPress?: Animation
140
- onFocus?: Animation
141
- onBlur?: Animation
142
- onAnimationFinish?: Animation
143
- onAnimationFailure?: Animation
144
- onAnimationLoop?: Animation
136
+ onPress?: AnimationOrGetter
137
+ onPressIn?: AnimationOrGetter
138
+ onPressOut?: AnimationOrGetter
139
+ onLongPress?: AnimationOrGetter
140
+ onFocus?: AnimationOrGetter
141
+ onBlur?: AnimationOrGetter
142
+ onAnimationFinish?: AnimationOrGetter
143
+ onAnimationFailure?: AnimationOrGetter
144
+ onAnimationLoop?: AnimationOrGetter
145
145
  }
146
146
  }
147
147
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -226,16 +226,16 @@ Default property:
226
226
  brickFocusing?: () => Data<boolean>
227
227
  }
228
228
  animation?: AnimationBasicEvents & {
229
- onPress?: Animation
230
- onPressIn?: Animation
231
- onPressOut?: Animation
232
- onLongPress?: Animation
233
- onFocus?: Animation
234
- onBlur?: Animation
235
- onMarkerPress?: Animation
236
- onMapPress?: Animation
237
- onRegionChange?: Animation
238
- onReady?: Animation
229
+ onPress?: AnimationOrGetter
230
+ onPressIn?: AnimationOrGetter
231
+ onPressOut?: AnimationOrGetter
232
+ onLongPress?: AnimationOrGetter
233
+ onFocus?: AnimationOrGetter
234
+ onBlur?: AnimationOrGetter
235
+ onMarkerPress?: AnimationOrGetter
236
+ onMapPress?: AnimationOrGetter
237
+ onRegionChange?: AnimationOrGetter
238
+ onReady?: AnimationOrGetter
239
239
  }
240
240
  }
241
241
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -85,12 +85,12 @@ Default property:
85
85
  brickFocusing?: () => Data<boolean>
86
86
  }
87
87
  animation?: AnimationBasicEvents & {
88
- onPress?: Animation
89
- onPressIn?: Animation
90
- onPressOut?: Animation
91
- onLongPress?: Animation
92
- onFocus?: Animation
93
- onBlur?: Animation
88
+ onPress?: AnimationOrGetter
89
+ onPressIn?: AnimationOrGetter
90
+ onPressOut?: AnimationOrGetter
91
+ onLongPress?: AnimationOrGetter
92
+ onFocus?: AnimationOrGetter
93
+ onBlur?: AnimationOrGetter
94
94
  }
95
95
  }
96
96
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -118,12 +118,12 @@ Default property:
118
118
  brickFocusing?: () => Data<boolean>
119
119
  }
120
120
  animation?: AnimationBasicEvents & {
121
- onPress?: Animation
122
- onPressIn?: Animation
123
- onPressOut?: Animation
124
- onLongPress?: Animation
125
- onFocus?: Animation
126
- onBlur?: Animation
121
+ onPress?: AnimationOrGetter
122
+ onPressIn?: AnimationOrGetter
123
+ onPressOut?: AnimationOrGetter
124
+ onLongPress?: AnimationOrGetter
125
+ onFocus?: AnimationOrGetter
126
+ onBlur?: AnimationOrGetter
127
127
  }
128
128
  }
129
129
 
@@ -1,10 +1,10 @@
1
1
  /* Auto generated by build script
2
2
  *
3
- * Rich text with HTML content rendering, multiple fonts, colors, heading levels (h1-h6), and inline images
3
+ * Rich text with HTML or Markdown content rendering, multiple fonts, colors, heading levels (h1-h6), and inline images
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -23,6 +23,7 @@ Default property:
23
23
  {
24
24
  "content": "",
25
25
  "renderImage": false,
26
+ "renderMarkdown": false,
26
27
  "color": "#000",
27
28
  "fontWeight": "normal",
28
29
  "fontStyle": "normal",
@@ -42,6 +43,8 @@ Default property:
42
43
  content?: string | DataLink
43
44
  /* Render Image */
44
45
  renderImage?: boolean | DataLink
46
+ /* Treat content as Markdown (converted to HTML before rendering) */
47
+ renderMarkdown?: boolean | DataLink
45
48
  /* The text color */
46
49
  color?: string | DataLink
47
50
  /* Specifies font weight. The values 'normal' and are supported for most fonts. Not all fonts have a variant for each of the numeric values, in that case the closest one is chosen. */
@@ -96,16 +99,16 @@ Default property:
96
99
  brickFocusing?: () => Data<boolean>
97
100
  }
98
101
  animation?: AnimationBasicEvents & {
99
- onPress?: Animation
100
- onPressIn?: Animation
101
- onPressOut?: Animation
102
- onLongPress?: Animation
103
- onFocus?: Animation
104
- onBlur?: Animation
102
+ onPress?: AnimationOrGetter
103
+ onPressIn?: AnimationOrGetter
104
+ onPressOut?: AnimationOrGetter
105
+ onLongPress?: AnimationOrGetter
106
+ onFocus?: AnimationOrGetter
107
+ onBlur?: AnimationOrGetter
105
108
  }
106
109
  }
107
110
 
108
- /* Rich text with HTML content rendering, multiple fonts, colors, heading levels (h1-h6), and inline images */
111
+ /* Rich text with HTML or Markdown content rendering, multiple fonts, colors, heading levels (h1-h6), and inline images */
109
112
  export type BrickRichText = Brick &
110
113
  BrickRichTextDef & {
111
114
  templateKey: 'BRICK_RICH_TEXT'
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { SwitchCondInnerStateCurrentCanvas, SwitchCondData, SwitchDef } from '../switch'
6
6
  import type { Data, DataLink } from '../data'
7
- import type { Animation, AnimationBasicEvents } from '../animation'
7
+ import type { Animation, AnimationBasicEvents, AnimationOrGetter } from '../animation'
8
8
  import type {
9
9
  Brick,
10
10
  EventAction,
@@ -186,14 +186,14 @@ Default property:
186
186
  >
187
187
  }
188
188
  animation?: AnimationBasicEvents & {
189
- onPlay?: Animation
190
- onPause?: Animation
191
- onStop?: Animation
192
- onLoopEnd?: Animation
193
- onStateChanged?: Animation
194
- onError?: Animation
195
- onRiveGeneralEvent?: Animation
196
- onRiveOpenUrlEvent?: Animation
189
+ onPlay?: AnimationOrGetter
190
+ onPause?: AnimationOrGetter
191
+ onStop?: AnimationOrGetter
192
+ onLoopEnd?: AnimationOrGetter
193
+ onStateChanged?: AnimationOrGetter
194
+ onError?: AnimationOrGetter
195
+ onRiveGeneralEvent?: AnimationOrGetter
196
+ onRiveOpenUrlEvent?: AnimationOrGetter
197
197
  }
198
198
  }
199
199