Skip to content

feat(@poupe/tailwindcss): v0.6.0 - MD3 Expressive Shape System#457

Draft
amery wants to merge 2 commits intomainfrom
pr-amery-tailwindcss-shapes
Draft

feat(@poupe/tailwindcss): v0.6.0 - MD3 Expressive Shape System#457
amery wants to merge 2 commits intomainfrom
pr-amery-tailwindcss-shapes

Conversation

@amery
Copy link
Copy Markdown
Contributor

@amery amery commented Jun 29, 2025

@poupe/tailwindcss v0.6.0 - MD3 Expressive Shape System

Major release featuring a complete redesign of the Material Design 3 shape system with abbreviated semantic utilities, reducing CSS size from 71KB to ~6KB while adding support for multiple shape families and asymmetric corner control.

🎨 What's New

Abbreviated Semantic Shape System

  • Optimized implementation reducing CSS from 71KB to ~6KB
  • Clearer, more intuitive utility names balancing clarity with brevity
  • Default to rounded shapes (most common case)

Multiple Shape Families

  • Rounded (default): .shape-lg, .shape-xl
  • Squircle: iOS-style super-elliptical corners .shape-squircle-lg
  • Cut: Angled corners .shape-cut-sm
  • Concave: Inward curved corners (experimental)
  • Convex: Enhanced rounded corners with 1.5x multiplier

Asymmetric Corner Control

  • Individual corners: .shape-lg-tl, .shape-md-br
  • Grouped corners: .shape-lg-top, .shape-xl-left
  • Dynamic values: .shape-[20px], .shape-tl-[40px]

Enhanced Component Shapes

<button class="shape-button">MD3 Button</button>
<div class="shape-card">Card Content</div>
<button class="shape-fab">FAB</button>

💔 Breaking Changes

Shape Utility Naming

  • .shape-rounded-lg.shape-lg
  • .shape-rounded-lg-t.shape-lg-top
  • .shape-squircle.shape-squircle-{scale}
  • .shape-top-square.shape-{scale}-bottom

Shape Scale

Old scale names → New abbreviated names:

  • extra-smallxs
  • smallsm
  • mediummd
  • largelg
  • extra-largexl

Component shapes remain unchanged (e.g., .shape-button, .shape-card).

🚀 Migration Guide

<!-- Old -->
<div class="shape-rounded-large">...</div>
<div class="shape-rounded-large-t">...</div>
<div class="shape-squircle">...</div>

<!-- New -->
<div class="shape-lg">...</div>
<div class="shape-lg-top">...</div>
<div class="shape-squircle-lg">...</div>

📦 Installation

npm install @poupe/tailwindcss@0.6.0

🔧 Technical Improvements

  • Dedicated shape modules for better maintainability
  • Progressive enhancement with automatic fallbacks
  • Consistent CSS variable usage enabling runtime customization
  • Updated to TailwindCSS v4.1.11

📚 Documentation

Full documentation and examples available in:

✅ Testing

All tests passing (148 tests) with comprehensive coverage for the new shape system.

Summary by CodeRabbit

  • New Features

    • Introduced a redesigned, compact, and semantically clear shape utility system, reducing CSS size from 71KB to ~6KB.
    • Added new shape families: squircle, cut, concave, convex, and enhanced rounded shapes with size variants.
    • Enabled fine-grained control with corner-specific and directional shape utilities.
    • Added support for dynamic and arbitrary border-radius values using TailwindCSS v4 syntax.
    • Provided new semantic component shape utilities and improved CSS variable customization.
  • Bug Fixes

    • Improved browser compatibility for advanced shape utilities.
  • Documentation

    • Updated and expanded documentation and migration guides to reflect the new shape system and utility naming conventions.
  • Chores

    • Upgraded dependencies and refreshed development tools.
    • Updated ESLint configuration for CSS baseline support.
  • Tests

    • Revised and expanded tests to align with the new shape utility system.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Jun 29, 2025

Walkthrough

This update introduces a comprehensive redesign of the shape system in the @poupe-tailwindcss package. The previous verbose and mask-image-based squircle utilities are replaced with a new, semantic, CSS variable-driven system that uses border-radius for shapes. The change adds new shape families, corner-specific utilities, dynamic value support, and updates all related documentation, tests, and configuration.

Changes

File(s) Change Summary
src/theme/shape-semantic.ts, src/theme/shape-match-utilities.ts, src/theme/shapes.ts Added new modules for semantic shape utilities, match-based utility generation, and shape constants/functions supporting the new system.
src/theme/components.ts Removed previous shape logic and replaced with delegation to new semantic shape utilities.
src/theme/plugin.ts Added dynamic shape utilities to the plugin function.
src/theme/theme.ts Integrated semantic shape constants into theme constants.
src/assets/default.css, src/assets/style.css Replaced old shape classes with new CSS variable-based border-radius utilities; added new shape families and corner-specific classes.
src/theme/__tests__/components.test.ts Updated tests to reflect new utility structure and removed mask-image/squircle-specific checks.
AGENT.md, README.md Rewrote documentation to describe the new, concise, semantic shape utility system, migration guide, and usage.
CHANGELOG.md Documented the 0.6.0 release, detailing the shape system redesign, breaking changes, and technical improvements.
eslint.config.mjs Added a rule for CSS baseline usage in CSS files.
package.json Bumped version from 0.5.0 to 0.6.0.

Sequence Diagram(s)

sequenceDiagram
  participant Developer
  participant TailwindCSS
  participant ShapeSemantic
  participant CSS

  Developer->>TailwindCSS: Uses new .shape-* utilities in markup
  TailwindCSS->>ShapeSemantic: Looks up utility class (e.g., .shape-lg, .shape-squircle-md)
  ShapeSemantic->>CSS: Generates border-radius (and variables) for requested shape
  CSS-->>Developer: Applies correct shape style via CSS variables
Loading

Possibly related PRs

  • poupe-ui/poupe#448: Introduced the initial MD3 shape system and squircle utilities; this PR is a direct redesign and extension of that system.

Suggested labels

enhancement, tailwindcss

Poem

In the garden of shapes, a rabbit hops with glee,
Out with the old, in with border-radius and glee!
Squircles and cuts, now easy to command,
With variables and corners, all shapes at hand.
CSS is lighter, the docs are bright—
Hop along, shapes, you fit just right!
🐇✨

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🔭 Outside diff range comments (1)
packages/@poupe-tailwindcss/src/assets/default.css (1)

776-781: z-index: --value(...) is invalid in final CSS output

z-index expects an integer.
--value() is Tailwind’s author-time placeholder that should have been resolved by the plugin build step. Shipping it to the browser results in an illegal declaration that is simply dropped, so .scrim-* ends up with no stacking context at all.

-  z-index: --value(integer, [integer]);
+  /* plugin should have inlined the integer here – e.g. 950 */
+  z-index: var(--md-z-scrim-base); /* or a generated literal */

Please double-check the shape-/scrim utility generator so placeholders are replaced before writing default.css.

🧹 Nitpick comments (4)
packages/@poupe-tailwindcss/src/theme/shapes.ts (1)

274-294: Experimental concave implementation with appropriate warnings.

The function correctly warns users about its experimental status. Consider tracking the TODO for proper mask implementation.

Would you like me to create an issue to track the implementation of proper concave corner masks?

packages/@poupe-tailwindcss/src/assets/default.css (3)

849-856: Redundant utilities inflate bundle size

shape-none and shape-rounded-none are byte-identical except for two custom-property annotations that do not affect computed style for the default family (rounded). Keeping both multiplies the CSS by ~1 KiB when repeated across every corner variant.

If the generator always sets --md-shape-family, you can safely drop the plain shape-* variants or alias them via @apply, e.g.

-.shape-rounded-none { … }
+.shape-rounded-none { @apply shape-none; }

This shrinks the file considerably without functional loss.


1070-1082: Border-radius 14998.5px is excessive & harms rounding precision

The generator doubles the full radius (9999 px * 1.5) to obtain a “convex” look. Browsers clamp radii to the smallest of width/height, so anything above 9999px on most elements is equivalent to 9999px but harder to read and gzip-compress.

Recommend capping to 9999px (or simply 50%) for clarity:

-border-radius: var(--md-shape-full, 14998.5px);
+border-radius: var(--md-shape-full, 9999px); /* or 50% */

2921-2929: Missing shape-* alias utilities for new families

You added base aliases for shape-rounded, shape-squircle, etc., but not for recently introduced families (concave, convex, cut). Align with existing pattern for consistency & discoverability:

.shape-cut     { --md-shape-family: cut; }
.shape-concave { --md-shape-family: concave; }
.shape-convex  { --md-shape-family: convex; }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f410e7 and 2ef8ff2.

📒 Files selected for processing (10)
  • packages/@poupe-tailwindcss/AGENT.md (1 hunks)
  • packages/@poupe-tailwindcss/CHANGELOG.md (2 hunks)
  • packages/@poupe-tailwindcss/README.md (1 hunks)
  • packages/@poupe-tailwindcss/eslint.config.mjs (1 hunks)
  • packages/@poupe-tailwindcss/package.json (1 hunks)
  • packages/@poupe-tailwindcss/src/assets/default.css (13 hunks)
  • packages/@poupe-tailwindcss/src/assets/style.css (13 hunks)
  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts (2 hunks)
  • packages/@poupe-tailwindcss/src/theme/components.ts (3 hunks)
  • packages/@poupe-tailwindcss/src/theme/shapes.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
`**/*.{js,ts,css,json}`: Use 2 spaces for indentation, Unix (LF) line endings, U...

**/*.{js,ts,css,json}: Use 2 spaces for indentation, Unix (LF) line endings, UTF-8 charset, single quotes for strings, always use semicolons, 1tbs (one true brace style), always use parentheses for arrow functions, max 78 characters preferred for line length, TSDoc format for documentation comments, ES modules (type: 'module'), camelCase for variables/functions, PascalCase for types/interfaces, always insert a final newline, and always trim trailing whitespace.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/package.json
  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts
  • packages/@poupe-tailwindcss/src/theme/components.ts
  • packages/@poupe-tailwindcss/src/assets/default.css
  • packages/@poupe-tailwindcss/src/theme/shapes.ts
  • packages/@poupe-tailwindcss/src/assets/style.css
`**/*.{test.ts,spec.ts}`: Test files must be named with .test.ts or .spec.ts extensions.

**/*.{test.ts,spec.ts}: Test files must be named with .test.ts or .spec.ts extensions.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts
`**/__tests__/**/*`: Test files may be located in __tests__ directories or colocated with source files.

**/__tests__/**/*: Test files may be located in tests directories or colocated with source files.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts
`**/*.md`: For AGENT.md and README.md files, format lists with sub-bullets for m...

**/*.md: For AGENT.md and README.md files, format lists with sub-bullets for multi-item lists and dependencies, keep single-line descriptions and command descriptions on one line, be consistent with list item punctuation, add a blank line after section headings, and prefer 'with' over 'via' for relationships.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/CHANGELOG.md
  • packages/@poupe-tailwindcss/README.md
  • packages/@poupe-tailwindcss/AGENT.md
`packages/@poupe-tailwindcss/AGENT.md`: Contains TailwindCSS integration details for the @poupe-tailwindcss package.

packages/@poupe-tailwindcss/AGENT.md: Contains TailwindCSS integration details for the @poupe-tailwindcss package.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/AGENT.md
`packages/@poupe-tailwindcss/src/assets/default.css`: src/assets/default.css sho...

packages/@poupe-tailwindcss/src/assets/default.css: src/assets/default.css should be a complete example with Material Design 3 variables, full set of CSS custom properties, and all utilities with example theme colors, generated from build.config.ts.

📄 Source: CodeRabbit Inference Engine (packages/@poupe-tailwindcss/AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/assets/default.css
`packages/@poupe-tailwindcss/src/assets/style.css`: src/assets/style.css should ...

packages/@poupe-tailwindcss/src/assets/style.css: src/assets/style.css should provide a minimal TailwindCSS v4 setup with surface utilities, shadow and elevation system, and scrim overlay utilities, but no theme colors.

📄 Source: CodeRabbit Inference Engine (packages/@poupe-tailwindcss/AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/assets/style.css
🧠 Learnings (11)
📓 Common learnings
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages must implement Material Design 3 principles: dynamic color system with theme tokens, tonal elevation, accessibility-first approach, responsive design, and consistent motion and interaction.
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict TypeScript practices, including explicit type annotations for union types and strict mode enabled.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The plugin supports configuration via tailwind.config.js, allowing customization of utility prefixes, color overrides, and surface utility generation.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
packages/@poupe-tailwindcss/package.json (11)
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict TypeScript practices, including explicit type annotations for union types and strict mode enabled.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages are published independently to npm and must maintain backwards compatibility within major versions, following semantic versioning strictly.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The plugin supports configuration via tailwind.config.js, allowing customization of utility prefixes, color overrides, and surface utility generation.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The theme system is built on @poupe/theme-builder, supporting reactive theme switching and CSS variable-based theming.
packages/@poupe-tailwindcss/eslint.config.mjs (11)
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict TypeScript practices, including explicit type annotations for union types and strict mode enabled.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All example output CSS files (examples/*/output.css) are generated via the TailwindCSS CLI and are intended for human and browser testing, not for direct modification.
Learnt from: amery
PR: poupe-ui/poupe#47
File: package.json:16-17
Timestamp: 2024-12-02T02:55:16.072Z
Learning: ESLint version 9.x is in use and compatible with our codebase.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts (11)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-nuxt/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:07.095Z
Learning: Test Nuxt modules for SSR compatibility, auto-import functionality, color mode integration, hydration correctness, and compatibility with different Nuxt configurations.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict TypeScript practices, including explicit type annotations for union types and strict mode enabled.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: amery
PR: poupe-ui/poupe#116
File: packages/theme-builder/src/core.ts:87-90
Timestamp: 2025-01-12T11:29:26.546Z
Learning: In the theme-builder package, there are two different implementations of `rgbFromArgb()`:
1. In core.ts: Returns RGB values wrapped in `rgb()` for general CSS usage
2. In tailwind-common.ts: Returns space-separated RGB values without wrapper specifically for Tailwind CSS variables
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Components must export both default and typed props, using TypeScript's 'defineProps' with proper types.
packages/@poupe-tailwindcss/CHANGELOG.md (14)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages must implement Material Design 3 principles: dynamic color system with theme tokens, tonal elevation, accessibility-first approach, responsive design, and consistent motion and interaction.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The 'useRipple' composable handles Material Design ripple effects, including event handling, animation cleanup, and integration with the .ripple-effect utility.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
packages/@poupe-tailwindcss/README.md (15)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages must implement Material Design 3 principles: dynamic color system with theme tokens, tonal elevation, accessibility-first approach, responsive design, and consistent motion and interaction.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Interactive surface utilities (e.g., .interactive-surface-*) automatically generate hover, focus, and pressed state layers with proper transitions, ensuring Material Design 3 state feedback is consistent and configurable.
packages/@poupe-tailwindcss/src/theme/components.ts (19)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict TypeScript practices, including explicit type annotations for union types and strict mode enabled.
Learnt from: amery
PR: poupe-ui/poupe#116
File: packages/theme-builder/src/core.ts:87-90
Timestamp: 2025-01-12T11:29:26.546Z
Learning: In the theme-builder package, there are two different implementations of `rgbFromArgb()`:
1. In core.ts: Returns RGB values wrapped in `rgb()` for general CSS usage
2. In tailwind-common.ts: Returns space-separated RGB values without wrapper specifically for Tailwind CSS variables
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Utility functions should support parsing CSS property strings into structured data and formatting structured data back into CSS strings, including handling unit conversions and calculations.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Type safety for design tokens is ensured through TypeScript support.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Components must export both default and typed props, using TypeScript's 'defineProps' with proper types.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
packages/@poupe-tailwindcss/AGENT.md (12)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages must implement Material Design 3 principles: dynamic color system with theme tokens, tonal elevation, accessibility-first approach, responsive design, and consistent motion and interaction.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Interactive surface utilities (e.g., .interactive-surface-*) automatically generate hover, focus, and pressed state layers with proper transitions, ensuring Material Design 3 state feedback is consistent and configurable.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
packages/@poupe-tailwindcss/src/assets/default.css (13)

undefined

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
</retrieved_learning>

<retrieved_learning>
Learnt from: amery
PR: #147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The shadow color in Tailwind configuration is dynamically generated by @poupe/theme-builder in tailwind.config.ts, which makes the shadow-shadow class valid despite not being directly visible in the config files.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
</retrieved_learning>

<retrieved_learning>
Learnt from: amery
PR: #147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The shadow color in Tailwind configuration comes from MaterialDynamicColors.shadow and is dynamically generated by @poupe/theme-builder. This makes classes like shadow-shadow valid despite not being directly visible in the Tailwind config files.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All example output CSS files (examples/*/output.css) are generated via the TailwindCSS CLI and are intended for human and browser testing, not for direct modification.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
</retrieved_learning>

<retrieved_learning>
Learnt from: amery
PR: #388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (from var(--shadow) r g b) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Interactive surface utilities (e.g., .interactive-surface-*) automatically generate hover, focus, and pressed state layers with proper transitions, ensuring Material Design 3 state feedback is consistent and configurable.
</retrieved_learning>

packages/@poupe-tailwindcss/src/theme/shapes.ts (17)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-28T22:46:55.639Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict TypeScript practices, including explicit type annotations for union types and strict mode enabled.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Type safety for design tokens is ensured through TypeScript support.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Do not override Material Design principles without justification, skip accessibility requirements, or create components without proper TypeScript interfaces.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Utility functions should support parsing CSS property strings into structured data and formatting structured data back into CSS strings, including handling unit conversions and calculations.
packages/@poupe-tailwindcss/src/assets/style.css (14)

undefined

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
</retrieved_learning>

<retrieved_learning>
Learnt from: amery
PR: #147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The shadow color in Tailwind configuration is dynamically generated by @poupe/theme-builder in tailwind.config.ts, which makes the shadow-shadow class valid despite not being directly visible in the config files.
</retrieved_learning>

<retrieved_learning>
Learnt from: amery
PR: #147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The shadow color in Tailwind configuration comes from MaterialDynamicColors.shadow and is dynamically generated by @poupe/theme-builder. This makes classes like shadow-shadow valid despite not being directly visible in the Tailwind config files.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All example output CSS files (examples/*/output.css) are generated via the TailwindCSS CLI and are intended for human and browser testing, not for direct modification.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
</retrieved_learning>

<retrieved_learning>
Learnt from: amery
PR: #426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The compile utility in packages/@poupe-tailwindcss/src/utils/compile.ts is internal-only and not exported by src/utils, so dependencies it requires like @tailwindcss/node should remain in devDependencies rather than being moved to runtime dependencies.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
</retrieved_learning>

<retrieved_learning>
Learnt from: amery
PR: #388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (from var(--shadow) r g b) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
</retrieved_learning>

<retrieved_learning>
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Interactive surface utilities (e.g., .interactive-surface-*) automatically generate hover, focus, and pressed state layers with proper transitions, ensuring Material Design 3 state feedback is consistent and configurable.
</retrieved_learning>

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
🔇 Additional comments (14)
packages/@poupe-tailwindcss/package.json (1)

3-3: Version bump is appropriate for this release.

The minor version increment from 0.5.0 to 0.5.1 correctly follows semantic versioning for backwards-compatible enhancements.

packages/@poupe-tailwindcss/eslint.config.mjs (1)

16-21: ESLint CSS baseline configuration is appropriate.

The CSS nesting baseline (2023) aligns well with the modern CSS features used in the shape system implementation.

packages/@poupe-tailwindcss/src/theme/shapes.ts (5)

1-20: Well-structured shape family definitions with proper documentation.

The shape families align with Material Design 3 Expressive guidelines and the type definitions provide good type safety.


28-81: Shape scale values are well-defined and consistent.

The scale progression from none to full is logical, with appropriate values for each shape family. The use of 9999px for fully rounded corners is a standard pattern.


107-142: Robust implementation of rounded corner styles.

The function properly handles both symmetric and asymmetric cases with appropriate CSS variable fallbacks.


185-213: Well-implemented squircle path generation with proper validation.

Good error handling and use of the standard cubic bezier approximation constant. The numeric separators enhance readability.


343-369: Component shape mappings align with Material Design 3 guidelines.

The shape scales are appropriate for each component type, and the optional family specification for badge and avatar components adds nice variety.

packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts (1)

12-15: Test updates correctly reflect the new shape system structure.

The import change and updated assertions properly verify the new CSS variable approach with separate family and scale variables.

Also applies to: 363-365

packages/@poupe-tailwindcss/CHANGELOG.md (1)

8-39: Comprehensive changelog entry documenting all shape system enhancements.

The changelog accurately captures the significant improvements to the Material Design 3 shape system and follows proper formatting conventions.

packages/@poupe-tailwindcss/AGENT.md (1)

108-151: Excellent documentation of the MD3 Expressive Shape System!

The documentation comprehensively covers all aspects of the new shape system including the 5 shape families, complete MD3 scale, asymmetric corner support, CSS variables, and technical implementation details. The examples are clear and the structure follows the documentation guidelines perfectly.

packages/@poupe-tailwindcss/README.md (1)

228-347: Comprehensive and user-friendly shape system documentation!

The Shape System section provides excellent coverage with clear HTML examples for all shape families, scales, and asymmetric corner support. The CSS variables section effectively demonstrates runtime customization, and the technical implementation details help users understand browser compatibility and fallback behavior.

The increase of --md-shape-full to 9999px is appropriate for ensuring true pill/circle shapes across all element sizes.

packages/@poupe-tailwindcss/src/theme/components.ts (2)

16-24: Clean modularization of the shape system!

Good refactoring to move shape-related constants and functions to a dedicated module. The re-exports maintain backward compatibility.

Also applies to: 508-509


514-638: Well-structured implementation of the comprehensive shape system!

The refactored makeShapeComponents function effectively implements the MD3 Expressive Shape System with:

  • Systematic generation of utilities for all shape families and scales
  • Proper handling of asymmetric corners through corner groups
  • Excellent progressive enhancement with @supports fallbacks for squircle and cut shapes
  • Component-specific shapes with appropriate defaults

While the nested loops generate a significant number of CSS rules, this is necessary to provide the full expressiveness of the MD3 shape system. The code is well-organized with clear sections and maintains type safety throughout.

packages/@poupe-tailwindcss/src/assets/default.css (1)

887-897: “Concave” / “convex” tokens currently have no visual difference

Utilities such as .shape-concave-extra-small only add

position:relative;
overflow:hidden;
border-radius:4px;

which is the same as the fall-back for rounded shapes.
Unless an extra pseudo-element (or mask) is injected elsewhere, these classes provide no value but enlarge the stylesheet.

Verify that the build step attaches the expected inset-shadow / mask to realise the concave/convex illusion, or trim the variants until the visual effect is supported.

@amery
Copy link
Copy Markdown
Contributor Author

amery commented Jun 29, 2025

these .css files are for tailwindcss, not browser

amery added 2 commits June 29, 2025 19:48
…asymmetric corner support

Implement a comprehensive Material Design 3 shape system that supports:
- Multiple shape families: rounded, squircle, cut, concave, convex
- MD3 shape scale: none, extra-small, small, medium, large, extra-large, full
- Asymmetric corner control with individual and grouped corner support
- Progressive enhancement with fallbacks for browsers without advanced CSS support
- Component-specific shape tokens following MD3 recommendations

The new shape system allows for expressive design while maintaining flexibility
for asymmetric shapes where not all corners need to be rounded, and supports
different width and height dimensions through proper CSS implementations.

Signed-off-by: Amery <amery.chiang@gmail.com>
Signed-off-by: Alejandro Mery <amery@apptly.co>
Major release featuring a complete redesign of the MD3 shape system with
abbreviated semantic utilities, reducing CSS size from 71KB to ~6KB while
adding support for multiple shape families and asymmetric corner control.

## Breaking Changes

- Simplified shape utility naming for clarity and brevity
  - `.shape-rounded-lg` → `.shape-lg`
  - `.shape-squircle` → `.shape-squircle-{scale}`
  - Shape scale now uses abbreviated names: `xs`, `sm`, `md`, `lg`, `xl`

## Features

- MD3 Expressive Shape System with abbreviated semantic shapes
  - Optimized CSS from 71KB to ~6KB
  - Multiple shape families: rounded, squircle, cut, concave, convex
  - Asymmetric corner control with individual and grouped utilities
  - Dynamic shape utilities supporting arbitrary values
  - Enhanced component shapes with semantic defaults

## Improvements

- Dedicated shape modules for better maintainability
- Progressive enhancement with automatic fallbacks
- Consistent CSS variable usage enabling runtime customization
- Updated dependencies: TailwindCSS v4.1.11

Signed-off-by: Alejandro Mery <amery@apptly.co>
@amery amery force-pushed the pr-amery-tailwindcss-shapes branch from 2ef8ff2 to 4ec4849 Compare June 29, 2025 19:49
@amery amery changed the title feat(@poupe/tailwindcss): Release v0.5.1 - MD3 Expressive Shape System feat(@poupe/tailwindcss): v0.6.0 - MD3 Expressive Shape System Jun 29, 2025
@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Jun 29, 2025

Open in StackBlitz

@poupe/css

npm i https://pkg.pr.new/poupe-ui/poupe/@poupe/css@457

@poupe/nuxt

npm i https://pkg.pr.new/poupe-ui/poupe/@poupe/nuxt@457

@poupe/tailwindcss

npm i https://pkg.pr.new/poupe-ui/poupe/@poupe/tailwindcss@457

@poupe/theme-builder

npm i https://pkg.pr.new/poupe-ui/poupe/@poupe/theme-builder@457

@poupe/vue

npm i https://pkg.pr.new/poupe-ui/poupe/@poupe/vue@457

commit: 4ec4849

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

♻️ Duplicate comments (1)
packages/@poupe-tailwindcss/src/assets/style.css (1)

743-812: shape-* utilities still bloat style.css – please generate them at build-time instead
(see previous review)

The full family/size/corner matrix is hard-coded again (~3 300 lines), inflating the “minimal scaffold” file and duplicating logic that Tailwind’s matchUtilities already produces on demand.

The earlier review requested either

  1. moving these rules to the runtime plugin so PurgeCSS can tree-shake, or
  2. shipping them as an opt-in artefact (e.g. dist/shape.css) excluded from the published default.

That concern remains unresolved.

[ suggest_essential_refactor ]

Also applies to: 813-895, 896-1063

🧹 Nitpick comments (2)
packages/@poupe-tailwindcss/src/theme/shapes.ts (2)

217-217: Consider removing numeric separators for broader compatibility.

The numeric separator syntax (0.552_284_749_831) requires ES2021 support. For better compatibility across different build environments, consider using the traditional format.

-  const controlOffset = r * 0.552_284_749_831;
+  const controlOffset = r * 0.552284749831;

288-304: Concave implementation needs completion.

The current implementation is a placeholder that doesn't provide actual concave (inward curve) styling. Consider implementing using CSS masks or SVG filters for the intended visual effect.

Would you like me to help implement proper concave corner styling using SVG masks or provide an example implementation?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6df66bb and 4ec4849.

📒 Files selected for processing (14)
  • packages/@poupe-tailwindcss/AGENT.md (1 hunks)
  • packages/@poupe-tailwindcss/CHANGELOG.md (2 hunks)
  • packages/@poupe-tailwindcss/README.md (1 hunks)
  • packages/@poupe-tailwindcss/eslint.config.mjs (1 hunks)
  • packages/@poupe-tailwindcss/package.json (1 hunks)
  • packages/@poupe-tailwindcss/src/assets/default.css (2 hunks)
  • packages/@poupe-tailwindcss/src/assets/style.css (2 hunks)
  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts (5 hunks)
  • packages/@poupe-tailwindcss/src/theme/components.ts (2 hunks)
  • packages/@poupe-tailwindcss/src/theme/plugin.ts (2 hunks)
  • packages/@poupe-tailwindcss/src/theme/shape-match-utilities.ts (1 hunks)
  • packages/@poupe-tailwindcss/src/theme/shape-semantic.ts (1 hunks)
  • packages/@poupe-tailwindcss/src/theme/shapes.ts (1 hunks)
  • packages/@poupe-tailwindcss/src/theme/theme.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
`**/*.{ts,js,css,json}`: Use 2 spaces for indentation. Use Unix (LF) line ending...

**/*.{ts,js,css,json}: Use 2 spaces for indentation.
Use Unix (LF) line endings.
Use UTF-8 charset.
Use single quotes for strings.
Always use semicolons.
Use 1tbs (one true brace style) for braces.
Always use parentheses for arrow functions.
Preferred maximum line length is 78 characters.
Always insert a final newline.
Always trim trailing whitespace.
Use camelCase for variables and functions, PascalCase for types and interfaces.
Use ES modules (set type: "module").
Use TSDoc format for documentation comments.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/package.json
  • packages/@poupe-tailwindcss/src/theme/plugin.ts
  • packages/@poupe-tailwindcss/src/theme/theme.ts
  • packages/@poupe-tailwindcss/src/theme/shape-match-utilities.ts
  • packages/@poupe-tailwindcss/src/theme/components.ts
  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts
  • packages/@poupe-tailwindcss/src/assets/style.css
  • packages/@poupe-tailwindcss/src/theme/shapes.ts
  • packages/@poupe-tailwindcss/src/assets/default.css
  • packages/@poupe-tailwindcss/src/theme/shape-semantic.ts
`**/*.md`: Break multi-item lists into sub-bullets for clarity. Use sub-bullets ...

**/*.md: Break multi-item lists into sub-bullets for clarity.
Use sub-bullets for dependencies in lists.
Keep single line descriptions on one line when possible.
Keep command descriptions on the same line.
Be consistent with list item punctuation—use periods for all items or none.
Add a blank line after section headings before content.
Prefer 'with' over 'via' for describing relationships.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/CHANGELOG.md
  • packages/@poupe-tailwindcss/AGENT.md
  • packages/@poupe-tailwindcss/README.md
`packages/@poupe-tailwindcss/AGENT.md`: Contains TailwindCSS integration details.

packages/@poupe-tailwindcss/AGENT.md: Contains TailwindCSS integration details.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/AGENT.md
`**/*.test.ts`: Test files should use the .test.ts extension.

**/*.test.ts: Test files should use the .test.ts extension.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts
`**/__tests__/**/*`: Tests can be located in __tests__ directories.

**/__tests__/**/*: Tests can be located in tests directories.

📄 Source: CodeRabbit Inference Engine (AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts
`packages/@poupe-tailwindcss/src/assets/style.css`: src/assets/style.css should ...

packages/@poupe-tailwindcss/src/assets/style.css: src/assets/style.css should provide a minimal TailwindCSS v4 setup with surface utilities, shadow and elevation system, and scrim overlay utilities, but no theme colors.

📄 Source: CodeRabbit Inference Engine (packages/@poupe-tailwindcss/AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/assets/style.css
`packages/@poupe-tailwindcss/src/assets/default.css`: src/assets/default.css sho...

packages/@poupe-tailwindcss/src/assets/default.css: src/assets/default.css should be a complete example with Material Design 3 variables, full set of CSS custom properties, and all utilities with example theme colors, generated from build.config.ts.

📄 Source: CodeRabbit Inference Engine (packages/@poupe-tailwindcss/AGENT.md)

List of files the instruction was applied to:

  • packages/@poupe-tailwindcss/src/assets/default.css
🧠 Learnings (15)
📓 Common learnings
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-29T19:41:12.087Z
Learning: All packages must follow Material Design 3 principles, including dynamic color systems, tonal elevation, accessibility, responsive design, and consistent motion.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The theme system is built on @poupe/theme-builder, supporting reactive theme switching and CSS variable-based theming.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
packages/@poupe-tailwindcss/package.json (10)
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-29T19:41:12.087Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict code style conventions enforced by .editorconfig and ESLint, including 2-space indentation, single quotes, semicolons, 1tbs brace style, and camelCase/PascalCase naming.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The plugin supports configuration via tailwind.config.js, allowing customization of utility prefixes, color overrides, and surface utility generation.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The theme system is built on @poupe/theme-builder, supporting reactive theme switching and CSS variable-based theming.
packages/@poupe-tailwindcss/src/theme/plugin.ts (13)
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The plugin supports configuration via tailwind.config.js, allowing customization of utility prefixes, color overrides, and surface utility generation.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The theme system is built on @poupe/theme-builder, supporting reactive theme switching and CSS variable-based theming.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/utils/plugin.ts:15-17
Timestamp: 2025-05-07T21:58:52.312Z
Learning: When typing Tailwind plugin functions with generics in TypeScript, directly define the plugin type structure explicitly rather than trying to use ReturnType<typeof function.withOptions<T>>. Use an explicit type definition like: `type PluginWithOptions<O> = { __isOptionsFunction: true; (options?: O): { handler: (api: PluginAPI) => void; config?: Partial<Config>; }; };`
packages/@poupe-tailwindcss/eslint.config.mjs (11)
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-29T19:41:12.087Z
Learning: All packages in the Poupe UI Framework monorepo must follow strict code style conventions enforced by .editorconfig and ESLint, including 2-space indentation, single quotes, semicolons, 1tbs brace style, and camelCase/PascalCase naming.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All example output CSS files (examples/*/output.css) are generated via the TailwindCSS CLI and are intended for human and browser testing, not for direct modification.
Learnt from: amery
PR: poupe-ui/poupe#47
File: package.json:16-17
Timestamp: 2024-12-02T02:55:16.072Z
Learning: ESLint version 9.x is in use and compatible with our codebase.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
packages/@poupe-tailwindcss/src/theme/theme.ts (16)
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Components must export both default and typed props, using TypeScript's 'defineProps' with proper types.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-nuxt/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:07.095Z
Learning: Expose composables such as usePoupeTheme(), usePoupeColors(), and usePoupe() to allow users to access and modify theme and configuration at runtime.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The theme system is built on @poupe/theme-builder, supporting reactive theme switching and CSS variable-based theming.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-nuxt/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:07.095Z
Learning: When developing a Nuxt module (such as @poupe/nuxt), provide auto-imports for both components and composables to improve developer experience.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
packages/@poupe-tailwindcss/CHANGELOG.md (12)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The 'useRipple' composable handles Material Design ripple effects, including event handling, animation cleanup, and integration with the .ripple-effect utility.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
packages/@poupe-tailwindcss/AGENT.md (14)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-29T19:41:12.087Z
Learning: All packages must follow Material Design 3 principles, including dynamic color systems, tonal elevation, accessibility, responsive design, and consistent motion.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Interactive surface utilities (e.g., .interactive-surface-*) automatically generate hover, focus, and pressed state layers with proper transitions, ensuring Material Design 3 state feedback is consistent and configurable.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
packages/@poupe-tailwindcss/src/theme/shape-match-utilities.ts (13)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The plugin supports configuration via tailwind.config.js, allowing customization of utility prefixes, color overrides, and surface utility generation.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Utility functions should support parsing CSS property strings into structured data and formatting structured data back into CSS strings, including handling unit conversions and calculations.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/utils/plugin.ts:15-17
Timestamp: 2025-05-07T21:58:52.312Z
Learning: When typing Tailwind plugin functions with generics in TypeScript, directly define the plugin type structure explicitly rather than trying to use ReturnType<typeof function.withOptions<T>>. Use an explicit type definition like: `type PluginWithOptions<O> = { __isOptionsFunction: true; (options?: O): { handler: (api: PluginAPI) => void; config?: Partial<Config>; }; };`
packages/@poupe-tailwindcss/src/theme/components.ts (18)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Utility functions should support parsing CSS property strings into structured data and formatting structured data back into CSS strings, including handling unit conversions and calculations.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Do not override Material Design principles without justification, skip accessibility requirements, or create components without proper TypeScript interfaces.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Type safety for design tokens is ensured through TypeScript support.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: amery
PR: poupe-ui/poupe#116
File: packages/theme-builder/src/core.ts:87-90
Timestamp: 2025-01-12T11:29:26.546Z
Learning: In the theme-builder package, there are two different implementations of `rgbFromArgb()`:
1. In core.ts: Returns RGB values wrapped in `rgb()` for general CSS usage
2. In tailwind-common.ts: Returns space-separated RGB values without wrapper specifically for Tailwind CSS variables
packages/@poupe-tailwindcss/README.md (14)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-29T19:41:12.087Z
Learning: All packages must follow Material Design 3 principles, including dynamic color systems, tonal elevation, accessibility, responsive design, and consistent motion.
packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts (18)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Testing should cover token generation accuracy, color contrast validation, theme switching functionality, and SSR compatibility.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-nuxt/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:07.095Z
Learning: Test Nuxt modules for SSR compatibility, auto-import functionality, color mode integration, hydration correctness, and compatibility with different Nuxt configurations.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Testing must use Vitest with Vue Test Utils, and tests should cover component rendering, props, and interactions.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-29T19:41:12.087Z
Learning: Tests must be written for all new functionality, using Vitest, with test files named *.test.ts or *.spec.ts and located in __tests__ directories or colocated with source files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Components must export both default and typed props, using TypeScript's 'defineProps' with proper types.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Do not override Material Design principles without justification, skip accessibility requirements, or create components without proper TypeScript interfaces.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
packages/@poupe-tailwindcss/src/assets/style.css (21)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All example output CSS files (examples/*/output.css) are generated via the TailwindCSS CLI and are intended for human and browser testing, not for direct modification.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: amery
PR: poupe-ui/poupe#38
File: packages/theme-builder/src/dynamic-color.ts:55-62
Timestamp: 2024-11-29T21:47:05.567Z
Learning: For Tailwind CSS color support, in `packages/theme-builder/src/dynamic-color.ts`, the `rgbFromArgb` function should return the three RGB numbers separated by spaces, not in CSS `rgb()` format.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The build process is responsible for generating all distributable CSS assets and example outputs, ensuring that manual edits to generated files are not required or expected.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: State color tokens follow Material Design 3 interactive state opacities: Hover (8%), Focus (12%), Pressed (12%), Dragged (16%), Disabled (12% for containers, 38% for content).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All Vue components in @poupe/vue must follow Material Design 3 guidelines, including semantic color tokens, tonal elevation, and dynamic color themes.
Learnt from: CR
PR: poupe-ui/poupe#0
File: AGENT.md:0-0
Timestamp: 2025-06-29T19:41:12.087Z
Learning: All packages must follow Material Design 3 principles, including dynamic color systems, tonal elevation, accessibility, responsive design, and consistent motion.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
packages/@poupe-tailwindcss/src/theme/shapes.ts (16)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The @poupe/theme-builder package provides a Material Design 2025 theme generation system, including design token generation, color extraction from images, theme variations, and runtime theme switching.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Type safety for design tokens is ensured through TypeScript support.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Do not override Material Design principles without justification, skip accessibility requirements, or create components without proper TypeScript interfaces.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Components must use slots for flexible content composition and provide variant props for different styles.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
packages/@poupe-tailwindcss/src/assets/default.css (16)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: Theme configuration is exported via '@poupe/vue/config' and integrates with @poupe/tailwindcss for consistent styling.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All scrim utilities in @poupe/tailwindcss support opacity modifiers using the /[percentage] syntax (e.g., scrim-modal/50), and process these via CSS variables for flexible opacity control.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: All example output CSS files (examples/*/output.css) are generated via the TailwindCSS CLI and are intended for human and browser testing, not for direct modification.
Learnt from: amery
PR: poupe-ui/poupe#412
File: packages/@poupe-theme-builder/package.json:3-3
Timestamp: 2025-05-30T15:45:43.757Z
Learning: The @poupe/theme-builder package version 0.9.x was considered beta/experimental. Breaking changes during the 0.9.x series don't require major version bumps since the API was still unstable. The transition from 0.9.1 to 0.9.2 represents stabilization of the theme-builder after the beta period.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: All interactive components must support MD3 state layers, including hover, focus, pressed, and disabled states, with transitions using the '--md-state-transition-duration' CSS variable.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: State color tokens follow Material Design 3 interactive state opacities: Hover (8%), Focus (12%), Pressed (12%), Dragged (16%), Disabled (12% for containers, 38% for content).
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: The 'useRipple' composable handles Material Design ripple effects, including event handling, animation cleanup, and integration with the .ripple-effect utility.
Learnt from: amery
PR: poupe-ui/poupe#388
File: packages/@poupe-tailwindcss/src/theme/theme.ts:321-329
Timestamp: 2025-05-26T00:23:51.659Z
Learning: In the shadow system implementation, the CSS Level 4 relative color syntax fallback (`from var(--shadow) r g b`) is intentional for edge cases. Users are expected to include the shadowRGB variable in their theme configuration to avoid hitting this fallback. The fallback is not the primary usage path.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Interactive surface utilities (e.g., .interactive-surface-*) automatically generate hover, focus, and pressed state layers with proper transitions, ensuring Material Design 3 state feedback is consistent and configurable.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: Design tokens are categorized into color tokens (with dim variants), state color tokens (with specific opacities for interactive states), typography tokens, shape tokens, motion tokens, and elevation tokens.
packages/@poupe-tailwindcss/src/theme/shape-semantic.ts (13)
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: Material Design 3 shape utilities (e.g., .shape-none, .shape-medium, .shape-full) are extensible, use CSS variables for customization, and support squircle variants for smooth corners with SVG masks and graceful fallback.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: The asMatchUtility function in src/theme/match-utilities.ts enables TailwindCSS v4 CSS syntax (using --value() and --modifier()) to be used with the v3 JavaScript matchUtilities API, supporting arbitrary values and modifiers for utilities like scrim overlays.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: In the @poupe/css TypeScript utility library, provide type-safe support for CSS property names and values, ensuring that all utilities maintain type safety throughout.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration is dynamically generated by `@poupe/theme-builder` in `tailwind.config.ts`, which makes the `shadow-shadow` class valid despite not being directly visible in the config files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-vue/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:37.659Z
Learning: TailwindCSS v4 with the @poupe/tailwindcss plugin is the required styling system; use the variant system for component variations and MD3 state layers.
Learnt from: amery
PR: poupe-ui/poupe#426
File: packages/@poupe-tailwindcss/package.json:60-62
Timestamp: 2025-06-09T13:36:06.318Z
Learning: The `compile` utility in `packages/@poupe-tailwindcss/src/utils/compile.ts` is internal-only and not exported by `src/utils`, so dependencies it requires like `@tailwindcss/node` should remain in devDependencies rather than being moved to runtime dependencies.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-tailwindcss/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:22.143Z
Learning: CLI integration tests in src/__tests__/cli.test.ts validate that generated CSS assets and utilities work correctly with the actual TailwindCSS CLI, including modifier syntax and theme variable integration.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-theme-builder/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:30.003Z
Learning: The package is designed for integration with @poupe/vue (runtime theming), @poupe/tailwindcss (CSS generation), and @poupe/nuxt (SSR theme support).
Learnt from: amery
PR: poupe-ui/poupe#116
File: packages/theme-builder/src/core.ts:87-90
Timestamp: 2025-01-12T11:29:26.546Z
Learning: In the theme-builder package, there are two different implementations of `rgbFromArgb()`:
1. In core.ts: Returns RGB values wrapped in `rgb()` for general CSS usage
2. In tailwind-common.ts: Returns space-separated RGB values without wrapper specifically for Tailwind CSS variables
Learnt from: amery
PR: poupe-ui/poupe#325
File: packages/@poupe-tailwindcss/src/flat/plugin.ts:7-7
Timestamp: 2025-05-07T20:52:45.565Z
Learning: The type definition `FlatOptions = unknown & {}` in `packages/@poupe-tailwindcss/src/flat/plugin.ts` is intentionally defined as a placeholder for future development.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Implement both array-based and generator-based functions for formatting and generating CSS rules (e.g., formatCSSRules, generateCSSRules), where array functions are suitable for small to medium CSS and generator functions are preferred for memory-efficient handling of large CSS files.
Learnt from: CR
PR: poupe-ui/poupe#0
File: packages/@poupe-css/AGENT.md:0-0
Timestamp: 2025-06-28T22:47:00.833Z
Learning: Utility functions should support parsing CSS property strings into structured data and formatting structured data back into CSS strings, including handling unit conversions and calculations.
Learnt from: amery
PR: poupe-ui/poupe#147
File: packages/poupe-vue/src/components/variants.ts:32-43
Timestamp: 2025-01-28T23:47:03.988Z
Learning: The `shadow` color in Tailwind configuration comes from `MaterialDynamicColors.shadow` and is dynamically generated by `@poupe/theme-builder`. This makes classes like `shadow-shadow` valid despite not being directly visible in the Tailwind config files.
🧬 Code Graph Analysis (4)
packages/@poupe-tailwindcss/src/theme/plugin.ts (2)
packages/@poupe-tailwindcss/src/theme/utils.ts (1)
  • debugLog (92-96)
packages/@poupe-tailwindcss/src/theme/shape-semantic.ts (1)
  • dynamicShapeUtilities (192-224)
packages/@poupe-tailwindcss/src/theme/shape-match-utilities.ts (2)
packages/@poupe-tailwindcss/src/utils/plugin.ts (1)
  • PluginAPI (11-11)
packages/@poupe-tailwindcss/src/theme/shapes.ts (3)
  • SHAPE_SCALE (28-78)
  • SHAPE_FAMILIES (11-17)
  • COMPONENT_SHAPES (355-381)
packages/@poupe-tailwindcss/src/theme/components.ts (1)
packages/@poupe-tailwindcss/src/theme/shape-semantic.ts (1)
  • makeSemanticShapeUtilities (148-155)
packages/@poupe-tailwindcss/src/theme/shape-semantic.ts (1)
packages/@poupe-tailwindcss/src/theme/shapes.ts (5)
  • SHAPE_SCALE (28-78)
  • ShapeScaleKey (80-80)
  • COMPONENT_SHAPES (355-381)
  • SHAPE_FAMILIES (11-17)
  • CORNER_GROUPS (92-102)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
🔇 Additional comments (18)
packages/@poupe-tailwindcss/eslint.config.mjs (1)

16-20: Verify that the css/use-baseline rule is actually resolvable

css/use-baseline is provided by @stylistic/eslint-plugin-css (formerly eslint-plugin-css).
If that plugin isn’t included (either directly in package.json or transitively by @poupe/eslint-config) ESLint will crash with:

ESLint: Definition for rule 'css/use-baseline' was not found.

Please confirm the rule is loaded, e.g. by ensuring:

{
  "devDependencies": {
    "@stylistic/eslint-plugin-css": "^1.7.0"
  },
  "eslintConfig": {
    "plugins": ["css"]
  }
}

or by checking that @poupe/eslint-config already re-exports it.

If the plugin is already present, feel free to ignore this note.
Otherwise add the dependency or drop the rule to keep CI green.

packages/@poupe-tailwindcss/src/theme/plugin.ts (1)

36-37: Clean integration of dynamic shape utilities

The integration of dynamic shape utilities is well-implemented, following the existing patterns for adding components and debug logging.

Also applies to: 66-68

packages/@poupe-tailwindcss/src/theme/theme.ts (1)

53-54: Proper integration of semantic shape constants

The semantic shape constants are correctly integrated into the theme constants, maintaining consistency with the existing architecture.

Also applies to: 549-552

packages/@poupe-tailwindcss/src/theme/components.ts (1)

504-513: Excellent simplification of shape component generation

The refactoring to delegate shape generation to makeSemanticShapeUtilities significantly reduces complexity while maintaining the same functionality. The check for shapePrefix ensures backward compatibility.

packages/@poupe-tailwindcss/src/theme/shape-match-utilities.ts (1)

1-3: Import statement looks correct.

The imports follow the established patterns and include necessary types and constants.

packages/@poupe-tailwindcss/AGENT.md (1)

108-180: Comprehensive and well-structured shape system documentation.

The documentation provides excellent coverage of the new shape system with clear examples, component mappings, and usage patterns. The migration guide is particularly helpful for developers upgrading from v0.5.x.

packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts (5)

12-15: Import change is correct.

Moving SHAPE_SCALE import from components to shapes aligns with the modularization of the codebase.


354-367: Test expectations align with simplified implementation.

The updated tests correctly expect border-radius properties instead of complex mask-image implementations, which matches the simplified approach documented in the shape-match-utilities.ts file.


391-396: Explicit CSS variable fallback testing is excellent.

These tests validate the exact CSS variable structure with fallbacks, ensuring the hierarchical variable system works as designed.


457-468: Corner utility testing covers the new functionality.

The tests for corner-specific utilities (.shape-lg-top, .shape-md-tl) validate that the new corner-specific shape utilities work correctly.


427-433: Verify semantic shape bypass in shape-token validation

The test at
packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts:427-433
expects no warnings for missing shape- tokens when generating semantic shape classes, but I couldn’t locate any validation logic for shape tokens in the theme plugin. Please manually confirm that semantic shapes are intentionally excluded from shape-token validation:

  • Inspect the makeShapeComponents implementation (e.g. in packages/@poupe-tailwindcss/src/theme/components.ts) for any debug‐mode warnings tagged shape-validation.
  • Ensure that when debug is enabled, no warning is emitted if a semantic shape is defined without a corresponding shape- token.
packages/@poupe-tailwindcss/src/assets/style.css (1)

36-58: Shape-scale CSS variables look good

The canonical MD3 shape scale is now exposed via custom properties with sane pixel fall-backs. This matches the design tokens used elsewhere in the repo and keeps them overridable.

packages/@poupe-tailwindcss/src/assets/default.css (2)

307-330: CSS variables are well-structured.

The shape CSS variables follow Material Design 3 conventions with proper scale (none, xs, sm, md, lg, xl, full) and component-specific aliases with sensible defaults.


941-1003: Shape family utilities don't match their intended implementations.

The squircle, cut, and concave shape utilities are all using simple border-radius, but according to the design:

  • Squircle utilities should use mask-image with SVG paths for iOS-style smooth corners
  • Cut utilities should use clip-path for angled corners
  • Concave utilities need proper inward curve implementation

This appears to be caused by incomplete implementations in shape-semantic.ts (see TODO comments in that file).

Likely an incorrect or invalid review comment.

packages/@poupe-tailwindcss/src/theme/shape-semantic.ts (3)

15-27: LGTM!

The base scale utilities correctly reference CSS variables, enabling runtime customization.


33-46: Well-designed fallback chain for component shapes.

The implementation provides a nice two-level fallback system, allowing component-specific overrides while maintaining scale defaults.


108-224: Corner utilities and dynamic shape utilities are well-implemented.

The corner-specific utilities correctly handle edge groups (top, right, etc.) and individual corners. The dynamic shape utilities properly use TailwindCSS v4 syntax with --value() for arbitrary values.

packages/@poupe-tailwindcss/src/theme/shapes.ts (1)

11-81: Excellent shape system design.

The shape families and scale definitions are comprehensive and well-structured, following Material Design 3 principles with appropriate values for each shape family.

Comment on lines +8 to +49
## [0.6.0] - 2025-06-29

### Added

- **MD3 Expressive Shape System**: Complete redesign with abbreviated semantic shapes
- Optimized from 71KB to ~6KB of CSS utilities
- Multiple shape families with explicit naming:
- Default rounded shapes (e.g., `shape-lg`)
- Squircle: iOS-style super-elliptical corners (e.g., `shape-squircle-lg`)
- Cut: Angled corners (e.g., `shape-cut-sm`)
- Concave: Inward curved corners (experimental)
- Convex: Enhanced rounded corners with 1.5x multiplier
- Asymmetric corner control:
- Individual corners (e.g., `shape-lg-tl`, `shape-md-br`)
- Grouped corners (e.g., `shape-lg-top`, `shape-xl-left`)
- Dynamic shape utilities supporting arbitrary values (e.g., `shape-[20px]`)
- Enhanced component shapes with semantic defaults

### Changed

- **BREAKING**: Simplified shape utility naming for clarity and brevity
- `.shape-rounded-lg` → `.shape-lg`
- `.shape-rounded-lg-t` → `.shape-lg-top`
- `.shape-squircle` → `.shape-squircle-{scale}`
- `.shape-top-square` → `.shape-{scale}-bottom`
- Shape scale now uses abbreviated names: `xs`, `sm`, `md`, `lg`, `xl`
- Component shapes retain semantic names (e.g., `.shape-button`)
- All shape utilities now use CSS variables with scale fallbacks

### Fixed

- Dependencies: Updated to TailwindCSS v4.1.11 for better compatibility
- Development dependencies: Updated ESLint, Vitest, and related tools

### Technical Improvements

- Dedicated shape modules: `shapes.ts`, `shape-semantic.ts`, `shape-match-utilities.ts`
- Progressive enhancement with automatic fallbacks
- Better browser compatibility for advanced shape families
- Consistent CSS variable usage enabling runtime customization
- Reduced CSS footprint while maintaining expressiveness

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Contradiction regarding breaking changes

The CHANGELOG correctly documents breaking changes in the shape utility naming (e.g., .shape-rounded-lg.shape-lg), but the PR objectives state "There are no breaking changes." This contradiction should be resolved. The changelog is accurate - these are indeed breaking changes that justify the minor version bump to 0.6.0.

🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/CHANGELOG.md between lines 8 and 49, there is a
contradiction where the changelog documents breaking changes in shape utility
naming, but the PR objectives claim there are no breaking changes. To fix this,
update the PR objectives or description to acknowledge the breaking changes as
documented in the changelog, ensuring consistency and clarity about the version
bump to 0.6.0.

Comment on lines +498 to +499
// Import semantic shape utilities
import { makeSemanticShapeUtilities } from './shape-semantic';
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Move import statement to the top of the file

The import statement for makeSemanticShapeUtilities should be moved to the top of the file with the other imports to maintain proper code organization.

Move this import to the top of the file:

-// Import semantic shape utilities
-import { makeSemanticShapeUtilities } from './shape-semantic';

Add it after line 14 with the other imports:

import {
  type CSSRuleObject,
  debugLog,
} from './utils';

+import { makeSemanticShapeUtilities } from './shape-semantic';
+
/** Default opacity for scrim utilities when no modifier is provided */
export const DEFAULT_SCRIM_OPACITY = '32%';
🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/src/theme/components.ts at lines 498-499, the
import statement for makeSemanticShapeUtilities is placed too low in the file.
Move this import statement to the top of the file, specifically after line 14
where the other imports are declared, to maintain proper code organization and
consistency.

Comment on lines +228 to 244
Abbreviated semantic Material Design 3 shape system balancing clarity with
brevity. Optimized from 71KB to ~6KB of CSS utilities:

### Shape Scale

Default rounded shapes (most common case):

```html
<!-- Shape scale utilities -->
<!-- Rounded shapes (default) -->
<div class="shape-none">No rounding (0px)</div>
<div class="shape-extra-small">Extra small (4px)</div>
<div class="shape-small">Small (8px)</div>
<div class="shape-medium">Medium (12px)</div>
<div class="shape-large">Large (16px)</div>
<div class="shape-extra-large">Extra large (28px)</div>
<div class="shape-full">Full rounding (999px)</div>
<div class="shape-xs">Extra small rounded (4px)</div>
<div class="shape-sm">Small rounded (8px)</div>
<div class="shape-md">Medium rounded (12px)</div>
<div class="shape-lg">Large rounded (16px)</div>
<div class="shape-xl">Extra large rounded (28px)</div>
<div class="shape-full">Full rounding (pill/circle)</div>
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify consistency between title version (v0.5.1) and content (v0.6.0).

The documentation describes features introduced in v0.6.0 but the PR title mentions "Release v0.5.1". This version mismatch could confuse users about which version contains these features.


🏁 Script executed:

#!/bin/bash
# Check if version consistency exists across the package files
echo "Checking package.json version:"
cat packages/@poupe-tailwindcss/package.json | jq -r '.version'

echo -e "\nChecking changelog for version references:"
rg -A 5 -B 2 "v0\.[56]\." packages/@poupe-tailwindcss/CHANGELOG.md || echo "No changelog found"

echo -e "\nChecking if v0.5.1 or v0.6.0 is mentioned in other files:"
rg "v0\.[56]\." packages/@poupe-tailwindcss/

Length of output: 935


Align version across PR title and documentation

The package.json and docs have been updated for v0.6.0, but the PR title still references “v0.5.1,” which will confuse users.

• Update the PR title to “Release v0.6.0”
• Add or update packages/@poupe-tailwindcss/CHANGELOG.md to include v0.6.0 migration notes
• Confirm README.md and AGENT.md consistently reference v0.6.0 and the v0.5.x→v0.6.0 migration guide

🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/README.md around lines 228 to 244, ensure all
version references are consistent with v0.6.0 by updating any outdated mentions
of v0.5.1. Also, update the PR title to "Release v0.6.0," add or update
packages/@poupe-tailwindcss/CHANGELOG.md with migration notes for v0.6.0, and
verify that README.md and AGENT.md consistently reference v0.6.0 and include the
migration guide from v0.5.x to v0.6.0.

Comment on lines +329 to 340
### Migration from v0.5.x

Material Design 3 component shape tokens with sensible defaults:
v0.6.0 introduces abbreviated semantic shapes:

```html
<!-- Component shapes with default values -->
<button class="shape-button">Pill button (full rounding)</button>
<div class="shape-card">Card with medium rounding</div>
<button class="shape-fab">FAB with large rounding</button>
<input class="shape-text-field" placeholder="Text field">
<div class="shape-dialog">Dialog with extra-large rounding</div>
<span class="shape-chip">Chip with small rounding</span>

<!-- Squircle variants for smooth corners -->
<button class="shape-squircle-button">Smooth pill button</button>
<div class="shape-squircle-card">Smooth card</div>
<!-- v0.5.x → v0.6.0 -->
<div class="shape-rounded-lg"> → <div class="shape-lg">
<div class="shape-rounded-lg-t"> → <div class="shape-lg-top">
<div class="shape-squircle-md"> → <div class="shape-squircle-md"> (unchanged)
<div class="shape-square"> → (removed - use shape-none)
<div class="shape-top-square"> → <div class="shape-lg-bottom"> (positive)
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Review migration guide for accuracy.

The migration example shows shape class transformations, but line 339 appears problematic: <div class="shape-top-square"> → <div class="shape-lg-bottom"> (positive). This doesn't follow the logical pattern and seems inconsistent with the rest of the migration mappings.

-<div class="shape-top-square"> → <div class="shape-lg-bottom"> (positive)
+<div class="shape-top-square"> → (removed - use shape-none or specific corner utilities)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
### Migration from v0.5.x
Material Design 3 component shape tokens with sensible defaults:
v0.6.0 introduces abbreviated semantic shapes:
```html
<!-- Component shapes with default values -->
<button class="shape-button">Pill button (full rounding)</button>
<div class="shape-card">Card with medium rounding</div>
<button class="shape-fab">FAB with large rounding</button>
<input class="shape-text-field" placeholder="Text field">
<div class="shape-dialog">Dialog with extra-large rounding</div>
<span class="shape-chip">Chip with small rounding</span>
<!-- Squircle variants for smooth corners -->
<button class="shape-squircle-button">Smooth pill button</button>
<div class="shape-squircle-card">Smooth card</div>
<!-- v0.5.x → v0.6.0 -->
<div class="shape-rounded-lg"> → <div class="shape-lg">
<div class="shape-rounded-lg-t"> → <div class="shape-lg-top">
<div class="shape-squircle-md"> → <div class="shape-squircle-md"> (unchanged)
<div class="shape-square"> → (removed - use shape-none)
<div class="shape-top-square"> → <div class="shape-lg-bottom"> (positive)
```
### Migration from v0.5.x
v0.6.0 introduces abbreviated semantic shapes:
🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/README.md around lines 329 to 340, the migration
guide incorrectly maps <div class="shape-top-square"> to <div
class="shape-lg-bottom">, which is inconsistent with the pattern. Review the
intended transformation for "shape-top-square" and correct it to a logically
consistent class name, likely something like "shape-lg-top" or another
appropriate variant that matches the naming convention used in other examples.

Comment on lines +76 to +109
api.matchUtilities({
'rounded-tl': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-tr': (value: string) => ({
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-br': (value: string) => ({
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-bl': (value: string) => ({
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-t': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-r': (value: string) => ({
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-b': (value: string) => ({
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-l': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
}, {
values: Object.fromEntries(
Object.keys(SHAPE_SCALE).map(scale => [scale, scale]),
),
});
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Inconsistent utility naming pattern.

The corner utilities use rounded-* prefix while other shape utilities use shape-*. This inconsistency could confuse users and conflicts with the documented semantic naming approach.

 api.matchUtilities({
-  'rounded-tl': (value: string) => ({
+  'shape-tl': (value: string) => ({
     borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
   }),
-  'rounded-tr': (value: string) => ({
+  'shape-tr': (value: string) => ({
     borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
   }),
   // ... continue for all corner utilities
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
api.matchUtilities({
'rounded-tl': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-tr': (value: string) => ({
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-br': (value: string) => ({
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-bl': (value: string) => ({
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-t': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-r': (value: string) => ({
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-b': (value: string) => ({
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'rounded-l': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
}, {
values: Object.fromEntries(
Object.keys(SHAPE_SCALE).map(scale => [scale, scale]),
),
});
api.matchUtilities({
'shape-tl': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
'shape-tr': (value: string) => ({
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'shape-br': (value: string) => ({
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'shape-bl': (value: string) => ({
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
'shape-t': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'shape-r': (value: string) => ({
borderTopRightRadius: `var(--${themePrefix}shape-${value})`,
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'shape-b': (value: string) => ({
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
borderBottomRightRadius: `var(--${themePrefix}shape-${value})`,
}),
'shape-l': (value: string) => ({
borderTopLeftRadius: `var(--${themePrefix}shape-${value})`,
borderBottomLeftRadius: `var(--${themePrefix}shape-${value})`,
}),
}, {
values: Object.fromEntries(
Object.keys(SHAPE_SCALE).map(scale => [scale, scale]),
),
});
🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/src/theme/shape-match-utilities.ts lines 76 to
109, the utility names for corners use the prefix 'rounded-*' while other shape
utilities use 'shape-*', causing inconsistency. Rename all 'rounded-*' utility
keys to use the 'shape-*' prefix instead, ensuring consistent naming across all
shape utilities and aligning with the documented semantic naming approach.

Comment on lines +136 to +178
export function generateMinimalShapeCSS(themePrefix: string = 'md-'): Record<string, CSSRuleObject> {
const utilities: Record<string, CSSRuleObject> = {};

// Base size utilities that set a CSS variable
for (const scale of Object.keys(SHAPE_SCALE)) {
utilities[`.shape-${scale}`] = {
'--shape-size': `var(--${themePrefix}shape-${scale})`,
};
}

// Corner utilities that use the CSS variable
const corners = {
tl: { borderTopLeftRadius: 'var(--shape-size, var(--md-shape-md))' },
tr: { borderTopRightRadius: 'var(--shape-size, var(--md-shape-md))' },
br: { borderBottomRightRadius: 'var(--shape-size, var(--md-shape-md))' },
bl: { borderBottomLeftRadius: 'var(--shape-size, var(--md-shape-md))' },
t: {
borderTopLeftRadius: 'var(--shape-size, var(--md-shape-md))',
borderTopRightRadius: 'var(--shape-size, var(--md-shape-md))',
},
r: {
borderTopRightRadius: 'var(--shape-size, var(--md-shape-md))',
borderBottomRightRadius: 'var(--shape-size, var(--md-shape-md))',
},
b: {
borderBottomLeftRadius: 'var(--shape-size, var(--md-shape-md))',
borderBottomRightRadius: 'var(--shape-size, var(--md-shape-md))',
},
l: {
borderTopLeftRadius: 'var(--shape-size, var(--md-shape-md))',
borderBottomLeftRadius: 'var(--shape-size, var(--md-shape-md))',
},
all: {
borderRadius: 'var(--shape-size, var(--md-shape-md))',
},
};

for (const [corner, styles] of Object.entries(corners)) {
utilities[`.rounded-${corner}`] = styles;
}

return utilities;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

CSS variable fallback chain needs improvement.

The fallback in generateMinimalShapeCSS uses a hardcoded --md-shape-md fallback instead of using the configurable theme prefix, which could cause issues with custom prefixes.

 const corners = {
-  tl: { borderTopLeftRadius: 'var(--shape-size, var(--md-shape-md))' },
+  tl: { borderTopLeftRadius: `var(--shape-size, var(--${themePrefix}shape-md))` },
   // Apply the same fix to all corner definitions
🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/src/theme/shape-match-utilities.ts between lines
136 and 178, the CSS variable fallback uses a hardcoded '--md-shape-md' instead
of incorporating the configurable themePrefix parameter. To fix this, replace
all instances of '--md-shape-md' in the fallback with a dynamic fallback that
uses the themePrefix variable, ensuring the fallback respects the custom prefix
provided to the function.

Comment on lines +175 to +179
- `.shape-rounded-lg` → `.shape-lg`
- `.shape-rounded-lg-t` → `.shape-lg-top`
- `.shape-squircle` → `.shape-squircle-{scale}`
- `.shape-top-square` → `.shape-{scale}-bottom`
- Component shapes remain the same: `.shape-button`
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify migration mapping consistency with README.md.

The migration examples here should match those in README.md to avoid confusion. Cross-reference with the README migration guide to ensure consistency.


🏁 Script executed:

#!/bin/bash
# Compare migration examples between README and AGENT.md
echo "Migration examples in README.md:"
rg -A 10 "Migration from v0\.5\.x" packages/@poupe-tailwindcss/README.md

echo -e "\nMigration examples in AGENT.md:"
rg -A 10 "Migration from v0\.5\.x" packages/@poupe-tailwindcss/AGENT.md

Length of output: 1197


Align migration mapping in AGENT.md with README.md

The mappings in packages/@poupe-tailwindcss/AGENT.md currently diverge from the concrete examples in README.md. Please update the snippet at lines 175–179 to match:

• Add the missing .shape-squareshape-none entry.
• Change the generic .shape-top-square.shape-{scale}-bottom to the specific .shape-top-square.shape-lg-bottom.
• Clarify the squircle mapping by showing the example that remains unchanged (.shape-squircle-md).

Suggested diff for packages/@poupe-tailwindcss/AGENT.md:

-   - `.shape-rounded-lg` → `.shape-lg`
-   - `.shape-rounded-lg-t` → `.shape-lg-top`
-   - `.shape-squircle` → `.shape-squircle-{scale}`
-   - `.shape-top-square` → `.shape-{scale}-bottom`
-   - Component shapes remain the same: `.shape-button`
+   - `.shape-rounded-lg`          → `.shape-lg`
+   - `.shape-rounded-lg-t`        → `.shape-lg-top`
+   - `.shape-squircle-md`         → (unchanged)
+   - `.shape-square`              → `shape-none`
+   - `.shape-top-square`          → `.shape-lg-bottom`
+   - Component shapes remain the same: `.shape-button`
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- `.shape-rounded-lg``.shape-lg`
- `.shape-rounded-lg-t``.shape-lg-top`
- `.shape-squircle``.shape-squircle-{scale}`
- `.shape-top-square``.shape-{scale}-bottom`
- Component shapes remain the same: `.shape-button`
- `.shape-rounded-lg``.shape-lg`
- `.shape-rounded-lg-t``.shape-lg-top`
- `.shape-squircle-md` → (unchanged)
- `.shape-square``shape-none`
- `.shape-top-square``.shape-lg-bottom`
- Component shapes remain the same: `.shape-button`
🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/AGENT.md at lines 175 to 179, update the
migration mapping to align with README.md by adding the missing `.shape-square`
→ `shape-none` entry, changing `.shape-top-square` → `.shape-{scale}-bottom` to
the specific `.shape-top-square` → `.shape-lg-bottom`, and clarifying the
squircle mapping by showing the unchanged example `.shape-squircle-md`.

Comment on lines +52 to +102
export function makeFamilyScaleUtilities(themePrefix: string = 'md-'): Record<string, CSSRuleObject> {
const utilities: Record<string, CSSRuleObject> = {};

// Skip 'rounded' as it's the default for base utilities
const nonRoundedFamilies = SHAPE_FAMILIES.filter(f => f !== 'rounded');

for (const family of nonRoundedFamilies) {
for (const scale of Object.keys(SHAPE_SCALE) as ShapeScaleKey[]) {
// Generate explicit family utilities like shape-squircle-lg
switch (family) {
case 'squircle': {
// For squircle, we'll use a simple border-radius for now
// Full implementation would use mask-image
utilities[`.shape-${family}-${scale}`] = {
'border-radius': `var(--${themePrefix}shape-${scale})`,
// TODO: Add actual squircle implementation
};

break;
}
case 'cut': {
utilities[`.shape-${family}-${scale}`] = {
'border-radius': `var(--${themePrefix}shape-${scale})`,
// TODO: Add actual cut corner implementation with clip-path
};

break;
}
case 'convex': {
// Convex uses 1.5x the radius
utilities[`.shape-${family}-${scale}`] = {
'border-radius': `calc(var(--${themePrefix}shape-${scale}) * 1.5)`,
};

break;
}
case 'concave': {
utilities[`.shape-${family}-${scale}`] = {
'border-radius': `var(--${themePrefix}shape-${scale})`,
// TODO: Add actual concave implementation
};

break;
}
// No default
}
}
}

return utilities;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

⚠️ Potential issue

Complete the shape family implementations.

The TODO comments indicate incomplete implementations for squircle, cut, and concave shapes. The shapes.ts file contains the proper implementations that should be used:

  • Use getSquircleStyles() for squircle implementation
  • Use getCutStyles() for cut corners
  • Complete the concave implementation

Also, add a default case to handle unexpected shape families.

Import and use the shape generation functions:

-import { SHAPE_SCALE, COMPONENT_SHAPES, SHAPE_FAMILIES, CORNER_GROUPS, type ShapeScaleKey } from './shapes';
+import { 
+  SHAPE_SCALE, 
+  COMPONENT_SHAPES, 
+  SHAPE_FAMILIES, 
+  CORNER_GROUPS, 
+  type ShapeScaleKey,
+  getSquircleStyles,
+  getCutStyles,
+  getConcaveStyles,
+  getConvexStyles
+} from './shapes';

Then update the switch cases:

case 'squircle': {
-  // For squircle, we'll use a simple border-radius for now
-  // Full implementation would use mask-image
-  utilities[`.shape-${family}-${scale}`] = {
-    'border-radius': `var(--${themePrefix}shape-${scale})`,
-  // TODO: Add actual squircle implementation
-  };
+  const smoothing = SHAPE_SCALE[scale].squircle;
+  utilities[`.shape-${family}-${scale}`] = getSquircleStyles(smoothing);
  break;
}

Add default case:

  break;
}
-// No default
+default:
+  // Log warning for unknown shape family
+  console.warn(`Unknown shape family: ${family}`);
}
🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/src/theme/shape-semantic.ts between lines 52 and
102, the implementations for squircle, cut, and concave shape families are
incomplete and only have placeholder comments. Import the shape generation
functions getSquircleStyles, getCutStyles, and getConcaveStyles from the
shapes.ts file. Replace the TODO sections in the switch cases by calling these
functions with the appropriate scale and themePrefix to generate the correct CSS
rules. Additionally, add a default case in the switch statement to handle
unexpected shape families gracefully, such as by logging a warning or skipping
them.

Comment on lines +379 to +380
'badge': { scale: 'sm', family: 'squircle' },
'avatar': { scale: 'full', family: 'squircle' },
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Component shape families are not being utilized.

Badge and avatar components specify squircle family, but makeSemanticComponentUtilities() in shape-semantic.ts doesn't use the family property. These components won't get the intended squircle effect.


🏁 Script executed:

#!/bin/bash
# Check if the family property is used in semantic utilities
rg -A 5 "config\.family" packages/@poupe-tailwindcss/src/theme/shape-semantic.ts

Length of output: 82


🏁 Script executed:

#!/bin/bash
# Check for any usage of 'family' in shape-semantic.ts
rg -n "family" -C 3 packages/@poupe-tailwindcss/src/theme/shape-semantic.ts

# Show the implementation of makeSemanticComponentUtilities for context
rg -n "export function makeSemanticComponentUtilities" -A 20 packages/@poupe-tailwindcss/src/theme/shape-semantic.ts

Length of output: 2867


Component shape family property is ignored by semantic utilities

In packages/@poupe-tailwindcss/src/theme/shape-semantic.ts, makeSemanticComponentUtilities only reads scale from each COMPONENT_SHAPES entry—family is never used. As a result, components configured with a non-default shape family (e.g. badge, avatar with family: 'squircle') will fall back to the default rounded border-radius and never get their intended squircle variant.

Please update makeSemanticComponentUtilities to destructure and apply family, for example by delegating non-rounded families to your existing makeFamilyScaleUtilities:

File: packages/@poupe-tailwindcss/src/theme/shape-semantic.ts
Lines: ~37–44

-  for (const [component, config] of Object.entries(COMPONENT_SHAPES)) {
-    const { scale } = config;
-    utilities[`.shape-${component}`] = {
-      'border-radius': `var(--${themePrefix}shape-${component}, var(--${themePrefix}shape-${scale}))`,
-    };
-  }
+  for (const [component, config] of Object.entries(COMPONENT_SHAPES)) {
+    const { scale, family = 'rounded' } = config;
+    if (family !== 'rounded') {
+      // Delegate to family-specific utilities (e.g. squircle, cut)
+      const familyUtil = makeFamilyScaleUtilities(themePrefix)[`.shape-${family}-${scale}`];
+      utilities[`.shape-${component}`] = { ...familyUtil };
+    } else {
+      utilities[`.shape-${component}`] = {
+        'border-radius': `var(--${themePrefix}shape-${component}, var(--${themePrefix}shape-${scale}))`,
+      };
+    }
+  }

This ensures badge and avatar receive their configured squircle masks rather than default rounding.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
'badge': { scale: 'sm', family: 'squircle' },
'avatar': { scale: 'full', family: 'squircle' },
for (const [component, config] of Object.entries(COMPONENT_SHAPES)) {
const { scale, family = 'rounded' } = config;
if (family !== 'rounded') {
// Delegate to family-specific utilities (e.g. squircle, cut)
const familyUtil = makeFamilyScaleUtilities(themePrefix)[`.shape-${family}-${scale}`];
utilities[`.shape-${component}`] = { ...familyUtil };
} else {
utilities[`.shape-${component}`] = {
'border-radius': `var(--${themePrefix}shape-${component}, var(--${themePrefix}shape-${scale}))`;
};
}
}
🤖 Prompt for AI Agents
In packages/@poupe-tailwindcss/src/theme/shape-semantic.ts around lines 37 to
44, the function makeSemanticComponentUtilities currently only reads the scale
property from COMPONENT_SHAPES entries and ignores the family property. To fix
this, update the destructuring to include family and modify the utility
generation logic to apply the family value. Specifically, delegate non-default
family values (like 'squircle') to the existing makeFamilyScaleUtilities
function so that components like badge and avatar receive their intended shape
family styles instead of default rounded corners.

@amery amery marked this pull request as draft June 29, 2025 22:35
@amery amery self-assigned this Jun 29, 2025
@amery amery added enhancement New feature or request tailwindcss @poupe/tailwindcss labels Jun 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request tailwindcss @poupe/tailwindcss

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant