@joanroucoux/cairn-ui 0.3.0 → 0.4.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joanroucoux/cairn-ui",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Cairn UI — a monochrome, accessible Angular design system.",
5
5
  "keywords": [
6
6
  "angular",
@@ -32,6 +32,8 @@
32
32
  "@angular/core": "^22.0.0"
33
33
  },
34
34
  "dependencies": {
35
+ "d3-scale": "4.0.2",
36
+ "d3-shape": "3.2.0",
35
37
  "tslib": "2.8.1"
36
38
  },
37
39
  "sideEffects": false,
@@ -77,7 +77,7 @@ type AvatarSize = (typeof AVATAR_SIZES)[number];
77
77
  declare class UiAvatar {
78
78
  readonly initials: _angular_core.InputSignal<string>;
79
79
  readonly label: _angular_core.InputSignal<string>;
80
- readonly size: _angular_core.InputSignal<"md" | "sm">;
80
+ readonly size: _angular_core.InputSignal<"sm" | "md">;
81
81
  protected readonly classes: _angular_core.Signal<string>;
82
82
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAvatar, never>;
83
83
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiAvatar, "ui-avatar", never, { "initials": { "alias": "initials"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -136,7 +136,7 @@ type CardPadding = (typeof CARD_PADDINGS)[number];
136
136
  */
137
137
  declare class UiCard {
138
138
  readonly variant: _angular_core.InputSignal<"default" | "elevated">;
139
- readonly padding: _angular_core.InputSignal<"md" | "sm" | "none">;
139
+ readonly padding: _angular_core.InputSignal<"sm" | "md" | "none">;
140
140
  protected readonly classes: _angular_core.Signal<string>;
141
141
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiCard, never>;
142
142
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiCard, "ui-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -269,7 +269,7 @@ type ControlSize = (typeof CONTROL_SIZES)[number];
269
269
  * <input uiInput type="email" placeholder="you@example.com" />
270
270
  */
271
271
  declare class UiInput implements UiControl {
272
- readonly size: _angular_core.InputSignal<"md" | "sm">;
272
+ readonly size: _angular_core.InputSignal<"sm" | "md">;
273
273
  readonly errors: _angular_core.InputSignal<readonly UiControlError[]>;
274
274
  readonly touched: _angular_core.InputSignal<boolean>;
275
275
  protected readonly classes: _angular_core.Signal<string>;
@@ -294,6 +294,81 @@ declare class UiTextarea implements UiControl {
294
294
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTextarea, "textarea[uiTextarea]", never, { "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
295
295
  }
296
296
 
297
+ type ChartPoint = {
298
+ t: number;
299
+ v: number;
300
+ };
301
+ type PlottedPoint = ChartPoint & {
302
+ x: number;
303
+ y: number;
304
+ };
305
+ type ChartGeometry = {
306
+ line: string;
307
+ end: {
308
+ x: number;
309
+ y: number;
310
+ };
311
+ start: {
312
+ y: number;
313
+ };
314
+ points: PlottedPoint[];
315
+ plotBottom: number;
316
+ plotTop: number;
317
+ };
318
+
319
+ type StartLabelPlacement = {
320
+ x: number;
321
+ y: number;
322
+ anchor: 'start' | 'end';
323
+ };
324
+
325
+ type PlotRef = ElementRef<SVGSVGElement>;
326
+ /**
327
+ * Value over time: a monotone curve with a dashed line at the starting value and a tooltip.
328
+ *
329
+ * @example
330
+ * <ui-line-chart [points]="points" label="Net worth over one month" startLabel="Since" [valueFormat]="formatEur" />
331
+ */
332
+ declare class UiLineChart {
333
+ #private;
334
+ readonly points: _angular_core.InputSignal<ChartPoint[]>;
335
+ readonly label: _angular_core.InputSignal<string>;
336
+ readonly valueFormat: _angular_core.InputSignal<(value: number) => string>;
337
+ readonly deltaFormat: _angular_core.InputSignal<(delta: number) => string>;
338
+ readonly timeFormat: _angular_core.InputSignal<(time: number) => string>;
339
+ readonly axisFormat: _angular_core.InputSignal<(time: number) => string>;
340
+ readonly startLabel: _angular_core.InputSignal<string>;
341
+ readonly timeColumnLabel: _angular_core.InputSignal<string>;
342
+ readonly valueColumnLabel: _angular_core.InputSignal<string>;
343
+ protected readonly svgRef: _angular_core.Signal<PlotRef>;
344
+ protected readonly activeIndex: _angular_core.WritableSignal<number | null>;
345
+ protected readonly animatedLine: _angular_core.WritableSignal<string | null>;
346
+ protected readonly measuredSize: _angular_core.WritableSignal<{
347
+ width: number;
348
+ height: number;
349
+ } | null>;
350
+ protected readonly effectiveWidth: _angular_core.Signal<number>;
351
+ protected readonly effectiveHeight: _angular_core.Signal<number>;
352
+ protected readonly geometry: _angular_core.Signal<ChartGeometry | null>;
353
+ protected readonly displayLine: _angular_core.Signal<string>;
354
+ protected readonly ticks: _angular_core.Signal<PlottedPoint[]>;
355
+ protected readonly active: _angular_core.Signal<PlottedPoint | null>;
356
+ protected readonly startLabelInfo: _angular_core.Signal<{
357
+ label: string;
358
+ placement: StartLabelPlacement;
359
+ } | null>;
360
+ constructor();
361
+ protected coreTick(index: number, count: number): boolean;
362
+ protected deltaFor(point: PlottedPoint): number;
363
+ protected deltaClasses(point: PlottedPoint): string;
364
+ protected tooltipStyle(point: PlottedPoint): string;
365
+ protected onPointerMove(event: PointerEvent): void;
366
+ protected onPointerLeave(): void;
367
+ protected onKeydown(event: KeyboardEvent): void;
368
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiLineChart, never>;
369
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiLineChart, "ui-line-chart", never, { "points": { "alias": "points"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "deltaFormat": { "alias": "deltaFormat"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "timeColumnLabel": { "alias": "timeColumnLabel"; "required": false; "isSignal": true; }; "valueColumnLabel": { "alias": "valueColumnLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
370
+ }
371
+
297
372
  /**
298
373
  * One action of a `ui-menu`; `destructive` paints it in `--negative`.
299
374
  *
@@ -363,7 +438,7 @@ declare class UiMeter {
363
438
  readonly value: _angular_core.InputSignal<number>;
364
439
  readonly label: _angular_core.InputSignal<string>;
365
440
  readonly valueText: _angular_core.InputSignal<string>;
366
- readonly tone: _angular_core.InputSignal<2 | 1 | 3 | 4 | 5 | 6>;
441
+ readonly tone: _angular_core.InputSignal<2 | 4 | 1 | 3 | 5 | 6>;
367
442
  protected readonly percent: _angular_core.Signal<number>;
368
443
  protected readonly fillClasses: _angular_core.Signal<string>;
369
444
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMeter, never>;
@@ -437,7 +512,7 @@ declare class UiSegmented {
437
512
  * <select uiSelect><option value="pea">PEA</option></select>
438
513
  */
439
514
  declare class UiSelect implements UiControl {
440
- readonly size: _angular_core.InputSignal<"md" | "sm">;
515
+ readonly size: _angular_core.InputSignal<"sm" | "md">;
441
516
  readonly errors: _angular_core.InputSignal<readonly UiControlError[]>;
442
517
  readonly touched: _angular_core.InputSignal<boolean>;
443
518
  protected readonly classes: _angular_core.Signal<string>;
@@ -454,7 +529,7 @@ declare class UiSelect implements UiControl {
454
529
  * <ui-skeleton [lines]="3" />
455
530
  */
456
531
  declare class UiSkeleton {
457
- readonly shape: _angular_core.InputSignal<"figure" | "text" | "row" | "chart" | "ring">;
532
+ readonly shape: _angular_core.InputSignal<"text" | "figure" | "row" | "chart" | "ring">;
458
533
  readonly lines: _angular_core.InputSignal<number>;
459
534
  readonly height: _angular_core.InputSignal<number>;
460
535
  protected readonly animation = "cairn-pulse var(--pulse-duration) var(--ease-out) infinite alternate";
@@ -572,5 +647,5 @@ declare class UiTab {
572
647
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiTab, "a[ui-tab]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[tabIcon]", "*"], true, never>;
573
648
  }
574
649
 
575
- export { AMOUNT_MASKINGS, AMOUNT_NUMERICS, ASYNC_STATES, AVATAR_SIZES, BADGE_VARIANTS, BUTTON_SIZES, BUTTON_VARIANTS, CARD_PADDINGS, CARD_VARIANTS, CELL_BREAKPOINTS, CONTROL_SIZES, DELTA_EMPHASES, DIALOG_WIDTHS, METER_TONES, STAT_SIZES, UI_AMOUNT_MASKED, UiAmount, UiAsync, UiAvatar, UiBadge, UiButton, UiCard, UiDelta, UiDialog, UiField, UiInput, UiMenu, UiMenuItem, UiMenuTrigger, UiMeter, UiNavItem, UiRow, UiSegmented, UiSelect, UiSkeleton, UiStat, UiSwitch, UiTab, UiTabBar, UiTable, UiTd, UiTextarea, UiTh, UiTr, formatAmount };
576
- export type { AmountFormatOptions, AmountMasking, AmountNumeric, AsyncState, AvatarSize, BadgeVariant, ButtonSize, ButtonVariant, CardPadding, CardVariant, CellBreakpoint, ControlSize, DeltaEmphasis, DialogWidth, MeterTone, SegmentedOption, StatSize, UiControlError };
650
+ export { AMOUNT_MASKINGS, AMOUNT_NUMERICS, ASYNC_STATES, AVATAR_SIZES, BADGE_VARIANTS, BUTTON_SIZES, BUTTON_VARIANTS, CARD_PADDINGS, CARD_VARIANTS, CELL_BREAKPOINTS, CONTROL_SIZES, DELTA_EMPHASES, DIALOG_WIDTHS, METER_TONES, STAT_SIZES, UI_AMOUNT_MASKED, UiAmount, UiAsync, UiAvatar, UiBadge, UiButton, UiCard, UiDelta, UiDialog, UiField, UiInput, UiLineChart, UiMenu, UiMenuItem, UiMenuTrigger, UiMeter, UiNavItem, UiRow, UiSegmented, UiSelect, UiSkeleton, UiStat, UiSwitch, UiTab, UiTabBar, UiTable, UiTd, UiTextarea, UiTh, UiTr, formatAmount };
651
+ export type { AmountFormatOptions, AmountMasking, AmountNumeric, AsyncState, AvatarSize, BadgeVariant, ButtonSize, ButtonVariant, CardPadding, CardVariant, CellBreakpoint, ChartPoint, ControlSize, DeltaEmphasis, DialogWidth, MeterTone, SegmentedOption, StatSize, UiControlError };