@genesislcap/foundation-ui 15.46.3 → 15.46.5-FUI-2648.1
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/dist/custom-elements.json +811 -713
- package/dist/dts/number-field/number-field.d.ts +10 -0
- package/dist/dts/number-field/number-field.d.ts.map +1 -1
- package/dist/dts/number-field/utils.d.ts +7 -0
- package/dist/dts/number-field/utils.d.ts.map +1 -1
- package/dist/dts/react.d.ts +9 -9
- package/dist/dts/stepper/stepper.d.ts +1 -0
- package/dist/dts/stepper/stepper.d.ts.map +1 -1
- package/dist/dts/stepper/stepper.template.d.ts.map +1 -1
- package/dist/dts/stepper-tab/stepper-tab.template.d.ts.map +1 -1
- package/dist/esm/number-field/number-field.js +54 -12
- package/dist/esm/number-field/utils.js +102 -16
- package/dist/esm/stepper/stepper.js +4 -0
- package/dist/esm/stepper/stepper.template.js +24 -6
- package/dist/esm/stepper-tab/stepper-tab.template.js +49 -2
- package/dist/foundation-ui.api.json +30 -0
- package/dist/foundation-ui.d.ts +11 -0
- package/dist/react.cjs +6 -6
- package/dist/react.mjs +5 -5
- package/package.json +17 -17
|
@@ -28,7 +28,17 @@ export declare class NumberField extends NumberField_base {
|
|
|
28
28
|
stepUp(): void;
|
|
29
29
|
stepDown(): void;
|
|
30
30
|
hasSeparatorWithoutDecimals(): RegExp;
|
|
31
|
+
/**
|
|
32
|
+
* Writes text the user is editing back to the control, keeping the caret next to the same
|
|
33
|
+
* value characters instead of letting the assignment move it to the end.
|
|
34
|
+
*/
|
|
35
|
+
private writeControlValue;
|
|
31
36
|
private restoreControlToCommittedValue;
|
|
37
|
+
/**
|
|
38
|
+
* Backspace/Delete next to a group separator would only delete the separator, which
|
|
39
|
+
* reformatting puts straight back. Step the caret over it so the key deletes the digit.
|
|
40
|
+
*/
|
|
41
|
+
private skipGroupSeparator;
|
|
32
42
|
handleKeyDown(e: KeyboardEvent): boolean;
|
|
33
43
|
handleTextInput(): void;
|
|
34
44
|
valueChanged(previous: any, next: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-field.d.ts","sourceRoot":"","sources":["../../../src/number-field/number-field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"number-field.d.ts","sourceRoot":"","sources":["../../../src/number-field/number-field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;;;;;;;;;;;AAuBrE;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,gBAA2B;IACpD,YAAY,EAAE,MAAM,CAAS;IACnC,OAAO,CAAC,mBAAmB;IAKA,QAAQ,EAAE,OAAO,CAAS;IAQrD,KAAK,EAAE,MAAM,CAAM;IACQ,cAAc,EAAE,OAAO,CAAS;IACrD,MAAM,EAAE,MAAM,CAAW;IACJ,iBAAiB,EAAE,OAAO,CAAS;IACxD,qBAAqB,EAAE,MAAM,CAAuB;IAE1D,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAG/B;IAEF,MAAM,IAAI,IAAI;IAuCd,QAAQ,IAAI,IAAI;IA0ChB,2BAA2B;IAK3B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,8BAA8B;IAatC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAe1B,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO;IAUxC,eAAe,IAAI,IAAI;IA+DvB,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAsC5C,UAAU,IAAI,IAAI;CA4BnB;AAED,eAAO,MAAM,kCAAkC,EAAE,cAGhD,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;CAWpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,oTAMhC,CAAC"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
export declare const getSeparatorsFromParser: (value: string, locale: string) => {
|
|
2
2
|
decimalSeparator: string;
|
|
3
|
+
groupSeparator: string;
|
|
3
4
|
};
|
|
5
|
+
/**
|
|
6
|
+
* Maps a caret position in `oldValue` (the raw control text) to the equivalent position in
|
|
7
|
+
* `newValue` (the text after formatting or restoring), keeping the caret next to the same
|
|
8
|
+
* value characters.
|
|
9
|
+
*/
|
|
10
|
+
export declare const calculateCursorPosition: (oldValue: string, newValue: string, oldCursor: number, locale: string) => number;
|
|
4
11
|
/**
|
|
5
12
|
* Strips locale grouping and normalizes the decimal separator to `.` without using `Number`
|
|
6
13
|
* (so integers beyond `Number.MAX_SAFE_INTEGER` keep every digit).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/number-field/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/number-field/utils.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,uBAAuB,GAClC,OAAO,MAAM,EACb,QAAQ,MAAM,KACb;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAGpD,CAAC;AAiCF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,QAAQ,MAAM,KACb,MA+CF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,MAW9E,CAAC;AAEF,6FAA6F;AAC7F,eAAO,MAAM,4BAA4B,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MAS5E,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,OAC5B,CAAC;AAElD,uGAAuG;AACvG,eAAO,MAAM,gCAAgC,GAC3C,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,WAAW,MAAM,KAChB,OAMF,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,uCAAuC,GAClD,gBAAgB,MAAM,EACtB,aAAa,MAAM,EACnB,QAAQ,MAAM,EACd,WAAW,MAAM,KAChB,OAEoD,CAAC;AAkFxD,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MAWlE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,MAOnE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,SAAS,IAAI,CAAC,mBAAmB,KAChC,MAQF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GACtC,OAAO,MAAM,EACb,SAAS,IAAI,CAAC,mBAAmB,KAChC,MAyCF,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,OAAO,MAAM,EACb,aAAa,MAAM,EACnB,QAAQ,MAAM,KACb,MA+BF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,GAAG,MAAM,EACtB,QAAQ,MAAM,EACd,wBAAqB,EACrB,YAAY,MAAM,KACjB,MAkEF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,YAAY,MAAM,EAClB,iBAAiB,MAAM,KACtB,MAaF,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,uBAAqB,EACrB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,YAAY,MAAM,KACjB,MAyBF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAyBvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAyB5D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,GAAG,MAAM,EAAE,MAAM,MAAM,KAAG,MAgDnF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,GAAG,MAAM,EAAE,MAAM,MAAM,KAAG,MA+CnF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,GAAI,OAAO,MAAM,GAAG,MAAM,KAAG,MA8BnE,CAAC"}
|
package/dist/dts/react.d.ts
CHANGED
|
@@ -142,15 +142,6 @@ export declare const Accordion: React.ForwardRefExoticComponent<
|
|
|
142
142
|
>;
|
|
143
143
|
export type AccordionRef = AccordionWC;
|
|
144
144
|
|
|
145
|
-
export declare const ActionsMenu: React.ForwardRefExoticComponent<
|
|
146
|
-
React.PropsWithChildren<
|
|
147
|
-
Omit<PublicOf<ActionsMenuWC>, 'children' | 'style'> &
|
|
148
|
-
HTMLWCProps & {
|
|
149
|
-
}
|
|
150
|
-
> & React.RefAttributes<ActionsMenuWC>
|
|
151
|
-
>;
|
|
152
|
-
export type ActionsMenuRef = ActionsMenuWC;
|
|
153
|
-
|
|
154
145
|
export declare const AccordionItem: React.ForwardRefExoticComponent<
|
|
155
146
|
React.PropsWithChildren<
|
|
156
147
|
Omit<PublicOf<AccordionItemWC>, 'children' | 'style'> &
|
|
@@ -180,6 +171,15 @@ export declare const AiIndicator: React.ForwardRefExoticComponent<
|
|
|
180
171
|
>;
|
|
181
172
|
export type AiIndicatorRef = AiIndicatorWC;
|
|
182
173
|
|
|
174
|
+
export declare const ActionsMenu: React.ForwardRefExoticComponent<
|
|
175
|
+
React.PropsWithChildren<
|
|
176
|
+
Omit<PublicOf<ActionsMenuWC>, 'children' | 'style'> &
|
|
177
|
+
HTMLWCProps & {
|
|
178
|
+
}
|
|
179
|
+
> & React.RefAttributes<ActionsMenuWC>
|
|
180
|
+
>;
|
|
181
|
+
export type ActionsMenuRef = ActionsMenuWC;
|
|
182
|
+
|
|
183
183
|
export declare const Anchor: React.ForwardRefExoticComponent<
|
|
184
184
|
React.PropsWithChildren<
|
|
185
185
|
Omit<PublicOf<AnchorWC>, 'children' | 'style'> &
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../../src/stepper/stepper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,CAAA;CAAE,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,qBAAa,OAAQ,SAAQ,iBAAiB;IACgB,gBAAgB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"stepper.d.ts","sourceRoot":"","sources":["../../../src/stepper/stepper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,CAAA;CAAE,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,qBAAa,OAAQ,SAAQ,iBAAiB;IACgB,gBAAgB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAS;IAC3B,cAAc,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAS;IACrC,iBAAiB,EAAE,OAAO,CAAS;IACtC,cAAc,EAAE,OAAO,CAAS;IACvC,QAAQ,EAAE,OAAO,CAAS;IAC7E;;;;OAIG;IACqD,aAAa,EAAE,OAAO,CAAS;IACjF,WAAW,EAAE,eAAe,CAA4B;IAC9D,kBAAkB,IAAI,IAAI;IAOpB,QAAQ,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa7C,IAAI,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAM;IACpD,WAAW,IAAI,IAAI;IAUP,SAAS,EAAE,WAAW,EAAE,CAAM;IAC1C,gBAAgB,IAAI,IAAI;IAMZ,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,aAAa,SAAK;IAClB,cAAc,EAAE,MAAM,CAAK;IAEvC,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAkB;IAE1C,iBAAiB,IAAI,IAAI;IAQzB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,8BAA8B;IAOtC,OAAO,CAAC,cAAc;IAStB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,sBAAsB,GAAE,OAAe,GAAG,OAAO;IAkD9E;;;OAGG;IACH,aAAa,IAAI,OAAO;IAIxB;;;OAGG;IACH,YAAY,IAAI,OAAO;IAIvB,eAAe,CAAC,SAAS,KAAA;IAQzB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,iBAAiB;IA0CzB,IAAc,oBAAoB,YAEjC;IAED,IAAc,UAAU,YAEvB;IAED,IAAc,eAAe,YAkB5B;IAED,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,IAAI;IA0ChB,YAAY,IAAI,IAAI;IAQpB,SAAS,CAAC,OAAO,QAAO,IAAI,CAoC1B;IAEF,gBAAgB,aAYd;IAEF,OAAO,CAAC,YAAY,CAUlB;IAEF,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,mBAAmB;CAG5B;AAGD,eAAO,MAAM,8BAA8B,EAAE,cAA0B,CAAC;AAExE,eAAO,MAAM,oBAAoB,IAAK,CAAC;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;kBAM5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepper.template.d.ts","sourceRoot":"","sources":["../../../src/stepper/stepper.template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"stepper.template.d.ts","sourceRoot":"","sources":["../../../src/stepper/stepper.template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC,eAAO,MAAM,kBAAkB,GAAI,WAAM,iEAyDxC,CAAC;AAEF,eAAO,MAAM,yBAAyB,8DAErC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepper-tab.template.d.ts","sourceRoot":"","sources":["../../../src/stepper-tab/stepper-tab.template.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"stepper-tab.template.d.ts","sourceRoot":"","sources":["../../../src/stepper-tab/stepper-tab.template.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAuChD,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,oEAsEnD,CAAC;AAEF,eAAO,MAAM,4BAA4B,iEAExC,CAAC"}
|
|
@@ -2,11 +2,11 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { NumberParser } from '@genesislcap/foundation-utils';
|
|
3
3
|
import { NumberField as FASTNumberField } from '@microsoft/fast-components';
|
|
4
4
|
import { DOM, attr } from '@microsoft/fast-element';
|
|
5
|
-
import { keyEnter } from '@microsoft/fast-web-utilities';
|
|
5
|
+
import { keyBackspace, keyDelete, keyEnter } from '@microsoft/fast-web-utilities';
|
|
6
6
|
import { AffixMixin } from '../_common';
|
|
7
7
|
import { foundationNumberFieldStyles as styles } from './number-field.styles';
|
|
8
8
|
import { foundationNumberFieldTemplate as template } from './number-field.template';
|
|
9
|
-
import { applyDecimalPrecisionLimits, calculateAutoStepPrecision, decrementWithPrecision, formatControlValue, incrementWithPrecision, toIntlNumberFormat, validateInput, validateMinMax, hasMultipleDecimalSeparators, rejectsDecimalAtMaximumIntegerPrecision, } from './utils';
|
|
9
|
+
import { applyDecimalPrecisionLimits, calculateAutoStepPrecision, calculateCursorPosition, decrementWithPrecision, formatControlValue, getSeparatorsFromParser, incrementWithPrecision, toIntlNumberFormat, validateInput, validateMinMax, hasMultipleDecimalSeparators, rejectsDecimalAtMaximumIntegerPrecision, } from './utils';
|
|
10
10
|
const MAX_DECIMAL_PLACES = 3;
|
|
11
11
|
const MAX_INPUT_PRECISION = 12;
|
|
12
12
|
/**
|
|
@@ -95,25 +95,67 @@ export class NumberField extends AffixMixin(FASTNumberField) {
|
|
|
95
95
|
const regexString = `[.]$`;
|
|
96
96
|
return new RegExp(regexString);
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Writes text the user is editing back to the control, keeping the caret next to the same
|
|
100
|
+
* value characters instead of letting the assignment move it to the end.
|
|
101
|
+
*/
|
|
102
|
+
writeControlValue(next) {
|
|
103
|
+
const control = this.control;
|
|
104
|
+
const previous = control.value;
|
|
105
|
+
if (previous === next)
|
|
106
|
+
return;
|
|
107
|
+
const { selectionStart, selectionEnd } = control;
|
|
108
|
+
control.value = next;
|
|
109
|
+
// Only move the caret of a focused field: setting selection can focus it in WebKit, and
|
|
110
|
+
// programmatic stepUp()/stepDown() or a callback running after blur must not do that.
|
|
111
|
+
if (selectionStart === null ||
|
|
112
|
+
control.getRootNode().activeElement !== control) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const start = calculateCursorPosition(previous, next, selectionStart, this.locale);
|
|
116
|
+
const end = selectionEnd === null || selectionEnd === selectionStart
|
|
117
|
+
? start
|
|
118
|
+
: calculateCursorPosition(previous, next, selectionEnd, this.locale);
|
|
119
|
+
control.setSelectionRange(start, end);
|
|
120
|
+
}
|
|
98
121
|
restoreControlToCommittedValue() {
|
|
99
122
|
if (!this.control)
|
|
100
123
|
return;
|
|
101
124
|
const previousValue = this.value;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
this
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
this.control.value =
|
|
108
|
-
this.withFormatting && previousValue
|
|
125
|
+
this.writeControlValue(!previousValue
|
|
126
|
+
? ''
|
|
127
|
+
: this.withFormatting
|
|
109
128
|
? toIntlNumberFormat(previousValue, this.locale, this.options)
|
|
110
|
-
: formatControlValue(String(previousValue), this.locale);
|
|
129
|
+
: formatControlValue(String(previousValue), this.locale));
|
|
111
130
|
this['isUserInput'] = false;
|
|
112
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Backspace/Delete next to a group separator would only delete the separator, which
|
|
134
|
+
* reformatting puts straight back. Step the caret over it so the key deletes the digit.
|
|
135
|
+
*/
|
|
136
|
+
skipGroupSeparator(e) {
|
|
137
|
+
if (!this.withFormatting || e.ctrlKey || e.metaKey || e.altKey)
|
|
138
|
+
return;
|
|
139
|
+
const { value, selectionStart, selectionEnd } = this.control;
|
|
140
|
+
if (selectionStart === null || selectionStart !== selectionEnd)
|
|
141
|
+
return;
|
|
142
|
+
const { groupSeparator } = getSeparatorsFromParser(value, this.locale);
|
|
143
|
+
if (!groupSeparator)
|
|
144
|
+
return;
|
|
145
|
+
if (e.key === keyBackspace && value[selectionStart - 1] === groupSeparator) {
|
|
146
|
+
this.control.setSelectionRange(selectionStart - 1, selectionStart - 1);
|
|
147
|
+
}
|
|
148
|
+
else if (e.key === keyDelete && value[selectionStart] === groupSeparator) {
|
|
149
|
+
this.control.setSelectionRange(selectionStart + 1, selectionStart + 1);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
113
152
|
handleKeyDown(e) {
|
|
114
153
|
if (e.key === keyEnter) {
|
|
115
154
|
this['isUserInput'] = false;
|
|
116
155
|
}
|
|
156
|
+
if (this.control && (e.key === keyBackspace || e.key === keyDelete)) {
|
|
157
|
+
this.skipGroupSeparator(e);
|
|
158
|
+
}
|
|
117
159
|
return super.handleKeyDown(e);
|
|
118
160
|
}
|
|
119
161
|
handleTextInput() {
|
|
@@ -142,7 +184,7 @@ export class NumberField extends AffixMixin(FASTNumberField) {
|
|
|
142
184
|
const displayValue = this.withFormatting && validValue !== ''
|
|
143
185
|
? toIntlNumberFormat(validValue, this.locale, this.options)
|
|
144
186
|
: formatControlValue(validValue, this.locale);
|
|
145
|
-
this.
|
|
187
|
+
this.writeControlValue(applyDecimalPrecisionLimits(displayValue, this.options));
|
|
146
188
|
}
|
|
147
189
|
this.value = applyDecimalPrecisionLimits(validValue, this.options);
|
|
148
190
|
this.$emit('input');
|
|
@@ -153,7 +195,7 @@ export class NumberField extends AffixMixin(FASTNumberField) {
|
|
|
153
195
|
DOM.queueUpdate(() => {
|
|
154
196
|
var _a;
|
|
155
197
|
if (this.control) {
|
|
156
|
-
this.
|
|
198
|
+
this.writeControlValue(this.control.value.replace(/[^0-9\-+e.]/g, ''));
|
|
157
199
|
}
|
|
158
200
|
this.value = ((_a = this.control) === null || _a === void 0 ? void 0 : _a.value) || '';
|
|
159
201
|
this.$emit('input');
|
|
@@ -3,21 +3,113 @@ const formattedInputPrecision = 12;
|
|
|
3
3
|
const FORMAT_TEST_NUMBER = 12345.6;
|
|
4
4
|
const DECIMAL_BASE = 10;
|
|
5
5
|
const MAX_DIGIT = DECIMAL_BASE - 1;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const DIGIT_PROBE = 9876543210;
|
|
7
|
+
const localeSymbolsCache = new Map();
|
|
8
|
+
/** Separators and digits for a locale; cached because it runs several times per keystroke. */
|
|
9
|
+
const getLocaleNumberSymbols = (locale) => {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
const cached = localeSymbolsCache.get(locale);
|
|
12
|
+
if (cached) {
|
|
13
|
+
return cached;
|
|
14
|
+
}
|
|
8
15
|
const parts = new Intl.NumberFormat(locale).formatToParts(FORMAT_TEST_NUMBER);
|
|
9
|
-
const
|
|
10
|
-
|
|
16
|
+
const localeDigits = [
|
|
17
|
+
...new Intl.NumberFormat(locale, { useGrouping: false }).format(DIGIT_PROBE),
|
|
18
|
+
];
|
|
19
|
+
const symbols = {
|
|
20
|
+
decimalSeparator: ((_a = parts.find((d) => d.type === 'decimal')) === null || _a === void 0 ? void 0 : _a.value) || '.',
|
|
21
|
+
groupSeparator: ((_b = parts.find((d) => d.type === 'group')) === null || _b === void 0 ? void 0 : _b.value) || '',
|
|
22
|
+
digits: new Set([...'0123456789', ...localeDigits]),
|
|
23
|
+
zeroDigits: new Set(['0', localeDigits[localeDigits.length - 1]]),
|
|
24
|
+
};
|
|
25
|
+
localeSymbolsCache.set(locale, symbols);
|
|
26
|
+
return symbols;
|
|
27
|
+
};
|
|
28
|
+
export const getSeparatorsFromParser = (value, locale) => {
|
|
29
|
+
const { decimalSeparator, groupSeparator } = getLocaleNumberSymbols(locale);
|
|
30
|
+
return { decimalSeparator, groupSeparator };
|
|
31
|
+
};
|
|
32
|
+
/** Matches the `k`/`m`/`b` suffixes `NumberParser` expands (e.g. `12k` to `12,000`). */
|
|
33
|
+
const SHORTCUT_SUFFIX = /[kmb]\s*$/i;
|
|
34
|
+
/**
|
|
35
|
+
* Returns a predicate for the characters that carry a number's value: digits, the decimal
|
|
36
|
+
* separator and minus signs. Group separators, currency/percent symbols, bidi marks and
|
|
37
|
+
* leading integer zeros (which formatting adds or strips) are ignored.
|
|
38
|
+
*/
|
|
39
|
+
const valueCharMatcher = (value, locale) => {
|
|
40
|
+
const { decimalSeparator, digits, zeroDigits } = getLocaleNumberSymbols(locale);
|
|
41
|
+
let inLeadingZeros = true;
|
|
42
|
+
return (index) => {
|
|
43
|
+
const ch = value[index];
|
|
44
|
+
if (ch === decimalSeparator) {
|
|
45
|
+
inLeadingZeros = false;
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (ch === '-' || ch === '\u2212') {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (!digits.has(ch)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (inLeadingZeros && zeroDigits.has(ch)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
inLeadingZeros = false;
|
|
58
|
+
return true;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Maps a caret position in `oldValue` (the raw control text) to the equivalent position in
|
|
63
|
+
* `newValue` (the text after formatting or restoring), keeping the caret next to the same
|
|
64
|
+
* value characters.
|
|
65
|
+
*/
|
|
66
|
+
export const calculateCursorPosition = (oldValue, newValue, oldCursor, locale) => {
|
|
67
|
+
const cursor = Math.min(Math.max(oldCursor, 0), oldValue.length);
|
|
68
|
+
// The characters just typed were rejected or dropped (letter, second decimal separator,
|
|
69
|
+
// leading zero): put the caret back where it was before they were typed.
|
|
70
|
+
const removed = oldValue.length - newValue.length;
|
|
71
|
+
if (removed > 0 &&
|
|
72
|
+
removed <= cursor &&
|
|
73
|
+
oldValue.slice(0, cursor - removed) + oldValue.slice(cursor) === newValue) {
|
|
74
|
+
return cursor - removed;
|
|
75
|
+
}
|
|
76
|
+
if (cursor === oldValue.length && SHORTCUT_SUFFIX.test(oldValue)) {
|
|
77
|
+
return newValue.length;
|
|
78
|
+
}
|
|
79
|
+
const isOldValueChar = valueCharMatcher(oldValue, locale);
|
|
80
|
+
let valueCharsBefore = 0;
|
|
81
|
+
for (let i = 0; i < cursor; i += 1) {
|
|
82
|
+
if (isOldValueChar(i)) {
|
|
83
|
+
valueCharsBefore += 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const isNewValueChar = valueCharMatcher(newValue, locale);
|
|
87
|
+
if (valueCharsBefore === 0) {
|
|
88
|
+
// Caret before the number: place it before the first value character, past any prefix.
|
|
89
|
+
for (let i = 0; i < newValue.length; i += 1) {
|
|
90
|
+
if (isNewValueChar(i)) {
|
|
91
|
+
return i;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return cursor === oldValue.length ? newValue.length : 0;
|
|
95
|
+
}
|
|
96
|
+
let seen = 0;
|
|
97
|
+
for (let i = 0; i < newValue.length; i += 1) {
|
|
98
|
+
if (isNewValueChar(i)) {
|
|
99
|
+
seen += 1;
|
|
100
|
+
if (seen === valueCharsBefore) {
|
|
101
|
+
return i + 1;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return newValue.length;
|
|
11
106
|
};
|
|
12
107
|
/**
|
|
13
108
|
* Strips locale grouping and normalizes the decimal separator to `.` without using `Number`
|
|
14
109
|
* (so integers beyond `Number.MAX_SAFE_INTEGER` keep every digit).
|
|
15
110
|
*/
|
|
16
111
|
export const normalizeLocaleNumberString = (inputVal, locale) => {
|
|
17
|
-
|
|
18
|
-
const parts = new Intl.NumberFormat(locale).formatToParts(FORMAT_TEST_NUMBER);
|
|
19
|
-
const groupChar = (_a = parts.find((d) => d.type === 'group')) === null || _a === void 0 ? void 0 : _a.value;
|
|
20
|
-
const decimalChar = (_c = (_b = parts.find((d) => d.type === 'decimal')) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : '.';
|
|
112
|
+
const { groupSeparator: groupChar, decimalSeparator: decimalChar } = getLocaleNumberSymbols(locale);
|
|
21
113
|
let normalized = inputVal.trim();
|
|
22
114
|
if (groupChar) {
|
|
23
115
|
normalized = normalized.split(groupChar).join('');
|
|
@@ -29,9 +121,7 @@ export const normalizeLocaleNumberString = (inputVal, locale) => {
|
|
|
29
121
|
};
|
|
30
122
|
/** Counts locale decimal separator characters in the raw control text (ignores grouping). */
|
|
31
123
|
export const countLocaleDecimalSeparators = (input, locale) => {
|
|
32
|
-
|
|
33
|
-
const parts = new Intl.NumberFormat(locale).formatToParts(FORMAT_TEST_NUMBER);
|
|
34
|
-
const decimalChar = (_b = (_a = parts.find((d) => d.type === 'decimal')) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : '.';
|
|
124
|
+
const { decimalSeparator: decimalChar } = getLocaleNumberSymbols(locale);
|
|
35
125
|
let count = 0;
|
|
36
126
|
for (const ch of input) {
|
|
37
127
|
if (ch === decimalChar) {
|
|
@@ -53,15 +143,11 @@ export const isIntegerAtMaximumInputPrecision = (value, locale, precision) => {
|
|
|
53
143
|
export const rejectsDecimalAtMaximumIntegerPrecision = (committedValue, controlText, locale, precision) => isIntegerAtMaximumInputPrecision(committedValue, locale, precision) &&
|
|
54
144
|
countLocaleDecimalSeparators(controlText, locale) > 0;
|
|
55
145
|
const SAFE_INTEGER_DIGIT_COUNT = 15;
|
|
56
|
-
/** Sample integer used only to read locale grouping separator from Intl. */
|
|
57
|
-
const LOCALE_GROUPING_PROBE = 1234567;
|
|
58
146
|
const DIGITS_PER_GROUP = 3;
|
|
59
147
|
const formatLargeIntegerString = (value, locale) => {
|
|
60
|
-
var _a, _b;
|
|
61
148
|
const negative = value.startsWith('-');
|
|
62
149
|
const digits = negative ? value.slice(1) : value;
|
|
63
|
-
const
|
|
64
|
-
const group = (_b = (_a = parts.find((p) => p.type === 'group')) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : ',';
|
|
150
|
+
const group = getLocaleNumberSymbols(locale).groupSeparator || ',';
|
|
65
151
|
const groups = [];
|
|
66
152
|
let rest = digits;
|
|
67
153
|
while (rest.length > DIGITS_PER_GROUP) {
|
|
@@ -17,6 +17,7 @@ import { foundationStepperTemplate as template } from './stepper.template';
|
|
|
17
17
|
export class Stepper extends FoundationElement {
|
|
18
18
|
constructor() {
|
|
19
19
|
super(...arguments);
|
|
20
|
+
this.hideProgress = false;
|
|
20
21
|
this.allowBackwardJumps = false;
|
|
21
22
|
this.allowForwardJumps = false;
|
|
22
23
|
this.hideAllButtons = false;
|
|
@@ -351,6 +352,9 @@ export class Stepper extends FoundationElement {
|
|
|
351
352
|
__decorate([
|
|
352
353
|
attr({ attribute: 'hide-submit-button', mode: 'boolean' })
|
|
353
354
|
], Stepper.prototype, "hideSubmitButton", void 0);
|
|
355
|
+
__decorate([
|
|
356
|
+
attr({ attribute: 'hide-progress', mode: 'boolean' })
|
|
357
|
+
], Stepper.prototype, "hideProgress", void 0);
|
|
354
358
|
__decorate([
|
|
355
359
|
attr({ attribute: 'hide-step-number', mode: 'boolean' })
|
|
356
360
|
], Stepper.prototype, "hideStepNumber", void 0);
|
|
@@ -2,16 +2,34 @@ import { html, slotted, when } from '@microsoft/fast-element';
|
|
|
2
2
|
import { TabsOrientation } from '@microsoft/fast-foundation';
|
|
3
3
|
import { classNames } from '@microsoft/fast-web-utilities';
|
|
4
4
|
import { getPrefix } from '../utils';
|
|
5
|
+
/**
|
|
6
|
+
* Inner parts of the design-system components this template instantiates, re-published under the
|
|
7
|
+
* stepper's own namespace.
|
|
8
|
+
*
|
|
9
|
+
* `::part()` crosses exactly one shadow boundary, so without forwarding an app can size the
|
|
10
|
+
* button box but not the padded control inside it, and can reach the progress ring but neither
|
|
11
|
+
* of the two circles it draws. Each name is prefixed with its owner so the namespace stays
|
|
12
|
+
* legible and `control` does not collide across the three buttons.
|
|
13
|
+
*
|
|
14
|
+
* The forwarded names come from whichever design system is registered as `prefix`: a component
|
|
15
|
+
* exposing different parts forwards nothing, and rules against these names simply do not match.
|
|
16
|
+
*/
|
|
17
|
+
const BUTTON_EXPORTPARTS = (name) => `control: ${name}-control, content: ${name}-content`;
|
|
18
|
+
const PROGRESS_RING_EXPORTPARTS = [
|
|
19
|
+
'background: progress-ring-background',
|
|
20
|
+
'progress: progress-ring-progress',
|
|
21
|
+
'indeterminate-indicator-1: progress-ring-indeterminate',
|
|
22
|
+
].join(', ');
|
|
5
23
|
export const getPrefixedStepper = (prefix) => html `
|
|
6
24
|
|
|
7
25
|
<${prefix}-card class=${(x) => classNames('stepper-tab', ['stepper-tab-hidden', x.hideTabs])} part="stepper-tab" @tab-clicked="${(x, c) => x.handleStepClick(c.event.detail)}" role="stepper-tab" data-test-id="stepper-tab">
|
|
8
26
|
<div class=${(x) => classNames('stepper-tab-menu', ['stepper-tab-menu-hidden', x.hideTabs])} part="stepper-tab-menu">
|
|
9
27
|
<slot name="tab" ${slotted('tabs')} ></slot>
|
|
10
28
|
</div>
|
|
11
|
-
${when((x) => x.orientation === TabsOrientation.vertical, html `
|
|
29
|
+
${when((x) => x.orientation === TabsOrientation.vertical && !x.hideProgress, html `
|
|
12
30
|
<div class="stepper-tab-progress" part="stepper-tab-progress">
|
|
13
|
-
<${prefix}-progress-ring class="progress-ring" part="progress-ring" value=${(x) => x.progressValue}></${prefix}-progress-ring>
|
|
14
|
-
<label>You have completed ${(x) => x.progressValue}% of the fields required to create a project</label>
|
|
31
|
+
<${prefix}-progress-ring class="progress-ring" part="progress-ring" exportparts="${PROGRESS_RING_EXPORTPARTS}" value=${(x) => x.progressValue}></${prefix}-progress-ring>
|
|
32
|
+
<label part="progress-label">You have completed ${(x) => x.progressValue}% of the fields required to create a project</label>
|
|
15
33
|
</div>`)}
|
|
16
34
|
</${prefix}-card>
|
|
17
35
|
${when((x) => !x.indicatorOnly, html `
|
|
@@ -22,14 +40,14 @@ export const getPrefixedStepper = (prefix) => html `
|
|
|
22
40
|
${when((x) => !x.hideAllButtons, html `
|
|
23
41
|
<div class="action-buttons-container" part="action-buttons-container">
|
|
24
42
|
<slot name="action-buttons">
|
|
25
|
-
<${prefix}-button @click=${(x) => x.previousStep()} ?disabled=${(x) => x.disabledPreviousStep}>Back</${prefix}-button>
|
|
43
|
+
<${prefix}-button part="back-button" exportparts="${BUTTON_EXPORTPARTS('back-button')}" @click=${(x) => x.previousStep()} ?disabled=${(x) => x.disabledPreviousStep}>Back</${prefix}-button>
|
|
26
44
|
${when((x) => x.isLastStep && !x.hideSubmitButton, html `
|
|
27
|
-
<${prefix}-button @click=${(x) => x._submit()} ?disabled=${(x) => x.islastStepValid} data-test-id="submit-button">
|
|
45
|
+
<${prefix}-button part="submit-button" exportparts="${BUTTON_EXPORTPARTS('submit-button')}" @click=${(x) => x._submit()} ?disabled=${(x) => x.islastStepValid} data-test-id="submit-button">
|
|
28
46
|
Submit
|
|
29
47
|
</${prefix}-button>
|
|
30
48
|
`)}
|
|
31
49
|
${when((x) => !x.isLastStep, html `
|
|
32
|
-
<${prefix}-button @click=${(x) => x.nextStep()} data-test-id="next-button">Next</${prefix}-button>`)}
|
|
50
|
+
<${prefix}-button part="next-button" exportparts="${BUTTON_EXPORTPARTS('next-button')}" @click=${(x) => x.nextStep()} data-test-id="next-button">Next</${prefix}-button>`)}
|
|
33
51
|
</slot>
|
|
34
52
|
</div>
|
|
35
53
|
`)}
|
|
@@ -3,10 +3,50 @@ import { html, ref, when } from '@microsoft/fast-element';
|
|
|
3
3
|
import { TabsOrientation } from '@microsoft/fast-foundation';
|
|
4
4
|
import { classNames } from '@microsoft/fast-web-utilities';
|
|
5
5
|
import { getPrefix } from '../utils';
|
|
6
|
+
/**
|
|
7
|
+
* Shadow parts for one step's root element.
|
|
8
|
+
*
|
|
9
|
+
* A step renders as two completely different trees depending on orientation — a design-system
|
|
10
|
+
* tree item when vertical, a numbered container when horizontal — so `step` is the name that
|
|
11
|
+
* holds across both, with `step-vertical` / `step-horizontal` for the cases where an app does
|
|
12
|
+
* need to tell them apart.
|
|
13
|
+
*
|
|
14
|
+
* State is emitted as names of its own rather than left on the internal classes, because
|
|
15
|
+
* `::part()` cannot be chained with a class or a structural selector: without `step-selected`
|
|
16
|
+
* there is no way for an app to reach the current step at all. The same goes for `completed` and
|
|
17
|
+
* `error`, which are emitted in both orientations even though only the vertical tree draws an
|
|
18
|
+
* icon for them — these are hooks for the app, not a mirror of what this component happens to
|
|
19
|
+
* style.
|
|
20
|
+
*/
|
|
21
|
+
const stepParts = (x, orientation) => {
|
|
22
|
+
const names = ['step', `step-${orientation}`];
|
|
23
|
+
if (x.selected)
|
|
24
|
+
names.push('step-selected');
|
|
25
|
+
if (x.completed)
|
|
26
|
+
names.push('step-completed');
|
|
27
|
+
if (x.error)
|
|
28
|
+
names.push('step-error');
|
|
29
|
+
return names.join(' ');
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The design-system tree item's own parts, re-published under this component's namespace.
|
|
33
|
+
*
|
|
34
|
+
* `::part()` crosses exactly one shadow boundary, so without this an app can reach the tree item
|
|
35
|
+
* but nothing inside it — and the positioning region is where a tree item's padding and layout
|
|
36
|
+
* actually live. Prefixed with `step-` so the names stay this component's, not the tree's.
|
|
37
|
+
*/
|
|
38
|
+
const TREE_ITEM_EXPORTPARTS = [
|
|
39
|
+
'positioning-region: step-positioning-region',
|
|
40
|
+
'content-region: step-content-region',
|
|
41
|
+
'expand-collapse-button: step-expand-collapse-button',
|
|
42
|
+
'items: step-items',
|
|
43
|
+
].join(', ');
|
|
6
44
|
export const getPrefixedStepperTab = (prefix) => html `
|
|
7
45
|
${whenElse((x) => x.orientation === TabsOrientation.vertical, html `
|
|
8
46
|
<${prefix}-tree-item ${ref('treeItem')}
|
|
9
47
|
class=${(x) => classNames('tree-item', ['cursor-pointer', x.showCursorPointer])}
|
|
48
|
+
part="${(x) => stepParts(x, 'vertical')}"
|
|
49
|
+
exportparts="${TREE_ITEM_EXPORTPARTS}"
|
|
10
50
|
@click="${(x, c) => x.$emit('tab-clicked', x.tabPosition - 1)}">
|
|
11
51
|
${when((x) => x.completed, html `
|
|
12
52
|
<${prefix}-icon
|
|
@@ -14,6 +54,7 @@ export const getPrefixedStepperTab = (prefix) => html `
|
|
|
14
54
|
variant="regular"
|
|
15
55
|
size="lg"
|
|
16
56
|
class="stepper-icon completed-icon"
|
|
57
|
+
part="step-icon step-icon-completed"
|
|
17
58
|
></${prefix}-icon>
|
|
18
59
|
`)}
|
|
19
60
|
${when((x) => x.error, html `
|
|
@@ -22,24 +63,30 @@ export const getPrefixedStepperTab = (prefix) => html `
|
|
|
22
63
|
variant="regular"
|
|
23
64
|
size="lg"
|
|
24
65
|
class="stepper-icon error-icon"
|
|
66
|
+
part="step-icon step-icon-error"
|
|
25
67
|
></${prefix}-icon>
|
|
26
68
|
`)}
|
|
27
69
|
<slot></slot>
|
|
28
70
|
</${prefix}-tree-item>
|
|
29
71
|
`, html `
|
|
30
|
-
<div
|
|
72
|
+
<div
|
|
73
|
+
class=${(x) => classNames('step-container', ['selected', x.selected])}
|
|
74
|
+
part="${(x) => stepParts(x, 'horizontal')}"
|
|
75
|
+
>
|
|
31
76
|
<div
|
|
32
77
|
class=${(x) => classNames('step-number-container', ['cursor-pointer', x.showCursorPointer])}
|
|
78
|
+
part="step-number-container"
|
|
33
79
|
@click="${(x) => x.$emit('tab-clicked', x.tabPosition - 1)}"
|
|
34
80
|
>
|
|
35
81
|
${when((x) => !x.hideStepNumber, html `
|
|
36
|
-
<span class="step-number">${(x) => x.tabPosition}</span>
|
|
82
|
+
<span class="step-number" part="step-number">${(x) => x.tabPosition}</span>
|
|
37
83
|
`)}
|
|
38
84
|
<slot class="step-title"></slot>
|
|
39
85
|
</div>
|
|
40
86
|
${when((x) => !x.isLast, html `
|
|
41
87
|
<${prefix}-icon
|
|
42
88
|
class="stepper-icon angle-icon"
|
|
89
|
+
part="step-icon step-icon-angle"
|
|
43
90
|
name="angle-right"
|
|
44
91
|
variant="solid"
|
|
45
92
|
size="lg"
|
|
@@ -68827,6 +68827,36 @@
|
|
|
68827
68827
|
"isProtected": false,
|
|
68828
68828
|
"isAbstract": false
|
|
68829
68829
|
},
|
|
68830
|
+
{
|
|
68831
|
+
"kind": "Property",
|
|
68832
|
+
"canonicalReference": "@genesislcap/foundation-ui!Stepper#hideProgress:member",
|
|
68833
|
+
"docComment": "",
|
|
68834
|
+
"excerptTokens": [
|
|
68835
|
+
{
|
|
68836
|
+
"kind": "Content",
|
|
68837
|
+
"text": "hideProgress: "
|
|
68838
|
+
},
|
|
68839
|
+
{
|
|
68840
|
+
"kind": "Content",
|
|
68841
|
+
"text": "boolean"
|
|
68842
|
+
},
|
|
68843
|
+
{
|
|
68844
|
+
"kind": "Content",
|
|
68845
|
+
"text": ";"
|
|
68846
|
+
}
|
|
68847
|
+
],
|
|
68848
|
+
"isReadonly": false,
|
|
68849
|
+
"isOptional": false,
|
|
68850
|
+
"releaseTag": "Public",
|
|
68851
|
+
"name": "hideProgress",
|
|
68852
|
+
"propertyTypeTokenRange": {
|
|
68853
|
+
"startIndex": 1,
|
|
68854
|
+
"endIndex": 2
|
|
68855
|
+
},
|
|
68856
|
+
"isStatic": false,
|
|
68857
|
+
"isProtected": false,
|
|
68858
|
+
"isAbstract": false
|
|
68859
|
+
},
|
|
68830
68860
|
{
|
|
68831
68861
|
"kind": "Property",
|
|
68832
68862
|
"canonicalReference": "@genesislcap/foundation-ui!Stepper#hideStepNumber:member",
|
package/dist/foundation-ui.d.ts
CHANGED
|
@@ -5874,7 +5874,17 @@ export declare class NumberField extends NumberField_base {
|
|
|
5874
5874
|
stepUp(): void;
|
|
5875
5875
|
stepDown(): void;
|
|
5876
5876
|
hasSeparatorWithoutDecimals(): RegExp;
|
|
5877
|
+
/**
|
|
5878
|
+
* Writes text the user is editing back to the control, keeping the caret next to the same
|
|
5879
|
+
* value characters instead of letting the assignment move it to the end.
|
|
5880
|
+
*/
|
|
5881
|
+
private writeControlValue;
|
|
5877
5882
|
private restoreControlToCommittedValue;
|
|
5883
|
+
/**
|
|
5884
|
+
* Backspace/Delete next to a group separator would only delete the separator, which
|
|
5885
|
+
* reformatting puts straight back. Step the caret over it so the key deletes the digit.
|
|
5886
|
+
*/
|
|
5887
|
+
private skipGroupSeparator;
|
|
5878
5888
|
handleKeyDown(e: KeyboardEvent): boolean;
|
|
5879
5889
|
handleTextInput(): void;
|
|
5880
5890
|
valueChanged(previous: any, next: any): void;
|
|
@@ -7164,6 +7174,7 @@ export declare interface StepClickEventDetail {
|
|
|
7164
7174
|
*/
|
|
7165
7175
|
export declare class Stepper extends FoundationElement {
|
|
7166
7176
|
hideSubmitButton: boolean;
|
|
7177
|
+
hideProgress: boolean;
|
|
7167
7178
|
hideStepNumber: boolean;
|
|
7168
7179
|
allowBackwardJumps: boolean;
|
|
7169
7180
|
allowForwardJumps: boolean;
|
package/dist/react.cjs
CHANGED
|
@@ -118,11 +118,6 @@ const Accordion = React.forwardRef(function Accordion(props, ref) {
|
|
|
118
118
|
return React.createElement(customElements.getName(AccordionWC) ?? '%%prefix%%-accordion', { ...rest, ref }, children);
|
|
119
119
|
});
|
|
120
120
|
|
|
121
|
-
const ActionsMenu = React.forwardRef(function ActionsMenu(props, ref) {
|
|
122
|
-
const { children, ...rest } = props;
|
|
123
|
-
return React.createElement(customElements.getName(ActionsMenuWC) ?? '%%prefix%%-actions-menu', { ...rest, ref }, children);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
121
|
const AccordionItem = React.forwardRef(function AccordionItem(props, ref) {
|
|
127
122
|
const { children, ...rest } = props;
|
|
128
123
|
return React.createElement(customElements.getName(AccordionItemWC) ?? '%%prefix%%-accordion-item', { ...rest, ref }, children);
|
|
@@ -155,6 +150,11 @@ const AiIndicator = React.forwardRef(function AiIndicator(props, ref) {
|
|
|
155
150
|
return React.createElement(customElements.getName(AiIndicatorWC) ?? '%%prefix%%-ai-indicator', { ...rest, ref }, children);
|
|
156
151
|
});
|
|
157
152
|
|
|
153
|
+
const ActionsMenu = React.forwardRef(function ActionsMenu(props, ref) {
|
|
154
|
+
const { children, ...rest } = props;
|
|
155
|
+
return React.createElement(customElements.getName(ActionsMenuWC) ?? '%%prefix%%-actions-menu', { ...rest, ref }, children);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
158
|
const Anchor = React.forwardRef(function Anchor(props, ref) {
|
|
159
159
|
const { children, ...rest } = props;
|
|
160
160
|
return React.createElement(customElements.getName(AnchorWC) ?? '%%prefix%%-anchor', { ...rest, ref }, children);
|
|
@@ -1144,10 +1144,10 @@ const WeeklyRecurrence = React.forwardRef(function WeeklyRecurrence(props, ref)
|
|
|
1144
1144
|
|
|
1145
1145
|
module.exports = {
|
|
1146
1146
|
Accordion,
|
|
1147
|
-
ActionsMenu,
|
|
1148
1147
|
AccordionItem,
|
|
1149
1148
|
AiCriteriaSearch,
|
|
1150
1149
|
AiIndicator,
|
|
1150
|
+
ActionsMenu,
|
|
1151
1151
|
Anchor,
|
|
1152
1152
|
AnchoredRegion,
|
|
1153
1153
|
Avatar,
|