@maccesar/titools 2.0.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.
Files changed (120) hide show
  1. package/AGENTS-TEMPLATE.md +173 -0
  2. package/README.md +867 -0
  3. package/agents/ti-researcher.md +108 -0
  4. package/bin/titools.js +53 -0
  5. package/lib/commands/agents.js +126 -0
  6. package/lib/commands/install.js +188 -0
  7. package/lib/commands/uninstall.js +215 -0
  8. package/lib/commands/update.js +159 -0
  9. package/lib/config.js +119 -0
  10. package/lib/downloader.js +153 -0
  11. package/lib/installer.js +253 -0
  12. package/lib/platform.js +108 -0
  13. package/lib/symlink.js +142 -0
  14. package/lib/utils.js +270 -0
  15. package/package.json +67 -0
  16. package/skills/alloy-expert/SKILL.md +247 -0
  17. package/skills/alloy-expert/assets/ControllerAutoCleanup.js +182 -0
  18. package/skills/alloy-expert/references/alloy-structure.md +381 -0
  19. package/skills/alloy-expert/references/anti-patterns.md +133 -0
  20. package/skills/alloy-expert/references/code-conventions.md +469 -0
  21. package/skills/alloy-expert/references/contracts.md +280 -0
  22. package/skills/alloy-expert/references/controller-patterns.md +520 -0
  23. package/skills/alloy-expert/references/error-handling.md +484 -0
  24. package/skills/alloy-expert/references/examples.md +735 -0
  25. package/skills/alloy-expert/references/migration-patterns.md +298 -0
  26. package/skills/alloy-expert/references/patterns.md +448 -0
  27. package/skills/alloy-expert/references/performance-patterns.md +855 -0
  28. package/skills/alloy-expert/references/security-patterns.md +847 -0
  29. package/skills/alloy-expert/references/state-management.md +779 -0
  30. package/skills/alloy-expert/references/testing.md +872 -0
  31. package/skills/alloy-guides/SKILL.md +214 -0
  32. package/skills/alloy-guides/references/CLI_TASKS.md +243 -0
  33. package/skills/alloy-guides/references/CONCEPTS.md +191 -0
  34. package/skills/alloy-guides/references/CONTROLLERS.md +298 -0
  35. package/skills/alloy-guides/references/MODELS.md +1028 -0
  36. package/skills/alloy-guides/references/PURGETSS.md +56 -0
  37. package/skills/alloy-guides/references/VIEWS_DYNAMIC.md +242 -0
  38. package/skills/alloy-guides/references/VIEWS_STYLES.md +388 -0
  39. package/skills/alloy-guides/references/VIEWS_WITHOUT_CONTROLLERS.md +109 -0
  40. package/skills/alloy-guides/references/VIEWS_XML.md +558 -0
  41. package/skills/alloy-guides/references/WIDGETS.md +176 -0
  42. package/skills/alloy-howtos/SKILL.md +203 -0
  43. package/skills/alloy-howtos/references/best_practices.md +138 -0
  44. package/skills/alloy-howtos/references/cli_reference.md +253 -0
  45. package/skills/alloy-howtos/references/config_files.md +87 -0
  46. package/skills/alloy-howtos/references/custom_tags.md +147 -0
  47. package/skills/alloy-howtos/references/debugging_troubleshooting.md +101 -0
  48. package/skills/alloy-howtos/references/samples.md +167 -0
  49. package/skills/purgetss/SKILL.md +442 -0
  50. package/skills/purgetss/assets/purgetss.config.cjs +17 -0
  51. package/skills/purgetss/references/EXAMPLES.md +247 -0
  52. package/skills/purgetss/references/animation-system.md +1294 -0
  53. package/skills/purgetss/references/apply-directive.md +375 -0
  54. package/skills/purgetss/references/arbitrary-values.md +612 -0
  55. package/skills/purgetss/references/class-index.md +1350 -0
  56. package/skills/purgetss/references/cli-commands.md +948 -0
  57. package/skills/purgetss/references/configurable-properties.md +654 -0
  58. package/skills/purgetss/references/custom-rules.md +161 -0
  59. package/skills/purgetss/references/customization-deep-dive.md +722 -0
  60. package/skills/purgetss/references/dynamic-component-creation.md +489 -0
  61. package/skills/purgetss/references/grid-layout.md +455 -0
  62. package/skills/purgetss/references/icon-fonts.md +609 -0
  63. package/skills/purgetss/references/installation-setup.md +366 -0
  64. package/skills/purgetss/references/opacity-modifier.md +291 -0
  65. package/skills/purgetss/references/platform-modifiers.md +479 -0
  66. package/skills/purgetss/references/smart-mappings.md +42 -0
  67. package/skills/purgetss/references/titanium-resets.md +359 -0
  68. package/skills/purgetss/references/ui-ux-design.md +1526 -0
  69. package/skills/ti-guides/SKILL.md +94 -0
  70. package/skills/ti-guides/references/advanced-data-and-images.md +19 -0
  71. package/skills/ti-guides/references/alloy-cli-advanced.md +84 -0
  72. package/skills/ti-guides/references/alloy-data-mastery.md +29 -0
  73. package/skills/ti-guides/references/alloy-widgets-and-themes.md +19 -0
  74. package/skills/ti-guides/references/android-manifest.md +97 -0
  75. package/skills/ti-guides/references/app-distribution.md +258 -0
  76. package/skills/ti-guides/references/application-frameworks.md +377 -0
  77. package/skills/ti-guides/references/cli-reference.md +402 -0
  78. package/skills/ti-guides/references/coding-best-practices.md +102 -0
  79. package/skills/ti-guides/references/commonjs-advanced.md +134 -0
  80. package/skills/ti-guides/references/hello-world.md +100 -0
  81. package/skills/ti-guides/references/hyperloop-native-access.md +62 -0
  82. package/skills/ti-guides/references/javascript-primer.md +411 -0
  83. package/skills/ti-guides/references/reserved-words.md +36 -0
  84. package/skills/ti-guides/references/resources.md +183 -0
  85. package/skills/ti-guides/references/style-and-conventions.md +48 -0
  86. package/skills/ti-guides/references/tiapp-config.md +609 -0
  87. package/skills/ti-howtos/SKILL.md +174 -0
  88. package/skills/ti-howtos/references/android-platform-deep-dives.md +658 -0
  89. package/skills/ti-howtos/references/automation-fastlane-appium.md +95 -0
  90. package/skills/ti-howtos/references/buffer-codec-streams.md +140 -0
  91. package/skills/ti-howtos/references/cross-platform-development.md +348 -0
  92. package/skills/ti-howtos/references/debugging-profiling.md +543 -0
  93. package/skills/ti-howtos/references/extending-titanium.md +723 -0
  94. package/skills/ti-howtos/references/google-maps-v2.md +169 -0
  95. package/skills/ti-howtos/references/ios-map-kit.md +143 -0
  96. package/skills/ti-howtos/references/ios-platform-deep-dives.md +783 -0
  97. package/skills/ti-howtos/references/local-data-sources.md +301 -0
  98. package/skills/ti-howtos/references/location-and-maps.md +252 -0
  99. package/skills/ti-howtos/references/media-apis.md +210 -0
  100. package/skills/ti-howtos/references/notification-services.md +599 -0
  101. package/skills/ti-howtos/references/remote-data-sources.md +349 -0
  102. package/skills/ti-howtos/references/tutorials.md +502 -0
  103. package/skills/ti-howtos/references/using-modules.md +237 -0
  104. package/skills/ti-howtos/references/web-content-integration.md +307 -0
  105. package/skills/ti-howtos/references/webpack-build-pipeline.md +78 -0
  106. package/skills/ti-ui/SKILL.md +179 -0
  107. package/skills/ti-ui/references/accessibility-deep-dive.md +242 -0
  108. package/skills/ti-ui/references/animation-and-matrices.md +599 -0
  109. package/skills/ti-ui/references/application-structures.md +655 -0
  110. package/skills/ti-ui/references/custom-fonts-styling.md +579 -0
  111. package/skills/ti-ui/references/event-handling.md +393 -0
  112. package/skills/ti-ui/references/gestures.md +473 -0
  113. package/skills/ti-ui/references/icons-and-splash-screens.md +409 -0
  114. package/skills/ti-ui/references/layouts-and-positioning.md +462 -0
  115. package/skills/ti-ui/references/listviews-and-performance.md +619 -0
  116. package/skills/ti-ui/references/orientation.md +362 -0
  117. package/skills/ti-ui/references/platform-ui-android.md +635 -0
  118. package/skills/ti-ui/references/platform-ui-ios.md +469 -0
  119. package/skills/ti-ui/references/scrolling-views.md +252 -0
  120. package/skills/ti-ui/references/tableviews.md +568 -0
@@ -0,0 +1,612 @@
1
+ # Arbitrary Values in PurgeTSS
2
+
3
+ Sometimes, you may need a specific value that is not included among the default values, or that you only need to use once in your project and do not want to include in the `config.cjs` file. In these cases, you can use **arbitrary values**.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Arbitrary Values in PurgeTSS](#arbitrary-values-in-purgetss)
8
+ - [Table of Contents](#table-of-contents)
9
+ - [Parentheses Notation](#parentheses-notation)
10
+ - [Color Properties](#color-properties)
11
+ - [Example with Generated Output](#example-with-generated-output)
12
+ - [Additional Examples](#additional-examples)
13
+ - [Complete List of Color Properties](#complete-list-of-color-properties)
14
+ - [Spacing Properties](#spacing-properties)
15
+ - [Example with Generated Output](#example-with-generated-output-1)
16
+ - [Unit Conversion Rules](#unit-conversion-rules)
17
+ - [Additional Examples](#additional-examples-1)
18
+ - [Complete List of Spacing Properties](#complete-list-of-spacing-properties)
19
+ - [Miscellaneous Properties](#miscellaneous-properties)
20
+ - [Examples](#examples)
21
+ - [Complete List of Miscellaneous Properties](#complete-list-of-miscellaneous-properties)
22
+ - [Real-World Examples](#real-world-examples)
23
+ - [Credit Card Component](#credit-card-component)
24
+ - [Front Cover Example](#front-cover-example)
25
+ - [Menu Bar Example](#menu-bar-example)
26
+ - [Tips for Using Arbitrary Values](#tips-for-using-arbitrary-values)
27
+
28
+ ---
29
+
30
+ ## Parentheses Notation
31
+
32
+ :::info
33
+ **To generate an arbitrary style, you can use *parenthesis notation* with almost any default utility classes.**
34
+
35
+ You cannot use square bracket notation, because Titanium handles platform and conditional statements in `.tss` files differently.
36
+ :::
37
+
38
+ ## Color Properties
39
+
40
+ You can set arbitrary color values **to ALL available color properties**, using `hex`, `rgb`, `rgba`, or standard color names, directly in `xml` files or in the `config.cjs` file.
41
+
42
+ ### Example with Generated Output
43
+
44
+ ```xml title="Arbitrary values for color properties"
45
+ <Alloy>
46
+ <Window class="from-(#4C61E4) to-(#804C61E4)">
47
+ <Label class="w-(250) bg-(rgba(100,200,50)) text-(#4C61E4) text-(15) rounded-4 h-8 text-center" text="Green Label" />
48
+ </Window>
49
+ </Alloy>
50
+ ```
51
+
52
+ ```css title="Generated classes"
53
+ /* Ti Elements */
54
+ 'Window': { backgroundColor: '#FFFFFF' }
55
+
56
+ /* Main Styles */
57
+ '.h-8': { height: 32 }
58
+ '.rounded-4': { borderRadius: 8 }
59
+ '.text-center': { textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER }
60
+
61
+ /* Arbitrary Values */
62
+ '.bg-(rgba(100,200,50))': { backgroundColor: 'rgba(100,200,50)' }
63
+ '.from-(#4C61E4)': { backgroundGradient: { colors: [ '#004C61E4', '#4C61E4' ] } }
64
+ '.text-(#4C61E4)': { color: '#4C61E4', textColor: '#4C61E4' }
65
+ '.text-(15)': { font: { fontSize: 15 } }
66
+ '.to-(#804C61E4)': { backgroundGradient: { colors: [ '#804C61E4' ] } }
67
+ '.w-(250)': { width: 250 }
68
+ ```
69
+
70
+ ### Additional Examples
71
+
72
+ ```xml
73
+ <!-- Arbitrary hex colors -->
74
+ <Window class="from-(#4C61E4) to-(#804C61E4)">
75
+ <Label class="bg-(#4C61E4) text-(#ff0000)" />
76
+ </Window>
77
+
78
+ <!-- Arbitrary rgba colors -->
79
+ <View class="bg-(rgba(100,200,50,0.5)) border-(rgba(255,0,0,0.3))" />
80
+
81
+ <!-- Standard color names -->
82
+ <Label class="text-(crimson) bg-(lightgoldenrodyellow)" />
83
+ ```
84
+
85
+ ### Complete List of Color Properties
86
+
87
+ All of these support arbitrary values with parentheses notation:
88
+
89
+ - `active-tint-(*hex-rgb-or-rgba-value*)`
90
+ - `active-title-(*hex-rgb-or-rgba-value*)`
91
+ - `badge-(*hex-rgb-or-rgba-value*)`
92
+ - `bar-(*hex-rgb-or-rgba-value*)`
93
+ - `bg-(*hex-rgb-or-rgba-value*)`
94
+ - `bg-focused-(*hex-rgb-or-rgba-value*)`
95
+ - `bg-selected-(*hex-rgb-or-rgba-value*)`
96
+ - `bg-selected-from-(*hex-rgb-or-rgba-value*)`
97
+ - `bg-selected-to-(*hex-rgb-or-rgba-value*)`
98
+ - `border-(*hex-rgb-or-rgba-value*)`
99
+ - `current-page-indicator-(*hex-rgb-or-rgba-value*)`
100
+ - `date-time-(*hex-rgb-or-rgba-value*)`
101
+ - `disabled-(*hex-rgb-or-rgba-value*)`
102
+ - `drop-shadow-(*hex-rgb-or-rgba-value*)`
103
+ - `from-(*hex-rgb-or-rgba-value*)`
104
+ - `highlighted-(*hex-rgb-or-rgba-value*)`
105
+ - `image-touch-feedback-(*hex-rgb-or-rgba-value*)`
106
+ - `indicator-(*hex-rgb-or-rgba-value*)`
107
+ - `keyboard-toolbar-(*hex-rgb-or-rgba-value*)`
108
+ - `nav-tint-(*hex-rgb-or-rgba-value*)`
109
+ - `on-tint-(*hex-rgb-or-rgba-value*)`
110
+ - `page-indicator-(*hex-rgb-or-rgba-value*)`
111
+ - `paging-control-(*hex-rgb-or-rgba-value*)`
112
+ - `placeholder-(*hex-rgb-or-rgba-value*)`
113
+ - `pull-bg-(*hex-rgb-or-rgba-value*)`
114
+ - `results-bg-(*hex-rgb-or-rgba-value*)`
115
+ - `results-separator-(*hex-rgb-or-rgba-value*)`
116
+ - `selected-(*hex-rgb-or-rgba-value*)`
117
+ - `selected-button-(*hex-rgb-or-rgba-value*)`
118
+ - `selected-subtitle-(*hex-rgb-or-rgba-value*)`
119
+ - `selected-text-(*hex-rgb-or-rgba-value*)`
120
+ - `separator-(*hex-rgb-or-rgba-value*)`
121
+ - `shadow-(*hex-rgb-or-rgba-value*)`
122
+ - `subtitle-(*hex-rgb-or-rgba-value*)`
123
+ - `tabs-bg-(*hex-rgb-or-rgba-value*)`
124
+ - `tabs-bg-selected-(*hex-rgb-or-rgba-value*)`
125
+ - `text-(*hex-rgb-or-rgba-value*)`
126
+ - `thumb-tint-(*hex-rgb-or-rgba-value*)`
127
+ - `tint-(*hex-rgb-or-rgba-value*)`
128
+ - `title-(*hex-rgb-or-rgba-value*)`
129
+ - `title-attributes-(*hex-rgb-or-rgba-value*)`
130
+ - `title-attributes-shadow-(*hex-rgb-or-rgba-value*)`
131
+ - `title-text-(*hex-rgb-or-rgba-value*)`
132
+ - `to-(*hex-rgb-or-rgba-value*)`
133
+ - `touch-feedback-(*hex-rgb-or-rgba-value*)`
134
+ - `track-tint-(*hex-rgb-or-rgba-value*)`
135
+
136
+ ## Spacing Properties
137
+
138
+ You can set arbitrary values **to MOST of the size and dimension properties**, using `rem`, `px`, `pt`, `%`, `cm`, `in`, or `dp` values, directly in `xml` files or in the `config.cjs` file.
139
+
140
+ ### Example with Generated Output
141
+
142
+ ```xml title="Arbitrary values for spacing properties"
143
+ <Alloy>
144
+ <Window>
145
+ <Label class="w-(10rem) h-(1.75rem) text-(15) rounded-(5) bg-blue-800 text-center text-white" text="My custom Label" />
146
+ </Window>
147
+ </Alloy>
148
+ ```
149
+
150
+ ```css title="Generated classes"
151
+ /* Ti Elements */
152
+ 'Window': { backgroundColor: '#FFFFFF' }
153
+
154
+ /* Main Styles */
155
+ '.bg-blue-800': { backgroundColor: '#1e40af' }
156
+ '.text-center': { textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER }
157
+ '.text-white': { color: '#ffffff', textColor: '#ffffff' }
158
+
159
+ /* Arbitrary Values */
160
+ '.h-(1.75rem)': { height: 28 }
161
+ '.rounded-(5)': { borderRadius: 5 }
162
+ '.text-(15)': { font: { fontSize: 15 } }
163
+ '.w-(10rem)': { width: 160 }
164
+ ```
165
+
166
+ ### Unit Conversion Rules
167
+
168
+ - `%`, `px`, `cm`, `in` - Passed without conversion
169
+ - `em` or `rem` - Converted with formula: `value * 16`
170
+ - `dp` - Unit type removed, value remains intact
171
+
172
+ ### Additional Examples
173
+
174
+ ```xml
175
+ <!-- Width and height -->
176
+ <Label class="w-(10rem) h-(1.75rem) w-(250px) h-(80%)" />
177
+ <View class="w-(2in) h-(3.5in)" />
178
+
179
+ <!-- Margins and padding -->
180
+ <View class="m-(50px) mt-(1rem) p-(20px) pb-(0.5rem)" />
181
+
182
+ <!-- Positioning -->
183
+ <Label class="left-(150px) top-(275px) right-(50px) bottom-(75px)" />
184
+
185
+ <!-- Border radius -->
186
+ <View class="rounded-(20px) rounded-(1.5rem) rounded-(5)" />
187
+
188
+ <!-- Negative margins -->
189
+ <View class="-ml-(20px) -mt-(10)" />
190
+ ```
191
+
192
+ ### Complete List of Spacing Properties
193
+
194
+ **Background Padding:**
195
+ - `bg-padding-b-(*any-size-value-and-unit*)`
196
+ - `bg-padding-l-(*any-size-value-and-unit*)`
197
+ - `bg-padding-r-(*any-size-value-and-unit*)`
198
+ - `bg-padding-t-(*any-size-value-and-unit*)`
199
+
200
+ **Background Left and Top Cap:**
201
+ - `bg-l-cap-(*any-size-value-and-unit*)`
202
+ - `bg-t-cap-(*any-size-value-and-unit*)`
203
+
204
+ **Positioning (Top, Right, Bottom, Left):**
205
+ - `bottom-(*any-size-value-and-unit*)`
206
+ - `left-(*any-size-value-and-unit*)`
207
+ - `l-(*any-size-value-and-unit*)`
208
+ - `right-(*any-size-value-and-unit*)`
209
+ - `r-(*any-size-value-and-unit*)`
210
+ - `top-(*any-size-value-and-unit*)`
211
+ - `x-(*any-size-value-and-unit*)`
212
+ - `y-(*any-size-value-and-unit*)`
213
+
214
+ **Content Width and Height:**
215
+ - `content-(*any-size-value-and-unit*)`
216
+ - `content-h-(*any-size-value-and-unit*)`
217
+ - `content-w-(*any-size-value-and-unit*)`
218
+
219
+ **Gaps:**
220
+ - `gap-(*any-size-value-and-unit*)`
221
+ - `gap-b-(*any-size-value-and-unit*)`
222
+ - `gap-l-(*any-size-value-and-unit*)`
223
+ - `gap-r-(*any-size-value-and-unit*)`
224
+ - `gap-t-(*any-size-value-and-unit*)`
225
+ - `gap-x-(*any-size-value-and-unit*)`
226
+ - `gap-y-(*any-size-value-and-unit*)`
227
+
228
+ **Width and Height:**
229
+ - `h-(*any-size-value-and-unit*)`
230
+ - `w-(*any-size-value-and-unit*)`
231
+
232
+ **Indentation:**
233
+ - `indentation-level-(*any-size-value-and-unit*)`
234
+
235
+ **Keyboard Toolbar:**
236
+ - `keyboard-toolbar-h-(*any-size-value-and-unit*)`
237
+
238
+ **Button Padding:**
239
+ - `left-button-padding-(*any-size-value-and-unit*)`
240
+ - `right-button-padding-(*any-size-value-and-unit*)`
241
+
242
+ **Left and Right Width:**
243
+ - `left-w-(*any-size-value-and-unit*)`
244
+ - `lw-(*any-size-value-and-unit*)`
245
+ - `right-w-(*any-size-value-and-unit*)`
246
+ - `rw-(*any-size-value-and-unit*)`
247
+
248
+ **Margin:**
249
+ - `m-(*any-size-value-and-unit*)`
250
+ - `mb-(*any-size-value-and-unit*)`
251
+ - `ml-(*any-size-value-and-unit*)`
252
+ - `mr-(*any-size-value-and-unit*)`
253
+ - `mt-(*any-size-value-and-unit*)`
254
+ - `mx-(*any-size-value-and-unit*)`
255
+ - `my-(*any-size-value-and-unit*)`
256
+
257
+ **Max Elevation:**
258
+ - `max-elevation-(*any-size-value-and-unit*)`
259
+
260
+ **Max/Min Row Height:**
261
+ - `max-row-h-(*any-size-value-and-unit*)`
262
+ - `min-row-h-(*any-size-value-and-unit*)`
263
+
264
+ **Padding:**
265
+ - `p-(*any-size-value-and-unit*)`
266
+ - `pb-(*any-size-value-and-unit*)`
267
+ - `pl-(*any-size-value-and-unit*)`
268
+ - `pr-(*any-size-value-and-unit*)`
269
+ - `pt-(*any-size-value-and-unit*)`
270
+ - `px-(*any-size-value-and-unit*)`
271
+ - `py-(*any-size-value-and-unit*)`
272
+ - `padding-(*any-size-value-and-unit*)`
273
+ - `padding-b-(*any-size-value-and-unit*)`
274
+ - `padding-bottom-(*any-size-value-and-unit*)`
275
+ - `padding-l-(*any-size-value-and-unit*)`
276
+ - `padding-left-(*any-size-value-and-unit*)`
277
+ - `padding-r-(*any-size-value-and-unit*)`
278
+ - `padding-right-(*any-size-value-and-unit*)`
279
+ - `padding-t-(*any-size-value-and-unit*)`
280
+ - `padding-top-(*any-size-value-and-unit*)`
281
+ - `padding-x-(*any-size-value-and-unit*)`
282
+ - `padding-y-(*any-size-value-and-unit*)`
283
+
284
+ **Paging Control:**
285
+ - `paging-control-h-(*any-size-value-and-unit*)`
286
+
287
+ **Border Radius:**
288
+ - `rounded-(*any-size-value-and-unit*)`
289
+ - `rounded-b-(*any-size-value-and-unit*)`
290
+ - `rounded-bl-(*any-size-value-and-unit*)`
291
+ - `rounded-br-(*any-size-value-and-unit*)`
292
+ - `rounded-l-(*any-size-value-and-unit*)`
293
+ - `rounded-r-(*any-size-value-and-unit*)`
294
+ - `rounded-t-(*any-size-value-and-unit*)`
295
+ - `rounded-tl-(*any-size-value-and-unit*)`
296
+ - `rounded-tr-(*any-size-value-and-unit*)`
297
+
298
+ **Row Height:**
299
+ - `row-h-(*any-size-value-and-unit*)`
300
+
301
+ **Section Header:**
302
+ - `section-header-top-padding-(*any-size-value-and-unit*)`
303
+
304
+ **Separator:**
305
+ - `separator-h-(*any-size-value-and-unit*)`
306
+
307
+ **Shadow Radius:**
308
+ - `shadow-radius-(*any-size-value-and-unit*)`
309
+
310
+ **Offsets:**
311
+ - `x-offset-(*any-size-value-and-unit*)`
312
+ - `y-offset-(*any-size-value-and-unit*)`
313
+
314
+ ## Miscellaneous Properties
315
+
316
+ You can set arbitrary values to properties like border radius, opacity, font size, etc.
317
+
318
+ ### Examples
319
+
320
+ ```xml
321
+ <!-- Opacity -->
322
+ <View class="opacity-(0.35) opacity-(0.85)" />
323
+
324
+ <!-- Font size -->
325
+ <Label class="text-(15) text-(22px) text-(2rem)" />
326
+
327
+ <!-- Border width -->
328
+ <View class="border-width-(2) border-(5)" />
329
+
330
+ <!-- Rotation -->
331
+ <View class="rotate-(45) rotate-(1.5)" />
332
+
333
+ <!-- Scale -->
334
+ <View class="scale-(1.5) scale-(0.8)" />
335
+
336
+ <!-- z-index -->
337
+ <View class="z-(100) z-(-1)" />
338
+
339
+ <!-- Duration (milliseconds) -->
340
+ <Animation class="duration-(300)" />
341
+ ```
342
+
343
+ ### Complete List of Miscellaneous Properties
344
+
345
+ - `active-tab-(*number-value*)`
346
+ - `border-width-(*number-value*)`
347
+ - `cache-size-(*number-value*)`
348
+ - `count-down-(*in-milliseconds*)`
349
+ - `delay-(*in-milliseconds*)`
350
+ - `duration-(*in-milliseconds*)`
351
+ - `elevation-(*number-value*)`
352
+ - `font-(*valid-font-weight-value*)`
353
+ - `horizontal-margin-(*decimal-value*)`
354
+ - `lines-(*number-value*)`
355
+ - `max-length-(*number-value*)`
356
+ - `max-lines-(*number-value*)`
357
+ - `max-zoom-scale-(*decimal-value*)`
358
+ - `min-zoom-scale-(*decimal-value*)`
359
+ - `min-(*number-value*)`
360
+ - `minimum-text-(*number-value*)`
361
+ - `opacity-(*decimal-value-from-0-to-1*)`
362
+ - `origin-(*x-and-y-coordinates*)`
363
+ - `paging-control-alpha-(*decimal-value-from-0-to-1*)`
364
+ - `paging-control-timeout-(*in-milliseconds*)`
365
+ - `repeat-count-(*number-value*)`
366
+ - `repeat-(*number-value*)`
367
+ - `rotate-(*number-value*)`
368
+ - `scale-(*decimal-value*)`
369
+ - `text-size-(*number-value*)`
370
+ - `timeout-(*in-milliseconds*)`
371
+ - `vertical-margin-(*decimal-value*)`
372
+ - `z-(*number-value*)`
373
+ - `zoom-scale-(*decimal-value*)`
374
+
375
+ ## Real-World Examples
376
+
377
+ You can use any supported units depending on the property you are generating. You can use `hex` or `rgba` values for any `color` property, or you can use `rem` or `px` for any position or sizing property.
378
+
379
+ ### Credit Card Component
380
+
381
+ ```xml title="index.xml"
382
+ <Alloy>
383
+ <Window class="bg-(#53606b)">
384
+ <View class="w-(2in) h-(3.5in) bg-(#4C61E4) rounded-(20)">
385
+ <View class="m-(50px) h-screen w-screen">
386
+ <View class="horizontal ml-0 mt-0">
387
+ <View class="w-(3rem) h-(3rem) rounded-(1.5rem) opacity-(0.35) bg-white" />
388
+ <View class="-ml-(20) w-(3rem) h-(3rem) rounded-(1.5rem) opacity-(0.25) bg-white" />
389
+ <Label class="ml-2.5 font-bold text-white">Mastercard</Label>
390
+ </View>
391
+ </View>
392
+
393
+ <View class="bottom-(0) bg-(#6D80FB) h-16 w-full">
394
+ <View class="horizontal">
395
+ <Label class="fab fa-apple text-2xl text-white" />
396
+ <Label class="ml-2 text-2xl font-bold text-white" text="Pay"/>
397
+ </View>
398
+ </View>
399
+ </View>
400
+ </Window>
401
+ </Alloy>
402
+ ```
403
+
404
+ ```css title="app.tss"
405
+ /* Ti Elements */
406
+ 'View': { width: Ti.UI.SIZE, height: Ti.UI.SIZE }
407
+ 'Window': { backgroundColor: '#FFFFFF' }
408
+
409
+ /* Main Styles */
410
+ '.bg-white': { backgroundColor: '#ffffff' }
411
+ '.font-bold': { font: { fontWeight: 'bold' } }
412
+ '.h-16': { height: 64 }
413
+ '.h-screen': { height: Ti.UI.FILL }
414
+ '.horizontal': { layout: 'horizontal' }
415
+ '.ml-0': { left: 0 }
416
+ '.ml-2': { left: 8 }
417
+ '.ml-2.5': { left: 10 }
418
+ '.mt-0': { top: 0 }
419
+ '.text-2xl': { font: { fontSize: 24 } }
420
+ '.text-white': { color: '#ffffff', textColor: '#ffffff' }
421
+ '.w-full': { width: '100%' }
422
+ '.w-screen': { width: Ti.UI.FILL }
423
+
424
+ /* Arbitrary Values */
425
+ '.-ml-(20)': { left: -20 }
426
+ '.bg-(#4C61E4)': { backgroundColor: '#4C61E4' }
427
+ '.bg-(#53606b)': { backgroundColor: '#53606b' }
428
+ '.bg-(#6D80FB)': { backgroundColor: '#6D80FB' }
429
+ '.bottom-(0)': { bottom: 0 }
430
+ '.h-(3.5in)': { height: '3.5in' }
431
+ '.h-(3rem)': { height: 48 }
432
+ '.m-(50px)': { top: '50px', right: '50px', bottom: '50px', left: '50px' }
433
+ '.opacity-(0.25)': { opacity: 0.25 }
434
+ '.opacity-(0.35)': { opacity: 0.35 }
435
+ '.rounded-(1.5rem)': { borderRadius: 24 }
436
+ '.rounded-(20)': { borderRadius: 20 }
437
+ '.w-(2in)': { width: '2in' }
438
+ '.w-(3rem)': { width: 48 }
439
+
440
+ /* Default Font Awesome */
441
+ '.fa-apple': { text: '\uf179', title: '\uf179' }
442
+ '.fab': { font: { fontFamily: 'FontAwesome7Brands-Regular' } }
443
+ ```
444
+
445
+ ### Front Cover Example
446
+
447
+ Try this example on an iPad or tablet.
448
+
449
+ ```xml title="index.xml"
450
+ <Alloy>
451
+ <Window class="bg-white">
452
+ <View class="bg-(#1B6F3F) w-(2300px) h-(1600px) ml-0 mt-0">
453
+ <View class="mt-(100px) h-(200px) left-(150px) horizontal">
454
+ <Label class="fas fa-cloud text-(48px) text-white" />
455
+ <Label class="ml-(30px) text-(48px) h-(200px) font-bold text-white">ZULTYS</Label>
456
+ </View>
457
+
458
+ <View class="vertical left-(150px) w-(1300px)">
459
+ <Label class="text-(64px) mt-(275px) font-bold text-white">Convert your business to remote work at a time that matters most</Label>
460
+ <Button class="mt-(75px) bg-(#fff) text-(#25A25B) h-(100px) w-(400px) rounded-(20px) left-(0) font-bold">Request Free Demo</Button>
461
+ </View>
462
+ </View>
463
+
464
+ <View class="mt-(100px) mr-(150px) w-(1800px) h-(200px) bg-(#0B4825)">
465
+ <Label class="left-(50px) text-(22px) font-normal text-white">We can have your remote teams up and running in 24 hours</Label>
466
+ <Button class="bg-(#25A25B) h-(100px) w-(350px) rounded-(20px) right-(50px) text-white">Request Free Demo</Button>
467
+ </View>
468
+
469
+ <View class="mt-(450px) right-(250px) rounded-(60px)">
470
+ <ImageView class="h-(1480px) w-(900px)" image="https://images.pexels.com/photos/1526814/pexels-photo-1526814.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=1480&w=900&fit=crop" />
471
+ </View>
472
+
473
+ <View class="left-(150px) top-(1650px) vertical w-(1300px)">
474
+ <Button class="left-(0) bg-(#83B758) h-(60px) w-(250px) rounded-(20px) font-bold text-white">Fast Setup</Button>
475
+ <Label class="left-(0) text-(#042F16) text-(48px) font-bold">24 hour activation</Label>
476
+ <Label class="left-(0) text-(#042F16) text-(22px) font-normal">We offer same day activation. We are here to transition your business communications to the Cloud and get you back in business</Label>
477
+ </View>
478
+ </Window>
479
+ </Alloy>
480
+ ```
481
+
482
+ ```css title="app.tss"
483
+ /* Ti Elements */
484
+ 'ImageView[platform=ios]': { hires: true }
485
+ 'View': { width: Ti.UI.SIZE, height: Ti.UI.SIZE }
486
+ 'Window': { backgroundColor: '#FFFFFF' }
487
+
488
+ /* Main Styles */
489
+ '.bg-white': { backgroundColor: '#ffffff' }
490
+ '.font-bold': { font: { fontWeight: 'bold' } }
491
+ '.font-normal': { font: { fontWeight: 'normal' } }
492
+ '.horizontal': { layout: 'horizontal' }
493
+ '.ml-0': { left: 0 }
494
+ '.mt-0': { top: 0 }
495
+ '.text-white': { color: '#ffffff', textColor: '#ffffff' }
496
+ '.vertical': { layout: 'vertical' }
497
+
498
+ /* Arbitrary Values */
499
+ '.bg-(#0B4825)': { backgroundColor: '#0B4825' }
500
+ '.bg-(#1B6F3F)': { backgroundColor: '#1B6F3F' }
501
+ '.bg-(#25A25B)': { backgroundColor: '#25A25B' }
502
+ '.bg-(#83B758)': { backgroundColor: '#83B758' }
503
+ '.bg-(#fff)': { backgroundColor: '#ffffff' }
504
+ '.h-(100px)': { height: '100px' }
505
+ '.h-(1480px)': { height: '1480px' }
506
+ '.h-(1600px)': { height: '1600px' }
507
+ '.h-(200px)': { height: '200px' }
508
+ '.h-(60px)': { height: '60px' }
509
+ '.left-(0)': { left: 0 }
510
+ '.left-(150px)': { left: '150px' }
511
+ '.left-(50px)': { left: '50px' }
512
+ '.ml-(30px)': { left: '30px' }
513
+ '.mr-(150px)': { right: '150px' }
514
+ '.mt-(100px)': { top: '100px' }
515
+ '.mt-(275px)': { top: '275px' }
516
+ '.mt-(450px)': { top: '450px' }
517
+ '.mt-(75px)': { top: '75px' }
518
+ '.right-(250px)': { right: '250px' }
519
+ '.right-(50px)': { right: '50px' }
520
+ '.rounded-(20px)': { borderRadius: '20px' }
521
+ '.rounded-(60px)': { borderRadius: '60px' }
522
+ '.text-(#042F16)': { color: '#042F16', textColor: '#042F16' }
523
+ '.text-(#25A25B)': { color: '#25A25B', textColor: '#25A25B' }
524
+ '.text-(22px)': { font: { fontSize: '22px' } }
525
+ '.text-(48px)': { font: { fontSize: '48px' } }
526
+ '.text-(64px)': { font: { fontSize: '64px' } }
527
+ '.top-(1650px)': { top: '1650px' }
528
+ '.w-(1300px)': { width: '1300px' }
529
+ '.w-(1800px)': { width: '1800px' }
530
+ '.w-(2300px)': { width: '2300px' }
531
+ '.w-(250px)': { width: '250px' }
532
+ '.w-(350px)': { width: '350px' }
533
+ '.w-(400px)': { width: '400px' }
534
+ '.w-(900px)': { width: '900px' }
535
+
536
+ /* Default Font Awesome */
537
+ '.fa-cloud': { text: '\uf0c2', title: '\uf0c2' }
538
+ '.fas': { font: { fontFamily: 'FontAwesome7Free-Solid' } }
539
+ ```
540
+
541
+ ### Menu Bar Example
542
+
543
+ ```xml title="index.xml"
544
+ <Alloy>
545
+ <Window class="bg-(#53606b)" backgroundImage="https://i.pinimg.com/originals/ab/70/a1/ab70a19f087cc9ba2b03e3bee71acc3e.jpg">
546
+ <View class="h-(150px) bg-(#53A500) horizontal mt-0 w-full">
547
+ <Label class="w-(4.5rem) text-(16px) h-(150px) text-(#12681E) text-center font-bold" text="Home" />
548
+ <Label class="w-(4.5rem) text-(16px) h-(150px) text-(#12681E) bg-(#6DB400) text-center font-bold" text="News" />
549
+ <Label class="w-(4.5rem) text-(16px) h-(150px) text-(#12681E) text-center font-bold" text="About" />
550
+ <Label class="w-(4.5rem) text-(16px) h-(150px) text-(#12681E) text-center font-bold" text="Contact" />
551
+ </View>
552
+
553
+ <View class="bg-(rgba(255,255,0,0.75)) -right-(10px) top-(250px) bottom-(75px) w-(80%) border-(5) border-(#12681E) h-screen">
554
+ <View class="m-(1rem) vertical h-screen w-screen">
555
+ <Label class="text-(32px) text-(#12681E) font-bold" text="Superb idea: Building Green garden in your home" />
556
+ <TextArea class="text-(14px) text-(#12681E) mt-1 bg-transparent">Lorem ipsum dolor sit amet consectetur adipisicing elit. Perspiciatis provident, est facere quos veniam repellat. Eum, perferendis quae! Tenetur necessitatibus, voluptatem error voluptate culpa minus est voluptates facere quis distinctio minima dignissimos iure in sequi ex amet officia rerum. Ut fugiat non vero nemo at quaerat assumenda ab officia reiciendis.</TextArea>
557
+ </View>
558
+ </View>
559
+ </Window>
560
+ </Alloy>
561
+ ```
562
+
563
+ ```css title="app.tss"
564
+ /* Ti Elements */
565
+ 'View': { width: Ti.UI.SIZE, height: Ti.UI.SIZE }
566
+ 'Window': { backgroundColor: '#FFFFFF' }
567
+
568
+ /* Main Styles */
569
+ '.bg-transparent': { backgroundColor: 'transparent' }
570
+ '.font-bold': { font: { fontWeight: 'bold' } }
571
+ '.h-screen': { height: Ti.UI.FILL }
572
+ '.horizontal': { layout: 'horizontal' }
573
+ '.mt-0': { top: 0 }
574
+ '.mt-1': { top: 4 }
575
+ '.text-center': { textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER }
576
+ '.vertical': { layout: 'vertical' }
577
+ '.w-full': { width: '100%' }
578
+ '.w-screen': { width: Ti.UI.FILL }
579
+
580
+ /* Arbitrary Values */
581
+ '.-right-(10px)': { right: '-10px' }
582
+ '.bg-(#53606b)': { backgroundColor: '#53606b' }
583
+ '.bg-(#53A500)': { backgroundColor: '#53A500' }
584
+ '.bg-(#6DB400)': { backgroundColor: '#6DB400' }
585
+ '.bg-(rgba(255,255,0,0.75))': { backgroundColor: 'rgba(255,255,0,0.75)' }
586
+ '.border-(#12681E)': { borderColor: '#12681E' }
587
+ '.border-(5)': { borderWidth: 5 }
588
+ '.bottom-(75px)': { bottom: '75px' }
589
+ '.h-(150px)': { height: '150px' }
590
+ '.m-(1rem)': { top: 16, right: 16, bottom: 16, left: 16 }
591
+ '.text-(#12681E)': { color: '#12681E', textColor: '#12681E' }
592
+ '.text-(14px)': { font: { fontSize: '14px' } }
593
+ '.text-(16px)': { font: { fontSize: '16px' } }
594
+ '.text-(32px)': { font: { fontSize: '32px' } }
595
+ '.top-(250px)': { top: '250px' }
596
+ '.w-(4.5rem)': { width: 72 }
597
+ '.w-(80%)': { width: '80%' }
598
+ ```
599
+
600
+ ## Tips for Using Arbitrary Values
601
+
602
+ :::tip
603
+ **Prefer `config.cjs` for repeated values** - If you find yourself using the same arbitrary value multiple times, consider adding it to `config.cjs` under `theme.extend` instead.
604
+ :::
605
+
606
+ :::tip
607
+ **Mix arbitrary values with utilities** - You can combine arbitrary values with standard PurgeTSS utilities: `class="bg-white rounded-(20px) p-(20px) text-center"`
608
+ :::
609
+
610
+ :::caution
611
+ **Unit consistency** - Be consistent with units within a layout. Mixing `rem`, `px`, and `%` arbitrarily can lead to inconsistent spacing across devices.
612
+ :::