@bitforgehq/ui 0.3.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 (281) hide show
  1. package/CHANGELOG.md +3665 -0
  2. package/LICENSE +21 -0
  3. package/README.md +175 -0
  4. package/ai/MANIFEST.index.json +383 -0
  5. package/ai/MANIFEST.json +7528 -0
  6. package/ai/REFERENCE.index.json +1461 -0
  7. package/ai/REFERENCE.json +7213 -0
  8. package/ai/UI_GUIDE.md +1159 -0
  9. package/ai/components/action-bar.md +209 -0
  10. package/ai/components/action-sheet.md +526 -0
  11. package/ai/components/alert-dialog.md +509 -0
  12. package/ai/components/alert.md +376 -0
  13. package/ai/components/avatar.md +146 -0
  14. package/ai/components/back-button.md +286 -0
  15. package/ai/components/badge.md +171 -0
  16. package/ai/components/button.md +431 -0
  17. package/ai/components/card.md +303 -0
  18. package/ai/components/checkbox.md +418 -0
  19. package/ai/components/chip-group.md +205 -0
  20. package/ai/components/chip.md +300 -0
  21. package/ai/components/content.md +474 -0
  22. package/ai/components/desktop-toast.md +420 -0
  23. package/ai/components/dialog.md +962 -0
  24. package/ai/components/empty-state.md +146 -0
  25. package/ai/components/field.md +319 -0
  26. package/ai/components/header.md +809 -0
  27. package/ai/components/icon-button.md +221 -0
  28. package/ai/components/icon.md +176 -0
  29. package/ai/components/input.md +455 -0
  30. package/ai/components/list-item.md +326 -0
  31. package/ai/components/list.md +178 -0
  32. package/ai/components/menu-button.md +377 -0
  33. package/ai/components/menu.md +661 -0
  34. package/ai/components/modal.md +613 -0
  35. package/ai/components/number-input.md +423 -0
  36. package/ai/components/page.md +299 -0
  37. package/ai/components/progress.md +215 -0
  38. package/ai/components/radio-group.md +432 -0
  39. package/ai/components/refresher.md +377 -0
  40. package/ai/components/segmented.md +517 -0
  41. package/ai/components/select.md +510 -0
  42. package/ai/components/sheet.md +845 -0
  43. package/ai/components/spinner.md +171 -0
  44. package/ai/components/stack-outlet.md +661 -0
  45. package/ai/components/tab-bar.md +427 -0
  46. package/ai/components/tab.md +295 -0
  47. package/ai/components/tabs.md +408 -0
  48. package/ai/components/textarea.md +371 -0
  49. package/ai/components/toast.md +522 -0
  50. package/ai/components/toggle.md +387 -0
  51. package/ai/reference/bf-action-directive.md +21 -0
  52. package/ai/reference/bf-action-sheet-action-role.md +27 -0
  53. package/ai/reference/bf-action-sheet-action.md +28 -0
  54. package/ai/reference/bf-action-sheet-options.md +28 -0
  55. package/ai/reference/bf-action-sheet-service.md +33 -0
  56. package/ai/reference/bf-alert-dialog-button-role.md +27 -0
  57. package/ai/reference/bf-alert-dialog-button.md +27 -0
  58. package/ai/reference/bf-alert-dialog-options.md +29 -0
  59. package/ai/reference/bf-alert-dialog-service.md +34 -0
  60. package/ai/reference/bf-alert-variant.md +28 -0
  61. package/ai/reference/bf-autocapitalize.md +30 -0
  62. package/ai/reference/bf-avatar-size.md +27 -0
  63. package/ai/reference/bf-avatar-variant.md +28 -0
  64. package/ai/reference/bf-back-at-root.md +28 -0
  65. package/ai/reference/bf-back-button-service.md +40 -0
  66. package/ai/reference/bf-badge-variant.md +29 -0
  67. package/ai/reference/bf-button-size.md +29 -0
  68. package/ai/reference/bf-button-type.md +28 -0
  69. package/ai/reference/bf-button-variant.md +29 -0
  70. package/ai/reference/bf-card-padding.md +26 -0
  71. package/ai/reference/bf-card-variant.md +28 -0
  72. package/ai/reference/bf-chip-group-mode.md +27 -0
  73. package/ai/reference/bf-chip-variant.md +26 -0
  74. package/ai/reference/bf-compare-with.md +24 -0
  75. package/ai/reference/bf-component-overlay-ref.md +33 -0
  76. package/ai/reference/bf-confirm-button-role.md +26 -0
  77. package/ai/reference/bf-confirm-button.md +27 -0
  78. package/ai/reference/bf-confirm-options.md +31 -0
  79. package/ai/reference/bf-confirm-size.md +26 -0
  80. package/ai/reference/bf-content-scroll-event.md +21 -0
  81. package/ai/reference/bf-defaults-options.md +32 -0
  82. package/ai/reference/bf-defaults.md +28 -0
  83. package/ai/reference/bf-desktop-toast-config.md +28 -0
  84. package/ai/reference/bf-desktop-toast-harness.md +33 -0
  85. package/ai/reference/bf-desktop-toast-options.md +28 -0
  86. package/ai/reference/bf-desktop-toast-position.md +28 -0
  87. package/ai/reference/bf-desktop-toast-service.md +42 -0
  88. package/ai/reference/bf-dialog-config.md +44 -0
  89. package/ai/reference/bf-dialog-harness.md +52 -0
  90. package/ai/reference/bf-dialog-ref.md +44 -0
  91. package/ai/reference/bf-dialog-role.md +26 -0
  92. package/ai/reference/bf-dialog-service.md +55 -0
  93. package/ai/reference/bf-dialog-size.md +31 -0
  94. package/ai/reference/bf-dialog-template-context.md +32 -0
  95. package/ai/reference/bf-empty-state-heading-level.md +26 -0
  96. package/ai/reference/bf-enter-key-hint.md +31 -0
  97. package/ai/reference/bf-field-control-class.md +32 -0
  98. package/ai/reference/bf-field-control-state.md +28 -0
  99. package/ai/reference/bf-field-size.md +29 -0
  100. package/ai/reference/bf-haptics-impact-style.md +27 -0
  101. package/ai/reference/bf-haptics-notification-type.md +27 -0
  102. package/ai/reference/bf-haptics-service.md +41 -0
  103. package/ai/reference/bf-harness-filters.md +29 -0
  104. package/ai/reference/bf-horizontal-scroll-directive.md +129 -0
  105. package/ai/reference/bf-icon-button-variant.md +28 -0
  106. package/ai/reference/bf-icon-size.md +27 -0
  107. package/ai/reference/bf-input-autocapitalize.md +36 -0
  108. package/ai/reference/bf-input-enter-key-hint.md +38 -0
  109. package/ai/reference/bf-input-input-mode.md +38 -0
  110. package/ai/reference/bf-input-mode.md +32 -0
  111. package/ai/reference/bf-input-type.md +35 -0
  112. package/ai/reference/bf-jsdom-shim-options.md +22 -0
  113. package/ai/reference/bf-keyboard-assist-behavior.md +26 -0
  114. package/ai/reference/bf-keyboard-assist-directive.md +185 -0
  115. package/ai/reference/bf-keyboard-phase.md +30 -0
  116. package/ai/reference/bf-keyboard-service.md +50 -0
  117. package/ai/reference/bf-labels-overrides.md +26 -0
  118. package/ai/reference/bf-labels.md +44 -0
  119. package/ai/reference/bf-menu-button-harness.md +40 -0
  120. package/ai/reference/bf-menu-button-variant.md +27 -0
  121. package/ai/reference/bf-menu-divider-directive.md +13 -0
  122. package/ai/reference/bf-menu-group-directive.md +14 -0
  123. package/ai/reference/bf-menu-harness.md +55 -0
  124. package/ai/reference/bf-menu-item-checkbox-directive.md +31 -0
  125. package/ai/reference/bf-menu-item-directive.md +31 -0
  126. package/ai/reference/bf-menu-item-harness.md +52 -0
  127. package/ai/reference/bf-menu-item-radio-directive.md +29 -0
  128. package/ai/reference/bf-menu-placement.md +29 -0
  129. package/ai/reference/bf-menu-trigger-directive.md +46 -0
  130. package/ai/reference/bf-modal-options.md +30 -0
  131. package/ai/reference/bf-modal-presentation.md +26 -0
  132. package/ai/reference/bf-modal-service.md +38 -0
  133. package/ai/reference/bf-nav-controller.md +59 -0
  134. package/ai/reference/bf-nav-direction.md +23 -0
  135. package/ai/reference/bf-nav-target.md +21 -0
  136. package/ai/reference/bf-number-input-mode.md +28 -0
  137. package/ai/reference/bf-number-input-step.md +25 -0
  138. package/ai/reference/bf-overlay-auto-focus.md +29 -0
  139. package/ai/reference/bf-overlay-controller.md +22 -0
  140. package/ai/reference/bf-overlay-host.md +36 -0
  141. package/ai/reference/bf-overlay-options.md +53 -0
  142. package/ai/reference/bf-overlay-position.md +30 -0
  143. package/ai/reference/bf-overlay-ref.md +53 -0
  144. package/ai/reference/bf-overlay-role.md +27 -0
  145. package/ai/reference/bf-overlay-service.md +53 -0
  146. package/ai/reference/bf-overlay-stack-options.md +24 -0
  147. package/ai/reference/bf-overlay-stack.md +81 -0
  148. package/ai/reference/bf-overlay-template-context.md +24 -0
  149. package/ai/reference/bf-overscroll-stretch-directive.md +163 -0
  150. package/ai/reference/bf-page-context.md +24 -0
  151. package/ai/reference/bf-platform-service.md +53 -0
  152. package/ai/reference/bf-platform.md +28 -0
  153. package/ai/reference/bf-progress-size.md +26 -0
  154. package/ai/reference/bf-progress-tone.md +28 -0
  155. package/ai/reference/bf-radio-group-harness.md +49 -0
  156. package/ai/reference/bf-radio-group-orientation.md +26 -0
  157. package/ai/reference/bf-radio-option.md +30 -0
  158. package/ai/reference/bf-refresher-refresh-event.md +22 -0
  159. package/ai/reference/bf-segment-option.md +29 -0
  160. package/ai/reference/bf-segmented-harness.md +48 -0
  161. package/ai/reference/bf-segmented-size.md +29 -0
  162. package/ai/reference/bf-select-harness.md +70 -0
  163. package/ai/reference/bf-select-option.md +29 -0
  164. package/ai/reference/bf-sheet-auto-focus.md +29 -0
  165. package/ai/reference/bf-sheet-options.md +32 -0
  166. package/ai/reference/bf-sheet-ref.md +45 -0
  167. package/ai/reference/bf-sheet-service.md +34 -0
  168. package/ai/reference/bf-shell-config-mode.md +28 -0
  169. package/ai/reference/bf-shell-config.md +38 -0
  170. package/ai/reference/bf-shell-dynamic-type-limit.md +21 -0
  171. package/ai/reference/bf-shell-dynamic-type.md +25 -0
  172. package/ai/reference/bf-shell-mode.md +28 -0
  173. package/ai/reference/bf-shell-testing-options.md +26 -0
  174. package/ai/reference/bf-size.md +45 -0
  175. package/ai/reference/bf-spinner-size.md +27 -0
  176. package/ai/reference/bf-stack-change.md +22 -0
  177. package/ai/reference/bf-stack-reuse-strategy.md +32 -0
  178. package/ai/reference/bf-stack-transition-event.md +26 -0
  179. package/ai/reference/bf-stack-transition.md +26 -0
  180. package/ai/reference/bf-stacked-overlay.md +23 -0
  181. package/ai/reference/bf-system-bars-style.md +38 -0
  182. package/ai/reference/bf-tab-bar-controller.md +51 -0
  183. package/ai/reference/bf-tab-bar-host.md +52 -0
  184. package/ai/reference/bf-tab-context.md +32 -0
  185. package/ai/reference/bf-tab-links.md +37 -0
  186. package/ai/reference/bf-testing-options.md +27 -0
  187. package/ai/reference/bf-text-scale-service.md +35 -0
  188. package/ai/reference/bf-theme.md +27 -0
  189. package/ai/reference/bf-toast-action.md +25 -0
  190. package/ai/reference/bf-toast-controller.md +17 -0
  191. package/ai/reference/bf-toast-dismiss-reason.md +29 -0
  192. package/ai/reference/bf-toast-options.md +29 -0
  193. package/ai/reference/bf-toast-position.md +26 -0
  194. package/ai/reference/bf-toast-ref.md +41 -0
  195. package/ai/reference/bf-toast-service.md +39 -0
  196. package/ai/reference/bf-toggle-label-position.md +26 -0
  197. package/ai/reference/bf-transition-kind.md +28 -0
  198. package/ai/reference/bf-validation-message.md +31 -0
  199. package/ai/reference/bf-validation-messages.md +33 -0
  200. package/ai/reference/bf-view-event.md +28 -0
  201. package/ai/reference/bf-view-lifecycle.md +41 -0
  202. package/ai/reference/bf-view-state.md +28 -0
  203. package/ai/reference/bf_default_labels.md +21 -0
  204. package/ai/reference/bf_default_values.md +21 -0
  205. package/ai/reference/bf_defaults.md +21 -0
  206. package/ai/reference/bf_desktop_toast_defaults.md +21 -0
  207. package/ai/reference/bf_dialog_data.md +17 -0
  208. package/ai/reference/bf_labels.md +21 -0
  209. package/ai/reference/bf_overlay_data.md +19 -0
  210. package/ai/reference/bf_overlay_host.md +21 -0
  211. package/ai/reference/bf_sheet_default_snap_points.md +17 -0
  212. package/ai/reference/bf_shell_config.md +21 -0
  213. package/ai/reference/bf_shell_defaults.md +21 -0
  214. package/ai/reference/bf_tab_bar.md +21 -0
  215. package/ai/reference/bf_tab_bar_controller.md +21 -0
  216. package/ai/reference/bf_tab_context.md +21 -0
  217. package/ai/reference/bf_tab_links.md +21 -0
  218. package/ai/reference/bf_theme_storage.md +19 -0
  219. package/ai/reference/create-transition.md +36 -0
  220. package/ai/reference/duration_fast.md +17 -0
  221. package/ai/reference/duration_md.md +17 -0
  222. package/ai/reference/duration_overlay.md +17 -0
  223. package/ai/reference/duration_push.md +17 -0
  224. package/ai/reference/fade-down.md +26 -0
  225. package/ai/reference/fade-in.md +25 -0
  226. package/ai/reference/fade-out.md +25 -0
  227. package/ai/reference/fade-up.md +26 -0
  228. package/ai/reference/inject-shell-mode.md +23 -0
  229. package/ai/reference/install-bf-jsdom-shims.md +31 -0
  230. package/ai/reference/ios_duration.md +17 -0
  231. package/ai/reference/ios_easing.md +17 -0
  232. package/ai/reference/is-text-entry.md +25 -0
  233. package/ai/reference/max_complete_ms.md +17 -0
  234. package/ai/reference/md-transition.md +31 -0
  235. package/ai/reference/md_duration.md +17 -0
  236. package/ai/reference/md_easing.md +17 -0
  237. package/ai/reference/overlay_duration.md +21 -0
  238. package/ai/reference/overlay_easing.md +19 -0
  239. package/ai/reference/overlay_reduced_duration.md +17 -0
  240. package/ai/reference/pop-frames-at.md +25 -0
  241. package/ai/reference/prefers-reduced-motion.md +25 -0
  242. package/ai/reference/provide-bf-defaults.md +33 -0
  243. package/ai/reference/provide-bf-desktop-toast.md +28 -0
  244. package/ai/reference/provide-bf-labels.md +38 -0
  245. package/ai/reference/provide-bf-shell-testing.md +34 -0
  246. package/ai/reference/provide-bf-shell.md +41 -0
  247. package/ai/reference/provide-bf-testing.md +33 -0
  248. package/ai/reference/reduced-transition.md +28 -0
  249. package/ai/reference/reduced_duration.md +17 -0
  250. package/ai/reference/resolve-shell-mode.md +33 -0
  251. package/ai/reference/scale-in.md +25 -0
  252. package/ai/reference/settle-duration.md +25 -0
  253. package/ai/reference/settle-pop.md +33 -0
  254. package/ai/reference/settle_easing.md +17 -0
  255. package/ai/reference/should-complete-pop.md +26 -0
  256. package/ai/reference/slide-down.md +26 -0
  257. package/ai/reference/slide-up.md +26 -0
  258. package/ai/reference/with-bf-shell-routing.md +19 -0
  259. package/bin/bf-ui.js +81 -0
  260. package/fesm2022/bitforgehq-ui-icons.mjs +230 -0
  261. package/fesm2022/bitforgehq-ui-icons.mjs.map +1 -0
  262. package/fesm2022/bitforgehq-ui-mobile.mjs +5530 -0
  263. package/fesm2022/bitforgehq-ui-mobile.mjs.map +1 -0
  264. package/fesm2022/bitforgehq-ui-number-input.mjs +680 -0
  265. package/fesm2022/bitforgehq-ui-number-input.mjs.map +1 -0
  266. package/fesm2022/bitforgehq-ui-overlay.mjs +2675 -0
  267. package/fesm2022/bitforgehq-ui-overlay.mjs.map +1 -0
  268. package/fesm2022/bitforgehq-ui-testing.mjs +402 -0
  269. package/fesm2022/bitforgehq-ui-testing.mjs.map +1 -0
  270. package/fesm2022/bitforgehq-ui.mjs +7765 -0
  271. package/fesm2022/bitforgehq-ui.mjs.map +1 -0
  272. package/llms-full.txt +25394 -0
  273. package/llms.txt +329 -0
  274. package/package.json +94 -0
  275. package/theme.css +253 -0
  276. package/types/bitforgehq-ui-icons.d.ts +50 -0
  277. package/types/bitforgehq-ui-mobile.d.ts +2914 -0
  278. package/types/bitforgehq-ui-number-input.d.ts +282 -0
  279. package/types/bitforgehq-ui-overlay.d.ts +1514 -0
  280. package/types/bitforgehq-ui-testing.d.ts +495 -0
  281. package/types/bitforgehq-ui.d.ts +3499 -0
@@ -0,0 +1,680 @@
1
+ import * as i0 from "@angular/core";
2
+ import { Component, booleanAttribute, computed, effect, inject, input, model, output, signal, untracked, viewChild } from "@angular/core";
3
+ import { transformedValue } from "@angular/forms/signals";
4
+ import { BF_DEFAULTS, BF_LABELS, BfFieldComponent, ɵFIELD_BOX, ɵFIELD_ICON_END, ɵFIELD_ICON_START, ɵFIELD_PADDING_END, ɵFIELD_PADDING_START, ɵfieldDescribedBy, ɵfieldErrorMessageId, ɵfieldErrorText, ɵfieldShowsError, ɵuniqueId } from "@bitforgehq/ui";
5
+ const BASE = "block w-full rounded-field border bg-surface text-text placeholder:text-text-muted transition-colors focus:outline-hidden focus:border-primary focus:ring-2 focus:ring-ring read-only:bg-surface-muted disabled:cursor-not-allowed disabled:border-surface-sunken disabled:bg-surface-muted disabled:text-text-disabled";
6
+ var BfNumberInputComponent = class BfNumberInputComponent {
7
+ value = model(null, ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
8
+ min = input(void 0, ...ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []);
9
+ max = input(void 0, ...ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []);
10
+ step = input(void 0, ...ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []);
11
+ size = input(void 0, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
12
+ label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
13
+ ariaLabel = input("", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
14
+ ariaLabelledby = input("", ...ngDevMode ? [{ debugName: "ariaLabelledby" }] : /* istanbul ignore next */ []);
15
+ placeholder = input("", ...ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []);
16
+ helpText = input("", ...ngDevMode ? [{ debugName: "helpText" }] : /* istanbul ignore next */ []);
17
+ errorMessage = input("", ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
18
+ disabled = input(false, {
19
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
20
+ transform: booleanAttribute
21
+ });
22
+ readonly = input(false, {
23
+ ...ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {},
24
+ transform: booleanAttribute
25
+ });
26
+ required = input(false, {
27
+ ...ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {},
28
+ transform: booleanAttribute
29
+ });
30
+ invalid = input(false, {
31
+ ...ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {},
32
+ transform: booleanAttribute
33
+ });
34
+ touched = input(false, {
35
+ ...ngDevMode ? { debugName: "touched" } : /* istanbul ignore next */ {},
36
+ transform: booleanAttribute
37
+ });
38
+ errors = input([], ...ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []);
39
+ name = input("", ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
40
+ id = input(ɵuniqueId("bf-number-input"), ...ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []);
41
+ iconStart = input(false, {
42
+ ...ngDevMode ? { debugName: "iconStart" } : /* istanbul ignore next */ {},
43
+ transform: booleanAttribute
44
+ });
45
+ iconEnd = input(false, {
46
+ ...ngDevMode ? { debugName: "iconEnd" } : /* istanbul ignore next */ {},
47
+ transform: booleanAttribute
48
+ });
49
+ autocomplete = input("", ...ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []);
50
+ inputMode = input("", ...ngDevMode ? [{ debugName: "inputMode" }] : /* istanbul ignore next */ []);
51
+ enterKeyHint = input("", ...ngDevMode ? [{ debugName: "enterKeyHint" }] : /* istanbul ignore next */ []);
52
+ changed = output();
53
+ focused = output();
54
+ blurred = output();
55
+ touch = output();
56
+ el = viewChild.required("el", ...ngDevMode ? [{ debugName: "el" }] : /* istanbul ignore next */ []);
57
+ labels = inject(BF_LABELS);
58
+ defaults = inject(BF_DEFAULTS);
59
+ badInput = signal(false, ...ngDevMode ? [{ debugName: "badInput" }] : /* istanbul ignore next */ []);
60
+ left = signal(false, ...ngDevMode ? [{ debugName: "left" }] : /* istanbul ignore next */ []);
61
+ raw = transformedValue(this.value, {
62
+ parse: (text) => {
63
+ if (this.badInput()) return { error: {
64
+ kind: "parse",
65
+ message: this.labels.validation.parse
66
+ } };
67
+ return { value: text === "" ? null : Number(text) };
68
+ },
69
+ format: (value) => value === null ? "" : String(value)
70
+ });
71
+ resolvedSize = computed(() => this.size() ?? this.defaults.fieldSize, ...ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []);
72
+ iconStartClasses = computed(() => `text-text-subtle pointer-events-none absolute inset-y-0 flex items-center ${ɵFIELD_ICON_START[this.resolvedSize()]}`, ...ngDevMode ? [{ debugName: "iconStartClasses" }] : /* istanbul ignore next */ []);
73
+ iconEndClasses = computed(() => `text-text-subtle absolute inset-y-0 flex items-center ${ɵFIELD_ICON_END[this.resolvedSize()]}`, ...ngDevMode ? [{ debugName: "iconEndClasses" }] : /* istanbul ignore next */ []);
74
+ allErrors = computed(() => {
75
+ const errors = [...this.errors()];
76
+ for (const error of this.raw.parseErrors()) if (!errors.some((e) => e.kind === error.kind)) errors.push(error);
77
+ return errors;
78
+ }, ...ngDevMode ? [{ debugName: "allErrors" }] : /* istanbul ignore next */ []);
79
+ errorText = computed(() => ɵfieldErrorText(this.errorMessage(), this.touched() || this.left() && this.raw.parseErrors().length > 0, this.allErrors(), this.labels.validation), ...ngDevMode ? [{ debugName: "errorText" }] : /* istanbul ignore next */ []);
80
+ showError = computed(() => ɵfieldShowsError(this.errorText(), this.invalid(), this.touched()), ...ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []);
81
+ describedBy = computed(() => ɵfieldDescribedBy(this.id(), this.errorText(), this.helpText()), ...ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []);
82
+ errorMessageId = computed(() => ɵfieldErrorMessageId(this.id(), this.errorText(), this.showError()), ...ngDevMode ? [{ debugName: "errorMessageId" }] : /* istanbul ignore next */ []);
83
+ ariaLabelAttr = computed(() => this.label() ? null : this.ariaLabel() || null, ...ngDevMode ? [{ debugName: "ariaLabelAttr" }] : /* istanbul ignore next */ []);
84
+ ariaLabelledbyAttr = computed(() => this.label() ? null : this.ariaLabelledby() || null, ...ngDevMode ? [{ debugName: "ariaLabelledbyAttr" }] : /* istanbul ignore next */ []);
85
+ inputModeAttr = computed(() => {
86
+ const explicit = this.inputMode();
87
+ if (explicit) return explicit;
88
+ const lowest = this.min();
89
+ if (lowest === void 0 || lowest < 0) return null;
90
+ const step = this.step();
91
+ return step === void 0 || typeof step === "number" && Number.isInteger(step) ? "numeric" : "decimal";
92
+ }, ...ngDevMode ? [{ debugName: "inputModeAttr" }] : /* istanbul ignore next */ []);
93
+ classes = computed(() => {
94
+ const size = this.resolvedSize();
95
+ return [
96
+ BASE,
97
+ ɵFIELD_BOX[size],
98
+ ɵFIELD_PADDING_START[size][this.iconStart() ? "icon" : "text"],
99
+ ɵFIELD_PADDING_END[size][this.iconEnd() ? "icon" : "text"],
100
+ this.showError() ? "border-danger-border" : "border-border-strong"
101
+ ].join(" ");
102
+ }, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
103
+ clearBadText = effect(() => {
104
+ if (!this.badInput() || this.raw.parseErrors().length > 0) return;
105
+ untracked(() => {
106
+ this.el().nativeElement.value = this.raw();
107
+ this.badInput.set(false);
108
+ this.left.set(false);
109
+ });
110
+ }, ...ngDevMode ? [{ debugName: "clearBadText" }] : /* istanbul ignore next */ []);
111
+ focus(options) {
112
+ this.el().nativeElement.focus(options);
113
+ }
114
+ onInput(el) {
115
+ const bad = el.validity.badInput;
116
+ this.badInput.set(bad);
117
+ const before = this.value();
118
+ this.raw.set(bad ? this.raw() : el.value);
119
+ const after = this.value();
120
+ if (!Object.is(before, after)) this.changed.emit(after);
121
+ }
122
+ onBlur(event) {
123
+ this.left.set(true);
124
+ this.blurred.emit(event);
125
+ this.touch.emit();
126
+ }
127
+ static ɵfac = i0.ɵɵngDeclareFactory({
128
+ minVersion: "12.0.0",
129
+ version: "22.1.7",
130
+ ngImport: i0,
131
+ type: BfNumberInputComponent,
132
+ deps: [],
133
+ target: i0.ɵɵFactoryTarget.Component
134
+ });
135
+ static ɵcmp = i0.ɵɵngDeclareComponent({
136
+ minVersion: "17.0.0",
137
+ version: "22.1.7",
138
+ type: BfNumberInputComponent,
139
+ isStandalone: true,
140
+ selector: "bf-number-input",
141
+ inputs: {
142
+ value: {
143
+ classPropertyName: "value",
144
+ publicName: "value",
145
+ isSignal: true,
146
+ isRequired: false,
147
+ transformFunction: null
148
+ },
149
+ min: {
150
+ classPropertyName: "min",
151
+ publicName: "min",
152
+ isSignal: true,
153
+ isRequired: false,
154
+ transformFunction: null
155
+ },
156
+ max: {
157
+ classPropertyName: "max",
158
+ publicName: "max",
159
+ isSignal: true,
160
+ isRequired: false,
161
+ transformFunction: null
162
+ },
163
+ step: {
164
+ classPropertyName: "step",
165
+ publicName: "step",
166
+ isSignal: true,
167
+ isRequired: false,
168
+ transformFunction: null
169
+ },
170
+ size: {
171
+ classPropertyName: "size",
172
+ publicName: "size",
173
+ isSignal: true,
174
+ isRequired: false,
175
+ transformFunction: null
176
+ },
177
+ label: {
178
+ classPropertyName: "label",
179
+ publicName: "label",
180
+ isSignal: true,
181
+ isRequired: false,
182
+ transformFunction: null
183
+ },
184
+ ariaLabel: {
185
+ classPropertyName: "ariaLabel",
186
+ publicName: "ariaLabel",
187
+ isSignal: true,
188
+ isRequired: false,
189
+ transformFunction: null
190
+ },
191
+ ariaLabelledby: {
192
+ classPropertyName: "ariaLabelledby",
193
+ publicName: "ariaLabelledby",
194
+ isSignal: true,
195
+ isRequired: false,
196
+ transformFunction: null
197
+ },
198
+ placeholder: {
199
+ classPropertyName: "placeholder",
200
+ publicName: "placeholder",
201
+ isSignal: true,
202
+ isRequired: false,
203
+ transformFunction: null
204
+ },
205
+ helpText: {
206
+ classPropertyName: "helpText",
207
+ publicName: "helpText",
208
+ isSignal: true,
209
+ isRequired: false,
210
+ transformFunction: null
211
+ },
212
+ errorMessage: {
213
+ classPropertyName: "errorMessage",
214
+ publicName: "errorMessage",
215
+ isSignal: true,
216
+ isRequired: false,
217
+ transformFunction: null
218
+ },
219
+ disabled: {
220
+ classPropertyName: "disabled",
221
+ publicName: "disabled",
222
+ isSignal: true,
223
+ isRequired: false,
224
+ transformFunction: null
225
+ },
226
+ readonly: {
227
+ classPropertyName: "readonly",
228
+ publicName: "readonly",
229
+ isSignal: true,
230
+ isRequired: false,
231
+ transformFunction: null
232
+ },
233
+ required: {
234
+ classPropertyName: "required",
235
+ publicName: "required",
236
+ isSignal: true,
237
+ isRequired: false,
238
+ transformFunction: null
239
+ },
240
+ invalid: {
241
+ classPropertyName: "invalid",
242
+ publicName: "invalid",
243
+ isSignal: true,
244
+ isRequired: false,
245
+ transformFunction: null
246
+ },
247
+ touched: {
248
+ classPropertyName: "touched",
249
+ publicName: "touched",
250
+ isSignal: true,
251
+ isRequired: false,
252
+ transformFunction: null
253
+ },
254
+ errors: {
255
+ classPropertyName: "errors",
256
+ publicName: "errors",
257
+ isSignal: true,
258
+ isRequired: false,
259
+ transformFunction: null
260
+ },
261
+ name: {
262
+ classPropertyName: "name",
263
+ publicName: "name",
264
+ isSignal: true,
265
+ isRequired: false,
266
+ transformFunction: null
267
+ },
268
+ id: {
269
+ classPropertyName: "id",
270
+ publicName: "id",
271
+ isSignal: true,
272
+ isRequired: false,
273
+ transformFunction: null
274
+ },
275
+ iconStart: {
276
+ classPropertyName: "iconStart",
277
+ publicName: "iconStart",
278
+ isSignal: true,
279
+ isRequired: false,
280
+ transformFunction: null
281
+ },
282
+ iconEnd: {
283
+ classPropertyName: "iconEnd",
284
+ publicName: "iconEnd",
285
+ isSignal: true,
286
+ isRequired: false,
287
+ transformFunction: null
288
+ },
289
+ autocomplete: {
290
+ classPropertyName: "autocomplete",
291
+ publicName: "autocomplete",
292
+ isSignal: true,
293
+ isRequired: false,
294
+ transformFunction: null
295
+ },
296
+ inputMode: {
297
+ classPropertyName: "inputMode",
298
+ publicName: "inputMode",
299
+ isSignal: true,
300
+ isRequired: false,
301
+ transformFunction: null
302
+ },
303
+ enterKeyHint: {
304
+ classPropertyName: "enterKeyHint",
305
+ publicName: "enterKeyHint",
306
+ isSignal: true,
307
+ isRequired: false,
308
+ transformFunction: null
309
+ }
310
+ },
311
+ outputs: {
312
+ value: "valueChange",
313
+ changed: "changed",
314
+ focused: "focused",
315
+ blurred: "blurred",
316
+ touch: "touch"
317
+ },
318
+ host: {
319
+ properties: { "attr.id": "null" },
320
+ classAttribute: "block"
321
+ },
322
+ viewQueries: [{
323
+ propertyName: "el",
324
+ first: true,
325
+ predicate: ["el"],
326
+ descendants: true,
327
+ isSignal: true
328
+ }],
329
+ ngImport: i0,
330
+ template: `
331
+ <bf-field
332
+ [label]="label()"
333
+ [helpText]="helpText()"
334
+ [error]="errorText()"
335
+ [required]="required()"
336
+ [disabled]="disabled()"
337
+ [controlId]="id()"
338
+ >
339
+ <div class="relative">
340
+ @if (iconStart()) {
341
+ <span [class]="iconStartClasses()">
342
+ <ng-content select="[bfSlot=icon-start]" />
343
+ </span>
344
+ }
345
+ <input
346
+ #el
347
+ type="number"
348
+ [id]="id()"
349
+ [name]="name()"
350
+ [value]="raw()"
351
+ [placeholder]="placeholder()"
352
+ [disabled]="disabled()"
353
+ [readOnly]="readonly()"
354
+ [required]="required()"
355
+ [attr.autocomplete]="autocomplete() || null"
356
+ [attr.min]="min() ?? null"
357
+ [attr.max]="max() ?? null"
358
+ [attr.step]="step() ?? null"
359
+ [attr.inputmode]="inputModeAttr()"
360
+ [attr.enterkeyhint]="enterKeyHint() || null"
361
+ [attr.aria-label]="ariaLabelAttr()"
362
+ [attr.aria-labelledby]="ariaLabelledbyAttr()"
363
+ [attr.aria-invalid]="showError() ? 'true' : null"
364
+ [attr.aria-describedby]="describedBy()"
365
+ [attr.aria-errormessage]="errorMessageId()"
366
+ [class]="classes()"
367
+ (input)="onInput(el)"
368
+ (focus)="focused.emit($event)"
369
+ (blur)="onBlur($event)"
370
+ />
371
+ @if (iconEnd()) {
372
+ <span [class]="iconEndClasses()">
373
+ <ng-content select="[bfSlot=icon-end]" />
374
+ </span>
375
+ }
376
+ </div>
377
+ </bf-field>
378
+ `,
379
+ isInline: true,
380
+ dependencies: [{
381
+ kind: "component",
382
+ type: BfFieldComponent,
383
+ selector: "bf-field",
384
+ inputs: [
385
+ "label",
386
+ "helpText",
387
+ "error",
388
+ "required",
389
+ "disabled",
390
+ "controlId"
391
+ ]
392
+ }]
393
+ });
394
+ };
395
+ i0.ɵɵngDeclareClassMetadata({
396
+ minVersion: "12.0.0",
397
+ version: "22.1.7",
398
+ ngImport: i0,
399
+ type: BfNumberInputComponent,
400
+ decorators: [{
401
+ type: Component,
402
+ args: [{
403
+ selector: "bf-number-input",
404
+ imports: [BfFieldComponent],
405
+ host: {
406
+ class: "block",
407
+ "[attr.id]": "null"
408
+ },
409
+ template: `
410
+ <bf-field
411
+ [label]="label()"
412
+ [helpText]="helpText()"
413
+ [error]="errorText()"
414
+ [required]="required()"
415
+ [disabled]="disabled()"
416
+ [controlId]="id()"
417
+ >
418
+ <div class="relative">
419
+ @if (iconStart()) {
420
+ <span [class]="iconStartClasses()">
421
+ <ng-content select="[bfSlot=icon-start]" />
422
+ </span>
423
+ }
424
+ <input
425
+ #el
426
+ type="number"
427
+ [id]="id()"
428
+ [name]="name()"
429
+ [value]="raw()"
430
+ [placeholder]="placeholder()"
431
+ [disabled]="disabled()"
432
+ [readOnly]="readonly()"
433
+ [required]="required()"
434
+ [attr.autocomplete]="autocomplete() || null"
435
+ [attr.min]="min() ?? null"
436
+ [attr.max]="max() ?? null"
437
+ [attr.step]="step() ?? null"
438
+ [attr.inputmode]="inputModeAttr()"
439
+ [attr.enterkeyhint]="enterKeyHint() || null"
440
+ [attr.aria-label]="ariaLabelAttr()"
441
+ [attr.aria-labelledby]="ariaLabelledbyAttr()"
442
+ [attr.aria-invalid]="showError() ? 'true' : null"
443
+ [attr.aria-describedby]="describedBy()"
444
+ [attr.aria-errormessage]="errorMessageId()"
445
+ [class]="classes()"
446
+ (input)="onInput(el)"
447
+ (focus)="focused.emit($event)"
448
+ (blur)="onBlur($event)"
449
+ />
450
+ @if (iconEnd()) {
451
+ <span [class]="iconEndClasses()">
452
+ <ng-content select="[bfSlot=icon-end]" />
453
+ </span>
454
+ }
455
+ </div>
456
+ </bf-field>
457
+ `
458
+ }]
459
+ }],
460
+ propDecorators: {
461
+ value: [{
462
+ type: i0.Input,
463
+ args: [{
464
+ isSignal: true,
465
+ alias: "value",
466
+ required: false
467
+ }]
468
+ }, {
469
+ type: i0.Output,
470
+ args: ["valueChange"]
471
+ }],
472
+ min: [{
473
+ type: i0.Input,
474
+ args: [{
475
+ isSignal: true,
476
+ alias: "min",
477
+ required: false
478
+ }]
479
+ }],
480
+ max: [{
481
+ type: i0.Input,
482
+ args: [{
483
+ isSignal: true,
484
+ alias: "max",
485
+ required: false
486
+ }]
487
+ }],
488
+ step: [{
489
+ type: i0.Input,
490
+ args: [{
491
+ isSignal: true,
492
+ alias: "step",
493
+ required: false
494
+ }]
495
+ }],
496
+ size: [{
497
+ type: i0.Input,
498
+ args: [{
499
+ isSignal: true,
500
+ alias: "size",
501
+ required: false
502
+ }]
503
+ }],
504
+ label: [{
505
+ type: i0.Input,
506
+ args: [{
507
+ isSignal: true,
508
+ alias: "label",
509
+ required: false
510
+ }]
511
+ }],
512
+ ariaLabel: [{
513
+ type: i0.Input,
514
+ args: [{
515
+ isSignal: true,
516
+ alias: "ariaLabel",
517
+ required: false
518
+ }]
519
+ }],
520
+ ariaLabelledby: [{
521
+ type: i0.Input,
522
+ args: [{
523
+ isSignal: true,
524
+ alias: "ariaLabelledby",
525
+ required: false
526
+ }]
527
+ }],
528
+ placeholder: [{
529
+ type: i0.Input,
530
+ args: [{
531
+ isSignal: true,
532
+ alias: "placeholder",
533
+ required: false
534
+ }]
535
+ }],
536
+ helpText: [{
537
+ type: i0.Input,
538
+ args: [{
539
+ isSignal: true,
540
+ alias: "helpText",
541
+ required: false
542
+ }]
543
+ }],
544
+ errorMessage: [{
545
+ type: i0.Input,
546
+ args: [{
547
+ isSignal: true,
548
+ alias: "errorMessage",
549
+ required: false
550
+ }]
551
+ }],
552
+ disabled: [{
553
+ type: i0.Input,
554
+ args: [{
555
+ isSignal: true,
556
+ alias: "disabled",
557
+ required: false
558
+ }]
559
+ }],
560
+ readonly: [{
561
+ type: i0.Input,
562
+ args: [{
563
+ isSignal: true,
564
+ alias: "readonly",
565
+ required: false
566
+ }]
567
+ }],
568
+ required: [{
569
+ type: i0.Input,
570
+ args: [{
571
+ isSignal: true,
572
+ alias: "required",
573
+ required: false
574
+ }]
575
+ }],
576
+ invalid: [{
577
+ type: i0.Input,
578
+ args: [{
579
+ isSignal: true,
580
+ alias: "invalid",
581
+ required: false
582
+ }]
583
+ }],
584
+ touched: [{
585
+ type: i0.Input,
586
+ args: [{
587
+ isSignal: true,
588
+ alias: "touched",
589
+ required: false
590
+ }]
591
+ }],
592
+ errors: [{
593
+ type: i0.Input,
594
+ args: [{
595
+ isSignal: true,
596
+ alias: "errors",
597
+ required: false
598
+ }]
599
+ }],
600
+ name: [{
601
+ type: i0.Input,
602
+ args: [{
603
+ isSignal: true,
604
+ alias: "name",
605
+ required: false
606
+ }]
607
+ }],
608
+ id: [{
609
+ type: i0.Input,
610
+ args: [{
611
+ isSignal: true,
612
+ alias: "id",
613
+ required: false
614
+ }]
615
+ }],
616
+ iconStart: [{
617
+ type: i0.Input,
618
+ args: [{
619
+ isSignal: true,
620
+ alias: "iconStart",
621
+ required: false
622
+ }]
623
+ }],
624
+ iconEnd: [{
625
+ type: i0.Input,
626
+ args: [{
627
+ isSignal: true,
628
+ alias: "iconEnd",
629
+ required: false
630
+ }]
631
+ }],
632
+ autocomplete: [{
633
+ type: i0.Input,
634
+ args: [{
635
+ isSignal: true,
636
+ alias: "autocomplete",
637
+ required: false
638
+ }]
639
+ }],
640
+ inputMode: [{
641
+ type: i0.Input,
642
+ args: [{
643
+ isSignal: true,
644
+ alias: "inputMode",
645
+ required: false
646
+ }]
647
+ }],
648
+ enterKeyHint: [{
649
+ type: i0.Input,
650
+ args: [{
651
+ isSignal: true,
652
+ alias: "enterKeyHint",
653
+ required: false
654
+ }]
655
+ }],
656
+ changed: [{
657
+ type: i0.Output,
658
+ args: ["changed"]
659
+ }],
660
+ focused: [{
661
+ type: i0.Output,
662
+ args: ["focused"]
663
+ }],
664
+ blurred: [{
665
+ type: i0.Output,
666
+ args: ["blurred"]
667
+ }],
668
+ touch: [{
669
+ type: i0.Output,
670
+ args: ["touch"]
671
+ }],
672
+ el: [{
673
+ type: i0.ViewChild,
674
+ args: ["el", { isSignal: true }]
675
+ }]
676
+ }
677
+ });
678
+ export { BfNumberInputComponent };
679
+
680
+ //# sourceMappingURL=bitforgehq-ui-number-input.mjs.map