Conversation
…on strategies - Added comprehensive bundle size optimization guide in BUNDLE-OPTIMIZATION.md. - Implemented static optimization for Vercel in STATIC-OPTIMIZATION.md. - Updated package.json and package-lock.json for new dependencies and scripts. - Introduced new scripts for JSON icon generation and bundle analysis. - Refactored icon loading components to utilize PublicJSONIcon for better performance. - Enhanced documentation and README with optimization details and quick commands.
…oader to handle undefined cases
# Conflicts: # package-lock.json # package.json # packages/ignition/src/algolia-indexer.ts # packages/ignition/src/app/[lang]/(content)/icons/[collectionid]/[iconid]/page.tsx # packages/ignition/src/app/[lang]/(content)/icons/[collectionid]/layout.tsx # packages/ignition/src/app/[lang]/(content)/icons/[collectionid]/page.tsx # packages/ignition/src/app/[lang]/(content)/icons/page.tsx # packages/ignition/src/app/[lang]/(content)/opengraph/[...params]/route.tsx # packages/ignition/src/app/[lang]/(sitemaps)/iconsitemap/[collectionid]/sitemap.xml/route.ts # packages/ignition/src/app/[lang]/(sitemaps)/sitemap.xml/route.ts # packages/ignition/src/app/components/icons/get-icons-data.ts # packages/ignition/src/app/components/icons/icon-loader.tsx # packages/ignition/src/app/components/icons/icons-collection/collection-title-box.tsx # packages/ignition/src/app/components/icons/icons-collection/content.tsx # packages/ignition/src/app/components/icons/icons-collection/icon-info/info-handler.tsx # packages/ignition/src/app/components/icons/icons-collection/icon-info/loader.tsx # packages/ignition/src/app/components/icons/icons-collections-tastes.tsx # packages/ignition/src/app/components/opengraph.tsx # packages/ignition/src/app/components/search/search-hits.tsx # packages/ignition/src/app/components/sidebar/sidebar-left.tsx # packages/ignition/src/app/components/usage/state-management/index.tsx # packages/ignition/src/app/components/usage/utils.tsx # packages/ignition/src/app/sitemap_index.xml/route.ts # packages/ignition/src/app/utils/svg-as-json.ts # packages/ignition/src/middleware.ts # packages/ignition/src/statics-generator/index.ts # packages/ignition/src/statics-generator/manifest-loader.ts # packages/ignition/src/statics-generator/tastes-loader.ts
- Upgrade tailwindcss dependency from 3.4.1 to 4.2.1 - Add @tailwindcss/postcss as devDependency - Replace config() API with theme() API for TW v4 PluginAPI - Remove @rocketclimb/tw-utils dependency (sanitize inlined) - Remove prefix interpolation (TW v4 handles prefixes via CSS) - Infer PluginAPI type from createPlugin Parameters<> - Rewrite integration tests to use @tailwindcss/postcss + @plugin - Update config-handler test mocks for theme() API BREAKING CHANGE: Plugin now requires tailwindcss >=4.0.0
TW v4 handles prefix automatically for addComponents() output. Users configure prefix via @import 'tailwindcss' prefix(xp); and the engine automatically prefixes generated selectors. No manual prefix handling needed in plugin code.
Integration tests (22): - Default class: inline-block, padding, .icon-ri scoping - Size classes: test.each for all 11 sizes (xs through 7xl) - Variants: outlined/filled with stroke/fill CSS rules - Colors: sky-500 default color - Safelisted: icon-default always present without content - CSS structure: no unresolved @apply, proper @layer, clean output Config-handler edge cases (10 new): - Empty, null, string-only colors - DEFAULT color handling - No baseStyle, no variants - Auto-500 shade selection and first-shade fallback - Whitespace sanitization - Compound color-size splitting (sky-500-base) Styles-generator edge cases (8 new): - Chaining, class merging, ordering - Custom class prefix - Native mode: prop merging, base classes, variant skipping Test count: 14 → 57 (4x increase)
- Upgrade nativewind from 2.0.11 to 4.2.2 (stable, TW v4 compat) - Update icons peerDeps: nativewind >=4, tailwindcss >=4 - Remove @rocketclimb/tw-utils from root and icons dependencies - Add packages/native-test Expo app for native icon verification - NativeWind v4.2.2 + TW v4 + rocketicons showcase - Test page: 11 sizes, variants, colors, dark mode toggle - iOS only (macOS dev team), isolated from root workspaces
Three v4 migration regressions in ignition: - Unlayered html/body bg rule was beating @layer utilities, so `bg-background dark:bg-background-dark` on <body> was overridden by `background-color: var(--color-white)` even when <html>.dark was set — body rendered white in dark mode, header (slate-900/0.7) looked gray over it, docs content area looked light. Wrap base styles in @layer base. - `var(--spacing-16)` is undefined in v4 (only `--spacing` is exposed); the invalid calc dropped `.content-area` height, so the page scrolled instead of the inner container, and the lg:static header scrolled away. Switched to `calc(var(--spacing) * 16)`. - `.modal-context` had `min-h: 100vh` (a floor), so on the home page the wrapper grew past viewport and the page scrolled. Cap at `height: 100vh` on lg:, and add `lg:min-h-0` down the flex chain so the cap propagates to the overflow-y-auto child. Also dropped ~180 lines of duplicate component definitions that were already inside @layer components above. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat: Tailwind CSS v4 migration (rocketicons + ignition + nativewind v4)
CI for the v0.5.0 prepare-release was failing in `Run tests` because @rocketicons/tailwind's integration test (`packages/tailwind/src/index.test.ts`) loads `@tailwindcss/postcss`, which loads `@tailwindcss/oxide`, which loads a per-platform native binary (`@tailwindcss/oxide-linux-x64-gnu` on the runner) declared as an optional dependency. `actions/cache` was restoring node_modules from a pre-TW-v4 cache via `restore-keys`, then `npm install` ran but didn't add the missing Linux variant — known npm bug npm/cli#4828. `npm ci` wipes node_modules and installs strictly from the lockfile (which already lists all platform variants), so the right binary lands every time. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
fix(cicd): use npm ci so TW v4 oxide native binary resolves on Linux
The previous prepare-release run still failed at the @rocketicons/tailwind integration test even with `npm ci` because the runner was on Node 18, and @tailwindcss/oxide@4.2.1 (TW v4's native Rust core, loaded via @tailwindcss/postcss) requires Node >=20 — its native binary refuses to load on 18 with "Cannot find native binding". Same constraint applies to Next.js 15 and the rest of the v4 stack we just adopted. Changes: - All four GitHub workflows: NODE_VERSION 18.x -> 22.x. - Add `.nvmrc` pinning local dev to Node 22 (matches CI). - Set engines.node ">=20" on the three published packages (rocketicons, @rocketicons/tailwind, @rocketicons/utils) so consumers installing the new release on Node 18 get a clear warning instead of a runtime crash from oxide. Verified locally on Node 22.19.0: - npm run test-all: 79 tests pass (utils 22 + tailwind 57) - npm run lint-all: no warnings/errors - npm run --workspaces typecheck: all 6 packages clean - npm run build-all: ignition Next 15 build completes Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4 tasks
fix(cicd): bump stack to Node 22 (TW v4 / @tailwindcss/oxide need >=20)
…nt failures
Two issues bundled because they were exposed by the same release attempt:
1. `.versions.json` was missing entries for `utils`, `cli`, and
`native-test` (added to the workspace after the last release).
`tailwind` was also stale (0.2.5 vs current 0.2.6). When the releaser
walks commits since the last tag and accumulates per-package bump
types, it then calls `bumpVersion(versions[pkgName], type, true)` —
for missing entries that's `bumpVersion(undefined, ...)`, which
crashes inside `VERSION_MATCHER.exec(undefined)` with a confusing
TypeError. The crash happened before the `-release` marker logic, so
the resulting workflow path was wrong, no .tgz was produced, and the
artifact upload failed with "Input required and not supplied: path".
2. The workflow's bash glue masked the crash. The previous step was:
echo "TAG_NAME=$(npm run release | grep v)" >> $GITHUB_OUTPUT
When `npm run release` crashed and `grep v` matched nothing, the
pipeline failed but the outer `echo` succeeded, so the step exited 0
with an empty TAG_NAME. Subsequent steps silently produced broken
artifacts. This is exactly the "happy-path-only" CI bug class that
makes release pipelines untrustworthy.
Changes:
- `.versions.json`: add `utils`, `cli`, `native-test` entries with
their current package.json versions; correct `tailwind` to 0.2.6.
- `prepare-release.yml`:
* New "Validate .versions.json is in sync with workspaces" step
runs before the releaser and fails fast with a clear actionable
message if any workspace is missing from .versions.json.
* Rewrote "Prepare tag or release" to use `set -euo pipefail`,
capture releaser output to a file, extract the tag with a strict
regex (`^v[0-9]+\.[0-9]+\.[0-9]+(-[a-z0-9]+)*`), and explicitly
fail the step if no tag was produced. Also annotates a clear
`::error::` message instead of swallowing the crash.
* Same hardening on "Get generated package name" so an empty
*.tgz directory produces a clear error instead of the cryptic
"Input required and not supplied: path" from upload-artifact.
* Fixed long-standing typo "genereated" -> "generated".
After this lands, a future workspace addition that forgets
.versions.json will fail in the validation step with a one-line
actionable message, and any future releaser crash will surface
immediately at its origin instead of corrupting downstream artifacts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ilent-failures fix(cicd): sync .versions.json + harden release pipeline against silent failures
Disables the publish-ignition jobs in prepare-release.yml and release.yml with `if: false` until the rocketicons.io hosting story is settled. The project has a half-finished Vercel-to-AWS-Amplify migration in flight (amplify.yml is present, amplify/ scaffold exists), the VERCEL_TOKEN org secret is from May 2024 and likely expired, and rocketicons.io currently returns NXDOMAIN — so the Vercel deploy step has been failing every release attempt without changing anything users see. Inline comments on both workflows explain why and point at the re-enable path. Crucially, npm publish is independent of the Vercel jobs in release.yml, so disabling them does NOT block the rocketicons package release. Also: - Add release-output.log to .gitignore (the file the hardened "Prepare tag or release" step writes to). The releaser auto-pushed this temp file in commit a4fbdd0; removing it from tracking here. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
…ignore chore(cicd): skip Vercel ignition deploys + ignore release-output.log
The latest prepare-release run looked successful but never uploaded the `tag-artifact` artifact. release.yml depends on it (actions/download-artifact -name tag-artifact, then `cat .tagrc` to read PENDING_TAG) — without it, the merge-to-main publish flow would fail immediately on "Download tag artifact". Root cause: actions/upload-artifact@v4 silently skips hidden files unless `include-hidden-files: true` is set; `.tagrc` (with the leading dot) is treated as hidden. The step exits "success" with only a warning in the log, so we never noticed. Fix: set `include-hidden-files: true` on the tag-artifact upload step. Verified on the failed run 25532192649: tag-artifact is missing from the artifact list while data-helpers and deployable-artifacts (both contain only non-hidden paths) uploaded fine. Inline comment in the workflow links to upload-artifact's documented hidden-file behavior so the next time we add a dotfile artifact, the gotcha is obvious. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix(cicd): upload .tagrc despite upload-artifact@v4 hiding dotfiles
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings
developup tomainfor the next publishedrocketiconsrelease. Spans 71 non-merge commits sincev0.4.1-release(Jun 2024), with the headline being first-class Tailwind CSS v4 support across the rocketicons plugin, the React Native runtime (NativeWind v4), and the ignition docs site.This is the first release-targeting PR since Sep 2024.
What lands
Tailwind v4 ecosystem
@rocketicons/tailwindplugin: full migration to TW v4 (@plugin,@theme,@custom-variant, prefix support). 57 new plugin tests.rocketiconsruntime + NativeWind: bumped v2 → v4.2.2; new Exponative-testapp pinning the v4 path against regressions.tailwind.config.ts) and to Next.js 15 async-paramsAPI.47d225f30):@rocketicons/tailwindnow requirestailwindcss >=4. Note: the releaser does not auto-major-bump onBREAKING CHANGE:footers — predicted bump isv0.5.0-release. If we want a true1.0.0we'd have to hand-edit the bumped versions before merging this PR.CLI + tooling
@rocketicons/clicommands (71c21b5db,1f32f1623,14140d555)63cfe9e4e,3e8627b99,e74712c9f)a7e40ad34)Icons
feat(icons):package type now exposesIconTreedatafix(icons):correct handling of tailwind prefixIgnition fixes (post-v4-migration)
fix(ignition):dark mode + sticky header (this PR's last regression batch)fix(ignition):load performance, search icons, static page generationfix:hover state regression on state pageDeployment / CI
.npmrc-based registry auth fix for monorepo workspacessetup.shimprovementsPredicted CI behavior
prepare-release.ymlwill run on this PR (it triggers on opened/sync againstmain):npx rocketclimb-sh releaserwalks all 71 commits sincev0.4.1-release:feat→ minor, others → patch)v0.4.1→v0.5.0-release(the-releasesuffix is guaranteed becausepackages/icons,packages/core,packages/tailwindall have substantive changes since the last tag)CHANGELOG.mdper packageci(releaser): bump packages versions and update changelog for developcommit directly ontodevelop— this is intentional and matches the existing pattern (visible in develop history)release-notes.md.tgzfor theRelease PackagesworkflowWhen this PR merges to
main:release.ymlreads the tag artifact, creates thev0.5.0-releasegit tag-release:tar zxf rocketicons-*.tgz && (cd package && npm publish)→rocketicons@0.5.0published to npm (using the newNPM_TOKENorg secret rotated 2026-05-08)release-notes.mdVERCEL_TOKENis from May 2024 — may have expired; if so the Vercel step fails after npm publish succeeded, and we just rotate that token and re-run the failed job)Pre-merge checklist
prepare-releaseworkflow completes greenpackages/icons/package.jsonfor the publishedrocketiconsversion)release-notes.mdreads cleanly1.0.0major bump (because of the TW v4 breaking change), manually edit the bumped versions in a follow-up commit before merging