@maccesar/titools 5.0.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -3
- package/package.json +1 -1
- package/skills/purgetss/SKILL.md +27 -24
- package/skills/purgetss/references/EXAMPLES.md +52 -41
- package/skills/purgetss/references/adopting-purgetss.md +137 -0
- package/skills/purgetss/references/animation-advanced.md +18 -5
- package/skills/purgetss/references/animation-system.md +21 -9
- package/skills/purgetss/references/app-branding.md +36 -97
- package/skills/purgetss/references/appearance-module.md +70 -5
- package/skills/purgetss/references/apply-directive.md +14 -6
- package/skills/purgetss/references/arbitrary-values.md +59 -23
- package/skills/purgetss/references/brand-padding-geometry.md +105 -0
- package/skills/purgetss/references/class-categories.md +684 -272
- package/skills/purgetss/references/class-index-properties.md +713 -607
- package/skills/purgetss/references/class-index.md +149 -84
- package/skills/purgetss/references/classic-projects.md +3 -3
- package/skills/purgetss/references/cli-commands.md +27 -213
- package/skills/purgetss/references/color-commands.md +218 -0
- package/skills/purgetss/references/configurable-properties.md +17 -2
- package/skills/purgetss/references/custom-fonts.md +21 -16
- package/skills/purgetss/references/custom-rules.md +7 -7
- package/skills/purgetss/references/customization-deep-dive.md +14 -11
- package/skills/purgetss/references/dynamic-component-creation.md +104 -61
- package/skills/purgetss/references/grid-layout.md +21 -24
- package/skills/purgetss/references/icon-fonts.md +37 -20
- package/skills/purgetss/references/installation-setup.md +1 -1
- package/skills/purgetss/references/ios-large-titles.md +12 -11
- package/skills/purgetss/references/migration-guide.md +101 -10
- package/skills/purgetss/references/multi-density-images.md +44 -24
- package/skills/purgetss/references/opacity-modifier.md +1 -1
- package/skills/purgetss/references/performance-tips.md +5 -4
- package/skills/purgetss/references/platform-modifiers.md +2 -2
- package/skills/purgetss/references/purgetss-ui-classic.md +21 -5
- package/skills/purgetss/references/semantic-colors.md +20 -13
- package/skills/purgetss/references/smart-mappings.md +8 -7
- package/skills/purgetss/references/svg-pipeline.md +21 -13
- package/skills/purgetss/references/tikit-components.md +2 -2
- package/skills/purgetss/references/titanium-resets.md +27 -17
- package/skills/purgetss/references/ui-ux-design.md +38 -26
- package/skills/purgetss/references/values-and-units.md +1 -2
- package/skills/purgetss/references/version-history.md +32 -4
|
@@ -46,7 +46,7 @@ npm install -g purgetss
|
|
|
46
46
|
|
|
47
47
|
## Setting Up Your Project
|
|
48
48
|
|
|
49
|
-
1. Create a PurgeTSS project. If you haven't already, create a new Alloy project using PurgeTSS. Make sure you've configured the `app.idprefix` and `app.
|
|
49
|
+
1. Create a PurgeTSS project. If you haven't already, create a new Alloy project using PurgeTSS. Make sure you've configured the `app.idprefix` and `app.workspace` settings in Titanium's `config.json`, as `purgetss create` requires:
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
52
|
purgetss create myApp
|
|
@@ -488,7 +488,7 @@ To add popular free icon sets, run:
|
|
|
488
488
|
purgetss icon-library --vendor=fa,mi,ms,f7
|
|
489
489
|
```
|
|
490
490
|
|
|
491
|
-
This copies the font files
|
|
491
|
+
This copies the font files into `app/assets/fonts/` (Alloy) or `Resources/fonts/` (Classic). Add `--module` for the CommonJS modules or `--styles` (Alloy only) for the `.tss` files.
|
|
492
492
|
|
|
493
493
|
### Adding Your Own Custom Icon Fonts
|
|
494
494
|
|
|
@@ -50,6 +50,8 @@ The most important reset is for the `View` element. By default, `View` is set to
|
|
|
50
50
|
|
|
51
51
|
### Practical Examples
|
|
52
52
|
|
|
53
|
+
Numeric values are unitless; Titanium resolves them with `ti.ui.defaultunit` in `tiapp.xml` (the Alloy template default is `dp`). See [Values and Units](./values-and-units.md).
|
|
54
|
+
|
|
53
55
|
```xml
|
|
54
56
|
<!-- View without any classes = SIZE of its content -->
|
|
55
57
|
<View>
|
|
@@ -61,19 +63,19 @@ The most important reset is for the `View` element. By default, `View` is set to
|
|
|
61
63
|
<View class="h-32 w-64 bg-white">
|
|
62
64
|
<Label text="Hello" />
|
|
63
65
|
</View>
|
|
64
|
-
<!-- Result: View is exactly
|
|
66
|
+
<!-- Result: View is exactly 256dp wide x 128dp tall, label inside -->
|
|
65
67
|
|
|
66
68
|
<!-- View with margins (expands to include margins) -->
|
|
67
69
|
<View class="m-4 bg-blue-500">
|
|
68
70
|
<Label text="Hello" />
|
|
69
71
|
</View>
|
|
70
|
-
<!-- Result: View is
|
|
72
|
+
<!-- Result: View is 16dp larger on all sides (content + 16dp margins) -->
|
|
71
73
|
|
|
72
74
|
<!-- View with w-screen (fills parent) -->
|
|
73
75
|
<View class="h-16 w-screen bg-red-500">
|
|
74
76
|
<Label text="Full width banner" />
|
|
75
77
|
</View>
|
|
76
|
-
<!-- Result: View fills parent's width,
|
|
78
|
+
<!-- Result: View fills parent's width, 64dp tall -->
|
|
77
79
|
```
|
|
78
80
|
|
|
79
81
|
### View in Different Layouts
|
|
@@ -187,7 +189,7 @@ PurgeTSS provides `wh-` shortcuts to set both width and height simultaneously. T
|
|
|
187
189
|
| `.wh-full` | `width: '100%', height: '100%'` | Relative 100% sizing. |
|
|
188
190
|
|
|
189
191
|
**The `wh-` Scale:**
|
|
190
|
-
- **Numeric**: `wh-0` (
|
|
192
|
+
- **Numeric**: `wh-0` (0dp) up to `wh-96` (384dp) following the spacing scale.
|
|
191
193
|
- **Fractions**: `wh-1/2` (50%), `wh-1/3` (33%), up to `wh-11/12` (91%).
|
|
192
194
|
|
|
193
195
|
> **💡 TIP**
|
|
@@ -224,7 +226,7 @@ This generates classes for ALL color properties:
|
|
|
224
226
|
|
|
225
227
|
<!-- CORRECT: Explicitly set dimensions -->
|
|
226
228
|
<View class="h-64 w-screen bg-blue-500">
|
|
227
|
-
<!-- Fills parent width,
|
|
229
|
+
<!-- Fills parent width, 256dp tall -->
|
|
228
230
|
</View>
|
|
229
231
|
```
|
|
230
232
|
|
|
@@ -280,23 +282,24 @@ This generates classes for ALL color properties:
|
|
|
280
282
|
When PurgeTSS generates your `app.tss`, these resets appear first:
|
|
281
283
|
|
|
282
284
|
```tss
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
285
|
+
// PurgeTSS v7.17.1
|
|
286
|
+
// Created by César Estrada
|
|
287
|
+
// https://purgetss.com
|
|
286
288
|
|
|
287
289
|
// Ti Elements
|
|
288
|
-
'View': { width: Ti.UI.SIZE, height: Ti.UI.SIZE }
|
|
289
290
|
'ImageView[platform=ios]': { hires: true }
|
|
291
|
+
'View': { width: Ti.UI.SIZE, height: Ti.UI.SIZE }
|
|
290
292
|
'Window': { backgroundColor: '#FFFFFF' }
|
|
291
293
|
|
|
292
|
-
|
|
294
|
+
// Main Styles
|
|
293
295
|
'.bg-white': { backgroundColor: '#ffffff' }
|
|
294
296
|
'.h-screen': { height: Ti.UI.FILL }
|
|
295
297
|
'.w-screen': { width: Ti.UI.FILL }
|
|
296
|
-
// ... your custom classes
|
|
297
298
|
```
|
|
298
299
|
|
|
299
|
-
|
|
300
|
+
Content from `_app.tss`, if any, goes between the header and `// Ti Elements` under a `// _app.tss styles` comment.
|
|
301
|
+
|
|
302
|
+
A reset is included only when its element is actually used: with the default `purge.mode: 'all'`, PurgeTSS keeps `View`, `ImageView` or `Window` only if that tag appears in your XML views (or in `purge.options.safelist`). A project whose views contain only a `<Window>` gets only the `'Window'` reset.
|
|
300
303
|
|
|
301
304
|
## Default font family classes (v7.5.3+)
|
|
302
305
|
|
|
@@ -354,16 +357,23 @@ module.exports = {
|
|
|
354
357
|
theme: {
|
|
355
358
|
extend: {
|
|
356
359
|
View: {
|
|
357
|
-
|
|
358
|
-
|
|
360
|
+
default: {
|
|
361
|
+
width: 'Ti.UI.FILL',
|
|
362
|
+
height: 'Ti.UI.SIZE'
|
|
363
|
+
}
|
|
359
364
|
}
|
|
360
365
|
}
|
|
361
366
|
}
|
|
362
|
-
}
|
|
367
|
+
};
|
|
363
368
|
```
|
|
364
369
|
|
|
365
|
-
|
|
366
|
-
|
|
370
|
+
Generated `utilities.tss`:
|
|
371
|
+
```tss
|
|
372
|
+
'View': { width: Ti.UI.FILL, height: Ti.UI.SIZE }
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
> **⚠️ CAUTION**
|
|
376
|
+
> Wrap the properties in a `default` (or `DEFAULT`) block, or use `apply` (`View: { apply: 'w-screen h-auto' }`), and quote Titanium constants. Unquoted `Ti.UI.FILL` throws when Node loads `config.cjs`, and properties placed directly under `View` without a `default` wrapper generate broken rules such as `'View-width': { 0: 'T', 1: 'i', ... }`.
|
|
367
377
|
|
|
368
378
|
> **💡 TIP**
|
|
369
379
|
> Prefer `config.cjs` for custom defaults because they're preserved when PurgeTSS regenerates `app.tss`. For advanced overrides — including per-platform defaults, `apply` shorthand, and pseudo-class targeting — see `customization-deep-dive.md`.
|
|
@@ -85,24 +85,30 @@ The catalog below collects real-world UI patterns verified against Titanium's co
|
|
|
85
85
|
### Simple List Item
|
|
86
86
|
|
|
87
87
|
```xml
|
|
88
|
-
<View class="
|
|
88
|
+
<View class="w-screen bg-white">
|
|
89
89
|
<Label class="mx-4 my-4 h-auto text-base text-gray-800" text="List item content" />
|
|
90
|
+
<!-- Titanium has no per-side border width: draw the divider as a 1px child -->
|
|
91
|
+
<View class="bottom-0 h-px w-screen bg-gray-200" />
|
|
90
92
|
</View>
|
|
91
93
|
```
|
|
92
94
|
|
|
93
95
|
### List with Avatar
|
|
94
96
|
|
|
95
97
|
```xml
|
|
96
|
-
<View class="
|
|
97
|
-
<View class="
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
<View class="w-screen bg-white">
|
|
99
|
+
<View class="horizontal">
|
|
100
|
+
<View class="ml-4 my-4 rounded-full-12 bg-blue-500">
|
|
101
|
+
<!-- A child with no top/left centers itself in a composite parent -->
|
|
102
|
+
<Label class="text-lg font-bold text-white" text="JD" />
|
|
103
|
+
</View>
|
|
101
104
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
<View class="vertical ml-3 my-4">
|
|
106
|
+
<Label class="text-base font-semibold text-gray-800" text="John Doe" />
|
|
107
|
+
<Label class="text-sm text-gray-500" text="john.doe@example.com" />
|
|
108
|
+
</View>
|
|
105
109
|
</View>
|
|
110
|
+
|
|
111
|
+
<View class="bottom-0 h-px w-screen bg-gray-200" />
|
|
106
112
|
</View>
|
|
107
113
|
```
|
|
108
114
|
|
|
@@ -163,7 +169,7 @@ The catalog below collects real-world UI patterns verified against Titanium's co
|
|
|
163
169
|
```
|
|
164
170
|
|
|
165
171
|
> **⚠️ Input Padding**
|
|
166
|
-
> Padding utilities (`p-`, `px-`, `py-`)
|
|
172
|
+
> Padding utilities (`p-`, `px-`, `py-`) set the `padding` property, which the Titanium API defines only on `TextField` and `TextArea` (Android and iOS; `TextArea` honors left and right only) and `Ti.UI.Android.CardView` (apidoc 13_4_1_GA). `utilities.tss` labels the block "Android Only", which is inaccurate for the two text inputs. They are NOT for `Button` (especially iOS/Mac) and NOT on container views (`View`, `Window`, `ScrollView`, `TableView`). Use margins on children to simulate internal spacing on containers.
|
|
167
173
|
|
|
168
174
|
## Buttons
|
|
169
175
|
|
|
@@ -210,30 +216,35 @@ For an icon-with-text pair, use a horizontal `View` containing an icon `Label` a
|
|
|
210
216
|
### Top Bar with Title and Action
|
|
211
217
|
|
|
212
218
|
```xml
|
|
213
|
-
<View class="h-14 w-screen bg-white
|
|
219
|
+
<View class="h-14 w-screen bg-white">
|
|
214
220
|
<!-- Omitting top/bottom lets each child center vertically in the composite bar -->
|
|
215
221
|
<Label class="left-4 text-lg font-bold text-gray-800" text="Dashboard" />
|
|
216
222
|
<Label class="right-4 fas fa-bars text-gray-700" />
|
|
223
|
+
<View class="bottom-0 h-px w-screen bg-gray-200" />
|
|
217
224
|
</View>
|
|
218
225
|
```
|
|
219
226
|
|
|
220
227
|
### Bottom Tab Bar
|
|
221
228
|
|
|
222
229
|
```xml
|
|
223
|
-
<View class="bottom-0 h-16 w-screen bg-white
|
|
224
|
-
<View class="
|
|
225
|
-
<Label class="mx-auto mt-2 fas fa-home text-blue-500" />
|
|
226
|
-
<Label class="mx-auto mt-1 text-xs text-blue-500" text="Home" />
|
|
227
|
-
</View>
|
|
230
|
+
<View class="bottom-0 h-16 w-screen bg-white">
|
|
231
|
+
<View class="top-0 h-px w-screen bg-gray-200" />
|
|
228
232
|
|
|
229
|
-
<View class="
|
|
230
|
-
<
|
|
231
|
-
|
|
232
|
-
|
|
233
|
+
<View class="horizontal w-screen">
|
|
234
|
+
<View class="vertical w-1/3">
|
|
235
|
+
<Label class="mx-auto mt-2 fas fa-home text-blue-500" />
|
|
236
|
+
<Label class="mx-auto mt-1 text-xs text-blue-500" text="Home" />
|
|
237
|
+
</View>
|
|
233
238
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
239
|
+
<View class="vertical w-1/3">
|
|
240
|
+
<Label class="mx-auto mt-2 fas fa-search text-gray-400" />
|
|
241
|
+
<Label class="mx-auto mt-1 text-xs text-gray-400" text="Search" />
|
|
242
|
+
</View>
|
|
243
|
+
|
|
244
|
+
<View class="vertical w-1/3">
|
|
245
|
+
<Label class="mx-auto mt-2 fas fa-user text-gray-400" />
|
|
246
|
+
<Label class="mx-auto mt-1 text-xs text-gray-400" text="Profile" />
|
|
247
|
+
</View>
|
|
237
248
|
</View>
|
|
238
249
|
</View>
|
|
239
250
|
```
|
|
@@ -288,8 +299,9 @@ For an icon-with-text pair, use a horizontal `View` containing an icon `Label` a
|
|
|
288
299
|
```xml
|
|
289
300
|
<Window class="bg-gray-100">
|
|
290
301
|
<View class="vertical h-screen w-screen">
|
|
291
|
-
<View class="h-14 w-screen
|
|
302
|
+
<View class="h-14 w-screen bg-white">
|
|
292
303
|
<Label class="left-4 text-xl font-bold text-gray-800" text="Screen Title" />
|
|
304
|
+
<View class="bottom-0 h-px w-screen bg-gray-200" />
|
|
293
305
|
</View>
|
|
294
306
|
|
|
295
307
|
<ScrollView class="vertical content-w-screen content-h-auto">
|
|
@@ -299,7 +311,7 @@ For an icon-with-text pair, use a horizontal `View` containing an icon `Label` a
|
|
|
299
311
|
</Window>
|
|
300
312
|
```
|
|
301
313
|
|
|
302
|
-
> **ScrollView sizing
|
|
314
|
+
> **ScrollView sizing**
|
|
303
315
|
> The recommended pattern for a vertically scrolling `ScrollView` is `class="vertical content-w-screen content-h-auto"`. This sets `layout=vertical`, `contentWidth=Ti.UI.FILL`, and `contentHeight=Ti.UI.SIZE` so the content region grows to fit its children. Older examples using `h-screen w-screen` on the `ScrollView` itself describe the viewport, not the content — use the `content-*` variants to describe how the scrollable content flows.
|
|
304
316
|
>
|
|
305
317
|
> For iOS windows with large titles, also apply `extendEdges`, `autoAdjustScrollViewInsets`, and `largeTitleEnabled` on the `Window`. See `ios-large-titles.md`.
|
|
@@ -382,7 +394,7 @@ Example:
|
|
|
382
394
|
| Row of actions | `horizontal` |
|
|
383
395
|
| Fill space in overlay/modal | `h-screen w-screen` |
|
|
384
396
|
| Card spacing | Margins on children |
|
|
385
|
-
| Input inner spacing | `px-*`, `py-*` on
|
|
397
|
+
| Input inner spacing | `px-*`, `py-*` on `TextField` / `TextArea` |
|
|
386
398
|
| Tablet adaptation | `tablet:*`, `handheld:*` |
|
|
387
399
|
| Overlay background | `bg-(#88000000)` |
|
|
388
400
|
|
|
@@ -41,7 +41,6 @@ This applies to every utility class that sets a dimension:
|
|
|
41
41
|
| Typography | `text-*` (font size), `letter-spacing-*`, `line-spacing-*` |
|
|
42
42
|
| Shadows | `drop-shadow-*`, `shadow-radius-*` |
|
|
43
43
|
| Elevation | `elevation-*`, `max-elevation-*` |
|
|
44
|
-
| Transforms | `translate-*`, `move-by-*` |
|
|
45
44
|
| Offsets | `x-offset-*`, `y-offset-*` |
|
|
46
45
|
|
|
47
46
|
## Valid values for `ti.ui.defaultunit`
|
|
@@ -115,6 +114,6 @@ If that property is missing, Titanium falls back to `system`. That means iOS and
|
|
|
115
114
|
|
|
116
115
|
## Related
|
|
117
116
|
|
|
118
|
-
- [Arbitrary Values](./arbitrary-values.md) — parentheses notation `(
|
|
117
|
+
- [Arbitrary Values](./arbitrary-values.md) — parentheses notation `(20)`, `(2rem)`, `(#ff0000)` for one-off values.
|
|
119
118
|
- [Customization Deep Dive](./customization-deep-dive.md) — defining your own spacing scale via `theme.spacing`.
|
|
120
119
|
- [Class Index](./class-index.md) — the full set of generated classes and their numeric vs. percentage vs. constant outputs.
|
|
@@ -8,9 +8,11 @@ When in doubt about whether a class, flag, or config key exists in the user's in
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
## Unreleased (after v7.17.1)
|
|
12
|
+
- The comment above the opt-in pieces in the generated config now names each consumer instead of claiming both are inert without hand-edited XML. Only `splash_icon` is.
|
|
13
|
+
|
|
11
14
|
## v7.17.1
|
|
12
15
|
- **The `notification-icon` piece writes `notificationicon.png`, not `ic_stat_notify.png`.** `firebase.cloudmessaging` hardcodes that name — `TiFirebaseMessagingService.showNotification()` calls `getResource("notificationicon")` — and it is the only path a **data** message has. The `default_notification_icon` meta-data is the configurable one and covers **notification** messages alone, so under the old name no manifest entry could rescue a data message: the module fell back to the opaque `appicon`, which the status bar renders as a white blob. The filename is fixed rather than a config key, for the same reason `appicon.png` and `DefaultIcon.png` are. Projects that wired `@drawable/ic_stat_notify` by hand need to update that one meta-data line and delete the five stale files. See [app-branding.md](app-branding.md).
|
|
13
|
-
- The comment above the opt-in pieces in the generated config now names each consumer instead of claiming both are inert without hand-edited XML. Only `splash_icon` is.
|
|
14
16
|
|
|
15
17
|
## v7.17.0
|
|
16
18
|
- The `images:` section rejects unknown keys instead of ignoring them, at both levels: the five top-level keys (`quality`, `format`, `autoSync`, `confirmOverwrites`, `files`) and the three inside each `files[]` entry (`filename`, `width`, `height`, with `filename` required). Nothing is generated when validation fails. Never suggest `width`, `opacity`, `padding` or `output` as config keys — they are CLI flags and now abort the run. See [multi-density-images.md](multi-density-images.md).
|
|
@@ -84,7 +86,7 @@ When in doubt about whether a class, flag, or config key exists in the user's in
|
|
|
84
86
|
- SVG-aware compile-time image pipeline runs as a `purgetss` post-step. When XML/controllers reference `image="/images/x.svg"` (or `backgroundImage`) alongside utility classes that resolve to numeric width/height (`w-32`, `w-(300)`, `h-auto`), purge compiles the SVG into the 8 Titanium density PNGs (5 Android + 3 iPhone) using dimensions resolved from `app.tss`. Titanium loads the generated `.png` at runtime; the `.svg` attribute in your source is never rewritten. Cache: `purgetss/.cache/svg-images.json` (add to `.gitignore`). See [multi-density-images.md](multi-density-images.md).
|
|
85
87
|
- `images.files` array in `config.cjs` — per-file width/height override: `[{ filename: 'images/logos/logo.png', width: 128, height: 52 }]`. CLI `--width` still wins over entries. SVGs detected by the pipeline populate entries automatically (subject to `images.autoSync`); hand-added raster entries survive untouched.
|
|
86
88
|
- `images.autoSync` boolean (default `true`) — opt-out for devs managing `images.files` by hand. When `false`, purge still computes dimensions and generates PNGs but never writes back to `config.cjs`.
|
|
87
|
-
- `config.cjs` syntax validator emits a formatted `Config Syntax Error` block (file, JSON path, context, issue, fix snippet) for type mismatches in known fields, currently `theme.fontFamily.*` — must be a **string** — replacing cryptic crashes like `rule.startsWith is not a function`.
|
|
89
|
+
- `config.cjs` syntax validator emits a formatted `Config Syntax Error` block (file, JSON path, context, issue, fix snippet) for type mismatches in known fields, currently `theme.fontFamily.*` and `theme.extend.fontFamily.*` — each value must be a **string** — replacing cryptic crashes like `rule.startsWith is not a function`.
|
|
88
90
|
|
|
89
91
|
## v7.10.2
|
|
90
92
|
- Pre-v7.7.0 `brand:` configs (flat layout: `brand.padding: <number>`, `brand.iosPadding`, `brand.bgColor`, top-level `brand.notification`/`brand.splash`) auto-migrate to the grouped layout in memory. A one-time per-session notice lists the migrated keys.
|
|
@@ -100,7 +102,7 @@ When in doubt about whether a class, flag, or config key exists in the user's in
|
|
|
100
102
|
- Fix: `brand --padding <n>` shortcut applies to BOTH Android paddings.
|
|
101
103
|
|
|
102
104
|
## v7.9.0
|
|
103
|
-
- Opacity modifiers work on semantic colors: `bg-surface/65` auto-derives `
|
|
105
|
+
- Opacity modifiers work on semantic colors: `bg-surface/65` (mapped to `surfaceColor`) auto-derives `<originalKey>_<alphaPercent>` — here `surfaceColor_65` — in `semantic.colors.json` with light/dark + alpha. **Native rebuild required** (Liveview alone does not refresh `semantic.colors.json`). See [semantic-colors.md](semantic-colors.md).
|
|
104
106
|
- `theme.Window` / `theme.View` / `theme.ImageView` at top level = **replace mode** (no framework defaults). Use `theme.extend.Window` for **extend mode** (merge with defaults). See [apply-directive.md](apply-directive.md).
|
|
105
107
|
- **Breaking:** glossary path renamed `purgetss/experimental/tailwind-classes/` → `purgetss/glossary/tailwind-classes/`. No transition shim.
|
|
106
108
|
|
|
@@ -112,7 +114,7 @@ When in doubt about whether a class, flag, or config key exists in the user's in
|
|
|
112
114
|
- `brand:` config restructured into grouped sections: `brand.logos`, `brand.padding`, `brand.android`, `brand.ios`, `brand.colors`. Old projects keep working; new configs use grouped form. See [app-branding.md](app-branding.md).
|
|
113
115
|
- Separate Android brand inputs: `logos.androidLauncher` / `--icon-logo` and `logos.androidSplash` / `--splash-logo`.
|
|
114
116
|
- Android splash fallback `default.png` regenerated (Alloy: `app/assets/android/`, Classic: `Resources/android/`). `cleanup-legacy` preserves it.
|
|
115
|
-
-
|
|
117
|
+
- Related docs page (not a release change): [values-and-units.md](values-and-units.md) — `ti.ui.defaultunit` interpretation of unitless PurgeTSS values.
|
|
116
118
|
|
|
117
119
|
## v7.6.x
|
|
118
120
|
- `purgetss brand` (v7.6.0) — full Titanium branding set from `purgetss/brand/` logos. See [app-branding.md](app-branding.md).
|
|
@@ -125,6 +127,11 @@ When in doubt about whether a class, flag, or config key exists in the user's in
|
|
|
125
127
|
- `Appearance` module — Light/Dark/System mode switching with persistence (`init()`, `set()`, `get()`, `toggle()`). See [appearance-module.md](appearance-module.md).
|
|
126
128
|
- Default font family classes (`font-sans`, `font-serif`, `font-mono`) auto-generated with platform-appropriate values.
|
|
127
129
|
|
|
130
|
+
## v7.5.1
|
|
131
|
+
- Fix: `dist/purgetss.ui.js` shipped in v7.5.0 without `pulse()`, the latest `transition()` improvements, and delta-based drag for transformed views; rebuilt from the template. Re-run `purgetss module` to get them.
|
|
132
|
+
- Fix: `snap-back`, `snap-center`, `snap-magnet`, and `keep-z-index` classes are now generated in `utilities.tss`.
|
|
133
|
+
- Font Awesome updated to 7.2.0.
|
|
134
|
+
|
|
128
135
|
## v7.5.0
|
|
129
136
|
- `theme.extend.Window` / `theme.extend.View` / `theme.extend.ImageView` — customize Ti element defaults.
|
|
130
137
|
- Shorthand `apply:` directive — `{ apply: '...' }` auto-normalizes; `default:` wrapper optional.
|
|
@@ -135,3 +142,24 @@ When in doubt about whether a class, flag, or config key exists in the user's in
|
|
|
135
142
|
- Animation module: 9 new methods (`transition`, `pulse`, `sequence`, `swap`, `shake`, `snapTo`, `reorder`, `undraggable`, `detectCollisions`). 15 methods total. See [animation-system.md](animation-system.md).
|
|
136
143
|
- New utility classes: `snap-back`, `snap-center`, `snap-magnet`, `keep-z-index`.
|
|
137
144
|
- Delta-based drag for transformed views; property inheritance from Animation object.
|
|
145
|
+
|
|
146
|
+
## v7.3.1
|
|
147
|
+
- Fix: draggable views positioned at `left: 0` / `top: 0` (also `right` / `bottom`) no longer jump on drag start.
|
|
148
|
+
|
|
149
|
+
## v7.3.0
|
|
150
|
+
- **Breaking:** `tailwind.tss` renamed to `utilities.tss` — generated file is `purgetss/styles/utilities.tss`, distribution file is `dist/utilities.tss`. Never reference `tailwind.tss`. See [migration-guide.md](migration-guide.md#upgrade-to-v73x).
|
|
151
|
+
- XML syntax pre-validation for Alloy views (for example `Label id=` missing its `<`), with line numbers, context, and a suggested fix.
|
|
152
|
+
- `deviceInfo()` no longer depends on `Alloy.isTablet` / `Alloy.isHandheld`, so it works in Classic too.
|
|
153
|
+
|
|
154
|
+
## v7.2.7
|
|
155
|
+
- **Node.js 20+ required** (`inquirer` v13). Security fixes for transitive `glob` (command injection) and `js-yaml` (prototype pollution).
|
|
156
|
+
- Install size reduced by ~45MB: `@fortawesome/fontawesome-free`, `framework7-icons`, and `junk` moved to devDependencies; font files still ship pre-built.
|
|
157
|
+
- Titanium SDK 13.1.0.GA definitions: new utility classes for `navBarColor`, `forceBottomPosition`, and `multipleWindows`.
|
|
158
|
+
- Recommended class-reordering VS Code extension is now `KevinYouu.tailwind-raw-reorder-tw4`.
|
|
159
|
+
|
|
160
|
+
## v7.2.6
|
|
161
|
+
- Font Awesome updated to 7.1.0.
|
|
162
|
+
- Flag property names in `utilities.tss` simplified and renamed for consistency.
|
|
163
|
+
|
|
164
|
+
## v7.1.10
|
|
165
|
+
- Animation module: `play` and `apply` callbacks receive an enriched event object instead of the raw native event — `type`, `bubbles`, `cancelBubble`, plus `action` (`'play'` / `'apply'`), `state` (`'open'` / `'close'`), `id`, `targetId`, `index`, `total`, and a `getTarget()` helper. See [animation-system.md](animation-system.md).
|