@joanroucoux/cairn-ui 0.7.1 → 0.8.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.
Files changed (111) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs +54 -0
  3. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs.map +1 -0
  4. package/fesm2022/joanroucoux-cairn-ui-alert.mjs +129 -0
  5. package/fesm2022/joanroucoux-cairn-ui-alert.mjs.map +1 -0
  6. package/fesm2022/joanroucoux-cairn-ui-amount.mjs +114 -0
  7. package/fesm2022/joanroucoux-cairn-ui-amount.mjs.map +1 -0
  8. package/fesm2022/joanroucoux-cairn-ui-async.mjs +282 -0
  9. package/fesm2022/joanroucoux-cairn-ui-async.mjs.map +1 -0
  10. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs +71 -0
  11. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs.map +1 -0
  12. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs +79 -0
  13. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs.map +1 -0
  14. package/fesm2022/joanroucoux-cairn-ui-badge.mjs +48 -0
  15. package/fesm2022/joanroucoux-cairn-ui-badge.mjs.map +1 -0
  16. package/fesm2022/joanroucoux-cairn-ui-button.mjs +128 -0
  17. package/fesm2022/joanroucoux-cairn-ui-button.mjs.map +1 -0
  18. package/fesm2022/joanroucoux-cairn-ui-card.mjs +146 -0
  19. package/fesm2022/joanroucoux-cairn-ui-card.mjs.map +1 -0
  20. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs +172 -0
  21. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs.map +1 -0
  22. package/fesm2022/joanroucoux-cairn-ui-control.mjs +18 -0
  23. package/fesm2022/joanroucoux-cairn-ui-control.mjs.map +1 -0
  24. package/fesm2022/joanroucoux-cairn-ui-delta.mjs +103 -0
  25. package/fesm2022/joanroucoux-cairn-ui-delta.mjs.map +1 -0
  26. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs +626 -0
  27. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs.map +1 -0
  28. package/fesm2022/joanroucoux-cairn-ui-donut.mjs +347 -0
  29. package/fesm2022/joanroucoux-cairn-ui-donut.mjs.map +1 -0
  30. package/fesm2022/joanroucoux-cairn-ui-empty.mjs +47 -0
  31. package/fesm2022/joanroucoux-cairn-ui-empty.mjs.map +1 -0
  32. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs +65 -0
  33. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs.map +1 -0
  34. package/fesm2022/joanroucoux-cairn-ui-fact.mjs +99 -0
  35. package/fesm2022/joanroucoux-cairn-ui-fact.mjs.map +1 -0
  36. package/fesm2022/joanroucoux-cairn-ui-field.mjs +232 -0
  37. package/fesm2022/joanroucoux-cairn-ui-field.mjs.map +1 -0
  38. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs +89 -0
  39. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs.map +1 -0
  40. package/fesm2022/joanroucoux-cairn-ui-input.mjs +90 -0
  41. package/fesm2022/joanroucoux-cairn-ui-input.mjs.map +1 -0
  42. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs +844 -0
  43. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs.map +1 -0
  44. package/fesm2022/joanroucoux-cairn-ui-menu.mjs +241 -0
  45. package/fesm2022/joanroucoux-cairn-ui-menu.mjs.map +1 -0
  46. package/fesm2022/joanroucoux-cairn-ui-meter.mjs +86 -0
  47. package/fesm2022/joanroucoux-cairn-ui-meter.mjs.map +1 -0
  48. package/fesm2022/joanroucoux-cairn-ui-motion.mjs +415 -0
  49. package/fesm2022/joanroucoux-cairn-ui-motion.mjs.map +1 -0
  50. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs +45 -0
  51. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs.map +1 -0
  52. package/fesm2022/joanroucoux-cairn-ui-row.mjs +164 -0
  53. package/fesm2022/joanroucoux-cairn-ui-row.mjs.map +1 -0
  54. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs +165 -0
  55. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs.map +1 -0
  56. package/fesm2022/joanroucoux-cairn-ui-select.mjs +69 -0
  57. package/fesm2022/joanroucoux-cairn-ui-select.mjs.map +1 -0
  58. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs +91 -0
  59. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs.map +1 -0
  60. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs +43 -0
  61. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs.map +1 -0
  62. package/fesm2022/joanroucoux-cairn-ui-stat.mjs +96 -0
  63. package/fesm2022/joanroucoux-cairn-ui-stat.mjs.map +1 -0
  64. package/fesm2022/joanroucoux-cairn-ui-switch.mjs +37 -0
  65. package/fesm2022/joanroucoux-cairn-ui-switch.mjs.map +1 -0
  66. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs +75 -0
  67. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs.map +1 -0
  68. package/fesm2022/joanroucoux-cairn-ui-table.mjs +321 -0
  69. package/fesm2022/joanroucoux-cairn-ui-table.mjs.map +1 -0
  70. package/fesm2022/joanroucoux-cairn-ui-toast.mjs +153 -0
  71. package/fesm2022/joanroucoux-cairn-ui-toast.mjs.map +1 -0
  72. package/fesm2022/joanroucoux-cairn-ui.mjs +0 -5386
  73. package/fesm2022/joanroucoux-cairn-ui.mjs.map +1 -1
  74. package/package.json +141 -1
  75. package/styles/motion.css +9 -0
  76. package/types/joanroucoux-cairn-ui-action-bar.d.ts +22 -0
  77. package/types/joanroucoux-cairn-ui-alert.d.ts +23 -0
  78. package/types/joanroucoux-cairn-ui-amount.d.ts +45 -0
  79. package/types/joanroucoux-cairn-ui-async.d.ts +58 -0
  80. package/types/joanroucoux-cairn-ui-avatar.d.ts +35 -0
  81. package/types/joanroucoux-cairn-ui-back-link.d.ts +22 -0
  82. package/types/joanroucoux-cairn-ui-badge.d.ts +23 -0
  83. package/types/joanroucoux-cairn-ui-button.d.ts +29 -0
  84. package/types/joanroucoux-cairn-ui-card.d.ts +36 -0
  85. package/types/joanroucoux-cairn-ui-choice-chips.d.ts +46 -0
  86. package/types/joanroucoux-cairn-ui-control.d.ts +27 -0
  87. package/types/joanroucoux-cairn-ui-delta.d.ts +38 -0
  88. package/types/joanroucoux-cairn-ui-dialog.d.ts +72 -0
  89. package/types/joanroucoux-cairn-ui-donut.d.ts +59 -0
  90. package/types/joanroucoux-cairn-ui-empty.d.ts +19 -0
  91. package/types/joanroucoux-cairn-ui-external-link.d.ts +15 -0
  92. package/types/joanroucoux-cairn-ui-fact.d.ts +44 -0
  93. package/types/joanroucoux-cairn-ui-field.d.ts +84 -0
  94. package/types/joanroucoux-cairn-ui-filter-chips.d.ts +28 -0
  95. package/types/joanroucoux-cairn-ui-input.d.ts +51 -0
  96. package/types/joanroucoux-cairn-ui-line-chart.d.ts +114 -0
  97. package/types/joanroucoux-cairn-ui-menu.d.ts +66 -0
  98. package/types/joanroucoux-cairn-ui-meter.d.ts +30 -0
  99. package/types/joanroucoux-cairn-ui-motion.d.ts +124 -0
  100. package/types/joanroucoux-cairn-ui-nav-item.d.ts +21 -0
  101. package/types/joanroucoux-cairn-ui-row.d.ts +78 -0
  102. package/types/joanroucoux-cairn-ui-segmented.d.ts +36 -0
  103. package/types/joanroucoux-cairn-ui-select.d.ts +23 -0
  104. package/types/joanroucoux-cairn-ui-skeleton.d.ts +26 -0
  105. package/types/joanroucoux-cairn-ui-stale-link.d.ts +24 -0
  106. package/types/joanroucoux-cairn-ui-stat.d.ts +32 -0
  107. package/types/joanroucoux-cairn-ui-switch.d.ts +17 -0
  108. package/types/joanroucoux-cairn-ui-tab-bar.d.ts +31 -0
  109. package/types/joanroucoux-cairn-ui-table.d.ts +139 -0
  110. package/types/joanroucoux-cairn-ui-toast.d.ts +51 -0
  111. package/types/joanroucoux-cairn-ui.d.ts +1 -1407
@@ -0,0 +1,103 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, Component } from '@angular/core';
3
+
4
+ /** Available delta emphases. `DeltaEmphasis` is derived from this tuple. */
5
+ const DELTA_EMPHASES = ['text', 'pill'];
6
+ /** Type sizes. `DeltaSize` is derived from this tuple. */
7
+ const DELTA_SIZES = ['label', 'inherit'];
8
+ /** Font weights. `DeltaWeight` is derived from this tuple. */
9
+ const DELTA_WEIGHTS = ['medium', 'regular'];
10
+ const BASE_CLASSES = 'inline-flex items-center gap-1 tabular-nums';
11
+ const SIZE_CLASSES = {
12
+ label: 'text-label',
13
+ inherit: '',
14
+ };
15
+ const WEIGHT_CLASSES = {
16
+ medium: 'font-medium',
17
+ regular: 'font-normal',
18
+ };
19
+ const PILL_CLASSES = 'h-6 rounded-pill px-2';
20
+ const TEXT_CLASSES = {
21
+ positive: 'text-(--positive)',
22
+ negative: 'text-(--negative)',
23
+ neutral: 'text-(--muted-foreground)',
24
+ unknown: 'text-(--subtle-foreground)',
25
+ };
26
+ const PILL_BACKGROUND_CLASS = 'bg-(--soft)';
27
+ /**
28
+ * Signed amount whose sign carries meaning: a gain, a loss, or an unknown.
29
+ *
30
+ * A null value is not a zero: a holding with no cost basis exists, and showing 0 would falsely
31
+ * claim a known gain of zero. Color never carries the sign on its own: the projected text must
32
+ * already contain a + or a minus sign.
33
+ *
34
+ * @example
35
+ * <ui-delta [value]="holding.dayChangeEur" unknownLabel="Not available">
36
+ * {{ holding.dayChangeEur | signedMoney }}
37
+ * </ui-delta>
38
+ */
39
+ class UiDelta {
40
+ value = input.required(/* @ts-ignore */
41
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
42
+ unknownLabel = input.required(/* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "unknownLabel" }] : /* istanbul ignore next */ []));
44
+ emphasis = input('text', /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "emphasis" }] : /* istanbul ignore next */ []));
46
+ size = input('label', /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
48
+ weight = input('medium', /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "weight" }] : /* istanbul ignore next */ []));
50
+ sign = computed(() => {
51
+ const value = this.value();
52
+ if (value === null || value === undefined) {
53
+ return 'unknown';
54
+ }
55
+ if (value > 0) {
56
+ return 'positive';
57
+ }
58
+ if (value < 0) {
59
+ return 'negative';
60
+ }
61
+ return 'neutral';
62
+ }, /* @ts-ignore */
63
+ ...(ngDevMode ? [{ debugName: "sign" }] : /* istanbul ignore next */ []));
64
+ classes = computed(() => {
65
+ const sign = this.sign();
66
+ const background = this.emphasis() === 'pill' ? `${PILL_CLASSES} ${PILL_BACKGROUND_CLASS}` : 'bg-transparent';
67
+ return `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${WEIGHT_CLASSES[this.weight()]} ${TEXT_CLASSES[sign]} ${background}`;
68
+ }, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
70
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: UiDelta, deps: [], target: i0.ɵɵFactoryTarget.Component });
71
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: UiDelta, isStandalone: true, selector: "ui-delta", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, unknownLabel: { classPropertyName: "unknownLabel", publicName: "unknownLabel", isSignal: true, isRequired: true, transformFunction: null }, emphasis: { classPropertyName: "emphasis", publicName: "emphasis", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, weight: { classPropertyName: "weight", publicName: "weight", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0, template: `
72
+ @if (sign() === 'unknown') {
73
+ <span aria-hidden="true">&mdash;</span>
74
+ <span class="sr-only">{{ unknownLabel() }}</span>
75
+ } @else {
76
+ <ng-content />
77
+ }
78
+ `, isInline: true });
79
+ }
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: UiDelta, decorators: [{
81
+ type: Component,
82
+ args: [{
83
+ selector: 'ui-delta',
84
+ template: `
85
+ @if (sign() === 'unknown') {
86
+ <span aria-hidden="true">&mdash;</span>
87
+ <span class="sr-only">{{ unknownLabel() }}</span>
88
+ } @else {
89
+ <ng-content />
90
+ }
91
+ `,
92
+ host: {
93
+ '[class]': 'classes()',
94
+ },
95
+ }]
96
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], unknownLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "unknownLabel", required: true }] }], emphasis: [{ type: i0.Input, args: [{ isSignal: true, alias: "emphasis", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], weight: [{ type: i0.Input, args: [{ isSignal: true, alias: "weight", required: false }] }] } });
97
+
98
+ /**
99
+ * Generated bundle index. Do not edit.
100
+ */
101
+
102
+ export { DELTA_EMPHASES, DELTA_SIZES, DELTA_WEIGHTS, UiDelta };
103
+ //# sourceMappingURL=joanroucoux-cairn-ui-delta.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joanroucoux-cairn-ui-delta.mjs","sources":["../../../projects/ui/delta/delta.ts","../../../projects/ui/delta/joanroucoux-cairn-ui-delta.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\n/** Available delta emphases. `DeltaEmphasis` is derived from this tuple. */\nexport const DELTA_EMPHASES = ['text', 'pill'] as const;\nexport type DeltaEmphasis = (typeof DELTA_EMPHASES)[number];\n\n/** Type sizes. `DeltaSize` is derived from this tuple. */\nexport const DELTA_SIZES = ['label', 'inherit'] as const;\nexport type DeltaSize = (typeof DELTA_SIZES)[number];\n\n/** Font weights. `DeltaWeight` is derived from this tuple. */\nexport const DELTA_WEIGHTS = ['medium', 'regular'] as const;\nexport type DeltaWeight = (typeof DELTA_WEIGHTS)[number];\n\nconst BASE_CLASSES = 'inline-flex items-center gap-1 tabular-nums';\n\nconst SIZE_CLASSES: Record<DeltaSize, string> = {\n label: 'text-label',\n inherit: '',\n};\n\nconst WEIGHT_CLASSES: Record<DeltaWeight, string> = {\n medium: 'font-medium',\n regular: 'font-normal',\n};\n\nconst PILL_CLASSES = 'h-6 rounded-pill px-2';\n\ntype Sign = 'positive' | 'negative' | 'neutral' | 'unknown';\n\nconst TEXT_CLASSES: Record<Sign, string> = {\n positive: 'text-(--positive)',\n negative: 'text-(--negative)',\n neutral: 'text-(--muted-foreground)',\n unknown: 'text-(--subtle-foreground)',\n};\n\nconst PILL_BACKGROUND_CLASS = 'bg-(--soft)';\n\n/**\n * Signed amount whose sign carries meaning: a gain, a loss, or an unknown.\n *\n * A null value is not a zero: a holding with no cost basis exists, and showing 0 would falsely\n * claim a known gain of zero. Color never carries the sign on its own: the projected text must\n * already contain a + or a minus sign.\n *\n * @example\n * <ui-delta [value]=\"holding.dayChangeEur\" unknownLabel=\"Not available\">\n * {{ holding.dayChangeEur | signedMoney }}\n * </ui-delta>\n */\n@Component({\n selector: 'ui-delta',\n template: `\n @if (sign() === 'unknown') {\n <span aria-hidden=\"true\">&mdash;</span>\n <span class=\"sr-only\">{{ unknownLabel() }}</span>\n } @else {\n <ng-content />\n }\n `,\n host: {\n '[class]': 'classes()',\n },\n})\nexport class UiDelta {\n readonly value = input.required<number | null | undefined>();\n readonly unknownLabel = input.required<string>();\n readonly emphasis = input<DeltaEmphasis>('text');\n readonly size = input<DeltaSize>('label');\n readonly weight = input<DeltaWeight>('medium');\n\n protected readonly sign = computed<Sign>(() => {\n const value = this.value();\n\n if (value === null || value === undefined) {\n return 'unknown';\n }\n if (value > 0) {\n return 'positive';\n }\n if (value < 0) {\n return 'negative';\n }\n return 'neutral';\n });\n\n protected readonly classes = computed(() => {\n const sign = this.sign();\n const background = this.emphasis() === 'pill' ? `${PILL_CLASSES} ${PILL_BACKGROUND_CLASS}` : 'bg-transparent';\n\n return `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${WEIGHT_CLASSES[this.weight()]} ${TEXT_CLASSES[sign]} ${background}`;\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}