@maccesar/titools 2.8.0 → 2.9.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/package.json +1 -1
- package/skills/purgetss/SKILL.md +25 -0
- package/skills/purgetss/references/EXAMPLES.md +86 -24
- package/skills/purgetss/references/app-branding.md +412 -0
- package/skills/purgetss/references/appearance-module.md +161 -0
- package/skills/purgetss/references/apply-directive.md +87 -31
- package/skills/purgetss/references/arbitrary-values.md +4 -0
- package/skills/purgetss/references/class-categories.md +10 -7
- package/skills/purgetss/references/class-index.md +25 -18
- package/skills/purgetss/references/cli-commands.md +219 -8
- package/skills/purgetss/references/configurable-properties.md +11 -7
- package/skills/purgetss/references/custom-rules.md +7 -3
- package/skills/purgetss/references/customization-deep-dive.md +52 -4
- package/skills/purgetss/references/dynamic-component-creation.md +29 -14
- package/skills/purgetss/references/grid-layout.md +20 -8
- package/skills/purgetss/references/icon-fonts.md +4 -0
- package/skills/purgetss/references/installation-setup.md +3 -8
- package/skills/purgetss/references/ios-large-titles.md +141 -0
- package/skills/purgetss/references/migration-guide.md +162 -25
- package/skills/purgetss/references/multi-density-images.md +363 -0
- package/skills/purgetss/references/opacity-modifier.md +4 -0
- package/skills/purgetss/references/performance-tips.md +5 -0
- package/skills/purgetss/references/platform-modifiers.md +4 -0
- package/skills/purgetss/references/semantic-colors.md +386 -0
- package/skills/purgetss/references/smart-mappings.md +50 -28
- package/skills/purgetss/references/tikit-components.md +3 -1
- package/skills/purgetss/references/titanium-resets.md +46 -15
- package/skills/purgetss/references/ui-ux-design.md +32 -6
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# iOS Large Titles
|
|
2
|
+
|
|
3
|
+
Enabling Large Titles on a Window is not a single-property change. When you pair `largeTitleEnabled` with a `ScrollView` inside a `NavigationWindow` or `TabGroup`, **three interdependent iOS Window properties** must work together — otherwise you get either content hidden behind the nav bar or a visible rendering delay when the window opens.
|
|
4
|
+
|
|
5
|
+
| Property | Value | Why it matters |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `autoAdjustScrollViewInsets` | `true` | iOS automatically adjusts the ScrollView content insets so content starts below the nav bar instead of behind it. |
|
|
8
|
+
| `extendEdges` | `[Ti.UI.EXTEND_EDGE_ALL]` | Content extends under the nav/tab bars, producing the translucent blur effect Large Titles depend on. |
|
|
9
|
+
| `largeTitleEnabled` | `true` | Shows the large title that collapses to the standard nav bar title as the user scrolls. |
|
|
10
|
+
|
|
11
|
+
Using only `largeTitleEnabled` causes the nav bar region to render empty for a moment before the title draws. Using `extendEdges` without `autoAdjustScrollViewInsets` pushes content behind the nav bar without compensating the ScrollView insets. All three must be present.
|
|
12
|
+
|
|
13
|
+
## iOS-only — use the `ios:` modifier
|
|
14
|
+
|
|
15
|
+
Large Title properties are iOS-only. On Android they either do nothing or raise compile-time errors. Always scope them with the `ios:` platform block in `config.cjs`, not as defaults that leak to Android.
|
|
16
|
+
|
|
17
|
+
## Global defaults in `config.cjs`
|
|
18
|
+
|
|
19
|
+
Rather than repeating the three classes on every `Window`, set them once at the Ti Element level so every iOS Window inherits the base behavior:
|
|
20
|
+
|
|
21
|
+
`./purgetss/config.cjs`
|
|
22
|
+
```js
|
|
23
|
+
module.exports = {
|
|
24
|
+
theme: {
|
|
25
|
+
Window: {
|
|
26
|
+
ios: {
|
|
27
|
+
apply: 'auto-adjust-scroll-view-insets extend-edges-all large-title-enabled'
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Generated style in `./purgetss/styles/utilities.tss`:
|
|
35
|
+
|
|
36
|
+
```tss
|
|
37
|
+
'Window[platform=ios]': { autoAdjustScrollViewInsets: true, extendEdges: [ Ti.UI.EXTEND_EDGE_ALL ], largeTitleEnabled: true }
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Individual windows now only need to override `largeTitleDisplayMode` when they want different collapse behavior (e.g. detail windows).
|
|
41
|
+
|
|
42
|
+
> **Why an `ios:` block and not an inline `ios:` prefix?** `auto-adjust-scroll-view-insets` and `extend-edges-all` are platform-specific classes — they only exist with `[platform=ios]` suffix in `utilities.tss`. The `ios:` block ensures PurgeTSS resolves the platform-suffixed version. See [apply-directive.md](apply-directive.md) → "Platform-Specific Classes".
|
|
43
|
+
|
|
44
|
+
## NavigationWindow example
|
|
45
|
+
|
|
46
|
+
`./app/views/index.xml`
|
|
47
|
+
```xml
|
|
48
|
+
<Alloy>
|
|
49
|
+
<NavigationWindow id="navWin">
|
|
50
|
+
<Window title="Home">
|
|
51
|
+
<ScrollView class="vertical content-w-screen content-h-auto">
|
|
52
|
+
<!-- Content starts below the nav bar automatically -->
|
|
53
|
+
</ScrollView>
|
|
54
|
+
</Window>
|
|
55
|
+
</NavigationWindow>
|
|
56
|
+
</Alloy>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The Window inherits `auto-adjust-scroll-view-insets`, `extend-edges-all`, and `large-title-enabled` from the `theme.Window.ios.apply` defaults above.
|
|
60
|
+
|
|
61
|
+
## TabGroup example
|
|
62
|
+
|
|
63
|
+
On iOS, `TabGroup` wraps each `Tab`'s Window in an **implicit NavigationWindow**. You do not declare the inner `NavigationWindow` yourself — iOS adds it. The three-property pattern applies identically:
|
|
64
|
+
|
|
65
|
+
`./app/views/index.xml`
|
|
66
|
+
```xml
|
|
67
|
+
<Alloy>
|
|
68
|
+
<TabGroup>
|
|
69
|
+
<Tab title="Home">
|
|
70
|
+
<Window title="Home">
|
|
71
|
+
<ScrollView class="vertical content-w-screen content-h-auto">
|
|
72
|
+
<!-- Each tab gets its own implicit NavigationWindow -->
|
|
73
|
+
</ScrollView>
|
|
74
|
+
</Window>
|
|
75
|
+
</Tab>
|
|
76
|
+
</TabGroup>
|
|
77
|
+
</Alloy>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Controlling the collapse behavior: `largeTitleDisplayMode`
|
|
81
|
+
|
|
82
|
+
`largeTitleDisplayMode` controls how the title behaves in the navigation stack:
|
|
83
|
+
|
|
84
|
+
| Mode | Constant | Behavior |
|
|
85
|
+
| --- | --- | --- |
|
|
86
|
+
| Automatic | `Ti.UI.iOS.LARGE_TITLE_DISPLAY_MODE_AUTOMATIC` | Inherits from previous window; collapses on scroll. |
|
|
87
|
+
| Always | `Ti.UI.iOS.LARGE_TITLE_DISPLAY_MODE_ALWAYS` | Title stays large regardless of scroll position. |
|
|
88
|
+
| Never | `Ti.UI.iOS.LARGE_TITLE_DISPLAY_MODE_NEVER` | Always uses the standard (small) title size. |
|
|
89
|
+
|
|
90
|
+
### Detail windows: use `large-title-display-mode-never`
|
|
91
|
+
|
|
92
|
+
Detail windows typically should not show a large title — it looks oversized for a secondary screen. PurgeTSS ships a utility class for this:
|
|
93
|
+
|
|
94
|
+
```xml
|
|
95
|
+
<Window class="large-title-display-mode-never" title="Detail">
|
|
96
|
+
<!-- Standard nav bar title, regardless of global largeTitleEnabled default -->
|
|
97
|
+
</Window>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
This overrides only the display mode, so the window still benefits from the inherited `autoAdjustScrollViewInsets` and `extendEdges` defaults.
|
|
101
|
+
|
|
102
|
+
## ScrollView pairing: `content-w-screen content-h-auto`
|
|
103
|
+
|
|
104
|
+
When Large Titles are active, the paired ScrollView needs its content area sized so iOS can shrink/grow the title as the user scrolls. The canonical pattern:
|
|
105
|
+
|
|
106
|
+
```xml
|
|
107
|
+
<ScrollView class="vertical content-w-screen content-h-auto">
|
|
108
|
+
<!-- children -->
|
|
109
|
+
</ScrollView>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
- `content-w-screen` → `contentWidth: Ti.UI.FILL`
|
|
113
|
+
- `content-h-auto` → `contentHeight: Ti.UI.SIZE`
|
|
114
|
+
|
|
115
|
+
Sizing the content height to `Ti.UI.SIZE` is what lets iOS determine whether there is enough content to allow the large title to collapse on scroll.
|
|
116
|
+
|
|
117
|
+
## Quick reference — class to property map
|
|
118
|
+
|
|
119
|
+
| Class | Property | Value |
|
|
120
|
+
| --- | --- | --- |
|
|
121
|
+
| `auto-adjust-scroll-view-insets` | `autoAdjustScrollViewInsets` | `true` |
|
|
122
|
+
| `extend-edges-all` | `extendEdges` | `[Ti.UI.EXTEND_EDGE_ALL]` |
|
|
123
|
+
| `large-title-enabled` | `largeTitleEnabled` | `true` |
|
|
124
|
+
| `large-title-enabled-false` | `largeTitleEnabled` | `false` |
|
|
125
|
+
| `large-title-display-mode-never` | `largeTitleDisplayMode` | `Ti.UI.iOS.LARGE_TITLE_DISPLAY_MODE_NEVER` |
|
|
126
|
+
| `content-w-screen` | `contentWidth` | `Ti.UI.FILL` |
|
|
127
|
+
| `content-h-auto` | `contentHeight` | `Ti.UI.SIZE` |
|
|
128
|
+
|
|
129
|
+
## Community-Discovered Patterns
|
|
130
|
+
|
|
131
|
+
### TabGroup implicit-NavigationWindow wrapping
|
|
132
|
+
|
|
133
|
+
A recurring source of confusion: iOS `TabGroup` already wraps each `Tab` in an implicit `NavigationWindow`. Manually nesting a `NavigationWindow` inside a `Tab` can produce a double nav bar or break `openWindow()` push transitions. Keep the markup flat — `Tab > Window` — and rely on the implicit wrapper.
|
|
134
|
+
|
|
135
|
+
### Detail windows should opt out, not opt in
|
|
136
|
+
|
|
137
|
+
When `theme.Window.ios.apply` sets `large-title-enabled` as a default, every pushed window inherits it. Apply `large-title-display-mode-never` on detail windows pushed via `openWindow()` so the parent keeps the collapse animation while detail screens render with a standard title. This mirrors Apple's own first-party app conventions (Settings, Mail).
|
|
138
|
+
|
|
139
|
+
### Cross-reference
|
|
140
|
+
|
|
141
|
+
The three-property pairing (`autoAdjustScrollViewInsets` + `extendEdges` + `largeTitleEnabled`) is also documented as a reusable global-defaults recipe in [apply-directive.md](apply-directive.md) under *Community-Discovered Patterns → Global Window defaults for Large Titles + ScrollView (iOS)*. Prefer that recipe over per-window repetition whenever the whole app uses Large Titles.
|
|
@@ -1,52 +1,138 @@
|
|
|
1
1
|
# Migration Guide
|
|
2
2
|
|
|
3
|
-
This guide
|
|
3
|
+
This guide mirrors the official PurgeTSS changelog (see the project `README.md` / `docs/index.md`). It walks through the upgrade-relevant changes from v7.2.6 through v7.6.0, flags breaking changes, and links each section to the reference files that cover the new surface area in depth.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Changelog source of truth: [https://github.com/macCesar/purgeTSS](https://github.com/macCesar/purgeTSS).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Upgrade to v7.6.0
|
|
10
|
+
|
|
11
|
+
v7.6.0 introduces three new CLI commands for app-asset generation plus two new `config.cjs` sections. None of the additions are breaking — existing projects continue to work untouched, and the new config sections are auto-injected on first run.
|
|
12
|
+
|
|
13
|
+
### New CLI commands
|
|
14
|
+
|
|
15
|
+
- **`brand` command** — generates the complete Titanium branding set (launcher icons, adaptive icons, iOS 18+ Dark and Tinted variants, marketplace artwork, optional notification and splash images) from logos auto-discovered in `./purgetss/brand/`. Works on both Alloy and Classic projects.
|
|
16
|
+
- **`images` command** — generates multi-density UI images (Android `res-*` densities plus iPhone `@1x` / `@2x` / `@3x` scales) from sources dropped into `./purgetss/images/`. Subdirectories are preserved, and short-path scope targeting lets you re-process individual files.
|
|
17
|
+
- **`semantic` command** — generates Titanium semantic colors (Light/Dark mode) into `app/assets/semantic.colors.json`. Two dispatch modes:
|
|
18
|
+
- **Tonal palette** (default): one base hex → 11 shades with mirror inversion and auto config mapping.
|
|
19
|
+
- **Single purpose-based color** (`--single`): explicit per-mode hex plus optional alpha; writes both the JSON entry AND a class mapping in `config.cjs` in one shot. Class name is auto-derived by stripping the `Color` suffix (e.g. `surfaceColor` → class `surface`). Smart in-place updates when a single name matches an existing palette shade.
|
|
20
|
+
|
|
21
|
+
### New `config.cjs` sections
|
|
22
|
+
|
|
23
|
+
- **`brand:` section** — configures padding percentages, background colors, and platform targets for the `brand` command.
|
|
24
|
+
- **`images:` section** — configures scale factors and output density mapping for the `images` command.
|
|
25
|
+
|
|
26
|
+
Percentages can be written as self-documenting strings (e.g. `'15%'`) or plain numbers. Both are accepted. These sections are auto-injected into older `config.cjs` files on the first run of v7.6.0.
|
|
27
|
+
|
|
28
|
+
### What to review
|
|
29
|
+
|
|
30
|
+
- If you previously generated app icons or multi-density images manually (or with third-party tooling), plan a migration session to replace that workflow with `brand` and `images`.
|
|
31
|
+
- If you maintain a `semantic.colors.json` by hand, back it up before running `semantic` — the command does smart in-place updates, but a backup is cheap insurance.
|
|
32
|
+
|
|
33
|
+
### Cross-references
|
|
34
|
+
|
|
35
|
+
- [`app-branding.md`](./app-branding.md) — full walkthrough of the `brand` command and the `./purgetss/brand/` convention.
|
|
36
|
+
- [`multi-density-images.md`](./multi-density-images.md) — `images` command, density mapping, and subdirectory behavior.
|
|
37
|
+
- [`semantic-colors.md`](./semantic-colors.md) — palette vs single-color modes, alpha handling, and config mapping.
|
|
38
|
+
- [`cli-commands.md#brand-command`](./cli-commands.md#brand-command)
|
|
39
|
+
- [`cli-commands.md#images-command`](./cli-commands.md#images-command)
|
|
40
|
+
- [`cli-commands.md#semantic-command`](./cli-commands.md#semantic-command)
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Upgrade to v7.5.3
|
|
45
|
+
|
|
46
|
+
v7.5.3 is a feature-and-polish release. No breaking changes.
|
|
6
47
|
|
|
7
|
-
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- **Appearance module** — a new `Appearance` export for Light/Dark/System mode switching with persistence. Exposed methods: `init()`, `set(mode)`, `get()`, `toggle()`.
|
|
51
|
+
- **Default font family classes** — `font-sans`, `font-serif`, and `font-mono` are generated automatically with platform-appropriate values (system sans, serif, and monospace stacks for iOS and Android).
|
|
52
|
+
- **XML validation** — the pre-validation pass now detects illegal `--` sequences inside XML comments, which previously produced cryptic downstream errors.
|
|
53
|
+
|
|
54
|
+
### What to review
|
|
55
|
+
|
|
56
|
+
- If you want runtime theme switching, wire up `Appearance.init()` at app boot and use `Appearance.toggle()` or `Appearance.set('dark')` where the UI exposes the control.
|
|
57
|
+
- If you had custom `font-sans` / `font-serif` / `font-mono` classes in `config.cjs`, check for collisions with the new auto-generated ones.
|
|
58
|
+
|
|
59
|
+
### Cross-references
|
|
60
|
+
|
|
61
|
+
- [`appearance-module.md`](./appearance-module.md) — full `Appearance` API, persistence behavior, and integration patterns.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Upgrade to v7.5.0
|
|
66
|
+
|
|
67
|
+
v7.5.0 adds `extend` support for component defaults and improves how `apply` directives are normalized. It also bumps Font Awesome. No breaking changes.
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
|
|
71
|
+
- **`extend` support for Window, View, and ImageView** — customize component defaults from `theme.extend` in `config.cjs`. Previously only a subset of components supported `extend`.
|
|
72
|
+
- **Shorthand `apply`** — `{ apply: '...' }` is automatically normalized, so the `default:` wrapper is now optional.
|
|
73
|
+
- **Property deduplication** — values pulled in via `apply` now win over static defaults instead of producing duplicate property entries in the generated TSS.
|
|
74
|
+
- **Automatic platform resolution** — classes referenced inside `ios:` / `android:` blocks automatically find their platform-specific version instead of requiring explicit disambiguation.
|
|
75
|
+
- **Font Awesome 7.2.0** bundled.
|
|
8
76
|
|
|
9
77
|
### Fixed
|
|
10
78
|
|
|
11
|
-
- `
|
|
79
|
+
- `extend.Window` was silently ignored in earlier versions — now honored.
|
|
80
|
+
- Duplicate `font` properties in generated output.
|
|
81
|
+
- Array-type properties generating output without `[ ]` notation.
|
|
12
82
|
|
|
13
|
-
|
|
83
|
+
### What to review
|
|
14
84
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
```
|
|
85
|
+
- If you previously worked around the `extend.Window` bug with manual TSS overrides, you can remove those now.
|
|
86
|
+
- If you previously wrote `{ default: { apply: '...' } }`, the shorter `{ apply: '...' }` form is equivalent.
|
|
87
|
+
- Diff your generated `utilities.tss` against the pre-upgrade version: property deduplication and the array-notation fix may produce cleaner output, which is expected.
|
|
88
|
+
|
|
89
|
+
### Cross-references
|
|
21
90
|
|
|
22
|
-
|
|
91
|
+
- [`customization-deep-dive.md`](./customization-deep-dive.md) — `theme.extend` patterns for Window, View, and ImageView defaults.
|
|
92
|
+
- [`apply-directive.md`](./apply-directive.md) — shorthand `apply` syntax and deduplication behavior.
|
|
23
93
|
|
|
24
|
-
|
|
94
|
+
---
|
|
25
95
|
|
|
26
|
-
|
|
96
|
+
## Upgrade to v7.4.0
|
|
27
97
|
|
|
28
|
-
|
|
29
|
-
|
|
98
|
+
v7.4.0 is the **Animation module expansion**. Nine new methods bring the Animation module to 15 total.
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
|
|
102
|
+
- **New methods**: `transition`, `pulse`, `sequence`, `swap`, `shake`, `snapTo`, `reorder`, `undraggable`, `detectCollisions`.
|
|
103
|
+
- **New utility classes**: `snap-back`, `snap-center`, `snap-magnet`, `keep-z-index`.
|
|
104
|
+
- **Delta-based drag for transformed views** — drag math now works correctly when the view already has a 2D transform applied.
|
|
105
|
+
- **Position normalization** and **property inheritance** from the Animation object — reduces boilerplate when sequencing multiple animations on the same view.
|
|
106
|
+
|
|
107
|
+
### What to review
|
|
108
|
+
|
|
109
|
+
- If you previously hand-rolled sequential animations with `Ti.UI.createAnimation` callbacks, consider porting them to `sequence` for readability.
|
|
110
|
+
- If you implemented ad-hoc drag/snap logic, compare it with `snapTo` + `detectCollisions` — the new pipeline handles z-index, collision detection, and snap-back without manual bookkeeping.
|
|
111
|
+
|
|
112
|
+
### Cross-references
|
|
113
|
+
|
|
114
|
+
- [`animation-system.md`](./animation-system.md) — full Animation module reference including all 15 methods and the snap / drag / collision utilities.
|
|
115
|
+
|
|
116
|
+
---
|
|
30
117
|
|
|
31
118
|
## Upgrade to v7.3.x
|
|
32
119
|
|
|
33
|
-
|
|
120
|
+
v7.3.0 introduced a **breaking file rename** plus XML validation and Classic Titanium compatibility improvements.
|
|
34
121
|
|
|
35
122
|
### Breaking Changes
|
|
36
123
|
|
|
37
|
-
-
|
|
124
|
+
- **`tailwind.tss` → `utilities.tss`** — the generated utilities output was renamed to reflect that PurgeTSS is a standalone toolkit, not a Tailwind port.
|
|
38
125
|
- Generated file: `purgetss/styles/utilities.tss`
|
|
39
126
|
- Distribution file: `dist/utilities.tss`
|
|
40
127
|
|
|
41
128
|
### Major Improvements
|
|
42
129
|
|
|
43
|
-
- XML syntax validation now catches malformed Alloy XML before processing.
|
|
44
|
-
- `deviceInfo()` now works in both Alloy and Classic
|
|
45
|
-
- The dependency on `Alloy.isTablet` and `Alloy.isHandheld` was removed.
|
|
130
|
+
- **XML syntax validation** — pre-validation now catches malformed Alloy XML before processing, with line numbers and fix suggestions.
|
|
131
|
+
- **Classic Titanium compatibility** — `deviceInfo()` now works in both Alloy and Classic projects. The dependency on `Alloy.isTablet` and `Alloy.isHandheld` was removed.
|
|
46
132
|
|
|
47
133
|
### Required Actions
|
|
48
134
|
|
|
49
|
-
1. Update any scripts, docs, or project references that still point to the previous
|
|
135
|
+
1. Update any scripts, docs, or project references that still point to the previous `tailwind.tss` filename.
|
|
50
136
|
2. Ensure your environment is running Node.js 20 or higher.
|
|
51
137
|
3. If you use Font Awesome 7, verify the project after upgrade so PurgeTSS can handle the new `--fa:` properties.
|
|
52
138
|
|
|
@@ -55,7 +141,7 @@ PurgeTSS v7.3 introduced a file rename and improved error handling.
|
|
|
55
141
|
purgetss/styles/utilities.tss
|
|
56
142
|
```
|
|
57
143
|
|
|
58
|
-
### Recommended
|
|
144
|
+
### Recommended upgrade command
|
|
59
145
|
|
|
60
146
|
```bash
|
|
61
147
|
npm install -g purgetss@latest
|
|
@@ -68,9 +154,60 @@ npm uninstall -g purgetss
|
|
|
68
154
|
npm install -g purgetss
|
|
69
155
|
```
|
|
70
156
|
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Upgrade to v7.2.7
|
|
160
|
+
|
|
161
|
+
v7.2.7 is a security and maintenance release.
|
|
162
|
+
|
|
163
|
+
### Added / Updated
|
|
164
|
+
|
|
165
|
+
- **Security fixes** — command injection in `glob`, prototype pollution in `js-yaml`.
|
|
166
|
+
- **Dependency cleanup** — reduces installation size by ~45MB, removed unused packages.
|
|
167
|
+
- **Titanium SDK 13.1.0.GA** — new utility classes for `navBarColor`, `forceBottomPosition`, `multipleWindows`.
|
|
168
|
+
|
|
169
|
+
### What to review
|
|
170
|
+
|
|
171
|
+
- If you pinned PurgeTSS to a pre-7.2.7 version for reproducibility, plan the bump: the security advisories affect any environment that resolves transitive `glob` or `js-yaml`.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Upgrade to v7.2.6
|
|
176
|
+
|
|
177
|
+
v7.2.6 is a minor refresh release.
|
|
178
|
+
|
|
179
|
+
### Updated
|
|
180
|
+
|
|
181
|
+
- Font Awesome bumped to version 7.1.0.
|
|
182
|
+
- Simplified flag property names in `utilities.tss`.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Community-Discovered Patterns
|
|
187
|
+
|
|
188
|
+
Issues reported and patched outside the official changelog. These are documented here so users upgrading through multiple versions know to re-test the affected surface area. **Needs confirmation** — the version in which each fix shipped has not been verified against the official changelog at time of writing.
|
|
189
|
+
|
|
190
|
+
### `backgroundGradient.colors` serialization with arrays of objects
|
|
191
|
+
|
|
192
|
+
Certain versions of PurgeTSS could produce broken output in `utilities.tss` when a custom rule defined `backgroundGradient.colors` as an array of `{ color, offset }` objects, for example:
|
|
193
|
+
|
|
194
|
+
```javascript
|
|
195
|
+
const colors = [
|
|
196
|
+
{ color: '#132C50', offset: 0 },
|
|
197
|
+
{ color: '#0A1529', offset: 1 },
|
|
198
|
+
];
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
If you previously worked around this by inlining the gradient directly in TSS, re-test after upgrading: current versions serialize the array correctly. The exact version in which this was patched is not called out in the official changelog — treat this as a user-observed fix until confirmed.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
71
205
|
## Quick Checklist
|
|
72
206
|
|
|
73
|
-
- Replace every legacy
|
|
74
|
-
- Verify Node.js 20+ before upgrading.
|
|
207
|
+
- Replace every legacy `tailwind.tss` reference with `utilities.tss`.
|
|
208
|
+
- Verify Node.js 20+ before upgrading past v7.3.0.
|
|
75
209
|
- Rebuild after updating `config.cjs` or custom gradient rules.
|
|
76
210
|
- Re-test any Classic Titanium code that depends on `deviceInfo()`.
|
|
211
|
+
- After v7.5.0: diff generated `utilities.tss` to confirm property deduplication produces the expected output.
|
|
212
|
+
- After v7.5.3: consider wiring `Appearance.init()` at app boot if you want runtime Light/Dark switching.
|
|
213
|
+
- After v7.6.0: run `brand`, `images`, and `semantic` once in a scratch project before pointing them at production assets, so you can preview the output layout.
|