@weeehaoooz/talos-ui 0.1.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 (180) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs +237 -0
  4. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +1 -0
  5. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +93 -0
  6. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +1 -0
  7. package/fesm2022/weeehaoooz-talos-ui-core.mjs +438 -0
  8. package/fesm2022/weeehaoooz-talos-ui-core.mjs.map +1 -0
  9. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +233 -0
  10. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +1 -0
  11. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +361 -0
  12. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +1 -0
  13. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +312 -0
  14. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +1 -0
  15. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +235 -0
  16. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +1 -0
  17. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +462 -0
  18. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +1 -0
  19. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +805 -0
  20. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +1 -0
  21. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +267 -0
  22. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +1 -0
  23. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +351 -0
  24. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +1 -0
  25. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +566 -0
  26. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +1 -0
  27. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +534 -0
  28. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +1 -0
  29. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +446 -0
  30. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +1 -0
  31. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +376 -0
  32. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +1 -0
  33. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +147 -0
  34. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +1 -0
  35. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +242 -0
  36. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +1 -0
  37. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +514 -0
  38. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +1 -0
  39. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +548 -0
  40. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +1 -0
  41. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +692 -0
  42. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +1 -0
  43. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +761 -0
  44. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +1 -0
  45. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +896 -0
  46. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +1 -0
  47. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +872 -0
  48. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +1 -0
  49. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +119 -0
  50. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +1 -0
  51. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +135 -0
  52. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +1 -0
  53. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +666 -0
  54. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +1 -0
  55. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +147 -0
  56. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +1 -0
  57. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +33 -0
  58. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +1 -0
  59. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +455 -0
  60. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +1 -0
  61. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +379 -0
  62. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +1 -0
  63. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +297 -0
  64. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +1 -0
  65. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +661 -0
  66. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +1 -0
  67. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +346 -0
  68. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +1 -0
  69. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +896 -0
  70. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +1 -0
  71. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +252 -0
  72. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +1 -0
  73. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +916 -0
  74. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +1 -0
  75. package/fesm2022/weeehaoooz-talos-ui-layout.mjs +851 -0
  76. package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -0
  77. package/fesm2022/weeehaoooz-talos-ui-nav.mjs +897 -0
  78. package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -0
  79. package/fesm2022/weeehaoooz-talos-ui.mjs +17058 -0
  80. package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -0
  81. package/package.json +203 -0
  82. package/schematics/collection.json +10 -0
  83. package/schematics/ng-add/index.d.ts +3 -0
  84. package/schematics/ng-add/index.js +99 -0
  85. package/schematics/ng-add/schema.d.ts +10 -0
  86. package/schematics/ng-add/schema.js +2 -0
  87. package/schematics/ng-add/schema.json +52 -0
  88. package/styles/_alert.scss +56 -0
  89. package/styles/_badge.scss +279 -0
  90. package/styles/_button-group.scss +470 -0
  91. package/styles/_buttons.scss +442 -0
  92. package/styles/_card.scss +18 -0
  93. package/styles/_dialog.scss +116 -0
  94. package/styles/_drop-zone.scss +19 -0
  95. package/styles/_form-controls.scss +660 -0
  96. package/styles/_slide-toggle.scss +171 -0
  97. package/styles/_status-tag.scss +108 -0
  98. package/styles/_timeline.scss +19 -0
  99. package/styles/_tooltip.scss +32 -0
  100. package/styles/_typography.scss +279 -0
  101. package/styles/_variables.scss +590 -0
  102. package/styles/index.scss +15 -0
  103. package/types/weeehaoooz-talos-ui-button-button-group.d.ts +59 -0
  104. package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +1 -0
  105. package/types/weeehaoooz-talos-ui-button-button.d.ts +38 -0
  106. package/types/weeehaoooz-talos-ui-button-button.d.ts.map +1 -0
  107. package/types/weeehaoooz-talos-ui-core.d.ts +95 -0
  108. package/types/weeehaoooz-talos-ui-core.d.ts.map +1 -0
  109. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +119 -0
  110. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +1 -0
  111. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +135 -0
  112. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +1 -0
  113. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +144 -0
  114. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +1 -0
  115. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +83 -0
  116. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +1 -0
  117. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +255 -0
  118. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +1 -0
  119. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +204 -0
  120. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +1 -0
  121. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +101 -0
  122. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +1 -0
  123. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +138 -0
  124. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +1 -0
  125. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +161 -0
  126. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +1 -0
  127. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +212 -0
  128. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +1 -0
  129. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +259 -0
  130. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +1 -0
  131. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +147 -0
  132. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +1 -0
  133. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +32 -0
  134. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +1 -0
  135. package/types/weeehaoooz-talos-ui-form-affix.d.ts +88 -0
  136. package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +1 -0
  137. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +113 -0
  138. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +1 -0
  139. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +165 -0
  140. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +1 -0
  141. package/types/weeehaoooz-talos-ui-form-chips.d.ts +152 -0
  142. package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +1 -0
  143. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +144 -0
  144. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +1 -0
  145. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +138 -0
  146. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +1 -0
  147. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +148 -0
  148. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +1 -0
  149. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +44 -0
  150. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +1 -0
  151. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +48 -0
  152. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +1 -0
  153. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +227 -0
  154. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +1 -0
  155. package/types/weeehaoooz-talos-ui-form-form-field.d.ts +42 -0
  156. package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +1 -0
  157. package/types/weeehaoooz-talos-ui-form-input.d.ts +15 -0
  158. package/types/weeehaoooz-talos-ui-form-input.d.ts.map +1 -0
  159. package/types/weeehaoooz-talos-ui-form-otp.d.ts +111 -0
  160. package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +1 -0
  161. package/types/weeehaoooz-talos-ui-form-password-input.d.ts +145 -0
  162. package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +1 -0
  163. package/types/weeehaoooz-talos-ui-form-radio.d.ts +84 -0
  164. package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +1 -0
  165. package/types/weeehaoooz-talos-ui-form-range-input.d.ts +181 -0
  166. package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +1 -0
  167. package/types/weeehaoooz-talos-ui-form-rating.d.ts +110 -0
  168. package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +1 -0
  169. package/types/weeehaoooz-talos-ui-form-select-input.d.ts +195 -0
  170. package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +1 -0
  171. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +79 -0
  172. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +1 -0
  173. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +192 -0
  174. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +1 -0
  175. package/types/weeehaoooz-talos-ui-layout.d.ts +286 -0
  176. package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -0
  177. package/types/weeehaoooz-talos-ui-nav.d.ts +384 -0
  178. package/types/weeehaoooz-talos-ui-nav.d.ts.map +1 -0
  179. package/types/weeehaoooz-talos-ui.d.ts +5050 -0
  180. package/types/weeehaoooz-talos-ui.d.ts.map +1 -0
@@ -0,0 +1,233 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ElementRef, Renderer2, DestroyRef, input, computed, effect, Directive, NgModule } from '@angular/core';
3
+
4
+ /**
5
+ * Formats badge content taking into account max threshold clamping, dot mode, and null values.
6
+ *
7
+ * @param content The raw badge content (number, string, or null/undefined)
8
+ * @param max The maximum numerical threshold before displaying with a '+' post-script (e.g. 99+)
9
+ * @param dot Whether the badge is operating in dot indicator mode
10
+ * @returns The formatted string to be rendered inside the badge
11
+ */
12
+ function formatBadgeContent(content, max, dot = false) {
13
+ if (dot || content === null || content === undefined || content === '') {
14
+ return '';
15
+ }
16
+ if (typeof content === 'number') {
17
+ if (typeof max === 'number' && max >= 0 && content > max) {
18
+ return `${max}+`;
19
+ }
20
+ return content.toString();
21
+ }
22
+ const trimmed = content.toString().trim();
23
+ if (trimmed === '') {
24
+ return '';
25
+ }
26
+ const parsedNumber = Number(trimmed);
27
+ if (!isNaN(parsedNumber) && typeof max === 'number' && max >= 0) {
28
+ if (parsedNumber > max) {
29
+ return `${max}+`;
30
+ }
31
+ }
32
+ return trimmed;
33
+ }
34
+
35
+ class TalosBadgeDirective {
36
+ elementRef = inject(ElementRef);
37
+ renderer = inject(Renderer2);
38
+ destroyRef = inject(DestroyRef);
39
+ /**
40
+ * The content to display inside the badge.
41
+ * Can be a number, string, or null/undefined.
42
+ */
43
+ content = input(null, { ...(ngDevMode ? { debugName: "content" } : /* istanbul ignore next */ {}), alias: 'talosBadge' });
44
+ /**
45
+ * Maximum numeric value to display before appending '+'.
46
+ * For example, max = 99 will display 100 as '99+'.
47
+ */
48
+ max = input(undefined, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), alias: 'talosBadgeMax' });
49
+ /**
50
+ * Size scale of the badge.
51
+ * @default 'md'
52
+ */
53
+ size = input('md', { ...(ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {}), alias: 'talosBadgeSize' });
54
+ /**
55
+ * Anchor position of the badge relative to the host element.
56
+ * @default 'top-right'
57
+ */
58
+ position = input('top-right', { ...(ngDevMode ? { debugName: "position" } : /* istanbul ignore next */ {}), alias: 'talosBadgePosition' });
59
+ /**
60
+ * Visual variant/color theme of the badge.
61
+ * @default 'primary'
62
+ */
63
+ variant = input('primary', { ...(ngDevMode ? { debugName: "variant" } : /* istanbul ignore next */ {}), alias: 'talosBadgeVariant' });
64
+ /**
65
+ * Shape style of the badge container.
66
+ * @default 'circle'
67
+ */
68
+ shape = input('circle', { ...(ngDevMode ? { debugName: "shape" } : /* istanbul ignore next */ {}), alias: 'talosBadgeShape' });
69
+ /**
70
+ * Whether to display the badge as a small indicator dot without text content.
71
+ * @default false
72
+ */
73
+ dot = input(false, { ...(ngDevMode ? { debugName: "dot" } : /* istanbul ignore next */ {}), alias: 'talosBadgeDot' });
74
+ /**
75
+ * Whether to enable an animated pulse/ripple effect for notifications.
76
+ * @default false
77
+ */
78
+ pulse = input(false, { ...(ngDevMode ? { debugName: "pulse" } : /* istanbul ignore next */ {}), alias: 'talosBadgePulse' });
79
+ /**
80
+ * Whether the badge is hidden from view.
81
+ * @default false
82
+ */
83
+ hidden = input(false, { ...(ngDevMode ? { debugName: "hidden" } : /* istanbul ignore next */ {}), alias: 'talosBadgeHidden' });
84
+ /**
85
+ * Whether the badge overlaps the edge of the host component.
86
+ * @default true
87
+ */
88
+ overlap = input(true, { ...(ngDevMode ? { debugName: "overlap" } : /* istanbul ignore next */ {}), alias: 'talosBadgeOverlap' });
89
+ /**
90
+ * Accessible description/label for screen readers.
91
+ */
92
+ ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'talosBadgeAriaLabel' });
93
+ /**
94
+ * Computed formatted text content for the badge.
95
+ */
96
+ formattedContent = computed(() => {
97
+ return formatBadgeContent(this.content(), this.max(), this.dot());
98
+ }, /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "formattedContent" }] : /* istanbul ignore next */ []));
100
+ /**
101
+ * Whether the badge should actively render in the DOM and be visible.
102
+ */
103
+ shouldRender = computed(() => {
104
+ if (this.hidden()) {
105
+ return false;
106
+ }
107
+ if (this.dot()) {
108
+ return true;
109
+ }
110
+ const c = this.content();
111
+ return c !== null && c !== undefined && c !== '';
112
+ }, /* @ts-ignore */
113
+ ...(ngDevMode ? [{ debugName: "shouldRender" }] : /* istanbul ignore next */ []));
114
+ /**
115
+ * Computed host aria-label override when provided.
116
+ */
117
+ resolvedHostAriaLabel = computed(() => {
118
+ const custom = this.ariaLabel();
119
+ if (custom !== undefined && custom !== null && custom.trim().length > 0) {
120
+ return custom;
121
+ }
122
+ return null;
123
+ }, /* @ts-ignore */
124
+ ...(ngDevMode ? [{ debugName: "resolvedHostAriaLabel" }] : /* istanbul ignore next */ []));
125
+ badgeElement = null;
126
+ constructor() {
127
+ // Reactive effect to synchronize the badge DOM element whenever signal inputs change
128
+ effect(() => {
129
+ this.updateBadgeDom();
130
+ });
131
+ this.destroyRef.onDestroy(() => {
132
+ this.removeBadgeDom();
133
+ });
134
+ }
135
+ /**
136
+ * Returns the native badge element for inspection or testing.
137
+ */
138
+ get nativeBadgeElement() {
139
+ return this.badgeElement;
140
+ }
141
+ updateBadgeDom() {
142
+ const isVisible = this.shouldRender();
143
+ if (!isVisible) {
144
+ if (this.badgeElement) {
145
+ this.renderer.addClass(this.badgeElement, 'talos-badge--hidden');
146
+ this.renderer.setStyle(this.badgeElement, 'display', 'none');
147
+ }
148
+ return;
149
+ }
150
+ if (!this.badgeElement) {
151
+ this.badgeElement = this.renderer.createElement('span');
152
+ this.renderer.addClass(this.badgeElement, 'talos-badge');
153
+ this.renderer.setAttribute(this.badgeElement, 'aria-hidden', 'true');
154
+ this.renderer.appendChild(this.elementRef.nativeElement, this.badgeElement);
155
+ }
156
+ const badgeEl = this.badgeElement;
157
+ if (!badgeEl) {
158
+ return;
159
+ }
160
+ // Reset visibility styles
161
+ this.renderer.removeClass(badgeEl, 'talos-badge--hidden');
162
+ this.renderer.removeStyle(badgeEl, 'display');
163
+ // Update text content
164
+ const text = this.formattedContent();
165
+ this.renderer.setProperty(badgeEl, 'textContent', text);
166
+ // Apply classes for size, position, variant, shape, etc.
167
+ const size = this.size();
168
+ const pos = this.position();
169
+ const variant = this.variant();
170
+ const shape = this.shape();
171
+ const isDot = this.dot();
172
+ const isPulse = this.pulse();
173
+ const isOverlap = this.overlap();
174
+ const isMultiChar = text.length > 1;
175
+ // Reset base class list and re-apply active classes
176
+ badgeEl.className = 'talos-badge';
177
+ this.renderer.addClass(badgeEl, `talos-badge--${size}`);
178
+ this.renderer.addClass(badgeEl, `talos-badge--${pos}`);
179
+ this.renderer.addClass(badgeEl, `talos-badge--${variant}`);
180
+ this.renderer.addClass(badgeEl, `talos-badge--${shape}`);
181
+ if (isDot) {
182
+ this.renderer.addClass(badgeEl, 'talos-badge--dot');
183
+ }
184
+ if (isPulse) {
185
+ this.renderer.addClass(badgeEl, 'talos-badge--pulse');
186
+ }
187
+ if (isOverlap) {
188
+ this.renderer.addClass(badgeEl, 'talos-badge--overlap');
189
+ }
190
+ if (isMultiChar && !isDot) {
191
+ this.renderer.addClass(badgeEl, 'talos-badge--pill');
192
+ }
193
+ }
194
+ removeBadgeDom() {
195
+ if (this.badgeElement) {
196
+ this.renderer.removeChild(this.elementRef.nativeElement, this.badgeElement);
197
+ this.badgeElement = null;
198
+ }
199
+ }
200
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosBadgeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
201
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: TalosBadgeDirective, isStandalone: true, selector: "[talosBadge], [talos-badge]", inputs: { content: { classPropertyName: "content", publicName: "talosBadge", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "talosBadgeMax", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "talosBadgeSize", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "talosBadgePosition", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "talosBadgeVariant", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "talosBadgeShape", isSignal: true, isRequired: false, transformFunction: null }, dot: { classPropertyName: "dot", publicName: "talosBadgeDot", isSignal: true, isRequired: false, transformFunction: null }, pulse: { classPropertyName: "pulse", publicName: "talosBadgePulse", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "talosBadgeHidden", isSignal: true, isRequired: false, transformFunction: null }, overlap: { classPropertyName: "overlap", publicName: "talosBadgeOverlap", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "talosBadgeAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.talos-badge-host--has-badge": "shouldRender()", "attr.aria-label": "resolvedHostAriaLabel()" }, classAttribute: "talos-badge-host" }, ngImport: i0 });
202
+ }
203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosBadgeDirective, decorators: [{
204
+ type: Directive,
205
+ args: [{
206
+ selector: '[talosBadge], [talos-badge]',
207
+ host: {
208
+ 'class': 'talos-badge-host',
209
+ '[class.talos-badge-host--has-badge]': 'shouldRender()',
210
+ '[attr.aria-label]': 'resolvedHostAriaLabel()'
211
+ }
212
+ }]
213
+ }], ctorParameters: () => [], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadge", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeMax", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeSize", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgePosition", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeVariant", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeShape", required: false }] }], dot: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeDot", required: false }] }], pulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgePulse", required: false }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeHidden", required: false }] }], overlap: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeOverlap", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosBadgeAriaLabel", required: false }] }] } });
214
+
215
+ class TalosBadgeModule {
216
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
217
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosBadgeModule, imports: [TalosBadgeDirective], exports: [TalosBadgeDirective] });
218
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosBadgeModule });
219
+ }
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosBadgeModule, decorators: [{
221
+ type: NgModule,
222
+ args: [{
223
+ imports: [TalosBadgeDirective],
224
+ exports: [TalosBadgeDirective]
225
+ }]
226
+ }] });
227
+
228
+ /**
229
+ * Generated bundle index. Do not edit.
230
+ */
231
+
232
+ export { TalosBadgeDirective, TalosBadgeModule, formatBadgeContent };
233
+ //# sourceMappingURL=weeehaoooz-talos-ui-data-display-badge.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weeehaoooz-talos-ui-data-display-badge.mjs","sources":["../../../projects/talos-ui/data-display/badge/badge.types.ts","../../../projects/talos-ui/data-display/badge/badge.directive.ts","../../../projects/talos-ui/data-display/badge/badge.module.ts","../../../projects/talos-ui/data-display/badge/weeehaoooz-talos-ui-data-display-badge.ts"],"sourcesContent":["/**\n * Supported size scales for the badge.\n */\nexport type TalosBadgeSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/**\n * Anchor positions for placing the badge relative to its host element.\n */\nexport type TalosBadgePosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'bottom'\n | 'inline';\n\n/**\n * Visual semantic variant presentation styles.\n */\nexport type TalosBadgeVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'error'\n | 'info'\n | 'neutral'\n | 'subtle'\n | 'outline';\n\n/**\n * Shape styling of the badge container.\n */\nexport type TalosBadgeShape = 'circle' | 'pill' | 'square';\n\n/**\n * Formats badge content taking into account max threshold clamping, dot mode, and null values.\n *\n * @param content The raw badge content (number, string, or null/undefined)\n * @param max The maximum numerical threshold before displaying with a '+' post-script (e.g. 99+)\n * @param dot Whether the badge is operating in dot indicator mode\n * @returns The formatted string to be rendered inside the badge\n */\nexport function formatBadgeContent(\n content: string | number | null | undefined,\n max?: number | null,\n dot: boolean = false\n): string {\n if (dot || content === null || content === undefined || content === '') {\n return '';\n }\n\n if (typeof content === 'number') {\n if (typeof max === 'number' && max >= 0 && content > max) {\n return `${max}+`;\n }\n return content.toString();\n }\n\n const trimmed = content.toString().trim();\n if (trimmed === '') {\n return '';\n }\n\n const parsedNumber = Number(trimmed);\n if (!isNaN(parsedNumber) && typeof max === 'number' && max >= 0) {\n if (parsedNumber > max) {\n return `${max}+`;\n }\n }\n\n return trimmed;\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n Renderer2,\n computed,\n effect,\n inject,\n input\n} from '@angular/core';\nimport {\n TalosBadgePosition,\n TalosBadgeShape,\n TalosBadgeSize,\n TalosBadgeVariant,\n formatBadgeContent\n} from './badge.types';\n\n@Directive({\n selector: '[talosBadge], [talos-badge]',\n host: {\n 'class': 'talos-badge-host',\n '[class.talos-badge-host--has-badge]': 'shouldRender()',\n '[attr.aria-label]': 'resolvedHostAriaLabel()'\n }\n})\nexport class TalosBadgeDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * The content to display inside the badge.\n * Can be a number, string, or null/undefined.\n */\n readonly content = input<string | number | null | undefined>(null, {\n alias: 'talosBadge'\n });\n\n /**\n * Maximum numeric value to display before appending '+'.\n * For example, max = 99 will display 100 as '99+'.\n */\n readonly max = input<number | null | undefined>(undefined, {\n alias: 'talosBadgeMax'\n });\n\n /**\n * Size scale of the badge.\n * @default 'md'\n */\n readonly size = input<TalosBadgeSize>('md', {\n alias: 'talosBadgeSize'\n });\n\n /**\n * Anchor position of the badge relative to the host element.\n * @default 'top-right'\n */\n readonly position = input<TalosBadgePosition>('top-right', {\n alias: 'talosBadgePosition'\n });\n\n /**\n * Visual variant/color theme of the badge.\n * @default 'primary'\n */\n readonly variant = input<TalosBadgeVariant>('primary', {\n alias: 'talosBadgeVariant'\n });\n\n /**\n * Shape style of the badge container.\n * @default 'circle'\n */\n readonly shape = input<TalosBadgeShape>('circle', {\n alias: 'talosBadgeShape'\n });\n\n /**\n * Whether to display the badge as a small indicator dot without text content.\n * @default false\n */\n readonly dot = input<boolean>(false, {\n alias: 'talosBadgeDot'\n });\n\n /**\n * Whether to enable an animated pulse/ripple effect for notifications.\n * @default false\n */\n readonly pulse = input<boolean>(false, {\n alias: 'talosBadgePulse'\n });\n\n /**\n * Whether the badge is hidden from view.\n * @default false\n */\n readonly hidden = input<boolean>(false, {\n alias: 'talosBadgeHidden'\n });\n\n /**\n * Whether the badge overlaps the edge of the host component.\n * @default true\n */\n readonly overlap = input<boolean>(true, {\n alias: 'talosBadgeOverlap'\n });\n\n /**\n * Accessible description/label for screen readers.\n */\n readonly ariaLabel = input<string | null | undefined>(undefined, {\n alias: 'talosBadgeAriaLabel'\n });\n\n /**\n * Computed formatted text content for the badge.\n */\n readonly formattedContent = computed<string>(() => {\n return formatBadgeContent(this.content(), this.max(), this.dot());\n });\n\n /**\n * Whether the badge should actively render in the DOM and be visible.\n */\n readonly shouldRender = computed<boolean>(() => {\n if (this.hidden()) {\n return false;\n }\n if (this.dot()) {\n return true;\n }\n const c = this.content();\n return c !== null && c !== undefined && c !== '';\n });\n\n /**\n * Computed host aria-label override when provided.\n */\n readonly resolvedHostAriaLabel = computed<string | null>(() => {\n const custom = this.ariaLabel();\n if (custom !== undefined && custom !== null && custom.trim().length > 0) {\n return custom;\n }\n return null;\n });\n\n private badgeElement: HTMLElement | null = null;\n\n constructor() {\n // Reactive effect to synchronize the badge DOM element whenever signal inputs change\n effect(() => {\n this.updateBadgeDom();\n });\n\n this.destroyRef.onDestroy(() => {\n this.removeBadgeDom();\n });\n }\n\n /**\n * Returns the native badge element for inspection or testing.\n */\n get nativeBadgeElement(): HTMLElement | null {\n return this.badgeElement;\n }\n\n private updateBadgeDom(): void {\n const isVisible = this.shouldRender();\n\n if (!isVisible) {\n if (this.badgeElement) {\n this.renderer.addClass(this.badgeElement, 'talos-badge--hidden');\n this.renderer.setStyle(this.badgeElement, 'display', 'none');\n }\n return;\n }\n\n if (!this.badgeElement) {\n this.badgeElement = this.renderer.createElement('span');\n this.renderer.addClass(this.badgeElement, 'talos-badge');\n this.renderer.setAttribute(this.badgeElement, 'aria-hidden', 'true');\n this.renderer.appendChild(this.elementRef.nativeElement, this.badgeElement);\n }\n\n const badgeEl = this.badgeElement;\n if (!badgeEl) {\n return;\n }\n\n // Reset visibility styles\n this.renderer.removeClass(badgeEl, 'talos-badge--hidden');\n this.renderer.removeStyle(badgeEl, 'display');\n\n // Update text content\n const text = this.formattedContent();\n this.renderer.setProperty(badgeEl, 'textContent', text);\n\n // Apply classes for size, position, variant, shape, etc.\n const size = this.size();\n const pos = this.position();\n const variant = this.variant();\n const shape = this.shape();\n const isDot = this.dot();\n const isPulse = this.pulse();\n const isOverlap = this.overlap();\n const isMultiChar = text.length > 1;\n\n // Reset base class list and re-apply active classes\n badgeEl.className = 'talos-badge';\n this.renderer.addClass(badgeEl, `talos-badge--${size}`);\n this.renderer.addClass(badgeEl, `talos-badge--${pos}`);\n this.renderer.addClass(badgeEl, `talos-badge--${variant}`);\n this.renderer.addClass(badgeEl, `talos-badge--${shape}`);\n\n if (isDot) {\n this.renderer.addClass(badgeEl, 'talos-badge--dot');\n }\n if (isPulse) {\n this.renderer.addClass(badgeEl, 'talos-badge--pulse');\n }\n if (isOverlap) {\n this.renderer.addClass(badgeEl, 'talos-badge--overlap');\n }\n if (isMultiChar && !isDot) {\n this.renderer.addClass(badgeEl, 'talos-badge--pill');\n }\n }\n\n private removeBadgeDom(): void {\n if (this.badgeElement) {\n this.renderer.removeChild(this.elementRef.nativeElement, this.badgeElement);\n this.badgeElement = null;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosBadgeDirective } from './badge.directive';\n\n@NgModule({\n imports: [TalosBadgeDirective],\n exports: [TalosBadgeDirective]\n})\nexport class TalosBadgeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}