@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.
- package/AGENTS-TEMPLATE.md +173 -0
- package/README.md +867 -0
- package/agents/ti-researcher.md +108 -0
- package/bin/titools.js +53 -0
- package/lib/commands/agents.js +126 -0
- package/lib/commands/install.js +188 -0
- package/lib/commands/uninstall.js +215 -0
- package/lib/commands/update.js +159 -0
- package/lib/config.js +119 -0
- package/lib/downloader.js +153 -0
- package/lib/installer.js +253 -0
- package/lib/platform.js +108 -0
- package/lib/symlink.js +142 -0
- package/lib/utils.js +270 -0
- package/package.json +67 -0
- package/skills/alloy-expert/SKILL.md +247 -0
- package/skills/alloy-expert/assets/ControllerAutoCleanup.js +182 -0
- package/skills/alloy-expert/references/alloy-structure.md +381 -0
- package/skills/alloy-expert/references/anti-patterns.md +133 -0
- package/skills/alloy-expert/references/code-conventions.md +469 -0
- package/skills/alloy-expert/references/contracts.md +280 -0
- package/skills/alloy-expert/references/controller-patterns.md +520 -0
- package/skills/alloy-expert/references/error-handling.md +484 -0
- package/skills/alloy-expert/references/examples.md +735 -0
- package/skills/alloy-expert/references/migration-patterns.md +298 -0
- package/skills/alloy-expert/references/patterns.md +448 -0
- package/skills/alloy-expert/references/performance-patterns.md +855 -0
- package/skills/alloy-expert/references/security-patterns.md +847 -0
- package/skills/alloy-expert/references/state-management.md +779 -0
- package/skills/alloy-expert/references/testing.md +872 -0
- package/skills/alloy-guides/SKILL.md +214 -0
- package/skills/alloy-guides/references/CLI_TASKS.md +243 -0
- package/skills/alloy-guides/references/CONCEPTS.md +191 -0
- package/skills/alloy-guides/references/CONTROLLERS.md +298 -0
- package/skills/alloy-guides/references/MODELS.md +1028 -0
- package/skills/alloy-guides/references/PURGETSS.md +56 -0
- package/skills/alloy-guides/references/VIEWS_DYNAMIC.md +242 -0
- package/skills/alloy-guides/references/VIEWS_STYLES.md +388 -0
- package/skills/alloy-guides/references/VIEWS_WITHOUT_CONTROLLERS.md +109 -0
- package/skills/alloy-guides/references/VIEWS_XML.md +558 -0
- package/skills/alloy-guides/references/WIDGETS.md +176 -0
- package/skills/alloy-howtos/SKILL.md +203 -0
- package/skills/alloy-howtos/references/best_practices.md +138 -0
- package/skills/alloy-howtos/references/cli_reference.md +253 -0
- package/skills/alloy-howtos/references/config_files.md +87 -0
- package/skills/alloy-howtos/references/custom_tags.md +147 -0
- package/skills/alloy-howtos/references/debugging_troubleshooting.md +101 -0
- package/skills/alloy-howtos/references/samples.md +167 -0
- package/skills/purgetss/SKILL.md +442 -0
- package/skills/purgetss/assets/purgetss.config.cjs +17 -0
- package/skills/purgetss/references/EXAMPLES.md +247 -0
- package/skills/purgetss/references/animation-system.md +1294 -0
- package/skills/purgetss/references/apply-directive.md +375 -0
- package/skills/purgetss/references/arbitrary-values.md +612 -0
- package/skills/purgetss/references/class-index.md +1350 -0
- package/skills/purgetss/references/cli-commands.md +948 -0
- package/skills/purgetss/references/configurable-properties.md +654 -0
- package/skills/purgetss/references/custom-rules.md +161 -0
- package/skills/purgetss/references/customization-deep-dive.md +722 -0
- package/skills/purgetss/references/dynamic-component-creation.md +489 -0
- package/skills/purgetss/references/grid-layout.md +455 -0
- package/skills/purgetss/references/icon-fonts.md +609 -0
- package/skills/purgetss/references/installation-setup.md +366 -0
- package/skills/purgetss/references/opacity-modifier.md +291 -0
- package/skills/purgetss/references/platform-modifiers.md +479 -0
- package/skills/purgetss/references/smart-mappings.md +42 -0
- package/skills/purgetss/references/titanium-resets.md +359 -0
- package/skills/purgetss/references/ui-ux-design.md +1526 -0
- package/skills/ti-guides/SKILL.md +94 -0
- package/skills/ti-guides/references/advanced-data-and-images.md +19 -0
- package/skills/ti-guides/references/alloy-cli-advanced.md +84 -0
- package/skills/ti-guides/references/alloy-data-mastery.md +29 -0
- package/skills/ti-guides/references/alloy-widgets-and-themes.md +19 -0
- package/skills/ti-guides/references/android-manifest.md +97 -0
- package/skills/ti-guides/references/app-distribution.md +258 -0
- package/skills/ti-guides/references/application-frameworks.md +377 -0
- package/skills/ti-guides/references/cli-reference.md +402 -0
- package/skills/ti-guides/references/coding-best-practices.md +102 -0
- package/skills/ti-guides/references/commonjs-advanced.md +134 -0
- package/skills/ti-guides/references/hello-world.md +100 -0
- package/skills/ti-guides/references/hyperloop-native-access.md +62 -0
- package/skills/ti-guides/references/javascript-primer.md +411 -0
- package/skills/ti-guides/references/reserved-words.md +36 -0
- package/skills/ti-guides/references/resources.md +183 -0
- package/skills/ti-guides/references/style-and-conventions.md +48 -0
- package/skills/ti-guides/references/tiapp-config.md +609 -0
- package/skills/ti-howtos/SKILL.md +174 -0
- package/skills/ti-howtos/references/android-platform-deep-dives.md +658 -0
- package/skills/ti-howtos/references/automation-fastlane-appium.md +95 -0
- package/skills/ti-howtos/references/buffer-codec-streams.md +140 -0
- package/skills/ti-howtos/references/cross-platform-development.md +348 -0
- package/skills/ti-howtos/references/debugging-profiling.md +543 -0
- package/skills/ti-howtos/references/extending-titanium.md +723 -0
- package/skills/ti-howtos/references/google-maps-v2.md +169 -0
- package/skills/ti-howtos/references/ios-map-kit.md +143 -0
- package/skills/ti-howtos/references/ios-platform-deep-dives.md +783 -0
- package/skills/ti-howtos/references/local-data-sources.md +301 -0
- package/skills/ti-howtos/references/location-and-maps.md +252 -0
- package/skills/ti-howtos/references/media-apis.md +210 -0
- package/skills/ti-howtos/references/notification-services.md +599 -0
- package/skills/ti-howtos/references/remote-data-sources.md +349 -0
- package/skills/ti-howtos/references/tutorials.md +502 -0
- package/skills/ti-howtos/references/using-modules.md +237 -0
- package/skills/ti-howtos/references/web-content-integration.md +307 -0
- package/skills/ti-howtos/references/webpack-build-pipeline.md +78 -0
- package/skills/ti-ui/SKILL.md +179 -0
- package/skills/ti-ui/references/accessibility-deep-dive.md +242 -0
- package/skills/ti-ui/references/animation-and-matrices.md +599 -0
- package/skills/ti-ui/references/application-structures.md +655 -0
- package/skills/ti-ui/references/custom-fonts-styling.md +579 -0
- package/skills/ti-ui/references/event-handling.md +393 -0
- package/skills/ti-ui/references/gestures.md +473 -0
- package/skills/ti-ui/references/icons-and-splash-screens.md +409 -0
- package/skills/ti-ui/references/layouts-and-positioning.md +462 -0
- package/skills/ti-ui/references/listviews-and-performance.md +619 -0
- package/skills/ti-ui/references/orientation.md +362 -0
- package/skills/ti-ui/references/platform-ui-android.md +635 -0
- package/skills/ti-ui/references/platform-ui-ios.md +469 -0
- package/skills/ti-ui/references/scrolling-views.md +252 -0
- 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
|
+
:::
|