@extrachill/components 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1] - 2026-03-25
4
+
5
+ ### Changed
6
+ - add shared badge primitive
7
+
3
8
  ## [0.2.0] - 2026-03-25
4
9
 
5
10
  ### Changed
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface BadgeProps {
3
+ children: ReactNode;
4
+ tone?: 'default' | 'muted' | 'success' | 'error' | 'warning' | 'info';
5
+ variant?: 'solid' | 'outline' | 'subtle';
6
+ size?: 'sm' | 'md';
7
+ className?: string;
8
+ classPrefix?: string;
9
+ }
10
+ export declare function Badge({ children, tone, variant, size, className, classPrefix, }: BadgeProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../src/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACtE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,KAAK,CAAE,EACtB,QAAQ,EACR,IAAgB,EAChB,OAAkB,EAClB,IAAW,EACX,SAAc,EACd,WAAwB,GACxB,EAAE,UAAU,2CAUZ"}
package/dist/Badge.js ADDED
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function Badge({ children, tone = 'default', variant = 'subtle', size = 'sm', className = '', classPrefix = 'ec-badge', }) {
3
+ const classes = [
4
+ classPrefix,
5
+ `${classPrefix}--${tone}`,
6
+ `${classPrefix}--${variant}`,
7
+ `${classPrefix}--${size}`,
8
+ className,
9
+ ].filter(Boolean).join(' ');
10
+ return _jsx("span", { className: classes, children: children });
11
+ }
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export { PanelHeader, type PanelHeaderProps } from './PanelHeader.tsx';
13
13
  export { ActionRow, type ActionRowProps } from './ActionRow.tsx';
14
14
  export { FieldGroup, type FieldGroupProps } from './FieldGroup.tsx';
15
15
  export { InlineStatus, type InlineStatusProps } from './InlineStatus.tsx';
16
+ export { Badge, type BadgeProps } from './Badge.tsx';
16
17
  export { ImagePreview, type ImagePreviewProps } from './ImagePreview.tsx';
17
18
  export { MediaField, type MediaFieldProps } from './MediaField.tsx';
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -13,5 +13,6 @@ export { PanelHeader } from "./PanelHeader.js";
13
13
  export { ActionRow } from "./ActionRow.js";
14
14
  export { FieldGroup } from "./FieldGroup.js";
15
15
  export { InlineStatus } from "./InlineStatus.js";
16
+ export { Badge } from "./Badge.js";
16
17
  export { ImagePreview } from "./ImagePreview.js";
17
18
  export { MediaField } from "./MediaField.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@extrachill/components",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Shared React components for the Extra Chill Platform.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/Badge.tsx ADDED
@@ -0,0 +1,29 @@
1
+ import type { ReactNode } from 'react';
2
+
3
+ export interface BadgeProps {
4
+ children: ReactNode;
5
+ tone?: 'default' | 'muted' | 'success' | 'error' | 'warning' | 'info';
6
+ variant?: 'solid' | 'outline' | 'subtle';
7
+ size?: 'sm' | 'md';
8
+ className?: string;
9
+ classPrefix?: string;
10
+ }
11
+
12
+ export function Badge( {
13
+ children,
14
+ tone = 'default',
15
+ variant = 'subtle',
16
+ size = 'sm',
17
+ className = '',
18
+ classPrefix = 'ec-badge',
19
+ }: BadgeProps ) {
20
+ const classes = [
21
+ classPrefix,
22
+ `${ classPrefix }--${ tone }`,
23
+ `${ classPrefix }--${ variant }`,
24
+ `${ classPrefix }--${ size }`,
25
+ className,
26
+ ].filter( Boolean ).join( ' ' );
27
+
28
+ return <span className={ classes }>{ children }</span>;
29
+ }
package/src/index.tsx CHANGED
@@ -14,5 +14,6 @@ export { PanelHeader, type PanelHeaderProps } from './PanelHeader.tsx';
14
14
  export { ActionRow, type ActionRowProps } from './ActionRow.tsx';
15
15
  export { FieldGroup, type FieldGroupProps } from './FieldGroup.tsx';
16
16
  export { InlineStatus, type InlineStatusProps } from './InlineStatus.tsx';
17
+ export { Badge, type BadgeProps } from './Badge.tsx';
17
18
  export { ImagePreview, type ImagePreviewProps } from './ImagePreview.tsx';
18
19
  export { MediaField, type MediaFieldProps } from './MediaField.tsx';
@@ -313,33 +313,133 @@
313
313
  margin-top: 0;
314
314
  }
315
315
 
316
- // Badges (commonly used with tables)
316
+ // Badges
317
317
  .ec-badge {
318
- display: inline-block;
318
+ display: inline-flex;
319
+ align-items: center;
320
+ gap: var(--spacing-xs, 0.25rem);
319
321
  padding: 3px 8px;
320
- border-radius: 3px;
321
- font-size: 12px;
322
+ border-radius: var(--border-radius-pill, 999px);
323
+ font-size: var(--font-size-xs, 0.75rem);
322
324
  font-weight: 500;
325
+ line-height: 1;
326
+ text-decoration: none;
327
+ border: 1px solid transparent;
328
+ box-sizing: border-box;
329
+ }
323
330
 
324
- &--yes,
325
- &--success {
326
- background: #d4edda;
327
- color: #155724;
328
- }
331
+ .ec-badge--sm {
332
+ padding: 2px 8px;
333
+ }
329
334
 
330
- &--no,
331
- &--error {
332
- background: #f8d7da;
333
- color: #721c24;
334
- }
335
+ .ec-badge--md {
336
+ padding: var(--spacing-xs, 0.25rem) var(--spacing-sm, 0.5rem);
337
+ font-size: var(--font-size-sm, 0.875rem);
338
+ }
335
339
 
336
- &--info {
337
- background: #cce5ff;
338
- color: #004085;
339
- }
340
+ .ec-badge--default.ec-badge--subtle {
341
+ background: var(--card-background, #f8f8f8);
342
+ color: var(--link-color, #1a1a1a);
343
+ border-color: var(--border-color, #ddd);
344
+ }
340
345
 
341
- &--warning {
342
- background: #fff3cd;
343
- color: #856404;
344
- }
346
+ .ec-badge--muted.ec-badge--subtle {
347
+ background: var(--border-color, #ddd);
348
+ color: var(--muted-text, #666);
349
+ border-color: var(--border-color, #ddd);
350
+ }
351
+
352
+ .ec-badge--success.ec-badge--subtle,
353
+ .ec-badge--yes.ec-badge--subtle {
354
+ background: #d4edda;
355
+ color: #155724;
356
+ border-color: #c3e6cb;
357
+ }
358
+
359
+ .ec-badge--error.ec-badge--subtle,
360
+ .ec-badge--no.ec-badge--subtle {
361
+ background: #f8d7da;
362
+ color: #721c24;
363
+ border-color: #f5c6cb;
364
+ }
365
+
366
+ .ec-badge--info.ec-badge--subtle {
367
+ background: #cce5ff;
368
+ color: #004085;
369
+ border-color: #b8daff;
370
+ }
371
+
372
+ .ec-badge--warning.ec-badge--subtle {
373
+ background: #fff3cd;
374
+ color: #856404;
375
+ border-color: #ffeeba;
376
+ }
377
+
378
+ .ec-badge--default.ec-badge--outline,
379
+ .ec-badge--muted.ec-badge--outline,
380
+ .ec-badge--success.ec-badge--outline,
381
+ .ec-badge--error.ec-badge--outline,
382
+ .ec-badge--warning.ec-badge--outline,
383
+ .ec-badge--info.ec-badge--outline {
384
+ background: transparent;
385
+ }
386
+
387
+ .ec-badge--default.ec-badge--outline {
388
+ color: var(--link-color, #1a1a1a);
389
+ border-color: var(--border-color, #ddd);
390
+ }
391
+
392
+ .ec-badge--muted.ec-badge--outline {
393
+ color: var(--muted-text, #666);
394
+ border-color: var(--border-color, #ddd);
395
+ }
396
+
397
+ .ec-badge--success.ec-badge--outline {
398
+ color: #155724;
399
+ border-color: #c3e6cb;
400
+ }
401
+
402
+ .ec-badge--error.ec-badge--outline {
403
+ color: #721c24;
404
+ border-color: #f5c6cb;
405
+ }
406
+
407
+ .ec-badge--warning.ec-badge--outline {
408
+ color: #856404;
409
+ border-color: #ffeeba;
410
+ }
411
+
412
+ .ec-badge--info.ec-badge--outline {
413
+ color: #004085;
414
+ border-color: #b8daff;
415
+ }
416
+
417
+ .ec-badge--default.ec-badge--solid {
418
+ background: var(--link-color, #1a1a1a);
419
+ color: var(--button-text-color, #fff);
420
+ }
421
+
422
+ .ec-badge--muted.ec-badge--solid {
423
+ background: var(--muted-text, #666);
424
+ color: var(--background-color, #fff);
425
+ }
426
+
427
+ .ec-badge--success.ec-badge--solid {
428
+ background: var(--accent, #53940b);
429
+ color: var(--background-color, #fff);
430
+ }
431
+
432
+ .ec-badge--error.ec-badge--solid {
433
+ background: var(--error-color, #dc3232);
434
+ color: var(--background-color, #fff);
435
+ }
436
+
437
+ .ec-badge--warning.ec-badge--solid {
438
+ background: #f0ad4e;
439
+ color: #000;
440
+ }
441
+
442
+ .ec-badge--info.ec-badge--solid {
443
+ background: #0d6efd;
444
+ color: #fff;
345
445
  }