@slotted/angular 0.1.0-beta.0 → 0.1.0-beta.2
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/README.md +4 -0
- package/docs/AGENTS.snippet.md +10 -0
- package/docs/checkbox.json +7 -0
- package/docs/checkbox.md +1 -0
- package/docs/event-calendar.json +7 -0
- package/docs/event-calendar.md +1 -0
- package/docs/guidelines/README.md +27 -0
- package/docs/guidelines/async-feedback.md +108 -0
- package/docs/guidelines/browsing.md +74 -0
- package/docs/guidelines/builders.md +97 -0
- package/docs/guidelines/composition.md +129 -0
- package/docs/guidelines/conversations.md +59 -0
- package/docs/guidelines/errors-and-conflicts.md +71 -0
- package/docs/guidelines/forms.md +192 -0
- package/docs/guidelines/index.md +121 -0
- package/docs/guidelines/layout-alignment.md +95 -0
- package/docs/guidelines/ledgers.md +45 -0
- package/docs/guidelines/list-pages.md +165 -0
- package/docs/guidelines/overviews.md +66 -0
- package/docs/guidelines/own-elements.md +115 -0
- package/docs/guidelines/reading-permissions.md +55 -0
- package/docs/guidelines/record-pages.md +178 -0
- package/docs/guidelines/reports.md +123 -0
- package/docs/guidelines/shell-composition.md +94 -0
- package/docs/guidelines/workspaces.md +46 -0
- package/docs/index.md +12 -0
- package/docs/progress-indicator.json +1 -2
- package/docs/progress-indicator.md +2 -2
- package/docs/skills/build-own-element/SKILL.md +90 -0
- package/docs/skills/compose-screen/SKILL.md +76 -0
- package/docs/skills/index.md +9 -0
- package/docs/skills/review-screen/SKILL.md +70 -0
- package/docs/skills/theme-app/SKILL.md +74 -0
- package/docs/skills/waiting-states/SKILL.md +139 -0
- package/docs/stat-card.json +1 -0
- package/docs/stat-card.md +1 -1
- package/docs/tabs.json +1 -4
- package/docs/tabs.md +1 -1
- package/docs/tokens.md +424 -0
- package/fesm2022/slotted-angular-app-shell.mjs +2 -2
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
- package/fesm2022/slotted-angular-checkbox.mjs +11 -2
- package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
- package/fesm2022/slotted-angular-column-manager.mjs +1 -1
- package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
- package/fesm2022/slotted-angular-combobox.mjs +12 -6
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
- package/fesm2022/slotted-angular-dashboard-grid.mjs +18 -22
- package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-grid.mjs +6 -2
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-list.mjs +1 -1
- package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
- package/fesm2022/slotted-angular-drawer.mjs +5 -1
- package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
- package/fesm2022/slotted-angular-event-calendar.mjs +17 -7
- package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-loading-overlay.mjs +2 -2
- package/fesm2022/slotted-angular-markdown.mjs +1 -1
- package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
- package/fesm2022/slotted-angular-multi-select.mjs +32 -27
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-number-field.mjs +2 -2
- package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-progress-indicator.mjs +6 -6
- package/fesm2022/slotted-angular-select.mjs +1 -25
- package/fesm2022/slotted-angular-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-stat-card.mjs +2 -2
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-table.mjs +3 -3
- package/fesm2022/slotted-angular-table.mjs.map +1 -1
- package/fesm2022/slotted-angular-tabs.mjs +2 -2
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
- package/fesm2022/slotted-angular-transfer.mjs +1 -1
- package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
- package/fesm2022/slotted-angular-upload.mjs +2 -2
- package/package.json +3 -3
- package/types/slotted-angular-checkbox.d.ts +7 -1
- package/types/slotted-angular-checkbox.d.ts.map +1 -1
- package/types/slotted-angular-combobox.d.ts.map +1 -1
- package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
- package/types/slotted-angular-data-grid.d.ts.map +1 -1
- package/types/slotted-angular-drawer.d.ts.map +1 -1
- package/types/slotted-angular-event-calendar.d.ts +9 -2
- package/types/slotted-angular-event-calendar.d.ts.map +1 -1
- package/types/slotted-angular-multi-select.d.ts +10 -0
- package/types/slotted-angular-multi-select.d.ts.map +1 -1
- package/types/slotted-angular-select.d.ts.map +1 -1
|
@@ -227,7 +227,7 @@ class SlNumberField {
|
|
|
227
227
|
[attr.form]="control()?.submissionForm()"
|
|
228
228
|
[value]="hiddenValue()"
|
|
229
229
|
/>
|
|
230
|
-
}`, isInline: true, styles: ["@layer slotted.components{[data-ui=number-field][data-part=root]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-floor: var(--slotted-number-field-icon-size-min, 14px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px);--_stepper-size: var( --slotted-number-field-stepper-size, max( var(--slotted-target-min, 24px), min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) ) );--_action-size: var( --slotted-number-field-action-size, min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) );--_inset: max( 0px, calc( (var(--_height) - 2 * var(--slotted-control-border-width, 1px) - var(--_action-size)) / 2 ) );--_action-radius: max( var(--slotted-radius-xs, 2px), calc(var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_inset)) );--_column-inset: var(--slotted-space-1, 2px);--_column-radius: max( var(--slotted-radius-xs, 2px), calc( var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_column-inset) ) );align-items:center;background-color:var(--slotted-number-field-background, var(--slotted-control-surface, Field));border:var(--slotted-control-border-width, 1px) solid var(--slotted-number-field-border-color, var(--slotted-control-border-color, ButtonBorder));border-radius:var(--slotted-number-field-radius, var(--slotted-control-radius, 4px));box-shadow:var(--slotted-number-field-shadow, var(--slotted-control-shadow, none));box-sizing:border-box;color:var(--slotted-number-field-color, var(--slotted-text, CanvasText));display:flex;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);gap:var(--_gap);inline-size:100%;min-inline-size:0;min-block-size:var(--_height);padding-inline:var(--_padding-inline);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=number-field]>[data-part=input]{background-color:transparent;align-self:stretch;margin-block:calc(var(--slotted-control-border-width, 1px) * -1);border:0;color:inherit;flex:1 1 auto;font:inherit;font-variant-numeric:tabular-nums;outline:none;padding:0;min-inline-size:0;text-overflow:ellipsis;unicode-bidi:plaintext}[data-ui=number-field]:dir(rtl)>[data-part=input]{text-align:right}[data-ui=number-field]>[data-part=input]::placeholder{color:var(--slotted-number-field-placeholder-color, var(--slotted-text-muted, GrayText));text-overflow:ellipsis}[data-ui=number-field][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px);--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_gap: var(--slotted-control-gap-sm, 6px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));--_inner-size: var(--slotted-control-inner-size-sm, 22px)}[data-ui=number-field][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px)}[data-ui=number-field][data-part=root][data-size=lg]{--_font-size: var(--slotted-control-font-size-lg, 14px);--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_gap: var(--slotted-control-gap-lg, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-lg, 18px));--_inner-size: var(--slotted-control-inner-size-lg, 28px)}[data-ui=number-field][data-part=root][data-variant=subtle]{background-color:var( --slotted-number-field-subtle-background, var(--slotted-surface-sunken, Canvas) );border-color:var( --slotted-number-field-subtle-border-color, var(--slotted-border-subtle, ButtonBorder) )}[data-ui=number-field][data-part=root][data-variant=plain]{background-color:transparent;border-color:transparent;border-radius:var(--slotted-radius-none, 0px);box-shadow:none}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-variant=plain]{border-color:ButtonBorder}}[data-ui=number-field]>[data-part=start],[data-ui=number-field]>[data-part=end]{align-items:center;color:var(--slotted-number-field-adornment-color, var(--slotted-text-muted, GrayText));display:inline-flex;flex:0 0 auto;gap:var(--slotted-space-2, .25rem);line-height:1;unicode-bidi:plaintext;--slotted-icon-size: var(--_icon-size)}[data-ui=number-field]>[data-part=start]>svg,[data-ui=number-field]>[data-part=end]>svg{block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=number-field]>[data-part=start]:not(:has(svg,img,[data-ui=icon])),[data-ui=number-field]>[data-part=end]:not(:has(svg,img,[data-ui=icon])){padding-inline:calc(var(--_icon-size) / 8)}[data-ui=number-field]>:is([data-part=start],[data-part=end]):has(>[data-part=scrub]){align-self:stretch}[data-ui=number-field] [data-part=scrub]{align-items:center;align-self:stretch;cursor:ew-resize;display:inline-flex;gap:var(--slotted-space-2, .25rem);touch-action:none;transition:color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);user-select:none;-webkit-user-select:none}[data-ui=number-field]:not([data-disabled]):not([data-readonly]) [data-part=scrub]:is(:hover,[data-scrubbing]){color:var(--slotted-number-field-scrub-active-color, var(--slotted-text, CanvasText))}[data-ui=number-field]:is([data-disabled],[data-readonly]) [data-part=scrub]{cursor:default;touch-action:auto}[data-ui=number-field]>[data-part=stepper]>button,[data-ui=number-field]>[data-part=decrement],[data-ui=number-field]>[data-part=increment]{align-items:center;appearance:none;background-color:transparent;border:0;color:var(--slotted-number-field-stepper-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=number-field] [data-part=decrement],[data-ui=number-field] [data-part=increment]{--slotted-icon-size: var(--_icon-size)}[data-ui=number-field][data-stepper=stacked] [data-part=increment]>[data-ui=icon]{rotate:.5turn}[data-ui=number-field][data-part=root][data-stepper=stacked]{padding-inline-end:0}[data-ui=number-field]>[data-part=stepper]{align-self:stretch;box-sizing:content-box;display:flex;flex:0 0 auto;flex-direction:column;inline-size:var(--_stepper-size);padding-block:var(--_column-inset);padding-inline-end:var(--_column-inset)}[data-ui=number-field]>[data-part=stepper]>button{block-size:50%;border-radius:var(--_column-radius);inline-size:100%}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{content:\"\";inset-inline:0 calc(var(--_column-inset) * -1);position:absolute}[data-ui=number-field]>[data-part=stepper]>[data-part=increment]:after{inset-block:calc(var(--_column-inset) * -1) 0}[data-ui=number-field]>[data-part=stepper]>[data-part=decrement]:after{inset-block:0 calc(var(--_column-inset) * -1)}[data-ui=number-field]>[data-part=stepper]>button>[data-ui=icon]{block-size:min(var(--_icon-size),100%);contain:size}[data-ui=number-field][data-part=root][data-stepper=split]{gap:0;padding-inline:var(--_inset)}[data-ui=number-field][data-stepper=split]>[data-part=decrement],[data-ui=number-field][data-stepper=split]>[data-part=increment]{block-size:var(--_action-size);border-radius:var(--_action-radius);inline-size:var(--_action-size)}[data-ui=number-field][data-stepper=split]>[data-part=input]{padding-inline:var(--_gap);text-align:center}[data-ui=number-field][data-stepper=split]>[data-part=start]{padding-inline-start:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=end]{padding-inline-end:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=decrement]:after,[data-ui=number-field][data-stepper=split]>[data-part=increment]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=number-field][data-stepper=split]>:is([data-part=decrement],[data-part=increment]):after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{inset-inline:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}}[data-ui=number-field] [data-part=decrement]:hover:not(:disabled),[data-ui=number-field] [data-part=increment]:hover:not(:disabled){background-color:var( --slotted-number-field-stepper-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field] [data-part=decrement]:active:not(:disabled),[data-ui=number-field] [data-part=increment]:active:not(:disabled){background-color:var( --slotted-number-field-stepper-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=number-field] [data-part=decrement]:disabled,[data-ui=number-field] [data-part=increment]:disabled{background-color:var( --slotted-number-field-stepper-disabled-background, var(--slotted-disabled-background) );color:var(--slotted-number-field-stepper-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field] [data-part=decrement]:focus-visible,[data-ui=number-field] [data-part=increment]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){border-color:var(--slotted-number-field-hover-border-color, var(--slotted-tone-accent-border))}[data-ui=number-field][data-part=root][data-variant=subtle]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-subtle-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field][data-part=root][data-variant=plain]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-plain-hover-background, var(--slotted-tone-secondary-subtle-hover) );border-color:transparent}[data-ui=number-field][data-part=root]:has(>[data-part=input]:focus-visible){box-shadow:var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain]:has(>[data-part=input]:focus-visible){box-shadow:none;outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-number-field-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) );--_invalid-edge-width: var( --slotted-number-field-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) );--_invalid-edge-color: var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );--_invalid-edge: inset 0 0 0 var(--_invalid-edge-width) var(--_invalid-edge-color);border-color:var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );box-shadow:var(--_invalid-edge)}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:var(--_invalid-edge),var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:inset 0 0 0 calc(var(--slotted-focus-ring-offset, 2px) - var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)) var(--_invalid-edge-color)}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-invalid]{outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)))}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:calc(-1 * (var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)))}}[data-ui=number-field][data-part=root][data-readonly]{background-color:var( --slotted-number-field-readonly-background, var(--slotted-tone-secondary-subtle-hover) );border-color:var( --slotted-number-field-readonly-border-color, var(--slotted-border-subtle, ButtonBorder) );cursor:default}[data-ui=number-field][data-part=root][data-disabled],[data-ui=number-field][data-part=root]:has(>[data-part=input]:disabled){background-color:var( --slotted-number-field-disabled-background, var(--slotted-disabled-background) );border-color:var(--slotted-number-field-disabled-border-color, var(--slotted-disabled-border));box-shadow:none;color:var(--slotted-number-field-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field][data-part=root][data-disabled]>[data-part=start],[data-ui=number-field][data-part=root][data-disabled]>[data-part=end]{color:var(--slotted-disabled-foreground)}}\n"], dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
230
|
+
}`, isInline: true, styles: ["@layer slotted.components{[data-ui=number-field][data-part=root]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-floor: var(--slotted-number-field-icon-size-min, 14px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px);--_stepper-size: var( --slotted-number-field-stepper-size, max( var(--slotted-target-min, 24px), min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) ) );--_action-size: var( --slotted-number-field-action-size, min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) );--_inset: max( 0px, calc( (var(--_height) - 2 * var(--slotted-control-border-width, 1px) - var(--_action-size)) / 2 ) );--_action-radius: max( var(--slotted-radius-xs, 2px), calc(var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_inset)) );--_column-inset: var(--slotted-space-1, 2px);--_column-radius: max( var(--slotted-radius-xs, 2px), calc( var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_column-inset) ) );align-items:center;background-color:var(--slotted-number-field-background, var(--slotted-control-surface, Field));border:var(--slotted-control-border-width, 1px) solid var(--slotted-number-field-border-color, var(--slotted-control-border-color, ButtonBorder));border-radius:var(--slotted-number-field-radius, var(--slotted-control-radius, 4px));box-shadow:var(--slotted-number-field-shadow, var(--slotted-control-shadow, none));box-sizing:border-box;color:var(--slotted-number-field-color, var(--slotted-text, CanvasText));display:flex;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);gap:var(--_gap);inline-size:100%;min-inline-size:0;min-block-size:var(--_height);padding-inline:var(--_padding-inline);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=number-field]>[data-part=input]{background-color:transparent;align-self:stretch;margin-block:calc(var(--slotted-control-border-width, 1px) * -1);border:0;color:inherit;flex:1 1 auto;font:inherit;font-variant-numeric:tabular-nums;outline:none;padding:0;min-inline-size:0;text-overflow:ellipsis;unicode-bidi:plaintext}[data-ui=number-field]:dir(rtl)>[data-part=input]{text-align:right}[data-ui=number-field]>[data-part=input]::placeholder{color:var(--slotted-number-field-placeholder-color, var(--slotted-text-muted, GrayText));text-overflow:ellipsis}[data-ui=number-field][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px);--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_gap: var(--slotted-control-gap-sm, 6px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));--_inner-size: var(--slotted-control-inner-size-sm, 22px)}[data-ui=number-field][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px)}[data-ui=number-field][data-part=root][data-size=lg]{--_font-size: var(--slotted-control-font-size-lg, 14px);--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_gap: var(--slotted-control-gap-lg, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-lg, 18px));--_inner-size: var(--slotted-control-inner-size-lg, 28px)}[data-ui=number-field][data-part=root][data-variant=subtle]{background-color:var( --slotted-number-field-subtle-background, var(--slotted-surface-sunken, Canvas) );border-color:var( --slotted-number-field-subtle-border-color, var(--slotted-border-subtle, ButtonBorder) )}[data-ui=number-field][data-part=root][data-variant=plain]{background-color:transparent;border-color:transparent;border-radius:var(--slotted-radius-none, 0px);box-shadow:none}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-variant=plain]{border-color:ButtonBorder}}[data-ui=number-field]>[data-part=start],[data-ui=number-field]>[data-part=end]{align-items:center;color:var(--slotted-number-field-adornment-color, var(--slotted-text-muted, GrayText));display:inline-flex;flex:0 0 auto;gap:var(--slotted-space-2, .25rem);line-height:1;unicode-bidi:plaintext;--slotted-icon-size: var(--_icon-size)}[data-ui=number-field]>[data-part=start]>svg,[data-ui=number-field]>[data-part=end]>svg{block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=number-field]>[data-part=start]:not(:has(svg,img,[data-ui=icon])),[data-ui=number-field]>[data-part=end]:not(:has(svg,img,[data-ui=icon])){padding-inline:calc(var(--_icon-size) / 8)}[data-ui=number-field]>:is([data-part=start],[data-part=end]):has(>[data-part=scrub]){align-self:stretch}[data-ui=number-field] [data-part=scrub]{align-items:center;align-self:stretch;cursor:ew-resize;display:inline-flex;gap:var(--slotted-space-2, .25rem);touch-action:none;transition:color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);unicode-bidi:plaintext;user-select:none;-webkit-user-select:none}[data-ui=number-field]:not([data-disabled]):not([data-readonly]) [data-part=scrub]:is(:hover,[data-scrubbing]){color:var(--slotted-number-field-scrub-active-color, var(--slotted-text, CanvasText))}[data-ui=number-field]:is([data-disabled],[data-readonly]) [data-part=scrub]{cursor:default;touch-action:auto}[data-ui=number-field]>[data-part=stepper]>button,[data-ui=number-field]>[data-part=decrement],[data-ui=number-field]>[data-part=increment]{align-items:center;appearance:none;background-color:transparent;border:0;color:var(--slotted-number-field-stepper-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=number-field] [data-part=decrement],[data-ui=number-field] [data-part=increment]{--slotted-icon-size: var(--_icon-size)}[data-ui=number-field][data-stepper=stacked] [data-part=increment]>[data-ui=icon]{rotate:.5turn}[data-ui=number-field][data-part=root][data-stepper=stacked]{padding-inline-end:0}[data-ui=number-field]>[data-part=stepper]{align-self:stretch;box-sizing:content-box;display:flex;flex:0 0 auto;flex-direction:column;inline-size:var(--_stepper-size);padding-block:var(--_column-inset);padding-inline-end:var(--_column-inset)}[data-ui=number-field]>[data-part=stepper]>button{block-size:50%;border-radius:var(--_column-radius);inline-size:100%}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{content:\"\";inset-inline:0 calc(var(--_column-inset) * -1);position:absolute}[data-ui=number-field]>[data-part=stepper]>[data-part=increment]:after{inset-block:calc(var(--_column-inset) * -1) 0}[data-ui=number-field]>[data-part=stepper]>[data-part=decrement]:after{inset-block:0 calc(var(--_column-inset) * -1)}[data-ui=number-field]>[data-part=stepper]>button>[data-ui=icon]{block-size:min(var(--_icon-size),100%);contain:size}[data-ui=number-field][data-part=root][data-stepper=split]{gap:0;padding-inline:var(--_inset)}[data-ui=number-field][data-stepper=split]>[data-part=decrement],[data-ui=number-field][data-stepper=split]>[data-part=increment]{block-size:var(--_action-size);border-radius:var(--_action-radius);inline-size:var(--_action-size)}[data-ui=number-field][data-stepper=split]>[data-part=input]{padding-inline:var(--_gap);text-align:center}[data-ui=number-field][data-stepper=split]>[data-part=start]{padding-inline-start:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=end]{padding-inline-end:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=decrement]:after,[data-ui=number-field][data-stepper=split]>[data-part=increment]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=number-field][data-stepper=split]>:is([data-part=decrement],[data-part=increment]):after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{inset-inline:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}}[data-ui=number-field] [data-part=decrement]:hover:not(:disabled),[data-ui=number-field] [data-part=increment]:hover:not(:disabled){background-color:var( --slotted-number-field-stepper-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field] [data-part=decrement]:active:not(:disabled),[data-ui=number-field] [data-part=increment]:active:not(:disabled){background-color:var( --slotted-number-field-stepper-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=number-field] [data-part=decrement]:disabled,[data-ui=number-field] [data-part=increment]:disabled{background-color:var( --slotted-number-field-stepper-disabled-background, var(--slotted-disabled-background) );color:var(--slotted-number-field-stepper-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field] [data-part=decrement]:focus-visible,[data-ui=number-field] [data-part=increment]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){border-color:var(--slotted-number-field-hover-border-color, var(--slotted-tone-accent-border))}[data-ui=number-field][data-part=root][data-variant=subtle]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-subtle-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field][data-part=root][data-variant=plain]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-plain-hover-background, var(--slotted-tone-secondary-subtle-hover) );border-color:transparent}[data-ui=number-field][data-part=root]:has(>[data-part=input]:focus-visible){box-shadow:var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain]:has(>[data-part=input]:focus-visible){box-shadow:none;outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-number-field-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) );--_invalid-edge-width: var( --slotted-number-field-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) );--_invalid-edge-color: var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );--_invalid-edge: inset 0 0 0 var(--_invalid-edge-width) var(--_invalid-edge-color);border-color:var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );box-shadow:var(--_invalid-edge)}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:var(--_invalid-edge),var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:inset 0 0 0 calc(var(--slotted-focus-ring-offset, 2px) - var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)) var(--_invalid-edge-color)}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-invalid]{outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)))}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:calc(-1 * (var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)))}}[data-ui=number-field][data-part=root][data-readonly]{background-color:var( --slotted-number-field-readonly-background, var(--slotted-tone-secondary-subtle-hover) );border-color:var( --slotted-number-field-readonly-border-color, var(--slotted-border-subtle, ButtonBorder) );cursor:default}[data-ui=number-field][data-part=root][data-disabled],[data-ui=number-field][data-part=root]:has(>[data-part=input]:disabled){background-color:var( --slotted-number-field-disabled-background, var(--slotted-disabled-background) );border-color:var(--slotted-number-field-disabled-border-color, var(--slotted-disabled-border));box-shadow:none;color:var(--slotted-number-field-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field][data-part=root][data-disabled]>[data-part=start],[data-ui=number-field][data-part=root][data-disabled]>[data-part=end]{color:var(--slotted-disabled-foreground)}}\n"], dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
231
231
|
}
|
|
232
232
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlNumberField, decorators: [{
|
|
233
233
|
type: Component,
|
|
@@ -316,7 +316,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
|
|
|
316
316
|
'[attr.data-invalid]': "control()?.resolvedInvalid() === true ? '' : null",
|
|
317
317
|
'[attr.data-readonly]': "control()?.resolvedReadOnly() === true ? '' : null",
|
|
318
318
|
'[attr.data-scrubbing]': "scrubbing() ? '' : null",
|
|
319
|
-
}, styles: ["@layer slotted.components{[data-ui=number-field][data-part=root]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-floor: var(--slotted-number-field-icon-size-min, 14px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px);--_stepper-size: var( --slotted-number-field-stepper-size, max( var(--slotted-target-min, 24px), min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) ) );--_action-size: var( --slotted-number-field-action-size, min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) );--_inset: max( 0px, calc( (var(--_height) - 2 * var(--slotted-control-border-width, 1px) - var(--_action-size)) / 2 ) );--_action-radius: max( var(--slotted-radius-xs, 2px), calc(var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_inset)) );--_column-inset: var(--slotted-space-1, 2px);--_column-radius: max( var(--slotted-radius-xs, 2px), calc( var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_column-inset) ) );align-items:center;background-color:var(--slotted-number-field-background, var(--slotted-control-surface, Field));border:var(--slotted-control-border-width, 1px) solid var(--slotted-number-field-border-color, var(--slotted-control-border-color, ButtonBorder));border-radius:var(--slotted-number-field-radius, var(--slotted-control-radius, 4px));box-shadow:var(--slotted-number-field-shadow, var(--slotted-control-shadow, none));box-sizing:border-box;color:var(--slotted-number-field-color, var(--slotted-text, CanvasText));display:flex;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);gap:var(--_gap);inline-size:100%;min-inline-size:0;min-block-size:var(--_height);padding-inline:var(--_padding-inline);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=number-field]>[data-part=input]{background-color:transparent;align-self:stretch;margin-block:calc(var(--slotted-control-border-width, 1px) * -1);border:0;color:inherit;flex:1 1 auto;font:inherit;font-variant-numeric:tabular-nums;outline:none;padding:0;min-inline-size:0;text-overflow:ellipsis;unicode-bidi:plaintext}[data-ui=number-field]:dir(rtl)>[data-part=input]{text-align:right}[data-ui=number-field]>[data-part=input]::placeholder{color:var(--slotted-number-field-placeholder-color, var(--slotted-text-muted, GrayText));text-overflow:ellipsis}[data-ui=number-field][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px);--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_gap: var(--slotted-control-gap-sm, 6px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));--_inner-size: var(--slotted-control-inner-size-sm, 22px)}[data-ui=number-field][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px)}[data-ui=number-field][data-part=root][data-size=lg]{--_font-size: var(--slotted-control-font-size-lg, 14px);--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_gap: var(--slotted-control-gap-lg, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-lg, 18px));--_inner-size: var(--slotted-control-inner-size-lg, 28px)}[data-ui=number-field][data-part=root][data-variant=subtle]{background-color:var( --slotted-number-field-subtle-background, var(--slotted-surface-sunken, Canvas) );border-color:var( --slotted-number-field-subtle-border-color, var(--slotted-border-subtle, ButtonBorder) )}[data-ui=number-field][data-part=root][data-variant=plain]{background-color:transparent;border-color:transparent;border-radius:var(--slotted-radius-none, 0px);box-shadow:none}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-variant=plain]{border-color:ButtonBorder}}[data-ui=number-field]>[data-part=start],[data-ui=number-field]>[data-part=end]{align-items:center;color:var(--slotted-number-field-adornment-color, var(--slotted-text-muted, GrayText));display:inline-flex;flex:0 0 auto;gap:var(--slotted-space-2, .25rem);line-height:1;unicode-bidi:plaintext;--slotted-icon-size: var(--_icon-size)}[data-ui=number-field]>[data-part=start]>svg,[data-ui=number-field]>[data-part=end]>svg{block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=number-field]>[data-part=start]:not(:has(svg,img,[data-ui=icon])),[data-ui=number-field]>[data-part=end]:not(:has(svg,img,[data-ui=icon])){padding-inline:calc(var(--_icon-size) / 8)}[data-ui=number-field]>:is([data-part=start],[data-part=end]):has(>[data-part=scrub]){align-self:stretch}[data-ui=number-field] [data-part=scrub]{align-items:center;align-self:stretch;cursor:ew-resize;display:inline-flex;gap:var(--slotted-space-2, .25rem);touch-action:none;transition:color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);user-select:none;-webkit-user-select:none}[data-ui=number-field]:not([data-disabled]):not([data-readonly]) [data-part=scrub]:is(:hover,[data-scrubbing]){color:var(--slotted-number-field-scrub-active-color, var(--slotted-text, CanvasText))}[data-ui=number-field]:is([data-disabled],[data-readonly]) [data-part=scrub]{cursor:default;touch-action:auto}[data-ui=number-field]>[data-part=stepper]>button,[data-ui=number-field]>[data-part=decrement],[data-ui=number-field]>[data-part=increment]{align-items:center;appearance:none;background-color:transparent;border:0;color:var(--slotted-number-field-stepper-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=number-field] [data-part=decrement],[data-ui=number-field] [data-part=increment]{--slotted-icon-size: var(--_icon-size)}[data-ui=number-field][data-stepper=stacked] [data-part=increment]>[data-ui=icon]{rotate:.5turn}[data-ui=number-field][data-part=root][data-stepper=stacked]{padding-inline-end:0}[data-ui=number-field]>[data-part=stepper]{align-self:stretch;box-sizing:content-box;display:flex;flex:0 0 auto;flex-direction:column;inline-size:var(--_stepper-size);padding-block:var(--_column-inset);padding-inline-end:var(--_column-inset)}[data-ui=number-field]>[data-part=stepper]>button{block-size:50%;border-radius:var(--_column-radius);inline-size:100%}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{content:\"\";inset-inline:0 calc(var(--_column-inset) * -1);position:absolute}[data-ui=number-field]>[data-part=stepper]>[data-part=increment]:after{inset-block:calc(var(--_column-inset) * -1) 0}[data-ui=number-field]>[data-part=stepper]>[data-part=decrement]:after{inset-block:0 calc(var(--_column-inset) * -1)}[data-ui=number-field]>[data-part=stepper]>button>[data-ui=icon]{block-size:min(var(--_icon-size),100%);contain:size}[data-ui=number-field][data-part=root][data-stepper=split]{gap:0;padding-inline:var(--_inset)}[data-ui=number-field][data-stepper=split]>[data-part=decrement],[data-ui=number-field][data-stepper=split]>[data-part=increment]{block-size:var(--_action-size);border-radius:var(--_action-radius);inline-size:var(--_action-size)}[data-ui=number-field][data-stepper=split]>[data-part=input]{padding-inline:var(--_gap);text-align:center}[data-ui=number-field][data-stepper=split]>[data-part=start]{padding-inline-start:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=end]{padding-inline-end:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=decrement]:after,[data-ui=number-field][data-stepper=split]>[data-part=increment]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=number-field][data-stepper=split]>:is([data-part=decrement],[data-part=increment]):after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{inset-inline:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}}[data-ui=number-field] [data-part=decrement]:hover:not(:disabled),[data-ui=number-field] [data-part=increment]:hover:not(:disabled){background-color:var( --slotted-number-field-stepper-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field] [data-part=decrement]:active:not(:disabled),[data-ui=number-field] [data-part=increment]:active:not(:disabled){background-color:var( --slotted-number-field-stepper-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=number-field] [data-part=decrement]:disabled,[data-ui=number-field] [data-part=increment]:disabled{background-color:var( --slotted-number-field-stepper-disabled-background, var(--slotted-disabled-background) );color:var(--slotted-number-field-stepper-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field] [data-part=decrement]:focus-visible,[data-ui=number-field] [data-part=increment]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){border-color:var(--slotted-number-field-hover-border-color, var(--slotted-tone-accent-border))}[data-ui=number-field][data-part=root][data-variant=subtle]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-subtle-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field][data-part=root][data-variant=plain]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-plain-hover-background, var(--slotted-tone-secondary-subtle-hover) );border-color:transparent}[data-ui=number-field][data-part=root]:has(>[data-part=input]:focus-visible){box-shadow:var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain]:has(>[data-part=input]:focus-visible){box-shadow:none;outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-number-field-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) );--_invalid-edge-width: var( --slotted-number-field-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) );--_invalid-edge-color: var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );--_invalid-edge: inset 0 0 0 var(--_invalid-edge-width) var(--_invalid-edge-color);border-color:var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );box-shadow:var(--_invalid-edge)}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:var(--_invalid-edge),var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:inset 0 0 0 calc(var(--slotted-focus-ring-offset, 2px) - var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)) var(--_invalid-edge-color)}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-invalid]{outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)))}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:calc(-1 * (var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)))}}[data-ui=number-field][data-part=root][data-readonly]{background-color:var( --slotted-number-field-readonly-background, var(--slotted-tone-secondary-subtle-hover) );border-color:var( --slotted-number-field-readonly-border-color, var(--slotted-border-subtle, ButtonBorder) );cursor:default}[data-ui=number-field][data-part=root][data-disabled],[data-ui=number-field][data-part=root]:has(>[data-part=input]:disabled){background-color:var( --slotted-number-field-disabled-background, var(--slotted-disabled-background) );border-color:var(--slotted-number-field-disabled-border-color, var(--slotted-disabled-border));box-shadow:none;color:var(--slotted-number-field-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field][data-part=root][data-disabled]>[data-part=start],[data-ui=number-field][data-part=root][data-disabled]>[data-part=end]{color:var(--slotted-disabled-foreground)}}\n"] }]
|
|
319
|
+
}, styles: ["@layer slotted.components{[data-ui=number-field][data-part=root]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-floor: var(--slotted-number-field-icon-size-min, 14px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px);--_stepper-size: var( --slotted-number-field-stepper-size, max( var(--slotted-target-min, 24px), min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) ) );--_action-size: var( --slotted-number-field-action-size, min(calc(var(--_icon-size) + 2 * var(--slotted-space-2, .25rem)), var(--_inner-size)) );--_inset: max( 0px, calc( (var(--_height) - 2 * var(--slotted-control-border-width, 1px) - var(--_action-size)) / 2 ) );--_action-radius: max( var(--slotted-radius-xs, 2px), calc(var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_inset)) );--_column-inset: var(--slotted-space-1, 2px);--_column-radius: max( var(--slotted-radius-xs, 2px), calc( var(--slotted-number-field-radius, var(--slotted-control-radius, 4px)) - var(--_column-inset) ) );align-items:center;background-color:var(--slotted-number-field-background, var(--slotted-control-surface, Field));border:var(--slotted-control-border-width, 1px) solid var(--slotted-number-field-border-color, var(--slotted-control-border-color, ButtonBorder));border-radius:var(--slotted-number-field-radius, var(--slotted-control-radius, 4px));box-shadow:var(--slotted-number-field-shadow, var(--slotted-control-shadow, none));box-sizing:border-box;color:var(--slotted-number-field-color, var(--slotted-text, CanvasText));display:flex;font-family:var(--slotted-control-font-family, system-ui, sans-serif);font-size:var(--_font-size);gap:var(--_gap);inline-size:100%;min-inline-size:0;min-block-size:var(--_height);padding-inline:var(--_padding-inline);transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),box-shadow var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}[data-ui=number-field]>[data-part=input]{background-color:transparent;align-self:stretch;margin-block:calc(var(--slotted-control-border-width, 1px) * -1);border:0;color:inherit;flex:1 1 auto;font:inherit;font-variant-numeric:tabular-nums;outline:none;padding:0;min-inline-size:0;text-overflow:ellipsis;unicode-bidi:plaintext}[data-ui=number-field]:dir(rtl)>[data-part=input]{text-align:right}[data-ui=number-field]>[data-part=input]::placeholder{color:var(--slotted-number-field-placeholder-color, var(--slotted-text-muted, GrayText));text-overflow:ellipsis}[data-ui=number-field][data-part=root][data-size=sm]{--_font-size: var(--slotted-control-font-size-sm, 12px);--_height: var(--slotted-control-height-sm, 30px);--_padding-inline: var(--slotted-control-padding-inline-sm, 10px);--_gap: var(--slotted-control-gap-sm, 6px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-sm, 14px));--_inner-size: var(--slotted-control-inner-size-sm, 22px)}[data-ui=number-field][data-part=root][data-size=md]{--_font-size: var(--slotted-control-font-size-md, 13px);--_height: var(--slotted-control-height-md, 34px);--_padding-inline: var(--slotted-control-padding-inline-md, 13px);--_gap: var(--slotted-control-gap-md, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-md, 16px));--_inner-size: var(--slotted-control-inner-size-md, 24px)}[data-ui=number-field][data-part=root][data-size=lg]{--_font-size: var(--slotted-control-font-size-lg, 14px);--_height: var(--slotted-control-height-lg, 38px);--_padding-inline: var(--slotted-control-padding-inline-lg, 16px);--_gap: var(--slotted-control-gap-lg, 8px);--_icon-size: max(var(--_icon-floor), var(--slotted-control-icon-size-lg, 18px));--_inner-size: var(--slotted-control-inner-size-lg, 28px)}[data-ui=number-field][data-part=root][data-variant=subtle]{background-color:var( --slotted-number-field-subtle-background, var(--slotted-surface-sunken, Canvas) );border-color:var( --slotted-number-field-subtle-border-color, var(--slotted-border-subtle, ButtonBorder) )}[data-ui=number-field][data-part=root][data-variant=plain]{background-color:transparent;border-color:transparent;border-radius:var(--slotted-radius-none, 0px);box-shadow:none}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-variant=plain]{border-color:ButtonBorder}}[data-ui=number-field]>[data-part=start],[data-ui=number-field]>[data-part=end]{align-items:center;color:var(--slotted-number-field-adornment-color, var(--slotted-text-muted, GrayText));display:inline-flex;flex:0 0 auto;gap:var(--slotted-space-2, .25rem);line-height:1;unicode-bidi:plaintext;--slotted-icon-size: var(--_icon-size)}[data-ui=number-field]>[data-part=start]>svg,[data-ui=number-field]>[data-part=end]>svg{block-size:var(--_icon-size);inline-size:var(--_icon-size)}[data-ui=number-field]>[data-part=start]:not(:has(svg,img,[data-ui=icon])),[data-ui=number-field]>[data-part=end]:not(:has(svg,img,[data-ui=icon])){padding-inline:calc(var(--_icon-size) / 8)}[data-ui=number-field]>:is([data-part=start],[data-part=end]):has(>[data-part=scrub]){align-self:stretch}[data-ui=number-field] [data-part=scrub]{align-items:center;align-self:stretch;cursor:ew-resize;display:inline-flex;gap:var(--slotted-space-2, .25rem);touch-action:none;transition:color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);unicode-bidi:plaintext;user-select:none;-webkit-user-select:none}[data-ui=number-field]:not([data-disabled]):not([data-readonly]) [data-part=scrub]:is(:hover,[data-scrubbing]){color:var(--slotted-number-field-scrub-active-color, var(--slotted-text, CanvasText))}[data-ui=number-field]:is([data-disabled],[data-readonly]) [data-part=scrub]{cursor:default;touch-action:auto}[data-ui=number-field]>[data-part=stepper]>button,[data-ui=number-field]>[data-part=decrement],[data-ui=number-field]>[data-part=increment]{align-items:center;appearance:none;background-color:transparent;border:0;color:var(--slotted-number-field-stepper-color, var(--slotted-text-muted, GrayText));cursor:pointer;display:inline-flex;flex:0 0 auto;justify-content:center;padding:0;position:relative;touch-action:manipulation;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing);-webkit-tap-highlight-color:transparent}[data-ui=number-field] [data-part=decrement],[data-ui=number-field] [data-part=increment]{--slotted-icon-size: var(--_icon-size)}[data-ui=number-field][data-stepper=stacked] [data-part=increment]>[data-ui=icon]{rotate:.5turn}[data-ui=number-field][data-part=root][data-stepper=stacked]{padding-inline-end:0}[data-ui=number-field]>[data-part=stepper]{align-self:stretch;box-sizing:content-box;display:flex;flex:0 0 auto;flex-direction:column;inline-size:var(--_stepper-size);padding-block:var(--_column-inset);padding-inline-end:var(--_column-inset)}[data-ui=number-field]>[data-part=stepper]>button{block-size:50%;border-radius:var(--_column-radius);inline-size:100%}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{content:\"\";inset-inline:0 calc(var(--_column-inset) * -1);position:absolute}[data-ui=number-field]>[data-part=stepper]>[data-part=increment]:after{inset-block:calc(var(--_column-inset) * -1) 0}[data-ui=number-field]>[data-part=stepper]>[data-part=decrement]:after{inset-block:0 calc(var(--_column-inset) * -1)}[data-ui=number-field]>[data-part=stepper]>button>[data-ui=icon]{block-size:min(var(--_icon-size),100%);contain:size}[data-ui=number-field][data-part=root][data-stepper=split]{gap:0;padding-inline:var(--_inset)}[data-ui=number-field][data-stepper=split]>[data-part=decrement],[data-ui=number-field][data-stepper=split]>[data-part=increment]{block-size:var(--_action-size);border-radius:var(--_action-radius);inline-size:var(--_action-size)}[data-ui=number-field][data-stepper=split]>[data-part=input]{padding-inline:var(--_gap);text-align:center}[data-ui=number-field][data-stepper=split]>[data-part=start]{padding-inline-start:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=end]{padding-inline-end:var(--_gap)}[data-ui=number-field][data-stepper=split]>[data-part=decrement]:after,[data-ui=number-field][data-stepper=split]>[data-part=increment]:after{content:\"\";inset:min(0px,calc((100% - var(--slotted-target-min, 24px)) / 2));position:absolute}@media(pointer:coarse){[data-ui=number-field][data-stepper=split]>:is([data-part=decrement],[data-part=increment]):after{inset:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}[data-ui=number-field]>[data-part=stepper]>:is([data-part=increment],[data-part=decrement]):after{inset-inline:min(0px,calc((100% - var(--slotted-target-comfortable, 44px)) / 2))}}[data-ui=number-field] [data-part=decrement]:hover:not(:disabled),[data-ui=number-field] [data-part=increment]:hover:not(:disabled){background-color:var( --slotted-number-field-stepper-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field] [data-part=decrement]:active:not(:disabled),[data-ui=number-field] [data-part=increment]:active:not(:disabled){background-color:var( --slotted-number-field-stepper-active-background, var(--slotted-tone-secondary-subtle-active) )}[data-ui=number-field] [data-part=decrement]:disabled,[data-ui=number-field] [data-part=increment]:disabled{background-color:var( --slotted-number-field-stepper-disabled-background, var(--slotted-disabled-background) );color:var(--slotted-number-field-stepper-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field] [data-part=decrement]:focus-visible,[data-ui=number-field] [data-part=increment]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){border-color:var(--slotted-number-field-hover-border-color, var(--slotted-tone-accent-border))}[data-ui=number-field][data-part=root][data-variant=subtle]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-subtle-hover-background, var(--slotted-tone-secondary-subtle-hover) )}[data-ui=number-field][data-part=root][data-variant=plain]:hover:not([data-disabled]):not([data-readonly]):not([data-invalid]){background-color:var( --slotted-number-field-plain-hover-background, var(--slotted-tone-secondary-subtle-hover) );border-color:transparent}[data-ui=number-field][data-part=root]:has(>[data-part=input]:focus-visible){box-shadow:var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight);outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain]:has(>[data-part=input]:focus-visible){box-shadow:none;outline-offset:calc(var(--slotted-focus-ring-offset, 2px) * -1)}[data-ui=number-field][data-part=root][data-invalid]{--slotted-focus-ring-color: var( --slotted-number-field-invalid-focus-ring-color, var(--slotted-focus-ring-color-invalid, Highlight) );--_invalid-edge-width: var( --slotted-number-field-invalid-edge-width, var(--slotted-control-invalid-edge-width, 1px) );--_invalid-edge-color: var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );--_invalid-edge: inset 0 0 0 var(--_invalid-edge-width) var(--_invalid-edge-color);border-color:var( --slotted-number-field-invalid-border-color, var(--slotted-tone-danger-border) );box-shadow:var(--_invalid-edge)}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:var(--_invalid-edge),var(--slotted-control-shadow-focus-geometry, 0 1px 4px -1px) var(--slotted-focus-ring-color, Highlight)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){box-shadow:inset 0 0 0 calc(var(--slotted-focus-ring-offset, 2px) - var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)) var(--_invalid-edge-color)}@media(forced-colors:active){[data-ui=number-field][data-part=root][data-invalid]{outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--slotted-control-border-width, 1px) + var(--_invalid-edge-width)))}[data-ui=number-field][data-part=root][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=number-field][data-part=root][data-variant=plain][data-invalid]:has(>[data-part=input]:focus-visible){outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:calc(-1 * (var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)))}}[data-ui=number-field][data-part=root][data-readonly]{background-color:var( --slotted-number-field-readonly-background, var(--slotted-tone-secondary-subtle-hover) );border-color:var( --slotted-number-field-readonly-border-color, var(--slotted-border-subtle, ButtonBorder) );cursor:default}[data-ui=number-field][data-part=root][data-disabled],[data-ui=number-field][data-part=root]:has(>[data-part=input]:disabled){background-color:var( --slotted-number-field-disabled-background, var(--slotted-disabled-background) );border-color:var(--slotted-number-field-disabled-border-color, var(--slotted-disabled-border));box-shadow:none;color:var(--slotted-number-field-disabled-color, var(--slotted-disabled-foreground));cursor:not-allowed}[data-ui=number-field][data-part=root][data-disabled]>[data-part=start],[data-ui=number-field][data-part=root][data-disabled]>[data-part=end]{color:var(--slotted-disabled-foreground)}}\n"] }]
|
|
320
320
|
}], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], stepper: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepper", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], control: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlNumberFieldControl), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
321
321
|
|
|
322
322
|
/** `undefined` stays absent; anything else becomes a number. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-number-field.mjs","sources":["../../number-field/src/number-field-defaults.ts","../../number-field/src/number-field.ts","../../number-field/src/number-field-input.ts","../../number-field/src/number-field-parts.ts","../../number-field/src/slotted-angular-number-field.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\n\n/** The type step the control sits at, matching the field around it. */\nexport type NumberFieldSize = 'sm' | 'md' | 'lg';\n\n/**\n * How much frame the control shows. The three `text-field` ships, unchanged:\n * `outline` takes the ground it is placed on, `subtle` sinks into the page, and\n * `plain` shows nothing at rest, which is what a dense table needs.\n */\nexport type NumberFieldVariant = 'outline' | 'subtle' | 'plain';\n\n/**\n * Where the two steppers sit.\n *\n * `stacked` is one column at the inline end, which is what a form expects.\n * `split` puts decrement at the inline start and increment at the inline end —\n * the quantity picker's arrangement, and the only one whose targets clear the\n * WCAG 2.2 minimum in both axes at every step. `none` withdraws them.\n */\nexport type NumberFieldStepper = 'stacked' | 'split' | 'none';\n\n/**\n * What happens to a value outside `min`…`max`. `blur` returns it to the range\n * at the commit, `strict` refuses the keystroke that would leave it, and `none`\n * keeps the value where the reader put it and reports `aria-invalid`.\n */\nexport type NumberFieldClamp = 'blur' | 'strict' | 'none';\n\n/**\n * When the text takes the locale's shape.\n *\n * `change` regroups on every keystroke, so `1234567` reads as `1.234.567` while\n * it is being typed. Grouping exists to make a long number scannable, and the\n * moment a reader most needs to check a magnitude is the moment they are\n * getting it wrong. `commit` holds the reader's own text until blur, `Enter`, a\n * stepper press or a key step.\n *\n * Neither decides when the *number* moves. It moves on every keystroke that\n * parses, under both.\n */\nexport type NumberFieldFormatOn = 'change' | 'commit';\n\nexport interface NumberFieldDefaults {\n clamp: NumberFieldClamp;\n formatOn: NumberFieldFormatOn;\n size: NumberFieldSize;\n stepper: NumberFieldStepper;\n variant: NumberFieldVariant;\n}\n\nconst FALLBACK: NumberFieldDefaults = {\n clamp: 'blur',\n formatOn: 'change',\n size: 'md',\n stepper: 'stacked',\n variant: 'outline',\n};\n\nexport const NUMBER_FIELD_DEFAULTS = new InjectionToken<NumberFieldDefaults>(\n 'slotted number field defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its number fields look like, rather than\n * repeating the same inputs on every amount in a form. A control that states\n * any of them itself still wins.\n *\n * The locale and the two buttons' words come from the language in force\n * (`provideSlotted`): one locale for the whole application decides the decimal\n * separator, the grouping and the numbering system, and a form where one field\n * reads `1.234` as a thousand and another as one point two three four is a\n * form that loses money.\n */\nexport function provideNumberFieldDefaults(defaults: Partial<NumberFieldDefaults>) {\n return {\n provide: NUMBER_FIELD_DEFAULTS,\n useFactory: (): NumberFieldDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a number field renders as here, before it states anything of its own. */\nexport function injectNumberFieldDefaults(): NumberFieldDefaults {\n return inject(NUMBER_FIELD_DEFAULTS);\n}\n\n/**\n * What the frame needs to know about the control inside it, and what the\n * control needs the frame to call.\n *\n * It is an abstract class rather than an import so the two directives can\n * depend on each other without a cycle — the shape `field` and `text-field`\n * already have. The input provides itself as this, and the frame queries it.\n */\nexport abstract class SlNumberFieldControl {\n /** The identifier the steppers point `aria-controls` at. */\n abstract readonly controlId: Signal<string | null>;\n /** Whether a step up would leave the range, which is what disables a button. */\n abstract readonly atMax: Signal<boolean>;\n /** Whether a step down would. */\n abstract readonly atMin: Signal<boolean>;\n /** The submission name the frame's hidden input carries, if there is one. */\n abstract readonly submissionName: Signal<string | null>;\n /** The form that hidden input belongs to, when it is not the ancestor one. */\n abstract readonly submissionForm: Signal<string | null>;\n /** The raw number the family holds, for the hidden input the frame renders. */\n abstract readonly numberValue: Signal<number | null>;\n abstract readonly resolvedDisabled: Signal<boolean | undefined>;\n abstract readonly resolvedReadOnly: Signal<boolean | undefined>;\n abstract readonly resolvedInvalid: Signal<boolean | undefined>;\n /** Moves the value by one step and returns focus to it. */\n abstract stepBy(direction: 1 | -1, source: Event | undefined): void;\n /**\n * Moves the value by whole steps a `scrub` drag travelled, signed, by the\n * large step under `Shift` and the small one under `Alt`.\n */\n abstract scrubBy(steps: number, source: PointerEvent): void;\n /** The native element, which a scrub focuses and reads the direction from. */\n abstract readonly inputElement: HTMLInputElement;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n numberFieldMessages,\n type NumberFieldMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport {\n STEP_REPEAT_DELAY,\n STEP_REPEAT_DELAY_COARSE,\n STEP_REPEAT_INTERVAL,\n} from '@slotted/core/number';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectNumberFieldDefaults, SlNumberFieldControl } from './number-field-defaults';\nimport type {\n NumberFieldSize,\n NumberFieldStepper,\n NumberFieldVariant,\n} from './number-field-defaults';\n\nexport type {\n NumberFieldClamp,\n NumberFieldSize,\n NumberFieldStepper,\n NumberFieldVariant,\n} from './number-field-defaults';\n\n/**\n * The frame: one number, and the two buttons that move it.\n *\n * **It is not the control.** The element carrying `data-ui` is the consumer's\n * own box with no role; the `input` inside it holds the value, the identifier\n * and the APG's `spinbutton` role. WAI-ARIA settles the shape: a `spinbutton`\n * may hold only non-interactive presentational children, so the two steppers\n * are the control's siblings rather than its children.\n *\n * **The split arrangement is written in the order it is painted.** Decrement\n * before the value and increment after it, rather than one box reordered with\n * `order`, so the reading order and the painted order are the same one.\n *\n * **Angular pays one element for that frame, and React pays none.** React can\n * render a wrapper from inside a component; an Angular directive cannot create\n * a box around its own host. `slNumberFieldInput` injects this class, so a\n * control written without the frame is a compile-time failure rather than a\n * silent one.\n */\n@Component({\n selector: '[slNumberField]',\n standalone: true,\n exportAs: 'slNumberField',\n imports: [SlGlyph, SlIcon],\n template: `@if (resolvedStepper() === 'split') {\n <button\n data-part=\"decrement\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('decrement')\"\n [disabled]=\"decrementDisabled()\"\n (pointerdown)=\"press(-1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <span slIcon><svg slGlyph name=\"minus\"></svg></span>\n </button>\n }\n <ng-content select=\"[slNumberFieldStart]\" />\n <ng-content />\n <ng-content select=\"[slNumberFieldEnd]\" />\n @if (resolvedStepper() === 'split') {\n <button\n data-part=\"increment\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('increment')\"\n [disabled]=\"incrementDisabled()\"\n (pointerdown)=\"press(1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <span slIcon><svg slGlyph name=\"plus\"></svg></span>\n </button>\n } @else if (resolvedStepper() === 'stacked') {\n <span data-part=\"stepper\">\n <button\n data-part=\"increment\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('increment')\"\n [disabled]=\"incrementDisabled()\"\n (pointerdown)=\"press(1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <!-- Both halves draw the down chevron; the stylesheet turns the\n increment's half a turn. -->\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <button\n data-part=\"decrement\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('decrement')\"\n [disabled]=\"decrementDisabled()\"\n (pointerdown)=\"press(-1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n </span>\n }\n @if (control()?.submissionName(); as submissionName) {\n <input\n type=\"hidden\"\n [attr.name]=\"submissionName\"\n [attr.form]=\"control()?.submissionForm()\"\n [value]=\"hiddenValue()\"\n />\n }`,\n styleUrl: '../../../styles/src/number-field/number-field.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'number-field',\n 'data-part': 'root',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-stepper]': 'resolvedStepper()',\n '[attr.data-disabled]': \"control()?.resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"control()?.resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"control()?.resolvedReadOnly() === true ? '' : null\",\n '[attr.data-scrubbing]': \"scrubbing() ? '' : null\",\n },\n})\nexport class SlNumberField {\n /** Defaults to the field, then to the token, then to `md`. */\n readonly size = input<NumberFieldSize | undefined>(undefined);\n /** Defaults to the token, then to `outline`. */\n readonly variant = input<NumberFieldVariant | undefined>(undefined);\n /** Where the two steppers sit. Defaults to the token, then to `stacked`. */\n readonly stepper = input<NumberFieldStepper | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * `increment` and `decrement` buttons' accessible names.\n */\n readonly messages = input<PartialMessages<NumberFieldMessages> | undefined>(undefined);\n\n private readonly defaults = injectNumberFieldDefaults();\n private readonly field = inject(SlField, { optional: true });\n\n /**\n * The control inside. It provides itself as `SlNumberFieldControl`, so the\n * frame can read the bounds, the submission name and the shared states\n * without either directive importing the other.\n */\n readonly control = contentChild(SlNumberFieldControl, { descendants: true });\n\n readonly resolvedSize = computed(\n () => this.size() ?? this.field?.resolvedSize() ?? this.defaults.size,\n );\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedStepper = computed(() => this.stepper() ?? this.defaults.stepper);\n /** The family's words in the language in force, with this field's `messages` laid over them. */\n readonly t = injectMessages(numberFieldMessages, this.messages);\n\n /** Whether a `slNumberFieldScrub` inside is being dragged. */\n readonly scrubbing = signal(false);\n\n /** A control nobody can change has two buttons that would lie about it. */\n readonly inert = computed(() => {\n const control = this.control();\n return control?.resolvedDisabled() === true || control?.resolvedReadOnly() === true;\n });\n\n protected readonly incrementDisabled = computed(\n () => this.inert() || this.control()?.atMax() === true,\n );\n protected readonly decrementDisabled = computed(\n () => this.inert() || this.control()?.atMin() === true,\n );\n\n protected readonly hiddenValue = computed(() => {\n const value = this.control()?.numberValue() ?? null;\n return value === null ? '' : String(value);\n });\n\n private delay: ReturnType<typeof setTimeout> | undefined;\n private interval: ReturnType<typeof setInterval> | undefined;\n\n constructor() {\n /* A button unmounted mid-press would otherwise leave a timer running. */\n inject(DestroyRef).onDestroy(() => this.release());\n }\n\n /**\n * One step now, then repeating while the button is held. A coarse pointer\n * waits longer before the first repeat, because a finger that is starting to\n * scroll rests on the button first.\n */\n protected press(direction: 1 | -1, event: PointerEvent) {\n if (event.button !== 0) return;\n /* Focus stays on the value: the button is out of the tab order and the\n caret is what the reader came back to. */\n event.preventDefault();\n const control = this.control();\n if (control === undefined) return;\n control.stepBy(direction, event);\n\n this.release();\n const wait = event.pointerType === 'touch' ? STEP_REPEAT_DELAY_COARSE : STEP_REPEAT_DELAY;\n this.delay = setTimeout(() => {\n this.interval = setInterval(() => control.stepBy(direction, undefined), STEP_REPEAT_INTERVAL);\n }, wait);\n }\n\n protected release() {\n clearTimeout(this.delay);\n clearInterval(this.interval);\n this.delay = undefined;\n this.interval = undefined;\n }\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { clamp as clampNumber } from '@slotted/core/measure';\nimport { createNumberFormat, snapToStep as snapToGrid, stepNumber } from '@slotted/core/number';\nimport type { NumberFormat } from '@slotted/core/number';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport { SlField } from '@slotted/angular/field';\nimport { injectLocale } from '@slotted/angular/i18n';\n\nimport { injectNumberFieldDefaults, SlNumberFieldControl } from './number-field-defaults';\nimport type { NumberFieldClamp, NumberFieldFormatOn } from './number-field-defaults';\nimport { SlNumberField } from './number-field';\n\n/** `undefined` stays absent; anything else becomes a number. */\nconst optionalNumber = (value: unknown) =>\n value === undefined || value === null || value === '' ? undefined : numberAttribute(value);\n\n/**\n * The control itself: the number, the identifier, and everything the field\n * around it says.\n *\n * **The element is `type=\"text\"` and carries the APG's `spinbutton` role.**\n * `type=\"number\"` empties itself whenever the text is not a valid\n * floating-point number, so no grouping separator, no decimal comma and no\n * currency affix survives it.\n *\n * **The text belongs to the element and the number belongs to the family.** The\n * number moves on every keystroke that parses. Under `formatOn=\"change\"`, the\n * default, the text takes the locale's shape on that same keystroke: the\n * grouping a long number is read by appears while it is being typed, and the\n * caret comes back to the character it was on because it is counted in the\n * reader's own characters rather than in string indices. Under\n * `formatOn=\"commit\"` the text is the reader's until blur, `Enter`, a stepper\n * press, a key step or a wheel turn.\n *\n * Rounding, padding and clamping belong to the commit under both. A keystroke\n * never takes away a nought the reader has just typed.\n *\n * **Unset means ask the field.** `disabled`, `readOnly` and `invalid` default to\n * `undefined` rather than `false`. A value the consumer wrote as a static\n * attribute is read before the host binding computes, so the binding never\n * writes over it.\n */\n@Directive({\n selector: 'input[slNumberFieldInput]',\n standalone: true,\n exportAs: 'slNumberFieldInput',\n providers: [\n { provide: SlNumberFieldControl, useExisting: forwardRef(() => SlNumberFieldInput) },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlNumberFieldInput), multi: true },\n ],\n host: {\n 'data-part': 'input',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: 'false',\n /* Bound rather than static, so a consumer who wrote `type=\"number\"` on a\n number field does not get the element that empties its own value. */\n '[attr.type]': \"'text'\",\n '[attr.role]': \"'spinbutton'\",\n '[attr.id]': 'controlId()',\n '[attr.inputmode]': 'resolvedInputMode()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'ariaInvalid()',\n '[attr.aria-required]': 'ariaRequired()',\n '[attr.aria-valuenow]': 'numberValue()',\n '[attr.aria-valuemin]': 'min() ?? null',\n '[attr.aria-valuemax]': 'max() ?? null',\n '[attr.aria-valuetext]': 'valueText()',\n '[attr.name]': 'null',\n '[attr.disabled]': 'disabledAttribute()',\n '[attr.readonly]': 'readonlyAttribute()',\n '(input)': 'onInput($event)',\n '(beforeinput)': 'onBeforeInput($event)',\n '(keydown)': 'onKeyDown($event)',\n '(blur)': 'onBlur($event)',\n },\n})\nexport class SlNumberFieldInput implements ControlValueAccessor, OnInit, SlNumberFieldControl {\n /**\n * Present means the consumer owns the number, for the life of the component.\n * `null` is empty, and `undefined` is the absence that makes the control\n * uncontrolled — the two are different answers.\n */\n readonly value = input<number | null | undefined, unknown>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : (optionalNumber(raw) ?? null)),\n });\n /** The number the control starts from when nobody else writes one. */\n readonly defaultValue = input<number | null, unknown>(null, {\n transform: (raw) => (raw === undefined ? null : (optionalNumber(raw) ?? null)),\n });\n\n readonly min = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n readonly max = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n readonly step = input<number, unknown>(1, { transform: (raw) => optionalNumber(raw) ?? 1 });\n /** The amount `Shift` and the page keys move by. Defaults to `step * 10`. */\n readonly largeStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n /** The amount `Alt` moves by. Defaults to `step / 10`. */\n readonly smallStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n /** Where an empty control starts stepping from. Defaults to `min`, then nought. */\n readonly stepFrom = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n readonly snapToStep = input(false, { transform: booleanAttribute });\n /** Where a value outside the range goes, and when. Defaults to the token, then `blur`. */\n readonly clamp = input<NumberFieldClamp | undefined>(undefined);\n /** How the value is written and read back, through `Intl.NumberFormat`. */\n readonly format = input<Intl.NumberFormatOptions | undefined>(undefined);\n /** When the text takes that shape. Defaults to the token, then `change`. */\n readonly formatOn = input<NumberFieldFormatOn | undefined>(undefined);\n /** BCP 47. Defaults to the language in force (`provideSlotted`). */\n readonly locale = input<string | undefined>(undefined);\n /**\n * Lets the wheel move the value while the control has focus. Off by default:\n * a reader scrolling a form must not change an amount by passing over it.\n */\n readonly wheel = input(false, { transform: booleanAttribute });\n\n /** Unstated rather than `false`, so the control defers to the field. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n\n /**\n * One output for one transition, carrying the value, the value it replaces,\n * the reason, the originating event and `cancel()`. There is no `[(value)]`,\n * because a two-way binding has one slot and can carry none of those; a form\n * gets the same movement through `ControlValueAccessor`.\n */\n readonly valueChange = output<ChangeRequest<number | null>>();\n\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef).nativeElement;\n /**\n * The frame around the control. Injected without `optional`, so an `input`\n * written without it fails at construction rather than silently losing its\n * border, its ring and the place its two buttons stand.\n */\n readonly numberField = inject(SlNumberField);\n private readonly field = inject(SlField, { optional: true });\n private readonly defaults = injectNumberFieldDefaults();\n private readonly appLocale = injectLocale();\n\n private readonly writtenId = inject(new HostAttributeToken('id'), { optional: true });\n private readonly writtenName = inject(new HostAttributeToken('name'), { optional: true });\n private readonly writtenForm = inject(new HostAttributeToken('form'), { optional: true });\n private readonly writtenInputMode = inject(new HostAttributeToken('inputmode'), {\n optional: true,\n });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n private readonly writtenInvalid = inject(new HostAttributeToken('aria-invalid'), {\n optional: true,\n });\n private readonly writtenRequired = inject(new HostAttributeToken('aria-required'), {\n optional: true,\n });\n private readonly writtenReadonly = inject(new HostAttributeToken('readonly'), { optional: true });\n\n /** What the family holds when nobody else owns it. */\n private readonly own = signal<number | null>(null);\n /** What the element is showing. Never a second copy of the number. */\n private readonly text = signal('');\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n private onChangeFn: (value: number | null) => void = () => undefined;\n private onTouchedFn: () => void = () => undefined;\n\n /**\n * One formatter, rebuilt only when the locale or the format changes. The\n * options object is read through a signal, so an inline object handed on\n * every change detection does not rebuild the parser.\n */\n private readonly formatter = computed<NumberFormat>(() => {\n const options = this.format();\n return createNumberFormat({\n locale: this.locale() ?? this.appLocale(),\n ...(options === undefined ? {} : { options }),\n });\n });\n\n /** Present means the consumer owns it; absent means the directive does. */\n private readonly controlled = computed(() => this.value() !== undefined);\n readonly numberValue = computed(() => {\n const bound = this.value();\n return bound === undefined ? this.own() : bound;\n });\n readonly valueText = computed(() => {\n const shown = this.text();\n return shown === '' ? null : shown;\n });\n\n readonly resolvedClamp = computed(() => this.clamp() ?? this.defaults.clamp);\n protected readonly resolvedFormatOn = computed(() => this.formatOn() ?? this.defaults.formatOn);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(\n () =>\n this.readOnly() ??\n (this.writtenReadonly === null ? undefined : true) ??\n this.field?.resolvedReadOnly(),\n );\n /**\n * Unstated, the control asks the field. Under `clamp=\"none\"` nothing returns\n * a number outside `min`…`max` to the range, so the control reports it.\n */\n private readonly outsideRange = computed(() => {\n const current = this.numberValue();\n const min = this.min();\n const max = this.max();\n return (\n this.resolvedClamp() === 'none' &&\n current !== null &&\n ((min !== undefined && current < min) || (max !== undefined && current > max))\n );\n });\n readonly resolvedInvalid = computed(\n () => this.invalid() ?? (this.outsideRange() ? true : this.field?.invalid()),\n );\n\n readonly controlId = computed(() => this.writtenId ?? this.field?.ids().control ?? null);\n readonly submissionName = computed(() => this.writtenName);\n readonly submissionForm = computed(() => this.writtenForm);\n\n private readonly parsedText = computed(() => this.formatter().parse(this.text()));\n readonly atMax = computed(() => {\n const max = this.max();\n const current = this.parsedText();\n return max !== undefined && current !== null && current >= max;\n });\n readonly atMin = computed(() => {\n const min = this.min();\n const current = this.parsedText();\n return min !== undefined && current !== null && current <= min;\n });\n\n /**\n * The software keyboard, derived from the props rather than from the user\n * agent. Neither numeric keypad offers a minus sign on every platform, so a\n * control that admits a negative asks for the full keyboard.\n */\n protected readonly resolvedInputMode = computed(() => {\n if (this.writtenInputMode !== null) return this.writtenInputMode;\n const min = this.min();\n if (min === undefined || min < 0) return 'text';\n return this.formatter().maximumFractionDigits > 0 ? 'decimal' : 'numeric';\n });\n\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly ariaInvalid = computed(\n () => this.writtenInvalid ?? (this.resolvedInvalid() === true ? 'true' : null),\n );\n protected readonly ariaRequired = computed(\n () => this.writtenRequired ?? (this.field?.required() === true ? 'true' : null),\n );\n protected readonly disabledAttribute = computed(() =>\n this.resolvedDisabled() === true ? '' : null,\n );\n protected readonly readonlyAttribute = computed(() =>\n this.resolvedReadOnly() === true ? '' : null,\n );\n\n constructor() {\n /* The element shows what the family holds, and the text is only rewritten\n when it no longer means the same number — typing `1234` must not become\n `1,234` between two keystrokes. */\n effect(() => {\n const next = this.numberValue();\n const formatter = this.formatter();\n if (Object.is(next, formatter.parse(this.text()))) return;\n this.write(formatter.format(next));\n });\n\n this.attachWheel();\n }\n\n /**\n * Angular creates every directive in a template before it binds any input, so\n * the starting value is read here rather than in the constructor: read there,\n * `defaultValue` is always its own default and the control starts empty.\n */\n ngOnInit() {\n const bound = this.value();\n const initial = bound === undefined ? this.defaultValue() : bound;\n if (bound === undefined) this.own.set(initial);\n this.write(this.formatter().format(initial));\n }\n\n /** The native element, for `focus()`, `select()` and `setSelectionRange()`. */\n get inputElement(): HTMLInputElement {\n return this.element;\n }\n\n /** Steps up by one step and reports `programmatic`. */\n increment() {\n this.move(1, this.step(), 'programmatic', undefined);\n }\n\n /** Steps down by one step and reports `programmatic`. */\n decrement() {\n this.move(-1, this.step(), 'programmatic', undefined);\n }\n\n /** What a `slNumberFieldScrub` drag calls, once per whole step travelled. */\n scrubBy(steps: number, source: PointerEvent) {\n if (steps === 0) return;\n const step = this.step();\n const amount = source.shiftKey\n ? (this.largeStep() ?? step * 10)\n : source.altKey\n ? (this.smallStep() ?? step / 10)\n : step;\n this.move(steps > 0 ? 1 : -1, amount * Math.abs(steps), 'pointer', source);\n }\n\n /** What the frame's two buttons call. Focus returns to the value. */\n stepBy(direction: 1 | -1, source: Event | undefined) {\n this.element.focus();\n this.move(direction, this.step(), 'pointer', source);\n }\n\n writeValue(value: number | null) {\n this.own.set(value ?? null);\n this.write(this.formatter().format(value ?? null));\n }\n\n registerOnChange(fn: (value: number | null) => void) {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event) {\n const raw = this.element.value;\n const native = event as InputEvent;\n\n /* An IME commits a whole run, and a run reshaped half way through is a run\n the engine can no longer finish. The text is left alone until\n `compositionend` sends a keystroke that is not composing. */\n if (this.resolvedFormatOn() !== 'change' || native.isComposing) {\n this.text.set(raw);\n this.request(this.formatter().parse(raw), 'keyboard', undefined);\n return;\n }\n\n const formatter = this.formatter();\n const caret = this.element.selectionStart ?? raw.length;\n const deletion = native.inputType?.startsWith('delete') === true;\n const edited = deletion\n ? formatter.deleteAcrossSeparator(\n this.text(),\n { text: raw, caret },\n native.inputType === 'deleteContentForward' ? 1 : -1,\n )\n : { text: raw, caret };\n const shaped = formatter.formatWhileTyping(edited);\n\n this.write(shaped.text);\n /* Only while the reader is in the control: moving the selection of an\n element nobody is typing in scrolls it into view on some engines. */\n if (this.element.ownerDocument.activeElement === this.element) {\n this.element.setSelectionRange(shaped.caret, shaped.caret);\n }\n this.request(formatter.parse(shaped.text), 'keyboard', undefined);\n }\n\n /**\n * The keystroke filter. `beforeinput` is where a keystroke, a paste and a\n * drop all arrive before the element changes, and it is the only place a\n * character that cannot be part of a number can be refused without moving\n * the caret.\n */\n protected onBeforeInput(event: InputEvent) {\n if (event.defaultPrevented) return;\n /* An IME commits a whole run; refusing it character by character would\n make a full-width `123` untypeable. */\n if (event.isComposing) return;\n if (event.inputType.startsWith('delete')) return;\n\n const start = this.element.selectionStart ?? this.element.value.length;\n const finish = this.element.selectionEnd ?? this.element.value.length;\n const next =\n this.element.value.slice(0, start) + (event.data ?? '') + this.element.value.slice(finish);\n\n const formatter = this.formatter();\n if (!formatter.isPartial(next)) {\n event.preventDefault();\n return;\n }\n if (this.resolvedClamp() !== 'strict') return;\n const parsed = formatter.parse(next);\n if (parsed === null) return;\n const min = this.min();\n const max = this.max();\n if ((min !== undefined && parsed < min) || (max !== undefined && parsed > max)) {\n event.preventDefault();\n }\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n if (this.resolvedDisabled() === true || this.resolvedReadOnly() === true) return;\n\n const step = this.step();\n const large = this.largeStep() ?? step * 10;\n const small = this.smallStep() ?? step / 10;\n const amount = event.shiftKey ? large : event.altKey ? small : step;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.move(1, amount, 'keyboard', event);\n return;\n case 'ArrowDown':\n event.preventDefault();\n this.move(-1, amount, 'keyboard', event);\n return;\n case 'PageUp':\n event.preventDefault();\n this.move(1, large, 'keyboard', event);\n return;\n case 'PageDown':\n event.preventDefault();\n this.move(-1, large, 'keyboard', event);\n return;\n case 'Home': {\n const min = this.min();\n if (min === undefined || event.ctrlKey || event.metaKey) return;\n event.preventDefault();\n this.settle(min, this.request(min, 'keyboard', event));\n return;\n }\n case 'End': {\n const max = this.max();\n if (max === undefined || event.ctrlKey || event.metaKey) return;\n event.preventDefault();\n this.settle(max, this.request(max, 'keyboard', event));\n return;\n }\n case 'Enter':\n /* Committed and not intercepted: a single-line control submits its\n form, which is the platform's behaviour. */\n this.commit('keyboard', event);\n return;\n default:\n }\n }\n\n protected onBlur(event: FocusEvent) {\n this.onTouchedFn();\n this.commit('blur', event);\n }\n\n /**\n * The wheel, when it is asked for, and never otherwise. It is a native\n * listener rather than a host binding because the event has to be cancelled,\n * and a host listener on `wheel` is passive in some browsers.\n */\n private attachWheel() {\n const onWheel = (event: WheelEvent) => {\n if (!this.wheel()) return;\n if (this.resolvedDisabled() === true || this.resolvedReadOnly() === true) return;\n if (this.element.ownerDocument.activeElement !== this.element) return;\n if (event.deltaY === 0) return;\n event.preventDefault();\n this.move(event.deltaY < 0 ? 1 : -1, this.step(), 'pointer', event);\n };\n\n this.element.addEventListener('wheel', onWheel, { passive: false });\n inject(DestroyRef).onDestroy(() => this.element.removeEventListener('wheel', onWheel));\n }\n\n /** Formats what the reader typed and puts the value back in range. */\n private commit(reason: ChangeReason, source: Event | undefined) {\n const formatter = this.formatter();\n let next = formatter.parse(this.text());\n const min = this.min();\n const max = this.max();\n\n if (next !== null) {\n /* The number committed is the number shown: rounded to the precision\n the format states, through the same formatter. */\n next = formatter.parse(formatter.format(next)) ?? next;\n /* A typed value goes to the nearest multiple of the grid. */\n if (this.snapToStep()) next = snapToGrid(next, this.step(), min ?? 0);\n if (this.resolvedClamp() !== 'none') {\n next = clampNumber(next, min ?? Number.NEGATIVE_INFINITY, max ?? Number.POSITIVE_INFINITY);\n }\n }\n this.settle(next, this.request(next, reason, source));\n }\n\n private move(direction: 1 | -1, amount: number, reason: ChangeReason, source: Event | undefined) {\n const min = this.min();\n const max = this.max();\n const stepFrom = this.stepFrom();\n const next = stepNumber({\n value: this.formatter().parse(this.text()),\n direction,\n step: amount,\n ...(min === undefined ? {} : { min }),\n ...(max === undefined ? {} : { max }),\n ...(stepFrom === undefined ? {} : { stepFrom }),\n snapToStep: this.snapToStep(),\n });\n this.settle(next, this.request(next, reason, source));\n }\n\n /**\n * Asks to move, and says whether anything did. A refused request answers\n * `false`, and the caller uses that to decide what the element shows: a\n * control that wrote the new number into the text regardless would show a\n * value the consumer never accepted.\n */\n private request(next: number | null, reason: ChangeReason, source: Event | undefined): boolean {\n const current = this.numberValue();\n if (Object.is(next, current)) return false;\n\n let cancelled = false;\n const state = createControllable<number | null>({\n controlled: undefined,\n initial: current,\n onRequest: (pending) => {\n this.valueChange.emit(pending);\n cancelled = pending.cancelled;\n },\n });\n state.request(next, reason, source);\n if (cancelled) return false;\n\n this.onChangeFn(next);\n /* A controlled control never moves its own number: it asks, and waits for\n the consumer's next value. */\n if (this.controlled()) return false;\n this.own.set(next);\n return true;\n }\n\n private settle(next: number | null, moved: boolean) {\n const shown = moved ? next : this.numberValue();\n this.write(this.formatter().format(shown));\n }\n\n /** One place the element's text is written, so the signal never drifts from it. */\n private write(value: string) {\n if (this.element.value !== value) this.element.value = value;\n this.text.set(value);\n }\n}\n","import { Directive, inject, input, signal } from '@angular/core';\nimport { createScrub, SCRUB_SENSITIVITY } from '@slotted/core/number';\nimport type { Scrub } from '@slotted/core/number';\n\nimport { SlNumberField } from './number-field';\n\n/**\n * An adornment before the value in the reading direction: a currency mark, a\n * unit, an icon. Named for the direction rather than for a side, so the same\n * markup puts the mark before the amount in both directions.\n *\n * It is a sibling of the number rather than part of it. A symbol that belongs\n * *inside* the value — the `R$` of a currency format, a percent sign — is\n * `format`'s job and arrives through `Intl` as part of the string the control\n * holds; this one is never selected, never copied and never parsed.\n */\n@Directive({\n selector: '[slNumberFieldStart]',\n standalone: true,\n exportAs: 'slNumberFieldStart',\n host: { 'data-part': 'start' },\n})\nexport class SlNumberFieldStart {}\n\n/** An adornment after the value in the reading direction. */\n@Directive({\n selector: '[slNumberFieldEnd]',\n standalone: true,\n exportAs: 'slNumberFieldEnd',\n host: { 'data-part': 'end' },\n})\nexport class SlNumberFieldEnd {}\n\n/**\n * A mark that moves the number when it is dragged sideways — the design\n * tools' gesture. Placed inside `slNumberFieldStart` or `slNumberFieldEnd`,\n * where the frame it belongs to is its ancestor:\n *\n * ```html\n * <span slNumberFieldStart><span slNumberFieldScrub>W</span></span>\n * ```\n *\n * Each `sensitivity` pixels towards the inline end is one step up; `Shift`\n * moves by the large step and `Alt` by the small one, as on the keyboard. It\n * is hidden from assistive technology and takes no focus: the input's arrow\n * keys are the same movement.\n */\n@Directive({\n selector: '[slNumberFieldScrub]',\n standalone: true,\n exportAs: 'slNumberFieldScrub',\n host: {\n 'data-part': 'scrub',\n 'aria-hidden': 'true',\n '[attr.data-scrubbing]': \"active() ? '' : null\",\n '(pointerdown)': 'begin($event)',\n '(pointermove)': 'drag($event)',\n '(pointerup)': 'end()',\n '(pointercancel)': 'end()',\n '(lostpointercapture)': 'end()',\n },\n})\nexport class SlNumberFieldScrub {\n /** Pixels of horizontal travel per step. Defaults to 2. */\n readonly sensitivity = input<number>(SCRUB_SENSITIVITY);\n\n private readonly frame = inject(SlNumberField);\n protected readonly active = signal(false);\n private travel: Scrub | null = null;\n\n protected begin(event: PointerEvent) {\n const control = this.frame.control();\n if (event.button !== 0 || control === undefined || this.frame.inert()) return;\n /* No text selection, and the caret stays in the value the drag moves. */\n event.preventDefault();\n control.inputElement.focus();\n (event.currentTarget as Element | null)?.setPointerCapture?.(event.pointerId);\n this.travel = createScrub({\n clientX: event.clientX,\n sensitivity: this.sensitivity(),\n rtl: getComputedStyle(control.inputElement).direction === 'rtl',\n });\n this.active.set(true);\n this.frame.scrubbing.set(true);\n }\n\n protected drag(event: PointerEvent) {\n if (this.travel === null) return;\n this.frame.control()?.scrubBy(this.travel.steps(event.clientX), event);\n }\n\n protected end() {\n if (this.travel === null) return;\n this.travel = null;\n this.active.set(false);\n this.frame.scrubbing.set(false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["snapToGrid","clampNumber"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-number-field.mjs","sources":["../../number-field/src/number-field-defaults.ts","../../number-field/src/number-field.ts","../../number-field/src/number-field-input.ts","../../number-field/src/number-field-parts.ts","../../number-field/src/slotted-angular-number-field.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\n\n/** The type step the control sits at, matching the field around it. */\nexport type NumberFieldSize = 'sm' | 'md' | 'lg';\n\n/**\n * How much frame the control shows. The three `text-field` ships, unchanged:\n * `outline` takes the ground it is placed on, `subtle` sinks into the page, and\n * `plain` shows nothing at rest, which is what a dense table needs.\n */\nexport type NumberFieldVariant = 'outline' | 'subtle' | 'plain';\n\n/**\n * Where the two steppers sit.\n *\n * `stacked` is one column at the inline end, which is what a form expects.\n * `split` puts decrement at the inline start and increment at the inline end —\n * the quantity picker's arrangement, and the only one whose targets clear the\n * WCAG 2.2 minimum in both axes at every step. `none` withdraws them.\n */\nexport type NumberFieldStepper = 'stacked' | 'split' | 'none';\n\n/**\n * What happens to a value outside `min`…`max`. `blur` returns it to the range\n * at the commit, `strict` refuses the keystroke that would leave it, and `none`\n * keeps the value where the reader put it and reports `aria-invalid`.\n */\nexport type NumberFieldClamp = 'blur' | 'strict' | 'none';\n\n/**\n * When the text takes the locale's shape.\n *\n * `change` regroups on every keystroke, so `1234567` reads as `1.234.567` while\n * it is being typed. Grouping exists to make a long number scannable, and the\n * moment a reader most needs to check a magnitude is the moment they are\n * getting it wrong. `commit` holds the reader's own text until blur, `Enter`, a\n * stepper press or a key step.\n *\n * Neither decides when the *number* moves. It moves on every keystroke that\n * parses, under both.\n */\nexport type NumberFieldFormatOn = 'change' | 'commit';\n\nexport interface NumberFieldDefaults {\n clamp: NumberFieldClamp;\n formatOn: NumberFieldFormatOn;\n size: NumberFieldSize;\n stepper: NumberFieldStepper;\n variant: NumberFieldVariant;\n}\n\nconst FALLBACK: NumberFieldDefaults = {\n clamp: 'blur',\n formatOn: 'change',\n size: 'md',\n stepper: 'stacked',\n variant: 'outline',\n};\n\nexport const NUMBER_FIELD_DEFAULTS = new InjectionToken<NumberFieldDefaults>(\n 'slotted number field defaults',\n { providedIn: 'root', factory: () => FALLBACK },\n);\n\n/**\n * An application decides once what its number fields look like, rather than\n * repeating the same inputs on every amount in a form. A control that states\n * any of them itself still wins.\n *\n * The locale and the two buttons' words come from the language in force\n * (`provideSlotted`): one locale for the whole application decides the decimal\n * separator, the grouping and the numbering system, and a form where one field\n * reads `1.234` as a thousand and another as one point two three four is a\n * form that loses money.\n */\nexport function provideNumberFieldDefaults(defaults: Partial<NumberFieldDefaults>) {\n return {\n provide: NUMBER_FIELD_DEFAULTS,\n useFactory: (): NumberFieldDefaults => ({ ...FALLBACK, ...defaults }),\n };\n}\n\n/** What a number field renders as here, before it states anything of its own. */\nexport function injectNumberFieldDefaults(): NumberFieldDefaults {\n return inject(NUMBER_FIELD_DEFAULTS);\n}\n\n/**\n * What the frame needs to know about the control inside it, and what the\n * control needs the frame to call.\n *\n * It is an abstract class rather than an import so the two directives can\n * depend on each other without a cycle — the shape `field` and `text-field`\n * already have. The input provides itself as this, and the frame queries it.\n */\nexport abstract class SlNumberFieldControl {\n /** The identifier the steppers point `aria-controls` at. */\n abstract readonly controlId: Signal<string | null>;\n /** Whether a step up would leave the range, which is what disables a button. */\n abstract readonly atMax: Signal<boolean>;\n /** Whether a step down would. */\n abstract readonly atMin: Signal<boolean>;\n /** The submission name the frame's hidden input carries, if there is one. */\n abstract readonly submissionName: Signal<string | null>;\n /** The form that hidden input belongs to, when it is not the ancestor one. */\n abstract readonly submissionForm: Signal<string | null>;\n /** The raw number the family holds, for the hidden input the frame renders. */\n abstract readonly numberValue: Signal<number | null>;\n abstract readonly resolvedDisabled: Signal<boolean | undefined>;\n abstract readonly resolvedReadOnly: Signal<boolean | undefined>;\n abstract readonly resolvedInvalid: Signal<boolean | undefined>;\n /** Moves the value by one step and returns focus to it. */\n abstract stepBy(direction: 1 | -1, source: Event | undefined): void;\n /**\n * Moves the value by whole steps a `scrub` drag travelled, signed, by the\n * large step under `Shift` and the small one under `Alt`.\n */\n abstract scrubBy(steps: number, source: PointerEvent): void;\n /** The native element, which a scrub focuses and reads the direction from. */\n abstract readonly inputElement: HTMLInputElement;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n numberFieldMessages,\n type NumberFieldMessages,\n type PartialMessages,\n} from '@slotted/core/i18n';\nimport {\n STEP_REPEAT_DELAY,\n STEP_REPEAT_DELAY_COARSE,\n STEP_REPEAT_INTERVAL,\n} from '@slotted/core/number';\nimport { SlField } from '@slotted/angular/field';\n\nimport { injectNumberFieldDefaults, SlNumberFieldControl } from './number-field-defaults';\nimport type {\n NumberFieldSize,\n NumberFieldStepper,\n NumberFieldVariant,\n} from './number-field-defaults';\n\nexport type {\n NumberFieldClamp,\n NumberFieldSize,\n NumberFieldStepper,\n NumberFieldVariant,\n} from './number-field-defaults';\n\n/**\n * The frame: one number, and the two buttons that move it.\n *\n * **It is not the control.** The element carrying `data-ui` is the consumer's\n * own box with no role; the `input` inside it holds the value, the identifier\n * and the APG's `spinbutton` role. WAI-ARIA settles the shape: a `spinbutton`\n * may hold only non-interactive presentational children, so the two steppers\n * are the control's siblings rather than its children.\n *\n * **The split arrangement is written in the order it is painted.** Decrement\n * before the value and increment after it, rather than one box reordered with\n * `order`, so the reading order and the painted order are the same one.\n *\n * **Angular pays one element for that frame, and React pays none.** React can\n * render a wrapper from inside a component; an Angular directive cannot create\n * a box around its own host. `slNumberFieldInput` injects this class, so a\n * control written without the frame is a compile-time failure rather than a\n * silent one.\n */\n@Component({\n selector: '[slNumberField]',\n standalone: true,\n exportAs: 'slNumberField',\n imports: [SlGlyph, SlIcon],\n template: `@if (resolvedStepper() === 'split') {\n <button\n data-part=\"decrement\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('decrement')\"\n [disabled]=\"decrementDisabled()\"\n (pointerdown)=\"press(-1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <span slIcon><svg slGlyph name=\"minus\"></svg></span>\n </button>\n }\n <ng-content select=\"[slNumberFieldStart]\" />\n <ng-content />\n <ng-content select=\"[slNumberFieldEnd]\" />\n @if (resolvedStepper() === 'split') {\n <button\n data-part=\"increment\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('increment')\"\n [disabled]=\"incrementDisabled()\"\n (pointerdown)=\"press(1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <span slIcon><svg slGlyph name=\"plus\"></svg></span>\n </button>\n } @else if (resolvedStepper() === 'stacked') {\n <span data-part=\"stepper\">\n <button\n data-part=\"increment\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('increment')\"\n [disabled]=\"incrementDisabled()\"\n (pointerdown)=\"press(1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <!-- Both halves draw the down chevron; the stylesheet turns the\n increment's half a turn. -->\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <button\n data-part=\"decrement\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-controls]=\"control()?.controlId()\"\n [attr.aria-label]=\"t('decrement')\"\n [disabled]=\"decrementDisabled()\"\n (pointerdown)=\"press(-1, $event)\"\n (pointerup)=\"release()\"\n (pointerleave)=\"release()\"\n (pointercancel)=\"release()\"\n >\n <span slIcon><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n </span>\n }\n @if (control()?.submissionName(); as submissionName) {\n <input\n type=\"hidden\"\n [attr.name]=\"submissionName\"\n [attr.form]=\"control()?.submissionForm()\"\n [value]=\"hiddenValue()\"\n />\n }`,\n styleUrl: '../../../styles/src/number-field/number-field.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'number-field',\n 'data-part': 'root',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-stepper]': 'resolvedStepper()',\n '[attr.data-disabled]': \"control()?.resolvedDisabled() === true ? '' : null\",\n '[attr.data-invalid]': \"control()?.resolvedInvalid() === true ? '' : null\",\n '[attr.data-readonly]': \"control()?.resolvedReadOnly() === true ? '' : null\",\n '[attr.data-scrubbing]': \"scrubbing() ? '' : null\",\n },\n})\nexport class SlNumberField {\n /** Defaults to the field, then to the token, then to `md`. */\n readonly size = input<NumberFieldSize | undefined>(undefined);\n /** Defaults to the token, then to `outline`. */\n readonly variant = input<NumberFieldVariant | undefined>(undefined);\n /** Where the two steppers sit. Defaults to the token, then to `stacked`. */\n readonly stepper = input<NumberFieldStepper | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * `increment` and `decrement` buttons' accessible names.\n */\n readonly messages = input<PartialMessages<NumberFieldMessages> | undefined>(undefined);\n\n private readonly defaults = injectNumberFieldDefaults();\n private readonly field = inject(SlField, { optional: true });\n\n /**\n * The control inside. It provides itself as `SlNumberFieldControl`, so the\n * frame can read the bounds, the submission name and the shared states\n * without either directive importing the other.\n */\n readonly control = contentChild(SlNumberFieldControl, { descendants: true });\n\n readonly resolvedSize = computed(\n () => this.size() ?? this.field?.resolvedSize() ?? this.defaults.size,\n );\n readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n readonly resolvedStepper = computed(() => this.stepper() ?? this.defaults.stepper);\n /** The family's words in the language in force, with this field's `messages` laid over them. */\n readonly t = injectMessages(numberFieldMessages, this.messages);\n\n /** Whether a `slNumberFieldScrub` inside is being dragged. */\n readonly scrubbing = signal(false);\n\n /** A control nobody can change has two buttons that would lie about it. */\n readonly inert = computed(() => {\n const control = this.control();\n return control?.resolvedDisabled() === true || control?.resolvedReadOnly() === true;\n });\n\n protected readonly incrementDisabled = computed(\n () => this.inert() || this.control()?.atMax() === true,\n );\n protected readonly decrementDisabled = computed(\n () => this.inert() || this.control()?.atMin() === true,\n );\n\n protected readonly hiddenValue = computed(() => {\n const value = this.control()?.numberValue() ?? null;\n return value === null ? '' : String(value);\n });\n\n private delay: ReturnType<typeof setTimeout> | undefined;\n private interval: ReturnType<typeof setInterval> | undefined;\n\n constructor() {\n /* A button unmounted mid-press would otherwise leave a timer running. */\n inject(DestroyRef).onDestroy(() => this.release());\n }\n\n /**\n * One step now, then repeating while the button is held. A coarse pointer\n * waits longer before the first repeat, because a finger that is starting to\n * scroll rests on the button first.\n */\n protected press(direction: 1 | -1, event: PointerEvent) {\n if (event.button !== 0) return;\n /* Focus stays on the value: the button is out of the tab order and the\n caret is what the reader came back to. */\n event.preventDefault();\n const control = this.control();\n if (control === undefined) return;\n control.stepBy(direction, event);\n\n this.release();\n const wait = event.pointerType === 'touch' ? STEP_REPEAT_DELAY_COARSE : STEP_REPEAT_DELAY;\n this.delay = setTimeout(() => {\n this.interval = setInterval(() => control.stepBy(direction, undefined), STEP_REPEAT_INTERVAL);\n }, wait);\n }\n\n protected release() {\n clearTimeout(this.delay);\n clearInterval(this.interval);\n this.delay = undefined;\n this.interval = undefined;\n }\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n HostAttributeToken,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport type { OnInit } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { clamp as clampNumber } from '@slotted/core/measure';\nimport { createNumberFormat, snapToStep as snapToGrid, stepNumber } from '@slotted/core/number';\nimport type { NumberFormat } from '@slotted/core/number';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\nimport { SlField } from '@slotted/angular/field';\nimport { injectLocale } from '@slotted/angular/i18n';\n\nimport { injectNumberFieldDefaults, SlNumberFieldControl } from './number-field-defaults';\nimport type { NumberFieldClamp, NumberFieldFormatOn } from './number-field-defaults';\nimport { SlNumberField } from './number-field';\n\n/** `undefined` stays absent; anything else becomes a number. */\nconst optionalNumber = (value: unknown) =>\n value === undefined || value === null || value === '' ? undefined : numberAttribute(value);\n\n/**\n * The control itself: the number, the identifier, and everything the field\n * around it says.\n *\n * **The element is `type=\"text\"` and carries the APG's `spinbutton` role.**\n * `type=\"number\"` empties itself whenever the text is not a valid\n * floating-point number, so no grouping separator, no decimal comma and no\n * currency affix survives it.\n *\n * **The text belongs to the element and the number belongs to the family.** The\n * number moves on every keystroke that parses. Under `formatOn=\"change\"`, the\n * default, the text takes the locale's shape on that same keystroke: the\n * grouping a long number is read by appears while it is being typed, and the\n * caret comes back to the character it was on because it is counted in the\n * reader's own characters rather than in string indices. Under\n * `formatOn=\"commit\"` the text is the reader's until blur, `Enter`, a stepper\n * press, a key step or a wheel turn.\n *\n * Rounding, padding and clamping belong to the commit under both. A keystroke\n * never takes away a nought the reader has just typed.\n *\n * **Unset means ask the field.** `disabled`, `readOnly` and `invalid` default to\n * `undefined` rather than `false`. A value the consumer wrote as a static\n * attribute is read before the host binding computes, so the binding never\n * writes over it.\n */\n@Directive({\n selector: 'input[slNumberFieldInput]',\n standalone: true,\n exportAs: 'slNumberFieldInput',\n providers: [\n { provide: SlNumberFieldControl, useExisting: forwardRef(() => SlNumberFieldInput) },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlNumberFieldInput), multi: true },\n ],\n host: {\n 'data-part': 'input',\n autocomplete: 'off',\n autocorrect: 'off',\n spellcheck: 'false',\n /* Bound rather than static, so a consumer who wrote `type=\"number\"` on a\n number field does not get the element that empties its own value. */\n '[attr.type]': \"'text'\",\n '[attr.role]': \"'spinbutton'\",\n '[attr.id]': 'controlId()',\n '[attr.inputmode]': 'resolvedInputMode()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'ariaInvalid()',\n '[attr.aria-required]': 'ariaRequired()',\n '[attr.aria-valuenow]': 'numberValue()',\n '[attr.aria-valuemin]': 'min() ?? null',\n '[attr.aria-valuemax]': 'max() ?? null',\n '[attr.aria-valuetext]': 'valueText()',\n '[attr.name]': 'null',\n '[attr.disabled]': 'disabledAttribute()',\n '[attr.readonly]': 'readonlyAttribute()',\n '(input)': 'onInput($event)',\n '(beforeinput)': 'onBeforeInput($event)',\n '(keydown)': 'onKeyDown($event)',\n '(blur)': 'onBlur($event)',\n },\n})\nexport class SlNumberFieldInput implements ControlValueAccessor, OnInit, SlNumberFieldControl {\n /**\n * Present means the consumer owns the number, for the life of the component.\n * `null` is empty, and `undefined` is the absence that makes the control\n * uncontrolled — the two are different answers.\n */\n readonly value = input<number | null | undefined, unknown>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : (optionalNumber(raw) ?? null)),\n });\n /** The number the control starts from when nobody else writes one. */\n readonly defaultValue = input<number | null, unknown>(null, {\n transform: (raw) => (raw === undefined ? null : (optionalNumber(raw) ?? null)),\n });\n\n readonly min = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n readonly max = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n readonly step = input<number, unknown>(1, { transform: (raw) => optionalNumber(raw) ?? 1 });\n /** The amount `Shift` and the page keys move by. Defaults to `step * 10`. */\n readonly largeStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n /** The amount `Alt` moves by. Defaults to `step / 10`. */\n readonly smallStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n /** Where an empty control starts stepping from. Defaults to `min`, then nought. */\n readonly stepFrom = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n readonly snapToStep = input(false, { transform: booleanAttribute });\n /** Where a value outside the range goes, and when. Defaults to the token, then `blur`. */\n readonly clamp = input<NumberFieldClamp | undefined>(undefined);\n /** How the value is written and read back, through `Intl.NumberFormat`. */\n readonly format = input<Intl.NumberFormatOptions | undefined>(undefined);\n /** When the text takes that shape. Defaults to the token, then `change`. */\n readonly formatOn = input<NumberFieldFormatOn | undefined>(undefined);\n /** BCP 47. Defaults to the language in force (`provideSlotted`). */\n readonly locale = input<string | undefined>(undefined);\n /**\n * Lets the wheel move the value while the control has focus. Off by default:\n * a reader scrolling a form must not change an amount by passing over it.\n */\n readonly wheel = input(false, { transform: booleanAttribute });\n\n /** Unstated rather than `false`, so the control defers to the field. */\n readonly disabled = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n readonly readOnly = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n readonly invalid = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: (raw) => (raw === undefined ? undefined : booleanAttribute(raw)),\n });\n\n /**\n * One output for one transition, carrying the value, the value it replaces,\n * the reason, the originating event and `cancel()`. There is no `[(value)]`,\n * because a two-way binding has one slot and can carry none of those; a form\n * gets the same movement through `ControlValueAccessor`.\n */\n readonly valueChange = output<ChangeRequest<number | null>>();\n\n private readonly element = inject<ElementRef<HTMLInputElement>>(ElementRef).nativeElement;\n /**\n * The frame around the control. Injected without `optional`, so an `input`\n * written without it fails at construction rather than silently losing its\n * border, its ring and the place its two buttons stand.\n */\n readonly numberField = inject(SlNumberField);\n private readonly field = inject(SlField, { optional: true });\n private readonly defaults = injectNumberFieldDefaults();\n private readonly appLocale = injectLocale();\n\n private readonly writtenId = inject(new HostAttributeToken('id'), { optional: true });\n private readonly writtenName = inject(new HostAttributeToken('name'), { optional: true });\n private readonly writtenForm = inject(new HostAttributeToken('form'), { optional: true });\n private readonly writtenInputMode = inject(new HostAttributeToken('inputmode'), {\n optional: true,\n });\n private readonly writtenDescribedBy = inject(new HostAttributeToken('aria-describedby'), {\n optional: true,\n });\n private readonly writtenInvalid = inject(new HostAttributeToken('aria-invalid'), {\n optional: true,\n });\n private readonly writtenRequired = inject(new HostAttributeToken('aria-required'), {\n optional: true,\n });\n private readonly writtenReadonly = inject(new HostAttributeToken('readonly'), { optional: true });\n\n /** What the family holds when nobody else owns it. */\n private readonly own = signal<number | null>(null);\n /** What the element is showing. Never a second copy of the number. */\n private readonly text = signal('');\n private readonly formDisabled = signal<boolean | undefined>(undefined);\n private onChangeFn: (value: number | null) => void = () => undefined;\n private onTouchedFn: () => void = () => undefined;\n\n /**\n * One formatter, rebuilt only when the locale or the format changes. The\n * options object is read through a signal, so an inline object handed on\n * every change detection does not rebuild the parser.\n */\n private readonly formatter = computed<NumberFormat>(() => {\n const options = this.format();\n return createNumberFormat({\n locale: this.locale() ?? this.appLocale(),\n ...(options === undefined ? {} : { options }),\n });\n });\n\n /** Present means the consumer owns it; absent means the directive does. */\n private readonly controlled = computed(() => this.value() !== undefined);\n readonly numberValue = computed(() => {\n const bound = this.value();\n return bound === undefined ? this.own() : bound;\n });\n readonly valueText = computed(() => {\n const shown = this.text();\n return shown === '' ? null : shown;\n });\n\n readonly resolvedClamp = computed(() => this.clamp() ?? this.defaults.clamp);\n protected readonly resolvedFormatOn = computed(() => this.formatOn() ?? this.defaults.formatOn);\n readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.formDisabled() ?? this.field?.resolvedDisabled(),\n );\n readonly resolvedReadOnly = computed(\n () =>\n this.readOnly() ??\n (this.writtenReadonly === null ? undefined : true) ??\n this.field?.resolvedReadOnly(),\n );\n /**\n * Unstated, the control asks the field. Under `clamp=\"none\"` nothing returns\n * a number outside `min`…`max` to the range, so the control reports it.\n */\n private readonly outsideRange = computed(() => {\n const current = this.numberValue();\n const min = this.min();\n const max = this.max();\n return (\n this.resolvedClamp() === 'none' &&\n current !== null &&\n ((min !== undefined && current < min) || (max !== undefined && current > max))\n );\n });\n readonly resolvedInvalid = computed(\n () => this.invalid() ?? (this.outsideRange() ? true : this.field?.invalid()),\n );\n\n readonly controlId = computed(() => this.writtenId ?? this.field?.ids().control ?? null);\n readonly submissionName = computed(() => this.writtenName);\n readonly submissionForm = computed(() => this.writtenForm);\n\n private readonly parsedText = computed(() => this.formatter().parse(this.text()));\n readonly atMax = computed(() => {\n const max = this.max();\n const current = this.parsedText();\n return max !== undefined && current !== null && current >= max;\n });\n readonly atMin = computed(() => {\n const min = this.min();\n const current = this.parsedText();\n return min !== undefined && current !== null && current <= min;\n });\n\n /**\n * The software keyboard, derived from the props rather than from the user\n * agent. Neither numeric keypad offers a minus sign on every platform, so a\n * control that admits a negative asks for the full keyboard.\n */\n protected readonly resolvedInputMode = computed(() => {\n if (this.writtenInputMode !== null) return this.writtenInputMode;\n const min = this.min();\n if (min === undefined || min < 0) return 'text';\n return this.formatter().maximumFractionDigits > 0 ? 'decimal' : 'numeric';\n });\n\n protected readonly describedBy = computed(() => {\n const merged = [this.writtenDescribedBy, this.field?.describedBy()].filter(Boolean);\n return merged.length === 0 ? null : merged.join(' ');\n });\n protected readonly ariaInvalid = computed(\n () => this.writtenInvalid ?? (this.resolvedInvalid() === true ? 'true' : null),\n );\n protected readonly ariaRequired = computed(\n () => this.writtenRequired ?? (this.field?.required() === true ? 'true' : null),\n );\n protected readonly disabledAttribute = computed(() =>\n this.resolvedDisabled() === true ? '' : null,\n );\n protected readonly readonlyAttribute = computed(() =>\n this.resolvedReadOnly() === true ? '' : null,\n );\n\n constructor() {\n /* The element shows what the family holds, and the text is only rewritten\n when it no longer means the same number — typing `1234` must not become\n `1,234` between two keystrokes. */\n effect(() => {\n const next = this.numberValue();\n const formatter = this.formatter();\n if (Object.is(next, formatter.parse(this.text()))) return;\n this.write(formatter.format(next));\n });\n\n this.attachWheel();\n }\n\n /**\n * Angular creates every directive in a template before it binds any input, so\n * the starting value is read here rather than in the constructor: read there,\n * `defaultValue` is always its own default and the control starts empty.\n */\n ngOnInit() {\n const bound = this.value();\n const initial = bound === undefined ? this.defaultValue() : bound;\n if (bound === undefined) this.own.set(initial);\n this.write(this.formatter().format(initial));\n }\n\n /** The native element, for `focus()`, `select()` and `setSelectionRange()`. */\n get inputElement(): HTMLInputElement {\n return this.element;\n }\n\n /** Steps up by one step and reports `programmatic`. */\n increment() {\n this.move(1, this.step(), 'programmatic', undefined);\n }\n\n /** Steps down by one step and reports `programmatic`. */\n decrement() {\n this.move(-1, this.step(), 'programmatic', undefined);\n }\n\n /** What a `slNumberFieldScrub` drag calls, once per whole step travelled. */\n scrubBy(steps: number, source: PointerEvent) {\n if (steps === 0) return;\n const step = this.step();\n const amount = source.shiftKey\n ? (this.largeStep() ?? step * 10)\n : source.altKey\n ? (this.smallStep() ?? step / 10)\n : step;\n this.move(steps > 0 ? 1 : -1, amount * Math.abs(steps), 'pointer', source);\n }\n\n /** What the frame's two buttons call. Focus returns to the value. */\n stepBy(direction: 1 | -1, source: Event | undefined) {\n this.element.focus();\n this.move(direction, this.step(), 'pointer', source);\n }\n\n writeValue(value: number | null) {\n this.own.set(value ?? null);\n this.write(this.formatter().format(value ?? null));\n }\n\n registerOnChange(fn: (value: number | null) => void) {\n this.onChangeFn = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouchedFn = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.formDisabled.set(isDisabled);\n }\n\n protected onInput(event: Event) {\n const raw = this.element.value;\n const native = event as InputEvent;\n\n /* An IME commits a whole run, and a run reshaped half way through is a run\n the engine can no longer finish. The text is left alone until\n `compositionend` sends a keystroke that is not composing. */\n if (this.resolvedFormatOn() !== 'change' || native.isComposing) {\n this.text.set(raw);\n this.request(this.formatter().parse(raw), 'keyboard', undefined);\n return;\n }\n\n const formatter = this.formatter();\n const caret = this.element.selectionStart ?? raw.length;\n const deletion = native.inputType?.startsWith('delete') === true;\n const edited = deletion\n ? formatter.deleteAcrossSeparator(\n this.text(),\n { text: raw, caret },\n native.inputType === 'deleteContentForward' ? 1 : -1,\n )\n : { text: raw, caret };\n const shaped = formatter.formatWhileTyping(edited);\n\n this.write(shaped.text);\n /* Only while the reader is in the control: moving the selection of an\n element nobody is typing in scrolls it into view on some engines. */\n if (this.element.ownerDocument.activeElement === this.element) {\n this.element.setSelectionRange(shaped.caret, shaped.caret);\n }\n this.request(formatter.parse(shaped.text), 'keyboard', undefined);\n }\n\n /**\n * The keystroke filter. `beforeinput` is where a keystroke, a paste and a\n * drop all arrive before the element changes, and it is the only place a\n * character that cannot be part of a number can be refused without moving\n * the caret.\n */\n protected onBeforeInput(event: InputEvent) {\n if (event.defaultPrevented) return;\n /* An IME commits a whole run; refusing it character by character would\n make a full-width `123` untypeable. */\n if (event.isComposing) return;\n if (event.inputType.startsWith('delete')) return;\n\n const start = this.element.selectionStart ?? this.element.value.length;\n const finish = this.element.selectionEnd ?? this.element.value.length;\n const next =\n this.element.value.slice(0, start) + (event.data ?? '') + this.element.value.slice(finish);\n\n const formatter = this.formatter();\n if (!formatter.isPartial(next)) {\n event.preventDefault();\n return;\n }\n if (this.resolvedClamp() !== 'strict') return;\n const parsed = formatter.parse(next);\n if (parsed === null) return;\n const min = this.min();\n const max = this.max();\n if ((min !== undefined && parsed < min) || (max !== undefined && parsed > max)) {\n event.preventDefault();\n }\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented) return;\n if (this.resolvedDisabled() === true || this.resolvedReadOnly() === true) return;\n\n const step = this.step();\n const large = this.largeStep() ?? step * 10;\n const small = this.smallStep() ?? step / 10;\n const amount = event.shiftKey ? large : event.altKey ? small : step;\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.move(1, amount, 'keyboard', event);\n return;\n case 'ArrowDown':\n event.preventDefault();\n this.move(-1, amount, 'keyboard', event);\n return;\n case 'PageUp':\n event.preventDefault();\n this.move(1, large, 'keyboard', event);\n return;\n case 'PageDown':\n event.preventDefault();\n this.move(-1, large, 'keyboard', event);\n return;\n case 'Home': {\n const min = this.min();\n if (min === undefined || event.ctrlKey || event.metaKey) return;\n event.preventDefault();\n this.settle(min, this.request(min, 'keyboard', event));\n return;\n }\n case 'End': {\n const max = this.max();\n if (max === undefined || event.ctrlKey || event.metaKey) return;\n event.preventDefault();\n this.settle(max, this.request(max, 'keyboard', event));\n return;\n }\n case 'Enter':\n /* Committed and not intercepted: a single-line control submits its\n form, which is the platform's behaviour. */\n this.commit('keyboard', event);\n return;\n default:\n }\n }\n\n protected onBlur(event: FocusEvent) {\n this.onTouchedFn();\n this.commit('blur', event);\n }\n\n /**\n * The wheel, when it is asked for, and never otherwise. It is a native\n * listener rather than a host binding because the event has to be cancelled,\n * and a host listener on `wheel` is passive in some browsers.\n */\n private attachWheel() {\n const onWheel = (event: WheelEvent) => {\n if (!this.wheel()) return;\n if (this.resolvedDisabled() === true || this.resolvedReadOnly() === true) return;\n if (this.element.ownerDocument.activeElement !== this.element) return;\n if (event.deltaY === 0) return;\n event.preventDefault();\n this.move(event.deltaY < 0 ? 1 : -1, this.step(), 'pointer', event);\n };\n\n this.element.addEventListener('wheel', onWheel, { passive: false });\n inject(DestroyRef).onDestroy(() => this.element.removeEventListener('wheel', onWheel));\n }\n\n /** Formats what the reader typed and puts the value back in range. */\n private commit(reason: ChangeReason, source: Event | undefined) {\n const formatter = this.formatter();\n let next = formatter.parse(this.text());\n const min = this.min();\n const max = this.max();\n\n if (next !== null) {\n /* The number committed is the number shown: rounded to the precision\n the format states, through the same formatter. */\n next = formatter.parse(formatter.format(next)) ?? next;\n /* A typed value goes to the nearest multiple of the grid. */\n if (this.snapToStep()) next = snapToGrid(next, this.step(), min ?? 0);\n if (this.resolvedClamp() !== 'none') {\n next = clampNumber(next, min ?? Number.NEGATIVE_INFINITY, max ?? Number.POSITIVE_INFINITY);\n }\n }\n this.settle(next, this.request(next, reason, source));\n }\n\n private move(direction: 1 | -1, amount: number, reason: ChangeReason, source: Event | undefined) {\n const min = this.min();\n const max = this.max();\n const stepFrom = this.stepFrom();\n const next = stepNumber({\n value: this.formatter().parse(this.text()),\n direction,\n step: amount,\n ...(min === undefined ? {} : { min }),\n ...(max === undefined ? {} : { max }),\n ...(stepFrom === undefined ? {} : { stepFrom }),\n snapToStep: this.snapToStep(),\n });\n this.settle(next, this.request(next, reason, source));\n }\n\n /**\n * Asks to move, and says whether anything did. A refused request answers\n * `false`, and the caller uses that to decide what the element shows: a\n * control that wrote the new number into the text regardless would show a\n * value the consumer never accepted.\n */\n private request(next: number | null, reason: ChangeReason, source: Event | undefined): boolean {\n const current = this.numberValue();\n if (Object.is(next, current)) return false;\n\n let cancelled = false;\n const state = createControllable<number | null>({\n controlled: undefined,\n initial: current,\n onRequest: (pending) => {\n this.valueChange.emit(pending);\n cancelled = pending.cancelled;\n },\n });\n state.request(next, reason, source);\n if (cancelled) return false;\n\n this.onChangeFn(next);\n /* A controlled control never moves its own number: it asks, and waits for\n the consumer's next value. */\n if (this.controlled()) return false;\n this.own.set(next);\n return true;\n }\n\n private settle(next: number | null, moved: boolean) {\n const shown = moved ? next : this.numberValue();\n this.write(this.formatter().format(shown));\n }\n\n /** One place the element's text is written, so the signal never drifts from it. */\n private write(value: string) {\n if (this.element.value !== value) this.element.value = value;\n this.text.set(value);\n }\n}\n","import { Directive, inject, input, signal } from '@angular/core';\nimport { createScrub, SCRUB_SENSITIVITY } from '@slotted/core/number';\nimport type { Scrub } from '@slotted/core/number';\n\nimport { SlNumberField } from './number-field';\n\n/**\n * An adornment before the value in the reading direction: a currency mark, a\n * unit, an icon. Named for the direction rather than for a side, so the same\n * markup puts the mark before the amount in both directions.\n *\n * It is a sibling of the number rather than part of it. A symbol that belongs\n * *inside* the value — the `R$` of a currency format, a percent sign — is\n * `format`'s job and arrives through `Intl` as part of the string the control\n * holds; this one is never selected, never copied and never parsed.\n */\n@Directive({\n selector: '[slNumberFieldStart]',\n standalone: true,\n exportAs: 'slNumberFieldStart',\n host: { 'data-part': 'start' },\n})\nexport class SlNumberFieldStart {}\n\n/** An adornment after the value in the reading direction. */\n@Directive({\n selector: '[slNumberFieldEnd]',\n standalone: true,\n exportAs: 'slNumberFieldEnd',\n host: { 'data-part': 'end' },\n})\nexport class SlNumberFieldEnd {}\n\n/**\n * A mark that moves the number when it is dragged sideways — the design\n * tools' gesture. Placed inside `slNumberFieldStart` or `slNumberFieldEnd`,\n * where the frame it belongs to is its ancestor:\n *\n * ```html\n * <span slNumberFieldStart><span slNumberFieldScrub>W</span></span>\n * ```\n *\n * Each `sensitivity` pixels towards the inline end is one step up; `Shift`\n * moves by the large step and `Alt` by the small one, as on the keyboard. It\n * is hidden from assistive technology and takes no focus: the input's arrow\n * keys are the same movement.\n */\n@Directive({\n selector: '[slNumberFieldScrub]',\n standalone: true,\n exportAs: 'slNumberFieldScrub',\n host: {\n 'data-part': 'scrub',\n 'aria-hidden': 'true',\n '[attr.data-scrubbing]': \"active() ? '' : null\",\n '(pointerdown)': 'begin($event)',\n '(pointermove)': 'drag($event)',\n '(pointerup)': 'end()',\n '(pointercancel)': 'end()',\n '(lostpointercapture)': 'end()',\n },\n})\nexport class SlNumberFieldScrub {\n /** Pixels of horizontal travel per step. Defaults to 2. */\n readonly sensitivity = input<number>(SCRUB_SENSITIVITY);\n\n private readonly frame = inject(SlNumberField);\n protected readonly active = signal(false);\n private travel: Scrub | null = null;\n\n protected begin(event: PointerEvent) {\n const control = this.frame.control();\n if (event.button !== 0 || control === undefined || this.frame.inert()) return;\n /* No text selection, and the caret stays in the value the drag moves. */\n event.preventDefault();\n control.inputElement.focus();\n (event.currentTarget as Element | null)?.setPointerCapture?.(event.pointerId);\n this.travel = createScrub({\n clientX: event.clientX,\n sensitivity: this.sensitivity(),\n rtl: getComputedStyle(control.inputElement).direction === 'rtl',\n });\n this.active.set(true);\n this.frame.scrubbing.set(true);\n }\n\n protected drag(event: PointerEvent) {\n if (this.travel === null) return;\n this.frame.control()?.scrubBy(this.travel.steps(event.clientX), event);\n }\n\n protected end() {\n if (this.travel === null) return;\n this.travel = null;\n this.active.set(false);\n this.frame.scrubbing.set(false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["snapToGrid","clampNumber"],"mappings":"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"}
|