feat(@poupe/tailwindcss): v0.6.0 - MD3 Expressive Shape System#457
feat(@poupe/tailwindcss): v0.6.0 - MD3 Expressive Shape System#457
Conversation
WalkthroughThis update introduces a comprehensive redesign of the shape system in the Changes
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
Possibly related PRs
Suggested labels
Poem
✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
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-indexexpects 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-noneandshape-rounded-noneare 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 plainshape-*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-radius14998.5pxis excessive & harms rounding precisionThe 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 above9999pxon most elements is equivalent to9999pxbut harder to read and gzip-compress.Recommend capping to
9999px(or simply50%) for clarity:-border-radius: var(--md-shape-full, 14998.5px); +border-radius: var(--md-shape-full, 9999px); /* or 50% */
2921-2929: Missingshape-*alias utilities for new familiesYou 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
📒 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.jsonpackages/@poupe-tailwindcss/src/theme/__tests__/components.test.tspackages/@poupe-tailwindcss/src/theme/components.tspackages/@poupe-tailwindcss/src/assets/default.csspackages/@poupe-tailwindcss/src/theme/shapes.tspackages/@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.mdpackages/@poupe-tailwindcss/README.mdpackages/@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-fullto9999pxis 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
makeShapeComponentsfunction 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
@supportsfallbacks 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 differenceUtilities such as
.shape-concave-extra-smallonly addposition: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.
|
these .css files are for tailwindcss, not browser |
…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>
2ef8ff2 to
4ec4849
Compare
@poupe/css
@poupe/nuxt
@poupe/tailwindcss
@poupe/theme-builder
@poupe/vue
commit: |
There was a problem hiding this comment.
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
matchUtilitiesalready produces on demand.The earlier review requested either
- moving these rules to the runtime plugin so PurgeCSS can tree-shake, or
- 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
📒 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.jsonpackages/@poupe-tailwindcss/src/theme/plugin.tspackages/@poupe-tailwindcss/src/theme/theme.tspackages/@poupe-tailwindcss/src/theme/shape-match-utilities.tspackages/@poupe-tailwindcss/src/theme/components.tspackages/@poupe-tailwindcss/src/theme/__tests__/components.test.tspackages/@poupe-tailwindcss/src/assets/style.csspackages/@poupe-tailwindcss/src/theme/shapes.tspackages/@poupe-tailwindcss/src/assets/default.csspackages/@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.mdpackages/@poupe-tailwindcss/AGENT.mdpackages/@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 thecss/use-baselinerule is actually resolvable
css/use-baselineis provided by@stylistic/eslint-plugin-css(formerlyeslint-plugin-css).
If that plugin isn’t included (either directly inpackage.jsonor 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-configalready 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 utilitiesThe 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 constantsThe 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 generationThe refactoring to delegate shape generation to
makeSemanticShapeUtilitiessignificantly reduces complexity while maintaining the same functionality. The check forshapePrefixensures 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_SCALEimport fromcomponentstoshapesaligns with the modularization of the codebase.
354-367: Test expectations align with simplified implementation.The updated tests correctly expect
border-radiusproperties 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 validationThe test at
packages/@poupe-tailwindcss/src/theme/__tests__/components.test.ts:427-433
expects no warnings for missingshape-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
makeShapeComponentsimplementation (e.g. inpackages/@poupe-tailwindcss/src/theme/components.ts) for any debug‐mode warnings taggedshape-validation.- Ensure that when
debugis enabled, no warning is emitted if a semantic shape is defined without a correspondingshape-token.packages/@poupe-tailwindcss/src/assets/style.css (1)
36-58: Shape-scale CSS variables look goodThe 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-imagewith SVG paths for iOS-style smooth corners- Cut utilities should use
clip-pathfor 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.
| ## [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 | ||
|
|
There was a problem hiding this comment.
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.
| // Import semantic shape utilities | ||
| import { makeSemanticShapeUtilities } from './shape-semantic'; |
There was a problem hiding this comment.
🛠️ 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.
| 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> | ||
| ``` |
There was a problem hiding this comment.
💡 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.
| ### 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) | ||
| ``` |
There was a problem hiding this comment.
🛠️ 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.
| ### 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.
| 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]), | ||
| ), | ||
| }); |
There was a problem hiding this comment.
🛠️ 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.
| 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.
| 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; | ||
| } |
There was a problem hiding this comment.
🛠️ 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.
| - `.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` |
There was a problem hiding this comment.
💡 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.mdLength 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-square → shape-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.
| - `.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`.
| 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; | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
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.
| 'badge': { scale: 'sm', family: 'squircle' }, | ||
| 'avatar': { scale: 'full', family: 'squircle' }, |
There was a problem hiding this comment.
💡 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.tsLength 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.tsLength 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.
| '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.
@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
Multiple Shape Families
.shape-lg,.shape-xl.shape-squircle-lg.shape-cut-smAsymmetric Corner Control
.shape-lg-tl,.shape-md-br.shape-lg-top,.shape-xl-left.shape-[20px],.shape-tl-[40px]Enhanced Component Shapes
💔 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}-bottomShape Scale
Old scale names → New abbreviated names:
extra-small→xssmall→smmedium→mdlarge→lgextra-large→xlComponent shapes remain unchanged (e.g.,
.shape-button,.shape-card).🚀 Migration Guide
📦 Installation
🔧 Technical Improvements
📚 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
Bug Fixes
Documentation
Chores
Tests