@jiwambe/components 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +84 -0
  2. package/dist/components/Box/Box.d.ts +10 -32
  3. package/dist/components/Box/Box.d.ts.map +1 -1
  4. package/dist/components/Box/Box.js +9 -13
  5. package/dist/components/Box/Box.js.map +1 -1
  6. package/dist/components/Card/Card.d.ts.map +1 -1
  7. package/dist/components/Card/Card.js +33 -32
  8. package/dist/components/Card/Card.js.map +1 -1
  9. package/dist/components/FAQ/FAQ.d.ts.map +1 -1
  10. package/dist/components/FAQ/FAQ.js +7 -7
  11. package/dist/components/FAQ/FAQ.js.map +1 -1
  12. package/dist/components/List/List.d.ts +10 -9
  13. package/dist/components/List/List.d.ts.map +1 -1
  14. package/dist/components/List/List.js +20 -5
  15. package/dist/components/List/List.js.map +1 -1
  16. package/dist/components/List/index.d.ts +1 -1
  17. package/dist/components/List/index.d.ts.map +1 -1
  18. package/dist/components/Typography/Typography.d.ts +10 -293
  19. package/dist/components/Typography/Typography.d.ts.map +1 -1
  20. package/dist/components/Typography/Typography.js +6 -11
  21. package/dist/components/Typography/Typography.js.map +1 -1
  22. package/dist/components/index.d.ts +1 -1
  23. package/dist/components/index.d.ts.map +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/plugin/jiwambe-plugin.d.ts.map +1 -1
  27. package/dist/plugin/jiwambe-plugin.js +55 -2
  28. package/dist/plugin/jiwambe-plugin.js.map +1 -1
  29. package/dist/server.d.ts +1 -1
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/types/index.d.ts +0 -6
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/dist/types/list.d.ts +21 -2
  34. package/dist/types/list.d.ts.map +1 -1
  35. package/dist/types/list.js.map +1 -1
  36. package/package.json +18 -17
@@ -1 +1 @@
1
- {"version":3,"file":"jiwambe-plugin.js","sources":["../../src/plugin/jiwambe-plugin.ts"],"sourcesContent":["import plugin from 'tailwindcss/plugin';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface TypographyDef {\n fontFamily: string;\n fontSize: string;\n fontWeight: string;\n lineHeight: string;\n letterSpacing?: string;\n textWrap?: string;\n}\n\nexport interface JiwambePluginOptions {\n /** Override or extend semantic color token mappings. */\n colors?: Record<string, string>;\n /** Override or extend spacing tokens. */\n spacing?: Record<string, string>;\n /** Override or extend border width tokens. */\n borderWidth?: Record<string, string>;\n /** Override or extend border radius tokens. */\n borderRadius?: Record<string, string>;\n /** Override or extend elevation (box-shadow) tokens. */\n elevation?: Record<string, string>;\n /** Override or extend typography definitions. Partial overrides are merged with defaults. */\n typography?: Record<string, Partial<TypographyDef>>;\n /** Override primary and/or secondary font families. */\n fontFamily?: { primary?: string; secondary?: string };\n}\n\n// ---------------------------------------------------------------------------\n// Base color palette\n// ---------------------------------------------------------------------------\n\nconst baseColors: Record<string, string> = {\n // Neutral\n 'neutral-0': '#FFFFFF',\n 'neutral-25': '#FAFBFB',\n 'neutral-50': '#F5F6F6',\n 'neutral-100': '#E5E8E7',\n 'neutral-150': '#DADEDC',\n 'neutral-200': '#CED3D2',\n 'neutral-250': '#BDC4C3',\n 'neutral-300': '#ABB5B3',\n 'neutral-350': '#97A2A0',\n 'neutral-400': '#828E8C',\n 'neutral-450': '#74817F',\n 'neutral-500': '#667472',\n 'neutral-600': '#586261',\n 'neutral-700': '#4B5353',\n 'neutral-800': '#424847',\n 'neutral-850': '#393F3E',\n 'neutral-900': '#303635',\n 'neutral-950': '#181B1B',\n 'neutral-950--t75': 'rgba(24, 27, 27, 0.75)',\n 'neutral-950--t50': 'rgba(24, 27, 27, 0.50)',\n 'neutral-950--t25': 'rgba(24, 27, 27, 0.25)',\n 'neutral-950--t10': 'rgba(24, 27, 27, 0.10)',\n\n // Green\n 'green-50': '#ECF9F3',\n 'green-100': '#D9F2E7',\n 'green-150': '#C7ECDE',\n 'green-200': '#B4E6D4',\n 'green-250': '#9ADEC8',\n 'green-300': '#80D5BB',\n 'green-350': '#64C9AB',\n 'green-400': '#4DC2A3',\n 'green-450': '#33B897',\n 'green-500': '#19AE8A',\n 'green-600': '#109274',\n 'green-700': '#0D755F',\n 'green-800': '#0B6556',\n 'green-850': '#065E4F',\n 'green-900': '#005748',\n 'green-950': '#00332A',\n 'green-950--t75': 'rgba(0, 51, 42, 0.75)',\n 'green-950--t50': 'rgba(0, 51, 42, 0.50)',\n 'green-950--t25': 'rgba(0, 51, 42, 0.25)',\n 'green-950--t10': 'rgba(0, 51, 42, 0.10)',\n\n // Red\n 'red-50': '#FEF3F1',\n 'red-100': '#FCE6E3',\n 'red-150': '#FAD5D1',\n 'red-200': '#F8C4BF',\n 'red-250': '#F9ADA5',\n 'red-300': '#F9958B',\n 'red-400': '#F67265',\n 'red-500': '#F34F3F',\n 'red-600': '#E52B19',\n 'red-700': '#CF2717',\n 'red-800': '#93251A',\n 'red-850': '#791F16',\n 'red-900': '#5F1811',\n 'red-950': '#340D09',\n 'red-950--t75': 'rgba(52, 13, 9, 0.75)',\n 'red-950--t50': 'rgba(52, 13, 9, 0.50)',\n 'red-950--t25': 'rgba(52, 13, 9, 0.25)',\n 'red-950--t10': 'rgba(52, 13, 9, 0.10)',\n\n // Yellow\n 'yellow-50': '#FEFCF1',\n 'yellow-100': '#FCF8E3',\n 'yellow-150': '#FAF4D1',\n 'yellow-200': '#F8EFBF',\n 'yellow-250': '#F9EBA5',\n 'yellow-300': '#F9E68B',\n 'yellow-350': '#F8E278',\n 'yellow-400': '#F7DE64',\n 'yellow-500': '#F3D53F',\n 'yellow-600': '#EBC714',\n 'yellow-700': '#BC8E10',\n 'yellow-800': '#826217',\n 'yellow-850': '#6D5213',\n 'yellow-900': '#57410F',\n 'yellow-950': '#2B2108',\n 'yellow-950--t75': 'rgba(43, 33, 8, 0.75)',\n 'yellow-950--t50': 'rgba(43, 33, 8, 0.50)',\n 'yellow-950--t25': 'rgba(43, 33, 8, 0.25)',\n 'yellow-950--t10': 'rgba(43, 33, 8, 0.10)',\n};\n\n// ---------------------------------------------------------------------------\n// Helper – resolve a base color reference to its hex, with optional opacity\n// ---------------------------------------------------------------------------\n\nexport function resolve(ref: string, opacity?: number): string {\n const hex = baseColors[ref];\n if (!hex) return ref; // pass through raw hex / css value\n\n if (opacity === undefined || opacity === 100) return hex;\n\n // Convert hex to rgb then apply opacity via rgba()\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${(opacity / 100).toFixed(2)})`;\n}\n\n// ---------------------------------------------------------------------------\n// Default semantic token mappings\n// ---------------------------------------------------------------------------\n\nfunction defaultSemanticColors(): Record<string, string> {\n return {\n // Text\n 'text-primary': resolve('neutral-950'),\n 'text-secondary': resolve('neutral-950', 75),\n 'text-disabled': resolve('neutral-950', 50),\n 'text-primary-inverse': resolve('neutral-0'),\n 'text-secondary-inverse': resolve('neutral-0', 75),\n 'text-inverse-disabled': resolve('neutral-0', 50),\n 'text-action-primary': resolve('neutral-0'),\n 'text-action-primary-disabled': resolve('neutral-0', 50),\n 'text-action-secondary': resolve('neutral-950'),\n 'text-action-secondary-disabled': resolve('neutral-950', 50),\n 'text-action-tertiary': resolve('neutral-0'),\n 'text-action-tertiary-hover': resolve('neutral-0', 75),\n 'text-action-tertiary-disabled': resolve('neutral-0', 50),\n 'text-err': resolve('red-950'),\n 'text-err-disabled': resolve('red-950', 50),\n\n // Link\n 'link-primary': resolve('green-900'),\n 'link-primary-hover': resolve('green-950', 75),\n 'link-primary-disabled': resolve('green-950', 50),\n 'link-secondary': resolve('neutral-950'),\n 'link-secondary-hover': resolve('neutral-950', 75),\n 'link-secondary-disabled': resolve('neutral-950', 50),\n 'link-tertiary': resolve('neutral-950', 50),\n 'link-tertiary-hover': resolve('neutral-950', 25),\n 'link-tertiary-disabled': resolve('neutral-950', 25),\n 'link-inverse': resolve('neutral-0'),\n 'link-inverse-hover': resolve('neutral-0', 75),\n 'link-inverse-disabled': resolve('neutral-0', 50),\n\n // Background fills\n 'fill-bg-primary': resolve('neutral-0'),\n 'fill-bg-secondary': resolve('neutral-50'),\n 'fill-bg-tertiary': resolve('green-900'),\n 'fill-bg-err': resolve('red-100'),\n 'fill-bg-info': resolve('neutral-0'),\n 'fill-bg-dimmer': resolve('neutral-950', 75),\n\n // Action fills\n 'fill-action-primary': resolve('green-900'),\n 'fill-action-primary-hover': resolve('green-950'),\n 'fill-action-primary-active': resolve('green-950'),\n 'fill-action-primary-focus': resolve('green-900'),\n 'fill-action-primary-selected': resolve('green-900'),\n 'fill-action-primary-disabled': resolve('green-900'),\n 'fill-action-secondary': resolve('neutral-100'),\n 'fill-action-secondary-hover': resolve('neutral-200'),\n 'fill-action-secondary-active': resolve('neutral-200'),\n 'fill-action-secondary-focus': resolve('neutral-100'),\n 'fill-action-secondary-selected': resolve('neutral-100'),\n 'fill-action-secondary-disabled': resolve('neutral-100'),\n 'fill-action-inverse': resolve('neutral-0'),\n 'fill-action-inverse-hover': resolve('neutral-0', 90),\n 'fill-action-inverse-active': resolve('neutral-0', 90),\n 'fill-action-inverse-focus': resolve('neutral-0'),\n 'fill-action-inverse-selected': resolve('neutral-0'),\n 'fill-action-inverse-disabled': resolve('neutral-0'),\n 'fill-action-ghost': resolve('neutral-0', 0),\n 'fill-action-ghost-hover': resolve('neutral-0', 10),\n 'fill-action-ghost-active': resolve('neutral-0', 10),\n 'fill-action-ghost-focus': resolve('neutral-0', 0),\n 'fill-action-ghost-selected': resolve('neutral-0', 0),\n 'fill-action-ghost-disabled': resolve('neutral-0', 0),\n\n // Form fills\n 'fill-form-primary': resolve('neutral-0'),\n 'fill-form-primary-hover': resolve('neutral-0'),\n 'fill-form-primary-active': resolve('neutral-0'),\n 'fill-form-primary-focus': resolve('neutral-0'),\n 'fill-form-primary-selected': resolve('neutral-0'),\n 'fill-form-primary-disabled': resolve('neutral-0'),\n\n // Borders\n 'border-light': resolve('neutral-100'),\n 'border-heavy': resolve('neutral-200'),\n 'border-inverse': resolve('neutral-0'),\n 'border-focus': resolve('green-900'),\n 'border-err': resolve('red-800'),\n\n // Form borders\n 'border-form-primary': resolve('neutral-300'),\n 'border-form-primary-hover': resolve('neutral-600'),\n 'border-form-primary-active': resolve('green-900'),\n 'border-form-primary-focus': resolve('green-900'),\n 'border-form-primary-selected': resolve('green-900'),\n 'border-form-primary-disabled': resolve('neutral-200'),\n\n // Icons\n 'icon-primary': resolve('neutral-950'),\n 'icon-primary-disabled': resolve('neutral-950', 50),\n 'icon-inverse': resolve('neutral-0'),\n 'icon-inverse-disabled': resolve('neutral-0', 50),\n 'icon-err': resolve('red-950'),\n 'icon-err-disabled': resolve('red-950', 50),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Typography token definitions\n// ---------------------------------------------------------------------------\n\nconst fontFamilyPrimary = '\"Instrument Sans\", sans-serif';\nconst fontFamilySecondary = '\"Inter\", sans-serif';\n\nconst typographyTokens: Record<string, TypographyDef> = {\n 'title-sm': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(0.9375rem, 0.8482rem + 0.4464vw, 1.0625rem)',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'title-md': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(1rem, 0.8661rem + 0.6696vw, 1.1875rem)',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '0.02em',\n textWrap: 'balance',\n },\n 'title-lg': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(1.5625rem, 1.4375rem + 0.625vw, 2rem)',\n fontWeight: '600',\n lineHeight: '1.0',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'title-xl': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(3rem, 2.7857rem + 1.0714vw, 3.75rem)',\n fontWeight: '800',\n lineHeight: '1.0',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'text-xs': {\n fontFamily: fontFamilySecondary,\n fontSize: '0.75rem',\n fontWeight: '400',\n lineHeight: '1.4',\n letterSpacing: '-0.005em',\n textWrap: 'pretty',\n },\n 'text-xs-bold': {\n fontFamily: fontFamilySecondary,\n fontSize: '0.75rem',\n fontWeight: '600',\n lineHeight: '1.4',\n letterSpacing: '-0.005em',\n textWrap: 'pretty',\n },\n 'text-sm': {\n fontFamily: fontFamilySecondary,\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-sm-bold': {\n fontFamily: fontFamilySecondary,\n fontSize: '1rem',\n fontWeight: '600',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-md': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-md-bold': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '600',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-xl': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(3rem, 2.7857rem + 1.0714vw, 3.75rem)',\n fontWeight: '800',\n lineHeight: '1.0',\n letterSpacing: '-0.005em',\n textWrap: 'pretty',\n },\n 'form-text': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'form-label': {\n fontFamily: fontFamilyPrimary,\n fontSize: '1.1875rem',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'btn-small': {\n fontFamily: fontFamilySecondary,\n fontSize: '1rem',\n fontWeight: '500',\n lineHeight: '1.4',\n },\n 'btn-reg': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '500',\n lineHeight: '1.4',\n },\n 'link-md': {\n fontFamily: fontFamilyPrimary,\n fontSize: '1.1875rem',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '0.02em',\n },\n};\n\n// ---------------------------------------------------------------------------\n// Spacing tokens\n// ---------------------------------------------------------------------------\n\nconst spacingTokens: Record<string, string> = {\n // Fixed\n 'space-0': '0rem',\n 'space-0-25': '0.0625rem',\n 'space-1': '0.25rem',\n 'space-2': '0.5rem',\n 'space-3': '0.75rem',\n 'space-4': '1rem',\n 'space-5': '1.25rem',\n 'space-6': '1.5rem',\n 'space-8': '2rem',\n 'space-9': '2.25rem',\n 'space-12': '3rem',\n 'space-16': '4rem',\n 'space-18': '4.5rem',\n 'space-24': '6rem',\n 'space-30': '7.5rem',\n 'space-36': '9rem',\n 'space-48': '12rem',\n 'space-72': '18rem',\n\n // Fluid\n 'space-fluid-1-2': 'clamp(0.25rem, 0.1706rem + 0.3968vw, 0.5rem)',\n 'space-fluid-2-4': 'clamp(0.5rem, 0.3413rem + 0.7937vw, 1rem)',\n 'space-fluid-4-5': 'clamp(1rem, 0.9206rem + 0.3968vw, 1.25rem)',\n 'space-fluid-4-6': 'clamp(1rem, 0.8413rem + 0.7937vw, 1.5rem)',\n 'space-fluid-4-8': 'clamp(1rem, 0.6825rem + 1.5873vw, 2rem)',\n 'space-fluid-4-9': 'clamp(1rem, 0.6032rem + 1.9841vw, 2.25rem)',\n 'space-fluid-5-6': 'clamp(1.25rem, 1.1706rem + 0.3968vw, 1.5rem)',\n 'space-fluid-6-9': 'clamp(1.5rem, 1.2619rem + 1.1905vw, 2.25rem)',\n 'space-fluid-8-16': 'clamp(2rem, 1.3651rem + 3.1746vw, 4rem)',\n 'space-fluid-16-18': 'clamp(4rem, 3.8413rem + 0.7937vw, 4.5rem)',\n 'space-fluid-30-36': 'clamp(7.5rem, 7.0238rem + 2.381vw, 9rem)',\n 'space-fluid-48-72': 'clamp(12rem, 10.0952rem + 9.5238vw, 18rem)',\n};\n\n// ---------------------------------------------------------------------------\n// Border width tokens\n// ---------------------------------------------------------------------------\n\nconst borderWidthTokens: Record<string, string> = {\n 'border-none': '0',\n 'border-xs': '.0625rem',\n 'border-sm': '.078125rem',\n 'border-md': '.09375rem',\n};\n\n// ---------------------------------------------------------------------------\n// Border radius tokens\n// ---------------------------------------------------------------------------\n\nconst borderRadiusTokens: Record<string, string> = {\n 'rad-none': '0',\n 'rad-xs': '.375rem',\n 'rad-sm': '.75rem',\n 'rad-md': '1rem',\n 'rad-lg': '1.25rem',\n 'rad-xl': '1.5rem',\n 'rad-rounded': '100rem',\n};\n\n// ---------------------------------------------------------------------------\n// Elevation (box-shadow) tokens\n// ---------------------------------------------------------------------------\n\nconst elevationTokens: Record<string, string> = {\n 'elevation-low': '0 2px 8px 0 var(--col-neutral-950--t10)',\n 'elevation-normal': '0 2px 8px 4px var(--col-neutral-950--t10)',\n};\n\n// ---------------------------------------------------------------------------\n// Canonical design token primitives (source of truth)\n// ---------------------------------------------------------------------------\n\nconst canonicalColourPrimitives: Record<string, string> = {\n 'col-neutral-0': 'hsla(0, 0%, 100%, 1)',\n 'col-neutral-0--t0': 'hsla(0, 0%, 100%, 0)',\n 'col-neutral-0--t10': 'hsla(0, 0%, 100%, 0.1)',\n 'col-neutral-0--t25': 'hsla(0, 0%, 100%, 0.25)',\n 'col-neutral-0--t50': 'hsla(0, 0%, 100%, 0.5)',\n 'col-neutral-0--t75': 'hsla(0, 0%, 100%, 0.75)',\n 'col-neutral-0--t90': 'hsla(0, 0%, 100%, 0.9)',\n 'col-neutral-50': 'hsla(180, 5%, 96%, 1)',\n 'col-neutral-100': 'hsla(160, 6%, 90%, 1)',\n 'col-neutral-200': 'hsla(168, 5%, 82%, 1)',\n 'col-neutral-300': 'hsla(168, 6%, 69%, 1)',\n 'col-neutral-400': 'hsla(170, 5%, 53%, 1)',\n 'col-neutral-500': 'hsla(171, 6%, 43%, 1)',\n 'col-neutral-600': 'hsla(174, 5%, 36%, 1)',\n 'col-neutral-700': 'hsla(180, 5%, 31%, 1)',\n 'col-neutral-800': 'hsla(170, 4%, 27%, 1)',\n 'col-neutral-900': 'hsla(170, 6%, 20%, 1)',\n 'col-neutral-950': 'hsla(180, 5%, 10%, 1)',\n 'col-neutral-950--t10': 'hsla(180, 5%, 10%, 0.1)',\n 'col-neutral-950--t25': 'hsla(180, 5%, 10%, 0.25)',\n 'col-neutral-950--t50': 'hsla(180, 5%, 10%, 0.5)',\n 'col-neutral-950--t75': 'hsla(180, 5%, 10%, 0.75)',\n 'col-neutral-950--t90': 'hsla(180, 5%, 10%, 0.9)',\n 'col-green-50': 'hsla(156, 24%, 96%, 1)',\n 'col-green-100': 'hsla(154, 49%, 90%, 1)',\n 'col-green-200': 'hsla(158, 50%, 80%, 1)',\n 'col-green-300': 'hsla(162, 50%, 67%, 1)',\n 'col-green-400': 'hsla(164, 52%, 52%, 1)',\n 'col-green-500': 'hsla(166, 75%, 39%, 1)',\n 'col-green-600': 'hsla(166, 80%, 32%, 1)',\n 'col-green-700': 'hsla(167, 80%, 25%, 1)',\n 'col-green-800': 'hsla(170, 80%, 22%, 1)',\n 'col-green-900': 'hsla(170, 100%, 17%, 1)',\n 'col-green-950': 'hsla(170, 100%, 10%, 1)',\n 'col-green-950--t10': 'hsla(170, 100%, 10%, 0.1)',\n 'col-green-950--t50': 'hsla(170, 100%, 10%, 0.5)',\n 'col-green-950--t75': 'hsla(170, 100%, 10%, 0.75)',\n 'col-green-950--t90': 'hsla(170, 100%, 10%, 0.9)',\n 'col-red-50': 'hsla(7, 60%, 97%, 1)',\n 'col-red-100': 'hsla(7, 81%, 94%, 1)',\n 'col-red-200': 'hsla(5, 80%, 86%, 1)',\n 'col-red-300': 'hsla(5, 90%, 76%, 1)',\n 'col-red-400': 'hsla(5, 90%, 68%, 1)',\n 'col-red-500': 'hsla(5, 88%, 60%, 1)',\n 'col-red-600': 'hsla(5, 80%, 50%, 1)',\n 'col-red-700': 'hsla(5, 80%, 45%, 1)',\n 'col-red-800': 'hsla(5, 70%, 34%, 1)',\n 'col-red-900': 'hsla(5, 70%, 22%, 1)',\n 'col-red-950': 'hsla(5, 70%, 12%, 1)',\n 'col-red-950--t10': 'hsla(5, 70%, 12%, 0.1)',\n 'col-red-950--t50': 'hsla(5, 70%, 12%, 0.5)',\n 'col-red-950--t75': 'hsla(5, 70%, 12%, 0.75)',\n 'col-red-950--t90': 'hsla(5, 70%, 12%, 0.9)',\n 'col-yellow-50': 'hsla(47, 60%, 97%, 1)',\n 'col-yellow-100': 'hsla(50, 81%, 94%, 1)',\n 'col-yellow-200': 'hsla(50, 80%, 86%, 1)',\n 'col-yellow-300': 'hsla(50, 90%, 76%, 1)',\n 'col-yellow-400': 'hsla(50, 90%, 68%, 1)',\n 'col-yellow-500': 'hsla(50, 88%, 60%, 1)',\n 'col-yellow-600': 'hsla(50, 84%, 50%, 1)',\n 'col-yellow-700': 'hsla(44, 84%, 40%, 1)',\n 'col-yellow-800': 'hsla(42, 70%, 30%, 1)',\n 'col-yellow-900': 'hsla(42, 71%, 20%, 1)',\n 'col-yellow-950': 'hsla(42, 69%, 10%, 1)',\n 'col-yellow-950--t10': 'hsla(42, 69%, 10%, 0.1)',\n 'col-yellow-950--t50': 'hsla(42, 69%, 10%, 0.5)',\n 'col-yellow-950--t75': 'hsla(42, 69%, 10%, 0.75)',\n 'col-yellow-950--t90': 'hsla(42, 69%, 10%, 0.9)',\n};\n\nconst canonicalTransitionPrimitives: Record<string, string> = {\n 'trans-timing-light': 'ease-out',\n 'trans-timing-normal': 'ease-out',\n 'trans-timing-heavy': 'ease-in',\n 'trans-duration-snap': '30ms',\n 'trans-duration-normal': '120ms',\n 'trans-duration-slow': '300ms',\n};\n\nconst canonicalTypographyPrimitives: Record<string, string> = {\n 'font-size-fluid-25-32': 'clamp(1.5625rem, 1.4375rem + 0.625vw, 2rem)',\n 'font-size-fluid-48-60': 'clamp(3rem, 2.7857rem + 1.0714vw, 3.75rem)',\n 'font-family-primary': '\"Instrument Sans\", sans-serif',\n 'font-family-secondary': \"'Inter', system-ui, sans-serif\",\n 'font-size-s-sm': '1.0625rem',\n 'font-size-s-md': '1.1875rem',\n 'font-size-s-lg-fluid': 'var(--font-size-fluid-25-32)',\n 'font-size-s-xl-fluid': 'var(--font-size-fluid-48-60)',\n 'font-size-t-xs': '0.75rem',\n 'font-size-t-sm': '1rem',\n 'font-size-t-md': '1.125rem',\n 'font-weight-xs': '400',\n 'font-weight-sm': '500',\n 'font-weight-md': '600',\n 'font-weight-lg': '800',\n 'font-line-tight': '1.0',\n 'font-line-normal': '1.2',\n 'font-line-loose': '1.4',\n 'font-ltrspc-xs': '-0.005em',\n 'font-ltrspc-sm': '0.01em',\n 'font-ltrspc-md': '0.02em',\n};\n\n// ---------------------------------------------------------------------------\n// Breakpoints\n// ---------------------------------------------------------------------------\n\nconst screens: Record<string, string> = {\n xs: '0px',\n sm: '600px',\n md: '800px',\n lg: '940px',\n xl: '1440px',\n};\n\n// ---------------------------------------------------------------------------\n// Plugin\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Merge helpers\n// ---------------------------------------------------------------------------\n\nfunction mergeTypography(\n base: Record<string, TypographyDef>,\n overrides: Record<string, Partial<TypographyDef>> | undefined,\n): Record<string, TypographyDef> {\n if (!overrides) return base;\n const merged = { ...base };\n for (const [key, partial] of Object.entries(overrides)) {\n merged[key] = { ...(merged[key] ?? ({} as TypographyDef)), ...partial };\n }\n return merged;\n}\n\nfunction resolvedFontFamilies(options: JiwambePluginOptions | undefined) {\n return {\n primary: options?.fontFamily?.primary ?? fontFamilyPrimary,\n secondary: options?.fontFamily?.secondary ?? fontFamilySecondary,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Plugin\n// ---------------------------------------------------------------------------\n\nconst jiwambePlugin = plugin.withOptions<JiwambePluginOptions | undefined>(\n (options) => {\n return ({ addBase, addUtilities }) => {\n const fonts = resolvedFontFamilies(options);\n const mergedColors = { ...defaultSemanticColors(), ...(options?.colors ?? {}) };\n const mergedSpacing = { ...spacingTokens, ...(options?.spacing ?? {}) };\n const mergedBorderWidth = { ...borderWidthTokens, ...(options?.borderWidth ?? {}) };\n const mergedBorderRadius = { ...borderRadiusTokens, ...(options?.borderRadius ?? {}) };\n const mergedElevation = { ...elevationTokens, ...(options?.elevation ?? {}) };\n const mergedTypography = mergeTypography(typographyTokens, options?.typography);\n\n // -----------------------------------------------------------------\n // 1. Generate CSS custom properties on :root\n // -----------------------------------------------------------------\n\n const cssVars: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(baseColors)) {\n cssVars[`--color-${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedColors)) {\n cssVars[`--color-${key}`] = value;\n }\n // Alias for list marker styling (--col-* naming)\n if (mergedColors['text-secondary']) {\n cssVars['--col-text-secondary'] = mergedColors['text-secondary'];\n }\n for (const [key, value] of Object.entries(mergedSpacing)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedBorderWidth)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedBorderRadius)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedElevation)) {\n cssVars[`--${key}`] = value;\n }\n\n cssVars['--font-family-primary'] = fonts.primary;\n cssVars['--font-family-secondary'] = fonts.secondary;\n\n for (const [key, value] of Object.entries(canonicalColourPrimitives)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(canonicalTransitionPrimitives)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(canonicalTypographyPrimitives)) {\n cssVars[`--${key}`] = value;\n }\n\n addBase({\n ':root': cssVars,\n body: {\n 'text-rendering': 'optimizeLegibility',\n '-webkit-font-smoothing': 'antialiased',\n '-moz-osx-font-smoothing': 'grayscale',\n 'text-size-adjust': 'none',\n '-webkit-text-size-adjust': 'none',\n '-moz-text-size-adjust': 'none',\n 'font-optical-sizing': 'auto',\n },\n });\n\n // -----------------------------------------------------------------\n // 1b. Skeleton shimmer keyframe and utility class\n // -----------------------------------------------------------------\n\n addBase({\n '@keyframes jiwambe-shimmer': {\n '0%': {\n backgroundPosition: '-200% 0',\n },\n '100%': {\n backgroundPosition: '200% 0',\n },\n },\n '.jiwambe-skeleton': {\n backgroundColor: 'var(--col-neutral-100)',\n backgroundImage: [\n 'linear-gradient(',\n ' 90deg,',\n ' var(--col-neutral-100) 25%,',\n ' var(--col-neutral-50) 50%,',\n ' var(--col-neutral-100) 75%',\n ')',\n ].join(''),\n backgroundSize: '200% 100%',\n backgroundRepeat: 'no-repeat',\n animation: 'jiwambe-shimmer 1.5s ease-in-out infinite',\n },\n });\n\n // -----------------------------------------------------------------\n // 1c. List marker base styles\n // -----------------------------------------------------------------\n\n addBase({\n '.jiwambe-list': {\n paddingLeft: 'var(--space-6)',\n margin: '0',\n },\n '.jiwambe-list--unstyled': {\n paddingLeft: '0',\n listStyle: 'none',\n },\n '.jiwambe-list--disc li::marker': {\n color: 'var(--col-text-secondary)',\n },\n '.jiwambe-list--decimal li::marker': {\n color: 'var(--col-text-secondary)',\n fontVariantNumeric: 'tabular-nums',\n },\n '.jiwambe-list--none': {\n listStyle: 'none',\n paddingLeft: '0',\n },\n '.jiwambe-list-item': {\n paddingLeft: 'var(--space-1)',\n },\n '.jiwambe-list-item + .jiwambe-list-item': {\n marginTop: 'var(--space-0)',\n },\n });\n\n // -----------------------------------------------------------------\n // 2. Typography utility classes\n // -----------------------------------------------------------------\n\n const typographyUtilities: Record<string, Record<string, string>> = {};\n\n for (const [name, def] of Object.entries(mergedTypography)) {\n const styles: Record<string, string> = {\n 'font-family': def.fontFamily,\n 'font-size': def.fontSize,\n 'font-weight': def.fontWeight,\n 'line-height': def.lineHeight,\n };\n if (def.letterSpacing) styles['letter-spacing'] = def.letterSpacing;\n if (def.textWrap) styles['text-wrap'] = def.textWrap;\n\n typographyUtilities[`.text-${name}`] = styles;\n }\n\n addUtilities(typographyUtilities);\n };\n },\n (options) => {\n const fonts = resolvedFontFamilies(options);\n const mergedColors = { ...defaultSemanticColors(), ...(options?.colors ?? {}) };\n const mergedSpacing = { ...spacingTokens, ...(options?.spacing ?? {}) };\n const mergedBorderWidth = { ...borderWidthTokens, ...(options?.borderWidth ?? {}) };\n const mergedBorderRadius = { ...borderRadiusTokens, ...(options?.borderRadius ?? {}) };\n const mergedElevation = { ...elevationTokens, ...(options?.elevation ?? {}) };\n\n const allColors: Record<string, string> = {};\n for (const [key, value] of Object.entries(baseColors)) {\n allColors[key] = value;\n }\n for (const [key, value] of Object.entries(mergedColors)) {\n allColors[key] = value;\n }\n\n // Spacing theme: each token maps to var(--token) so utilities use CSS variables.\n // Add short keys for fluid tokens so px-fluid-4-9 works alongside px-space-fluid-4-9.\n const spacingExtension: Record<string, string> = {};\n for (const key of Object.keys(mergedSpacing)) {\n spacingExtension[key] = `var(--${key})`;\n if (key.startsWith('space-fluid-')) {\n const shortKey = key.replace(/^space-/, '');\n spacingExtension[shortKey] = `var(--${key})`;\n }\n }\n\n return {\n theme: {\n screens,\n extend: {\n colors: allColors,\n spacing: spacingExtension,\n borderWidth: mergedBorderWidth,\n borderRadius: mergedBorderRadius,\n boxShadow: mergedElevation,\n fontFamily: {\n primary: [fonts.primary],\n secondary: [fonts.secondary],\n },\n },\n },\n };\n },\n);\n\nexport default jiwambePlugin;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jiwambe-plugin.js","sources":["../../src/plugin/jiwambe-plugin.ts"],"sourcesContent":["import plugin from 'tailwindcss/plugin';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface TypographyDef {\n fontFamily: string;\n fontSize: string;\n fontWeight: string;\n lineHeight: string;\n letterSpacing?: string;\n textWrap?: string;\n}\n\nexport interface JiwambePluginOptions {\n /** Override or extend semantic color token mappings. */\n colors?: Record<string, string>;\n /** Override or extend spacing tokens. */\n spacing?: Record<string, string>;\n /** Override or extend border width tokens. */\n borderWidth?: Record<string, string>;\n /** Override or extend border radius tokens. */\n borderRadius?: Record<string, string>;\n /** Override or extend elevation (box-shadow) tokens. */\n elevation?: Record<string, string>;\n /** Override or extend typography definitions. Partial overrides are merged with defaults. */\n typography?: Record<string, Partial<TypographyDef>>;\n /** Override primary and/or secondary font families. */\n fontFamily?: { primary?: string; secondary?: string };\n}\n\n// ---------------------------------------------------------------------------\n// Base color palette\n// ---------------------------------------------------------------------------\n\nconst baseColors: Record<string, string> = {\n // Neutral\n 'neutral-0': '#FFFFFF',\n 'neutral-25': '#FAFBFB',\n 'neutral-50': '#F5F6F6',\n 'neutral-100': '#E5E8E7',\n 'neutral-150': '#DADEDC',\n 'neutral-200': '#CED3D2',\n 'neutral-250': '#BDC4C3',\n 'neutral-300': '#ABB5B3',\n 'neutral-350': '#97A2A0',\n 'neutral-400': '#828E8C',\n 'neutral-450': '#74817F',\n 'neutral-500': '#667472',\n 'neutral-600': '#586261',\n 'neutral-700': '#4B5353',\n 'neutral-800': '#424847',\n 'neutral-850': '#393F3E',\n 'neutral-900': '#303635',\n 'neutral-950': '#181B1B',\n 'neutral-950--t75': 'rgba(24, 27, 27, 0.75)',\n 'neutral-950--t50': 'rgba(24, 27, 27, 0.50)',\n 'neutral-950--t25': 'rgba(24, 27, 27, 0.25)',\n 'neutral-950--t10': 'rgba(24, 27, 27, 0.10)',\n\n // Green\n 'green-50': '#ECF9F3',\n 'green-100': '#D9F2E7',\n 'green-150': '#C7ECDE',\n 'green-200': '#B4E6D4',\n 'green-250': '#9ADEC8',\n 'green-300': '#80D5BB',\n 'green-350': '#64C9AB',\n 'green-400': '#4DC2A3',\n 'green-450': '#33B897',\n 'green-500': '#19AE8A',\n 'green-600': '#109274',\n 'green-700': '#0D755F',\n 'green-800': '#0B6556',\n 'green-850': '#065E4F',\n 'green-900': '#005748',\n 'green-950': '#00332A',\n 'green-950--t75': 'rgba(0, 51, 42, 0.75)',\n 'green-950--t50': 'rgba(0, 51, 42, 0.50)',\n 'green-950--t25': 'rgba(0, 51, 42, 0.25)',\n 'green-950--t10': 'rgba(0, 51, 42, 0.10)',\n\n // Red\n 'red-50': '#FEF3F1',\n 'red-100': '#FCE6E3',\n 'red-150': '#FAD5D1',\n 'red-200': '#F8C4BF',\n 'red-250': '#F9ADA5',\n 'red-300': '#F9958B',\n 'red-400': '#F67265',\n 'red-500': '#F34F3F',\n 'red-600': '#E52B19',\n 'red-700': '#CF2717',\n 'red-800': '#93251A',\n 'red-850': '#791F16',\n 'red-900': '#5F1811',\n 'red-950': '#340D09',\n 'red-950--t75': 'rgba(52, 13, 9, 0.75)',\n 'red-950--t50': 'rgba(52, 13, 9, 0.50)',\n 'red-950--t25': 'rgba(52, 13, 9, 0.25)',\n 'red-950--t10': 'rgba(52, 13, 9, 0.10)',\n\n // Yellow\n 'yellow-50': '#FEFCF1',\n 'yellow-100': '#FCF8E3',\n 'yellow-150': '#FAF4D1',\n 'yellow-200': '#F8EFBF',\n 'yellow-250': '#F9EBA5',\n 'yellow-300': '#F9E68B',\n 'yellow-350': '#F8E278',\n 'yellow-400': '#F7DE64',\n 'yellow-500': '#F3D53F',\n 'yellow-600': '#EBC714',\n 'yellow-700': '#BC8E10',\n 'yellow-800': '#826217',\n 'yellow-850': '#6D5213',\n 'yellow-900': '#57410F',\n 'yellow-950': '#2B2108',\n 'yellow-950--t75': 'rgba(43, 33, 8, 0.75)',\n 'yellow-950--t50': 'rgba(43, 33, 8, 0.50)',\n 'yellow-950--t25': 'rgba(43, 33, 8, 0.25)',\n 'yellow-950--t10': 'rgba(43, 33, 8, 0.10)',\n};\n\n// ---------------------------------------------------------------------------\n// Helper – resolve a base color reference to its hex, with optional opacity\n// ---------------------------------------------------------------------------\n\nexport function resolve(ref: string, opacity?: number): string {\n const hex = baseColors[ref];\n if (!hex) return ref; // pass through raw hex / css value\n\n if (opacity === undefined || opacity === 100) return hex;\n\n // Convert hex to rgb then apply opacity via rgba()\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${(opacity / 100).toFixed(2)})`;\n}\n\n// ---------------------------------------------------------------------------\n// Default semantic token mappings\n// ---------------------------------------------------------------------------\n\nfunction defaultSemanticColors(): Record<string, string> {\n return {\n // Text\n 'text-primary': resolve('neutral-950'),\n 'text-secondary': resolve('neutral-950', 75),\n 'text-disabled': resolve('neutral-950', 50),\n 'text-primary-inverse': resolve('neutral-0'),\n 'text-secondary-inverse': resolve('neutral-0', 75),\n 'text-inverse-disabled': resolve('neutral-0', 50),\n 'text-action-primary': resolve('neutral-0'),\n 'text-action-primary-disabled': resolve('neutral-0', 50),\n 'text-action-secondary': resolve('neutral-950'),\n 'text-action-secondary-disabled': resolve('neutral-950', 50),\n 'text-action-tertiary': resolve('neutral-0'),\n 'text-action-tertiary-hover': resolve('neutral-0', 75),\n 'text-action-tertiary-disabled': resolve('neutral-0', 50),\n 'text-err': resolve('red-950'),\n 'text-err-disabled': resolve('red-950', 50),\n\n // Link\n 'link-primary': resolve('green-900'),\n 'link-primary-hover': resolve('green-950', 75),\n 'link-primary-disabled': resolve('green-950', 50),\n 'link-secondary': resolve('neutral-950'),\n 'link-secondary-hover': resolve('neutral-950', 75),\n 'link-secondary-disabled': resolve('neutral-950', 50),\n 'link-tertiary': resolve('neutral-950', 50),\n 'link-tertiary-hover': resolve('neutral-950', 25),\n 'link-tertiary-disabled': resolve('neutral-950', 25),\n 'link-inverse': resolve('neutral-0'),\n 'link-inverse-hover': resolve('neutral-0', 75),\n 'link-inverse-disabled': resolve('neutral-0', 50),\n\n // Background fills\n 'fill-bg-primary': resolve('neutral-0'),\n 'fill-bg-secondary': resolve('neutral-50'),\n 'fill-bg-tertiary': resolve('green-900'),\n 'fill-bg-err': resolve('red-100'),\n 'fill-bg-info': resolve('neutral-0'),\n 'fill-bg-dimmer': resolve('neutral-950', 75),\n\n // Action fills\n 'fill-action-primary': resolve('green-900'),\n 'fill-action-primary-hover': resolve('green-950'),\n 'fill-action-primary-active': resolve('green-950'),\n 'fill-action-primary-focus': resolve('green-900'),\n 'fill-action-primary-selected': resolve('green-900'),\n 'fill-action-primary-disabled': resolve('green-900'),\n 'fill-action-secondary': resolve('neutral-100'),\n 'fill-action-secondary-hover': resolve('neutral-200'),\n 'fill-action-secondary-active': resolve('neutral-200'),\n 'fill-action-secondary-focus': resolve('neutral-100'),\n 'fill-action-secondary-selected': resolve('neutral-100'),\n 'fill-action-secondary-disabled': resolve('neutral-100'),\n 'fill-action-inverse': resolve('neutral-0'),\n 'fill-action-inverse-hover': resolve('neutral-0', 90),\n 'fill-action-inverse-active': resolve('neutral-0', 90),\n 'fill-action-inverse-focus': resolve('neutral-0'),\n 'fill-action-inverse-selected': resolve('neutral-0'),\n 'fill-action-inverse-disabled': resolve('neutral-0'),\n 'fill-action-ghost': resolve('neutral-0', 0),\n 'fill-action-ghost-hover': resolve('neutral-0', 10),\n 'fill-action-ghost-active': resolve('neutral-0', 10),\n 'fill-action-ghost-focus': resolve('neutral-0', 0),\n 'fill-action-ghost-selected': resolve('neutral-0', 0),\n 'fill-action-ghost-disabled': resolve('neutral-0', 0),\n\n // Form fills\n 'fill-form-primary': resolve('neutral-0'),\n 'fill-form-primary-hover': resolve('neutral-0'),\n 'fill-form-primary-active': resolve('neutral-0'),\n 'fill-form-primary-focus': resolve('neutral-0'),\n 'fill-form-primary-selected': resolve('neutral-0'),\n 'fill-form-primary-disabled': resolve('neutral-0'),\n\n // Borders\n 'border-light': resolve('neutral-100'),\n 'border-heavy': resolve('neutral-200'),\n 'border-inverse': resolve('neutral-0'),\n 'border-focus': resolve('green-900'),\n 'border-err': resolve('red-800'),\n\n // Form borders\n 'border-form-primary': resolve('neutral-300'),\n 'border-form-primary-hover': resolve('neutral-600'),\n 'border-form-primary-active': resolve('green-900'),\n 'border-form-primary-focus': resolve('green-900'),\n 'border-form-primary-selected': resolve('green-900'),\n 'border-form-primary-disabled': resolve('neutral-200'),\n\n // Icons\n 'icon-primary': resolve('neutral-950'),\n 'icon-primary-disabled': resolve('neutral-950', 50),\n 'icon-inverse': resolve('neutral-0'),\n 'icon-inverse-disabled': resolve('neutral-0', 50),\n 'icon-err': resolve('red-950'),\n 'icon-err-disabled': resolve('red-950', 50),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Typography token definitions\n// ---------------------------------------------------------------------------\n\nconst fontFamilyPrimary = '\"Instrument Sans\", sans-serif';\nconst fontFamilySecondary = '\"Inter\", sans-serif';\n\nconst typographyTokens: Record<string, TypographyDef> = {\n 'title-sm': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(0.9375rem, 0.8482rem + 0.4464vw, 1.0625rem)',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'title-md': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(1rem, 0.8661rem + 0.6696vw, 1.1875rem)',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '0.02em',\n textWrap: 'balance',\n },\n 'title-lg': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(1.5625rem, 1.4375rem + 0.625vw, 2rem)',\n fontWeight: '600',\n lineHeight: '1.0',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'title-xl': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(3rem, 2.7857rem + 1.0714vw, 3.75rem)',\n fontWeight: '800',\n lineHeight: '1.0',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'text-xs': {\n fontFamily: fontFamilySecondary,\n fontSize: '0.75rem',\n fontWeight: '400',\n lineHeight: '1.4',\n letterSpacing: '-0.005em',\n textWrap: 'pretty',\n },\n 'text-xs-bold': {\n fontFamily: fontFamilySecondary,\n fontSize: '0.75rem',\n fontWeight: '600',\n lineHeight: '1.4',\n letterSpacing: '-0.005em',\n textWrap: 'pretty',\n },\n 'text-sm': {\n fontFamily: fontFamilySecondary,\n fontSize: '1rem',\n fontWeight: '400',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-sm-bold': {\n fontFamily: fontFamilySecondary,\n fontSize: '1rem',\n fontWeight: '600',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-md': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-md-bold': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '600',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'text-xl': {\n fontFamily: fontFamilyPrimary,\n fontSize: 'clamp(3rem, 2.7857rem + 1.0714vw, 3.75rem)',\n fontWeight: '800',\n lineHeight: '1.0',\n letterSpacing: '-0.005em',\n textWrap: 'pretty',\n },\n 'form-text': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '400',\n lineHeight: '1.4',\n textWrap: 'pretty',\n },\n 'form-label': {\n fontFamily: fontFamilyPrimary,\n fontSize: '1.1875rem',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '-0.005em',\n textWrap: 'balance',\n },\n 'btn-small': {\n fontFamily: fontFamilySecondary,\n fontSize: '1rem',\n fontWeight: '500',\n lineHeight: '1.4',\n },\n 'btn-reg': {\n fontFamily: fontFamilySecondary,\n fontSize: '1.125rem',\n fontWeight: '500',\n lineHeight: '1.4',\n },\n 'link-md': {\n fontFamily: fontFamilyPrimary,\n fontSize: '1.1875rem',\n fontWeight: '600',\n lineHeight: '1.2',\n letterSpacing: '0.02em',\n },\n};\n\n// ---------------------------------------------------------------------------\n// Spacing tokens\n// ---------------------------------------------------------------------------\n\nconst spacingTokens: Record<string, string> = {\n // Fixed\n 'space-0': '0rem',\n 'space-0-25': '0.0625rem',\n 'space-1': '0.25rem',\n 'space-2': '0.5rem',\n 'space-3': '0.75rem',\n 'space-4': '1rem',\n 'space-5': '1.25rem',\n 'space-6': '1.5rem',\n 'space-8': '2rem',\n 'space-9': '2.25rem',\n 'space-12': '3rem',\n 'space-16': '4rem',\n 'space-18': '4.5rem',\n 'space-24': '6rem',\n 'space-30': '7.5rem',\n 'space-36': '9rem',\n 'space-48': '12rem',\n 'space-72': '18rem',\n /** List indent for legal/body-copy lists (27px). Use with List indent prop. */\n 'space-list-indent': '1.6875rem',\n\n // Fluid\n 'space-fluid-1-2': 'clamp(0.25rem, 0.1706rem + 0.3968vw, 0.5rem)',\n 'space-fluid-2-4': 'clamp(0.5rem, 0.3413rem + 0.7937vw, 1rem)',\n 'space-fluid-4-5': 'clamp(1rem, 0.9206rem + 0.3968vw, 1.25rem)',\n 'space-fluid-4-6': 'clamp(1rem, 0.8413rem + 0.7937vw, 1.5rem)',\n 'space-fluid-4-8': 'clamp(1rem, 0.6825rem + 1.5873vw, 2rem)',\n 'space-fluid-4-9': 'clamp(1rem, 0.6032rem + 1.9841vw, 2.25rem)',\n 'space-fluid-5-6': 'clamp(1.25rem, 1.1706rem + 0.3968vw, 1.5rem)',\n 'space-fluid-6-9': 'clamp(1.5rem, 1.2619rem + 1.1905vw, 2.25rem)',\n 'space-fluid-8-16': 'clamp(2rem, 1.3651rem + 3.1746vw, 4rem)',\n 'space-fluid-16-18': 'clamp(4rem, 3.8413rem + 0.7937vw, 4.5rem)',\n 'space-fluid-30-36': 'clamp(7.5rem, 7.0238rem + 2.381vw, 9rem)',\n 'space-fluid-48-72': 'clamp(12rem, 10.0952rem + 9.5238vw, 18rem)',\n};\n\n// ---------------------------------------------------------------------------\n// Border width tokens\n// ---------------------------------------------------------------------------\n\nconst borderWidthTokens: Record<string, string> = {\n 'border-none': '0',\n 'border-xs': '.0625rem',\n 'border-sm': '.078125rem',\n 'border-md': '.09375rem',\n};\n\n// ---------------------------------------------------------------------------\n// Border radius tokens\n// ---------------------------------------------------------------------------\n\nconst borderRadiusTokens: Record<string, string> = {\n 'rad-none': '0',\n 'rad-xs': '.375rem',\n 'rad-sm': '.75rem',\n 'rad-md': '1rem',\n 'rad-lg': '1.25rem',\n 'rad-xl': '1.5rem',\n 'rad-rounded': '100rem',\n};\n\n// ---------------------------------------------------------------------------\n// Elevation (box-shadow) tokens\n// ---------------------------------------------------------------------------\n\nconst elevationTokens: Record<string, string> = {\n 'elevation-low': '0 2px 8px 0 var(--col-neutral-950--t10)',\n 'elevation-normal': '0 2px 8px 4px var(--col-neutral-950--t10)',\n};\n\n// ---------------------------------------------------------------------------\n// Canonical design token primitives (source of truth)\n// ---------------------------------------------------------------------------\n\nconst canonicalColourPrimitives: Record<string, string> = {\n 'col-neutral-0': 'hsla(0, 0%, 100%, 1)',\n 'col-neutral-0--t0': 'hsla(0, 0%, 100%, 0)',\n 'col-neutral-0--t10': 'hsla(0, 0%, 100%, 0.1)',\n 'col-neutral-0--t25': 'hsla(0, 0%, 100%, 0.25)',\n 'col-neutral-0--t50': 'hsla(0, 0%, 100%, 0.5)',\n 'col-neutral-0--t75': 'hsla(0, 0%, 100%, 0.75)',\n 'col-neutral-0--t90': 'hsla(0, 0%, 100%, 0.9)',\n 'col-neutral-50': 'hsla(180, 5%, 96%, 1)',\n 'col-neutral-100': 'hsla(160, 6%, 90%, 1)',\n 'col-neutral-200': 'hsla(168, 5%, 82%, 1)',\n 'col-neutral-300': 'hsla(168, 6%, 69%, 1)',\n 'col-neutral-400': 'hsla(170, 5%, 53%, 1)',\n 'col-neutral-500': 'hsla(171, 6%, 43%, 1)',\n 'col-neutral-600': 'hsla(174, 5%, 36%, 1)',\n 'col-neutral-700': 'hsla(180, 5%, 31%, 1)',\n 'col-neutral-800': 'hsla(170, 4%, 27%, 1)',\n 'col-neutral-900': 'hsla(170, 6%, 20%, 1)',\n 'col-neutral-950': 'hsla(180, 5%, 10%, 1)',\n 'col-neutral-950--t10': 'hsla(180, 5%, 10%, 0.1)',\n 'col-neutral-950--t25': 'hsla(180, 5%, 10%, 0.25)',\n 'col-neutral-950--t50': 'hsla(180, 5%, 10%, 0.5)',\n 'col-neutral-950--t75': 'hsla(180, 5%, 10%, 0.75)',\n 'col-neutral-950--t90': 'hsla(180, 5%, 10%, 0.9)',\n 'col-green-50': 'hsla(156, 24%, 96%, 1)',\n 'col-green-100': 'hsla(154, 49%, 90%, 1)',\n 'col-green-200': 'hsla(158, 50%, 80%, 1)',\n 'col-green-300': 'hsla(162, 50%, 67%, 1)',\n 'col-green-400': 'hsla(164, 52%, 52%, 1)',\n 'col-green-500': 'hsla(166, 75%, 39%, 1)',\n 'col-green-600': 'hsla(166, 80%, 32%, 1)',\n 'col-green-700': 'hsla(167, 80%, 25%, 1)',\n 'col-green-800': 'hsla(170, 80%, 22%, 1)',\n 'col-green-900': 'hsla(170, 100%, 17%, 1)',\n 'col-green-950': 'hsla(170, 100%, 10%, 1)',\n 'col-green-950--t10': 'hsla(170, 100%, 10%, 0.1)',\n 'col-green-950--t50': 'hsla(170, 100%, 10%, 0.5)',\n 'col-green-950--t75': 'hsla(170, 100%, 10%, 0.75)',\n 'col-green-950--t90': 'hsla(170, 100%, 10%, 0.9)',\n 'col-red-50': 'hsla(7, 60%, 97%, 1)',\n 'col-red-100': 'hsla(7, 81%, 94%, 1)',\n 'col-red-200': 'hsla(5, 80%, 86%, 1)',\n 'col-red-300': 'hsla(5, 90%, 76%, 1)',\n 'col-red-400': 'hsla(5, 90%, 68%, 1)',\n 'col-red-500': 'hsla(5, 88%, 60%, 1)',\n 'col-red-600': 'hsla(5, 80%, 50%, 1)',\n 'col-red-700': 'hsla(5, 80%, 45%, 1)',\n 'col-red-800': 'hsla(5, 70%, 34%, 1)',\n 'col-red-900': 'hsla(5, 70%, 22%, 1)',\n 'col-red-950': 'hsla(5, 70%, 12%, 1)',\n 'col-red-950--t10': 'hsla(5, 70%, 12%, 0.1)',\n 'col-red-950--t50': 'hsla(5, 70%, 12%, 0.5)',\n 'col-red-950--t75': 'hsla(5, 70%, 12%, 0.75)',\n 'col-red-950--t90': 'hsla(5, 70%, 12%, 0.9)',\n 'col-yellow-50': 'hsla(47, 60%, 97%, 1)',\n 'col-yellow-100': 'hsla(50, 81%, 94%, 1)',\n 'col-yellow-200': 'hsla(50, 80%, 86%, 1)',\n 'col-yellow-300': 'hsla(50, 90%, 76%, 1)',\n 'col-yellow-400': 'hsla(50, 90%, 68%, 1)',\n 'col-yellow-500': 'hsla(50, 88%, 60%, 1)',\n 'col-yellow-600': 'hsla(50, 84%, 50%, 1)',\n 'col-yellow-700': 'hsla(44, 84%, 40%, 1)',\n 'col-yellow-800': 'hsla(42, 70%, 30%, 1)',\n 'col-yellow-900': 'hsla(42, 71%, 20%, 1)',\n 'col-yellow-950': 'hsla(42, 69%, 10%, 1)',\n 'col-yellow-950--t10': 'hsla(42, 69%, 10%, 0.1)',\n 'col-yellow-950--t50': 'hsla(42, 69%, 10%, 0.5)',\n 'col-yellow-950--t75': 'hsla(42, 69%, 10%, 0.75)',\n 'col-yellow-950--t90': 'hsla(42, 69%, 10%, 0.9)',\n};\n\nconst canonicalTransitionPrimitives: Record<string, string> = {\n 'trans-timing-light': 'ease-out',\n 'trans-timing-normal': 'ease-out',\n 'trans-timing-heavy': 'ease-in',\n 'trans-duration-snap': '30ms',\n 'trans-duration-normal': '120ms',\n 'trans-duration-slow': '300ms',\n};\n\nconst canonicalTypographyPrimitives: Record<string, string> = {\n 'font-size-fluid-25-32': 'clamp(1.5625rem, 1.4375rem + 0.625vw, 2rem)',\n 'font-size-fluid-48-60': 'clamp(3rem, 2.7857rem + 1.0714vw, 3.75rem)',\n 'font-family-primary': '\"Instrument Sans\", sans-serif',\n 'font-family-secondary': \"'Inter', system-ui, sans-serif\",\n 'font-size-s-sm': '1.0625rem',\n 'font-size-s-md': '1.1875rem',\n 'font-size-s-lg-fluid': 'var(--font-size-fluid-25-32)',\n 'font-size-s-xl-fluid': 'var(--font-size-fluid-48-60)',\n 'font-size-t-xs': '0.75rem',\n 'font-size-t-sm': '1rem',\n 'font-size-t-md': '1.125rem',\n 'font-weight-xs': '400',\n 'font-weight-sm': '500',\n 'font-weight-md': '600',\n 'font-weight-lg': '800',\n 'font-line-tight': '1.0',\n 'font-line-normal': '1.2',\n 'font-line-loose': '1.4',\n 'font-ltrspc-xs': '-0.005em',\n 'font-ltrspc-sm': '0.01em',\n 'font-ltrspc-md': '0.02em',\n};\n\n// ---------------------------------------------------------------------------\n// Breakpoints\n// ---------------------------------------------------------------------------\n\nconst screens: Record<string, string> = {\n xs: '0px',\n sm: '600px',\n md: '800px',\n lg: '940px',\n xl: '1440px',\n};\n\n// ---------------------------------------------------------------------------\n// Plugin\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Merge helpers\n// ---------------------------------------------------------------------------\n\nfunction mergeTypography(\n base: Record<string, TypographyDef>,\n overrides: Record<string, Partial<TypographyDef>> | undefined,\n): Record<string, TypographyDef> {\n if (!overrides) return base;\n const merged = { ...base };\n for (const [key, partial] of Object.entries(overrides)) {\n merged[key] = { ...(merged[key] ?? ({} as TypographyDef)), ...partial };\n }\n return merged;\n}\n\nfunction resolvedFontFamilies(options: JiwambePluginOptions | undefined) {\n return {\n primary: options?.fontFamily?.primary ?? fontFamilyPrimary,\n secondary: options?.fontFamily?.secondary ?? fontFamilySecondary,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Plugin\n// ---------------------------------------------------------------------------\n\nconst jiwambePlugin = plugin.withOptions<JiwambePluginOptions | undefined>(\n (options) => {\n return ({ addBase, addComponents }) => {\n const fonts = resolvedFontFamilies(options);\n const mergedColors = { ...defaultSemanticColors(), ...(options?.colors ?? {}) };\n const mergedSpacing = { ...spacingTokens, ...(options?.spacing ?? {}) };\n const mergedBorderWidth = { ...borderWidthTokens, ...(options?.borderWidth ?? {}) };\n const mergedBorderRadius = { ...borderRadiusTokens, ...(options?.borderRadius ?? {}) };\n const mergedElevation = { ...elevationTokens, ...(options?.elevation ?? {}) };\n const mergedTypography = mergeTypography(typographyTokens, options?.typography);\n\n // -----------------------------------------------------------------\n // 1. Generate CSS custom properties on :root\n // -----------------------------------------------------------------\n\n const cssVars: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(baseColors)) {\n cssVars[`--color-${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedColors)) {\n cssVars[`--color-${key}`] = value;\n }\n // Alias for list marker styling (--col-* naming)\n if (mergedColors['text-secondary']) {\n cssVars['--col-text-secondary'] = mergedColors['text-secondary'];\n }\n for (const [key, value] of Object.entries(mergedSpacing)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedBorderWidth)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedBorderRadius)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(mergedElevation)) {\n cssVars[`--${key}`] = value;\n }\n\n cssVars['--font-family-primary'] = fonts.primary;\n cssVars['--font-family-secondary'] = fonts.secondary;\n\n for (const [key, value] of Object.entries(canonicalColourPrimitives)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(canonicalTransitionPrimitives)) {\n cssVars[`--${key}`] = value;\n }\n for (const [key, value] of Object.entries(canonicalTypographyPrimitives)) {\n cssVars[`--${key}`] = value;\n }\n\n addBase({\n ':root': cssVars,\n body: {\n 'text-rendering': 'optimizeLegibility',\n '-webkit-font-smoothing': 'antialiased',\n '-moz-osx-font-smoothing': 'grayscale',\n 'text-size-adjust': 'none',\n '-webkit-text-size-adjust': 'none',\n '-moz-text-size-adjust': 'none',\n 'font-optical-sizing': 'auto',\n },\n });\n\n // -----------------------------------------------------------------\n // 1b. Skeleton shimmer keyframe and utility class\n // -----------------------------------------------------------------\n\n addBase({\n '@keyframes jiwambe-shimmer': {\n '0%': {\n backgroundPosition: '-200% 0',\n },\n '100%': {\n backgroundPosition: '200% 0',\n },\n },\n '.jiwambe-skeleton': {\n backgroundColor: 'var(--col-neutral-100)',\n backgroundImage: [\n 'linear-gradient(',\n ' 90deg,',\n ' var(--col-neutral-100) 25%,',\n ' var(--col-neutral-50) 50%,',\n ' var(--col-neutral-100) 75%',\n ')',\n ].join(''),\n backgroundSize: '200% 100%',\n backgroundRepeat: 'no-repeat',\n animation: 'jiwambe-shimmer 1.5s ease-in-out infinite',\n },\n });\n\n // -----------------------------------------------------------------\n // 1c. List marker base styles\n // -----------------------------------------------------------------\n\n addBase({\n '.jiwambe-list': {\n paddingLeft: 'var(--space-6)',\n margin: '0',\n },\n '.jiwambe-list--unstyled': {\n paddingLeft: '0',\n listStyle: 'none',\n },\n '.jiwambe-list--disc': {\n listStyleType: 'disc',\n listStylePosition: 'outside',\n },\n '.jiwambe-list--disc li::marker': {\n color: 'var(--col-text-secondary)',\n },\n '.jiwambe-list--decimal': {\n listStyleType: 'decimal',\n listStylePosition: 'outside',\n },\n '.jiwambe-list--decimal li::marker': {\n color: 'var(--col-text-secondary)',\n fontVariantNumeric: 'tabular-nums',\n },\n '.jiwambe-list--none': {\n listStyle: 'none',\n paddingLeft: '0',\n },\n '.jiwambe-list-item': {\n paddingLeft: 'var(--space-1)',\n },\n '.jiwambe-list--item-padding-none .jiwambe-list-item': {\n paddingLeft: '0',\n },\n '.jiwambe-list-item + .jiwambe-list-item': {\n marginTop: 'var(--space-0)',\n },\n });\n\n // List item spacing (block layout): margin between items per spacing token\n const listSpacingTokens = [\n 'space-0', 'space-0-25', 'space-1', 'space-2', 'space-3', 'space-4',\n 'space-5', 'space-6', 'space-8', 'space-9', 'space-12', 'space-16',\n 'space-18', 'space-24', 'space-30', 'space-36', 'space-48', 'space-72',\n 'space-list-indent',\n 'space-fluid-1-2', 'space-fluid-2-4', 'space-fluid-4-5', 'space-fluid-4-6',\n 'space-fluid-4-8', 'space-fluid-4-9', 'space-fluid-5-6', 'space-fluid-6-9',\n 'space-fluid-8-16', 'space-fluid-16-18', 'space-fluid-30-36', 'space-fluid-48-72',\n ];\n const listSpacingBase: Record<string, Record<string, string>> = {};\n for (const token of listSpacingTokens) {\n listSpacingBase[`.jiwambe-list--spacing-${token} > .jiwambe-list-item + .jiwambe-list-item`] = {\n marginTop: `var(--${token})`,\n };\n }\n addBase(listSpacingBase);\n\n // -----------------------------------------------------------------\n // 2. Typography utility classes\n // -----------------------------------------------------------------\n\n const typographyUtilities: Record<string, Record<string, string>> = {};\n\n for (const [name, def] of Object.entries(mergedTypography)) {\n const styles: Record<string, string> = {\n 'font-family': def.fontFamily,\n 'font-size': def.fontSize,\n 'font-weight': def.fontWeight,\n 'line-height': def.lineHeight,\n };\n if (def.letterSpacing) styles['letter-spacing'] = def.letterSpacing;\n if (def.textWrap) styles['text-wrap'] = def.textWrap;\n\n typographyUtilities[`.text-${name}`] = styles;\n }\n\n addComponents(typographyUtilities);\n };\n },\n (options) => {\n const fonts = resolvedFontFamilies(options);\n const mergedColors = { ...defaultSemanticColors(), ...(options?.colors ?? {}) };\n const mergedSpacing = { ...spacingTokens, ...(options?.spacing ?? {}) };\n const mergedBorderWidth = { ...borderWidthTokens, ...(options?.borderWidth ?? {}) };\n const mergedBorderRadius = { ...borderRadiusTokens, ...(options?.borderRadius ?? {}) };\n const mergedElevation = { ...elevationTokens, ...(options?.elevation ?? {}) };\n\n const allColors: Record<string, string> = {};\n for (const [key, value] of Object.entries(baseColors)) {\n allColors[key] = value;\n }\n for (const [key, value] of Object.entries(mergedColors)) {\n allColors[key] = value;\n }\n\n // Spacing theme: each token maps to var(--token) so utilities use CSS variables.\n // Add short keys for fluid tokens so px-fluid-4-9 works alongside px-space-fluid-4-9.\n const spacingExtension: Record<string, string> = {};\n for (const key of Object.keys(mergedSpacing)) {\n spacingExtension[key] = `var(--${key})`;\n if (key.startsWith('space-fluid-')) {\n const shortKey = key.replace(/^space-/, '');\n spacingExtension[shortKey] = `var(--${key})`;\n }\n }\n\n return {\n theme: {\n screens,\n extend: {\n colors: allColors,\n spacing: spacingExtension,\n borderWidth: mergedBorderWidth,\n borderRadius: mergedBorderRadius,\n boxShadow: mergedElevation,\n fontFamily: {\n primary: [fonts.primary],\n secondary: [fonts.secondary],\n },\n },\n },\n };\n },\n);\n\nexport default jiwambePlugin;\n"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -18,5 +18,5 @@ export { Icon } from './components/Icon/Icon';
18
18
  export type { IconProps, IconName } from './components/Icon/Icon';
19
19
  export { Section } from './components/Section/Section';
20
20
  export type { SectionProps, SectionSize } from './components/Section/Section';
21
- export type { TypographyVariant, TypographyElement, LinkVariant, } from './types';
21
+ export type { TypographyVariant, LinkVariant, } from './types';
22
22
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE1F,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAErG,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE9E,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE1F,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAErG,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE9E,YAAY,EACV,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC"}
@@ -13,12 +13,6 @@
13
13
  * - link-md Link typography (1.1875rem, semibold).
14
14
  */
15
15
  export type TypographyVariant = 'title-sm' | 'title-md' | 'title-lg' | 'title-xl' | 'text-xs' | 'text-xs-bold' | 'text-sm' | 'text-sm-bold' | 'text-md' | 'text-md-bold' | 'text-xl' | 'form-text' | 'form-label' | 'btn-small' | 'btn-reg' | 'link-md';
16
- /**
17
- * HTML element types allowed for the Typography `as` prop. Use the element
18
- * that matches the content role (h1–h6 for headings, p for paragraphs,
19
- * label for form labels, span for inline text, etc.).
20
- */
21
- export type TypographyElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div' | 'label' | 'li' | 'dt' | 'dd' | 'figcaption' | 'blockquote' | 'cite' | 'em' | 'strong' | 'small' | 'mark' | 'time';
22
16
  /**
23
17
  * Button visual variant. Controls background and text colour tokens.
24
18
  * - 'primary' Filled primary (green). Use for main actions.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,SAAS,GACT,cAAc,GACd,SAAS,GACT,cAAc,GACd,SAAS,GACT,cAAc,GACd,SAAS,GACT,WAAW,GACX,YAAY,GACZ,WAAW,GACX,SAAS,GACT,SAAS,CAAC;AAEd;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACzB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,MAAM,GACN,KAAK,GACL,OAAO,GACP,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,IAAI,GACJ,QAAQ,GACR,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1E;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,YAAY,EACV,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,SAAS,GACT,cAAc,GACd,SAAS,GACT,cAAc,GACd,SAAS,GACT,cAAc,GACd,SAAS,GACT,WAAW,GACX,YAAY,GACZ,WAAW,GACX,SAAS,GACT,SAAS,CAAC;AAEd;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1E;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,YAAY,EACV,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,UAAU,CAAC"}
@@ -22,11 +22,19 @@ export type ListMarker = 'disc' | 'decimal' | 'none';
22
22
  export type ListItemSize = 'xs' | 'sm' | 'md';
23
23
  declare const listItemSizeClassMap: Record<ListItemSize, string>;
24
24
  export { listItemSizeClassMap };
25
+ /** Spacing token or custom CSS length (e.g. '27px') for list indent. */
26
+ export type ListIndent = import('./spacing').SpacingToken | string;
27
+ /** Controls left padding on each list item. 'default' = space-1 (4px); 'none' = 0 for body-copy lists. */
28
+ export type ListItemPadding = 'default' | 'none';
25
29
  /**
26
30
  * Props for the List container. List owns semantic structure (ul/ol) and
27
31
  * marker styling only. Typography is controlled per item via List.Item's
28
32
  * size prop. Outer layout (e.g. margin, max-width) is not List's concern —
29
33
  * wrap List in Stack or Grid as needed.
34
+ *
35
+ * For marker="disc" and marker="decimal", the list uses block layout and
36
+ * item margin (not flex/gap) so list-style-position: outside and markers
37
+ * render reliably. Use indent and itemPadding to match legal/body-copy designs.
30
38
  */
31
39
  export interface ListProps {
32
40
  /**
@@ -36,11 +44,22 @@ export interface ListProps {
36
44
  */
37
45
  marker?: ListMarker;
38
46
  /**
39
- * Gap between list items (CSS gap), not padding on the list itself.
40
- * Accepts any SpacingToken. Controls spacing between List.Item children.
47
+ * Vertical spacing between list items. Uses margin on items (block layout)
48
+ * for disc/decimal so markers render reliably. Accepts any SpacingToken.
41
49
  * @default 'space-2'
42
50
  */
43
51
  spacing?: import('./spacing').SpacingToken;
52
+ /**
53
+ * Left indent (padding-inline-start) of the list. SpacingToken (e.g. 'space-6', 'space-list-indent')
54
+ * or custom value (e.g. '27px'). Omit to use plugin default (24px / space-6).
55
+ */
56
+ indent?: ListIndent;
57
+ /**
58
+ * Left padding on each list item. 'default' = 4px (space-1); 'none' = 0 for
59
+ * body-copy lists where items should align with the marker.
60
+ * @default 'default'
61
+ */
62
+ itemPadding?: ListItemPadding;
44
63
  /** Additional className appended after internal classes. @default undefined */
45
64
  className?: string;
46
65
  /** Inline styles merged with internal styles. @default undefined */
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/types/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,QAAA,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAItD,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,WAAW,EAAE,YAAY,CAAC;IAC3C,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/types/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,QAAA,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAItD,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,EAAE,YAAY,GAAG,MAAM,CAAC;AAEnE,0GAA0G;AAC1G,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,WAAW,EAAE,YAAY,CAAC;IAC3C;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../src/types/list.ts"],"sourcesContent":["/**\n * Controls the marker rendered before each list item.\n *\n * - 'disc' Filled circle bullet. Renders a <ul>.\n * Default for unordered content.\n * - 'decimal' Numeric counter. Renders an <ol>.\n * Use for ordered steps or ranked content.\n * - 'none' No marker. Renders a <ul> with list-style removed and\n * left padding cleared. Use for navigation lists or\n * custom-styled lists where markers are unwanted.\n */\nexport type ListMarker = 'disc' | 'decimal' | 'none';\n\n/**\n * Typography size applied to List.Item content. Maps to design system\n * typography class sets; size controls the class applied, not a raw\n * font-size value.\n *\n * - 'xs' .text-xs — 0.75rem, weight 400, line-height 1.4\n * - 'sm' .text-sm — 1rem, weight 400, line-height 1.4 (default)\n * - 'md' .text-md — 1.125rem, weight 400, line-height 1.4\n */\nexport type ListItemSize = 'xs' | 'sm' | 'md';\n\nconst listItemSizeClassMap: Record<ListItemSize, string> = {\n xs: 'text-text-xs',\n sm: 'text-text-sm',\n md: 'text-text-md',\n};\n\nexport { listItemSizeClassMap };\n\n/**\n * Props for the List container. List owns semantic structure (ul/ol) and\n * marker styling only. Typography is controlled per item via List.Item's\n * size prop. Outer layout (e.g. margin, max-width) is not List's concern —\n * wrap List in Stack or Grid as needed.\n */\nexport interface ListProps {\n /**\n * Marker style. Determines the HTML element rendered.\n * 'disc' and 'none' render <ul>; 'decimal' renders <ol>.\n * @default 'disc'\n */\n marker?: ListMarker;\n /**\n * Gap between list items (CSS gap), not padding on the list itself.\n * Accepts any SpacingToken. Controls spacing between List.Item children.\n * @default 'space-2'\n */\n spacing?: import('./spacing').SpacingToken;\n /** Additional className appended after internal classes. @default undefined */\n className?: string;\n /** Inline styles merged with internal styles. @default undefined */\n style?: React.CSSProperties;\n /** List items. Use List.Item as direct children. */\n children: React.ReactNode;\n}\n\n/**\n * Props for List.Item. Renders a single <li> with typography and\n * marker styling applied.\n */\nexport interface ListItemProps {\n /**\n * Typography size for this item. Controls the typography class applied\n * (e.g. .text-sm), not a font-size value directly.\n * @default 'sm'\n */\n size?: ListItemSize;\n /** Additional className appended after internal classes. @default undefined */\n className?: string;\n /** Inline styles. @default undefined */\n style?: React.CSSProperties;\n /** Item content (text, links, or other elements). */\n children: React.ReactNode;\n}\n"],"names":[],"mappings":"AAwBA,MAAM,uBAAqD;AAAA,EACzD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;"}
1
+ {"version":3,"file":"list.js","sources":["../../src/types/list.ts"],"sourcesContent":["/**\n * Controls the marker rendered before each list item.\n *\n * - 'disc' Filled circle bullet. Renders a <ul>.\n * Default for unordered content.\n * - 'decimal' Numeric counter. Renders an <ol>.\n * Use for ordered steps or ranked content.\n * - 'none' No marker. Renders a <ul> with list-style removed and\n * left padding cleared. Use for navigation lists or\n * custom-styled lists where markers are unwanted.\n */\nexport type ListMarker = 'disc' | 'decimal' | 'none';\n\n/**\n * Typography size applied to List.Item content. Maps to design system\n * typography class sets; size controls the class applied, not a raw\n * font-size value.\n *\n * - 'xs' .text-xs — 0.75rem, weight 400, line-height 1.4\n * - 'sm' .text-sm — 1rem, weight 400, line-height 1.4 (default)\n * - 'md' .text-md — 1.125rem, weight 400, line-height 1.4\n */\nexport type ListItemSize = 'xs' | 'sm' | 'md';\n\nconst listItemSizeClassMap: Record<ListItemSize, string> = {\n xs: 'text-text-xs',\n sm: 'text-text-sm',\n md: 'text-text-md',\n};\n\nexport { listItemSizeClassMap };\n\n/** Spacing token or custom CSS length (e.g. '27px') for list indent. */\nexport type ListIndent = import('./spacing').SpacingToken | string;\n\n/** Controls left padding on each list item. 'default' = space-1 (4px); 'none' = 0 for body-copy lists. */\nexport type ListItemPadding = 'default' | 'none';\n\n/**\n * Props for the List container. List owns semantic structure (ul/ol) and\n * marker styling only. Typography is controlled per item via List.Item's\n * size prop. Outer layout (e.g. margin, max-width) is not List's concern —\n * wrap List in Stack or Grid as needed.\n *\n * For marker=\"disc\" and marker=\"decimal\", the list uses block layout and\n * item margin (not flex/gap) so list-style-position: outside and markers\n * render reliably. Use indent and itemPadding to match legal/body-copy designs.\n */\nexport interface ListProps {\n /**\n * Marker style. Determines the HTML element rendered.\n * 'disc' and 'none' render <ul>; 'decimal' renders <ol>.\n * @default 'disc'\n */\n marker?: ListMarker;\n /**\n * Vertical spacing between list items. Uses margin on items (block layout)\n * for disc/decimal so markers render reliably. Accepts any SpacingToken.\n * @default 'space-2'\n */\n spacing?: import('./spacing').SpacingToken;\n /**\n * Left indent (padding-inline-start) of the list. SpacingToken (e.g. 'space-6', 'space-list-indent')\n * or custom value (e.g. '27px'). Omit to use plugin default (24px / space-6).\n */\n indent?: ListIndent;\n /**\n * Left padding on each list item. 'default' = 4px (space-1); 'none' = 0 for\n * body-copy lists where items should align with the marker.\n * @default 'default'\n */\n itemPadding?: ListItemPadding;\n /** Additional className appended after internal classes. @default undefined */\n className?: string;\n /** Inline styles merged with internal styles. @default undefined */\n style?: React.CSSProperties;\n /** List items. Use List.Item as direct children. */\n children: React.ReactNode;\n}\n\n/**\n * Props for List.Item. Renders a single <li> with typography and\n * marker styling applied.\n */\nexport interface ListItemProps {\n /**\n * Typography size for this item. Controls the typography class applied\n * (e.g. .text-sm), not a font-size value directly.\n * @default 'sm'\n */\n size?: ListItemSize;\n /** Additional className appended after internal classes. @default undefined */\n className?: string;\n /** Inline styles. @default undefined */\n style?: React.CSSProperties;\n /** Item content (text, links, or other elements). */\n children: React.ReactNode;\n}\n"],"names":[],"mappings":"AAwBA,MAAM,uBAAqD;AAAA,EACzD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jiwambe/components",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -63,27 +63,28 @@
63
63
  "react-dom": "^19.0.0"
64
64
  },
65
65
  "dependencies": {
66
- "next": "^15.0.0 || ^16.0.0",
67
- "tailwindcss": "^3.4.0"
66
+ "next": "^16.1.6",
67
+ "tailwindcss": "^3.4.19"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@changesets/cli": "^2.30.0",
71
- "@testing-library/jest-dom": "^6.6.3",
72
- "@testing-library/react": "^16.0.0",
73
- "@types/react": "^19.0.0",
74
- "@types/react-dom": "^19.0.0",
75
- "@vitejs/plugin-react": "^4.0.0",
76
- "autoprefixer": "^10.4.0",
77
- "happy-dom": "^15.0.0",
71
+ "@testing-library/jest-dom": "^6.9.1",
72
+ "@testing-library/react": "^16.3.2",
73
+ "@types/react": "^19.2.14",
74
+ "@types/react-dom": "^19.2.3",
75
+ "@vitejs/plugin-react": "^4.7.0",
76
+ "autoprefixer": "^10.4.27",
77
+ "happy-dom": "^15.11.7",
78
78
  "jest-axe": "^9.0.0",
79
- "postcss": "^8.4.0",
80
- "react": "^19.0.0",
81
- "react-dom": "^19.0.0",
79
+ "@types/jest-axe": "^3.5.9",
80
+ "postcss": "^8.5.8",
81
+ "react": "^19.2.4",
82
+ "react-dom": "^19.2.4",
82
83
  "rollup-plugin-preserve-directives": "^0.4.0",
83
- "typescript": "^5.0.0",
84
- "vite": "^5.0.0",
85
- "vite-plugin-dts": "^4.0.0",
86
- "vitest": "^2.0.0"
84
+ "typescript": "^5.9.3",
85
+ "vite": "^5.4.21",
86
+ "vite-plugin-dts": "^4.5.4",
87
+ "vitest": "^2.1.9"
87
88
  },
88
89
  "scripts": {
89
90
  "build": "tsc --noEmit && vite build",