@lion/ui 0.0.2 → 0.0.3
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/components/core/test/SlotMixin.test.js +28 -21
- package/components/localize/src/number/parseNumber.js +15 -36
- package/components/localize/test/number/parseNumber.test.js +3 -12
- package/dist-types/components/localize/src/number/parseNumber.d.ts.map +1 -1
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/docs/components/accordion/index.md +3 -0
- package/docs/components/accordion/overview.md +129 -0
- package/docs/components/accordion/reference.md +47 -0
- package/docs/components/accordion/use-cases.md +252 -0
- package/docs/components/button/examples.md +30 -0
- package/docs/components/button/index.md +3 -0
- package/docs/components/button/overview.md +30 -0
- package/docs/components/button/src/icon.svg.js +5 -0
- package/docs/components/button/use-cases.md +106 -0
- package/docs/components/calendar/index.md +3 -0
- package/docs/components/calendar/overview.md +49 -0
- package/docs/components/calendar/use-cases.md +192 -0
- package/docs/components/checkbox-group/index.md +3 -0
- package/docs/components/checkbox-group/overview.md +40 -0
- package/docs/components/checkbox-group/use-cases.md +256 -0
- package/docs/components/collapsible/assets/CustomCollapsible.js +113 -0
- package/docs/components/collapsible/assets/applyDemoCollapsibleStyles.js +37 -0
- package/docs/components/collapsible/examples.md +83 -0
- package/docs/components/collapsible/index.md +3 -0
- package/docs/components/collapsible/overview.md +39 -0
- package/docs/components/collapsible/use-cases.md +79 -0
- package/docs/components/combobox/examples.md +153 -0
- package/docs/components/combobox/index.md +3 -0
- package/docs/components/combobox/overview.md +51 -0
- package/docs/components/combobox/src/LinkMixin.js +60 -0
- package/docs/components/combobox/src/demo-selection-display.js +191 -0
- package/docs/components/combobox/src/gh-combobox/gh-button.js +69 -0
- package/docs/components/combobox/src/gh-combobox/gh-combobox.js +508 -0
- package/docs/components/combobox/src/google-combobox/assets/google-clear-icon.js +9 -0
- package/docs/components/combobox/src/google-combobox/assets/google-search-icon.js +9 -0
- package/docs/components/combobox/src/google-combobox/assets/google-voice-search-icon.js +19 -0
- package/docs/components/combobox/src/google-combobox/assets/googlelogo_color_272x92dp.png +0 -0
- package/docs/components/combobox/src/google-combobox/google-combobox.js +460 -0
- package/docs/components/combobox/src/lazyRender.js +29 -0
- package/docs/components/combobox/src/levenshtein.js +95 -0
- package/docs/components/combobox/src/md-combobox/MdFieldMixin.js +341 -0
- package/docs/components/combobox/src/md-combobox/md-combobox.js +89 -0
- package/docs/components/combobox/src/md-combobox/md-input.js +5 -0
- package/docs/components/combobox/src/md-combobox/style/load-roboto.js +6 -0
- package/docs/components/combobox/src/md-combobox/style/md-ripple.js +81 -0
- package/docs/components/combobox/src/wa-combobox/wa-combobox.js +368 -0
- package/docs/components/combobox/use-cases.md +377 -0
- package/docs/components/dialog/index.md +3 -0
- package/docs/components/dialog/overview.md +63 -0
- package/docs/components/dialog/src/demo-dialog-style.js +3 -0
- package/docs/components/dialog/src/demoStyle.js +39 -0
- package/docs/components/dialog/src/slots-dialog-content.js +32 -0
- package/docs/components/dialog/src/styled-dialog-content.js +38 -0
- package/docs/components/dialog/use-cases.md +154 -0
- package/docs/components/drawer/index.md +3 -0
- package/docs/components/drawer/overview.md +68 -0
- package/docs/components/drawer/src/demoStyle.js +71 -0
- package/docs/components/drawer/use-cases.md +194 -0
- package/docs/components/fieldset/index.md +3 -0
- package/docs/components/fieldset/overview.md +49 -0
- package/docs/components/fieldset/use-cases.md +185 -0
- package/docs/components/form/index.md +3 -0
- package/docs/components/form/overview.md +43 -0
- package/docs/components/form/use-cases.md +72 -0
- package/docs/components/icon/assets/bugs/bug01.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug02.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug05.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug06.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug08.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug12.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug19.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug23.svg.js +2 -0
- package/docs/components/icon/assets/bugs/bug24.svg.js +2 -0
- package/docs/components/icon/assets/iconset-bugs.js +11 -0
- package/docs/components/icon/assets/iconset-misc.js +3 -0
- package/docs/components/icon/assets/iconset-space.js +31 -0
- package/docs/components/icon/assets/misc/arrowLeft.svg.js +6 -0
- package/docs/components/icon/assets/space/aliens-spaceship.svg.js +2 -0
- package/docs/components/icon/assets/space/meteor.svg.js +2 -0
- package/docs/components/icon/assets/space/moon-flag.svg.js +2 -0
- package/docs/components/icon/assets/space/moon.svg.js +2 -0
- package/docs/components/icon/assets/space/night.svg.js +2 -0
- package/docs/components/icon/assets/space/orbit.svg.js +2 -0
- package/docs/components/icon/assets/space/planet.svg.js +2 -0
- package/docs/components/icon/assets/space/robot.svg.js +2 -0
- package/docs/components/icon/assets/space/rocket.svg.js +2 -0
- package/docs/components/icon/assets/space/satellite.svg.js +2 -0
- package/docs/components/icon/assets/space/signal.svg.js +2 -0
- package/docs/components/icon/assets/space/space-helmet.svg.js +2 -0
- package/docs/components/icon/assets/space/sun.svg.js +2 -0
- package/docs/components/icon/assets/space/telescope.svg.js +2 -0
- package/docs/components/icon/index.md +3 -0
- package/docs/components/icon/overview.md +40 -0
- package/docs/components/icon/use-cases.md +93 -0
- package/docs/components/index.md +7 -0
- package/docs/components/input/index.md +3 -0
- package/docs/components/input/overview.md +36 -0
- package/docs/components/input/use-cases.md +77 -0
- package/docs/components/input-amount/index.md +3 -0
- package/docs/components/input-amount/overview.md +49 -0
- package/docs/components/input-amount/use-cases.md +122 -0
- package/docs/components/input-date/index.md +3 -0
- package/docs/components/input-date/overview.md +39 -0
- package/docs/components/input-date/use-cases.md +83 -0
- package/docs/components/input-datepicker/index.md +3 -0
- package/docs/components/input-datepicker/overview.md +42 -0
- package/docs/components/input-datepicker/use-cases.md +78 -0
- package/docs/components/input-email/index.md +3 -0
- package/docs/components/input-email/overview.md +32 -0
- package/docs/components/input-email/use-cases.md +48 -0
- package/docs/components/input-iban/index.md +3 -0
- package/docs/components/input-iban/overview.md +37 -0
- package/docs/components/input-iban/use-cases.md +102 -0
- package/docs/components/input-range/index.md +3 -0
- package/docs/components/input-range/overview.md +34 -0
- package/docs/components/input-range/use-cases.md +108 -0
- package/docs/components/input-stepper/index.md +3 -0
- package/docs/components/input-stepper/overview.md +36 -0
- package/docs/components/input-stepper/use-cases.md +41 -0
- package/docs/components/input-tel/index.md +3 -0
- package/docs/components/input-tel/overview.md +62 -0
- package/docs/components/input-tel/src/h-region-code-table.js +109 -0
- package/docs/components/input-tel/use-cases.md +307 -0
- package/docs/components/input-tel-dropdown/examples.md +32 -0
- package/docs/components/input-tel-dropdown/index.md +3 -0
- package/docs/components/input-tel-dropdown/overview.md +38 -0
- package/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js +127 -0
- package/docs/components/input-tel-dropdown/use-cases.md +159 -0
- package/docs/components/listbox/index.md +3 -0
- package/docs/components/listbox/overview.md +42 -0
- package/docs/components/listbox/src/listboxData.js +65 -0
- package/docs/components/listbox/use-cases.md +147 -0
- package/docs/components/pagination/index.md +3 -0
- package/docs/components/pagination/overview.md +29 -0
- package/docs/components/pagination/use-cases.md +99 -0
- package/docs/components/progress-indicator/assets/my-determinate-progress-bar.js +30 -0
- package/docs/components/progress-indicator/assets/my-indeterminate-progress-spinner.js +55 -0
- package/docs/components/progress-indicator/examples.md +125 -0
- package/docs/components/progress-indicator/index.md +3 -0
- package/docs/components/progress-indicator/overview.md +36 -0
- package/docs/components/radio-group/index.md +3 -0
- package/docs/components/radio-group/overview.md +46 -0
- package/docs/components/radio-group/use-cases.md +140 -0
- package/docs/components/select/index.md +3 -0
- package/docs/components/select/overview.md +44 -0
- package/docs/components/select/use-cases.md +55 -0
- package/docs/components/select-rich/examples.md +31 -0
- package/docs/components/select-rich/index.md +3 -0
- package/docs/components/select-rich/overview.md +46 -0
- package/docs/components/select-rich/src/flagStyles.js +1250 -0
- package/docs/components/select-rich/src/flags.png +0 -0
- package/docs/components/select-rich/src/flags@2x.png +0 -0
- package/docs/components/select-rich/src/intl-select-rich.js +194 -0
- package/docs/components/select-rich/src/regionMetaList.js +1717 -0
- package/docs/components/select-rich/use-cases.md +370 -0
- package/docs/components/steps/index.md +3 -0
- package/docs/components/steps/overview.md +63 -0
- package/docs/components/steps/use-cases.md +163 -0
- package/docs/components/switch/index.md +3 -0
- package/docs/components/switch/overview.md +75 -0
- package/docs/components/switch/reference.md +39 -0
- package/docs/components/switch/use-cases.md +76 -0
- package/docs/components/tabs/examples.md +23 -0
- package/docs/components/tabs/index.md +3 -0
- package/docs/components/tabs/overview.md +48 -0
- package/docs/components/tabs/src/lea-tab-panel.js +24 -0
- package/docs/components/tabs/src/lea-tab.js +45 -0
- package/docs/components/tabs/src/lea-tabs.js +28 -0
- package/docs/components/tabs/use-cases.md +219 -0
- package/docs/components/textarea/index.md +3 -0
- package/docs/components/textarea/overview.md +35 -0
- package/docs/components/textarea/use-cases.md +95 -0
- package/docs/components/tooltip/examples.md +39 -0
- package/docs/components/tooltip/index.md +3 -0
- package/docs/components/tooltip/overview.md +44 -0
- package/docs/components/tooltip/use-cases.md +208 -0
- package/docs/fundamentals/index.md +19 -0
- package/docs/fundamentals/node-tools/babel-plugin-extend-docs/index.md +1 -0
- package/docs/fundamentals/node-tools/babel-plugin-extend-docs/overview.md +233 -0
- package/docs/fundamentals/node-tools/index.md +1 -0
- package/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md +68 -0
- package/docs/fundamentals/node-tools/providence-analytics/QueryResult.md +111 -0
- package/docs/fundamentals/node-tools/providence-analytics/analyzer.md +69 -0
- package/docs/fundamentals/node-tools/providence-analytics/assets/_mermaid.svg.js +1202 -0
- package/docs/fundamentals/node-tools/providence-analytics/dashboard.md +22 -0
- package/docs/fundamentals/node-tools/providence-analytics/index.md +1 -0
- package/docs/fundamentals/node-tools/providence-analytics/overview.md +192 -0
- package/docs/fundamentals/node-tools/publish-docs/index.md +1 -0
- package/docs/fundamentals/node-tools/publish-docs/overview.md +136 -0
- package/docs/fundamentals/node-tools/remark-extend/index.md +1 -0
- package/docs/fundamentals/node-tools/remark-extend/overview.md +274 -0
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/index.md +1 -0
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +285 -0
- package/docs/fundamentals/rationales/TypeScript.md +18 -0
- package/docs/fundamentals/rationales/index.md +1 -0
- package/docs/fundamentals/rationales/side-effects.md +203 -0
- package/docs/fundamentals/rationales/versioning.md +35 -0
- package/docs/fundamentals/systems/core/index.md +3 -0
- package/docs/fundamentals/systems/core/overview.md +85 -0
- package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-1.svg +1 -0
- package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-2.svg +1 -0
- package/docs/fundamentals/systems/form/assets/FormatMixinDiagram-3.svg +84 -0
- package/docs/fundamentals/systems/form/assets/h-output.js +155 -0
- package/docs/fundamentals/systems/form/formatting-and-parsing.md +245 -0
- package/docs/fundamentals/systems/form/index.md +3 -0
- package/docs/fundamentals/systems/form/interaction-states.md +177 -0
- package/docs/fundamentals/systems/form/model-value.md +35 -0
- package/docs/fundamentals/systems/form/overview.md +82 -0
- package/docs/fundamentals/systems/form/styling.md +101 -0
- package/docs/fundamentals/systems/form/use-cases.md +156 -0
- package/docs/fundamentals/systems/form/validate.md +929 -0
- package/docs/fundamentals/systems/icon/index.md +3 -0
- package/docs/fundamentals/systems/icon/overview.md +124 -0
- package/docs/fundamentals/systems/index.md +1 -0
- package/docs/fundamentals/systems/localize/assets/all-locales.js +437 -0
- package/docs/fundamentals/systems/localize/assets/en-AU.js +6 -0
- package/docs/fundamentals/systems/localize/assets/en-GB.js +6 -0
- package/docs/fundamentals/systems/localize/assets/en-US.js +6 -0
- package/docs/fundamentals/systems/localize/assets/en.js +4 -0
- package/docs/fundamentals/systems/localize/assets/nl-BE.js +6 -0
- package/docs/fundamentals/systems/localize/assets/nl-NL.js +6 -0
- package/docs/fundamentals/systems/localize/assets/nl.js +4 -0
- package/docs/fundamentals/systems/localize/dates.md +195 -0
- package/docs/fundamentals/systems/localize/index.md +3 -0
- package/docs/fundamentals/systems/localize/numbers.md +217 -0
- package/docs/fundamentals/systems/localize/overview.md +48 -0
- package/docs/fundamentals/systems/localize/rationale.md +62 -0
- package/docs/fundamentals/systems/localize/text.md +125 -0
- package/docs/fundamentals/systems/localize/use-cases.md +319 -0
- package/docs/fundamentals/systems/overlays/assets/applyDemoOverlayStyles.js +22 -0
- package/docs/fundamentals/systems/overlays/assets/demo-overlay-backdrop.js +48 -0
- package/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js +42 -0
- package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +133 -0
- package/docs/fundamentals/systems/overlays/configuration.md +453 -0
- package/docs/fundamentals/systems/overlays/form-integration.md +65 -0
- package/docs/fundamentals/systems/overlays/index.md +3 -0
- package/docs/fundamentals/systems/overlays/overview.md +118 -0
- package/docs/fundamentals/systems/overlays/rationale.md +232 -0
- package/docs/fundamentals/systems/overlays/scope.md +176 -0
- package/docs/fundamentals/systems/overlays/use-cases.md +699 -0
- package/docs/fundamentals/tools/ajax/assets/naga.json +9 -0
- package/docs/fundamentals/tools/ajax/assets/pabu.json +9 -0
- package/docs/fundamentals/tools/ajax/index.md +3 -0
- package/docs/fundamentals/tools/ajax/overview.md +128 -0
- package/docs/fundamentals/tools/ajax/use-cases.md +456 -0
- package/docs/fundamentals/tools/helpers/action-logger.md +165 -0
- package/docs/fundamentals/tools/helpers/index.md +3 -0
- package/docs/fundamentals/tools/helpers/overview.md +30 -0
- package/docs/fundamentals/tools/index.md +1 -0
- package/docs/fundamentals/tools/singleton-manager/index.md +3 -0
- package/docs/fundamentals/tools/singleton-manager/overview.md +304 -0
- package/docs/guides/how-to/create-a-custom-field.md +200 -0
- package/docs/guides/how-to/extend-a-native-input.md +66 -0
- package/docs/guides/how-to/get-started.md +77 -0
- package/docs/guides/how-to/index.md +1 -0
- package/docs/guides/index.md +34 -0
- package/docs/guides/principles/definitions-and-terms.md +41 -0
- package/docs/guides/principles/index.md +26 -0
- package/docs/guides/principles/scoped-elements.md +103 -0
- package/docs/guides/principles/styling.md +32 -0
- package/docs/guides/principles/subclasser-apis.md +28 -0
- package/docs/override.js +15 -0
- package/package.json +1 -1
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import sinon from 'sinon';
|
|
2
|
-
import { defineCE, expect, fixture } from '@open-wc/testing';
|
|
2
|
+
import { defineCE, expect, fixture, unsafeStatic, html } from '@open-wc/testing';
|
|
3
3
|
import { ScopedElementsMixin } from '@open-wc/scoped-elements';
|
|
4
4
|
import { SlotMixin } from '@lion/ui/core.js';
|
|
5
|
-
import { LitElement
|
|
5
|
+
import { LitElement } from 'lit';
|
|
6
6
|
|
|
7
|
+
const mockedRenderTarget = document.createElement('div');
|
|
7
8
|
function mockScopedRegistry() {
|
|
9
|
+
const outputObj = { createElementCallCount: 0 };
|
|
8
10
|
// @ts-expect-error wait for browser support
|
|
9
|
-
ShadowRoot.prototype.createElement = () => {
|
|
11
|
+
ShadowRoot.prototype.createElement = () => {
|
|
12
|
+
outputObj.createElementCallCount += 1;
|
|
13
|
+
// Return an element that lit can use as render target
|
|
14
|
+
return mockedRenderTarget;
|
|
15
|
+
};
|
|
10
16
|
// @ts-expect-error wait for browser support
|
|
11
17
|
window.CustomElementRegistry = class {};
|
|
18
|
+
return outputObj;
|
|
12
19
|
}
|
|
13
20
|
|
|
14
21
|
function unMockScopedRegistry() {
|
|
@@ -211,13 +218,12 @@ describe('SlotMixin', () => {
|
|
|
211
218
|
expect(slot.tagName).to.equal('SPAN');
|
|
212
219
|
});
|
|
213
220
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
mockScopedRegistry();
|
|
221
|
+
it('supports scoped elements when polyfill loaded', async () => {
|
|
222
|
+
const outputObj = mockScopedRegistry();
|
|
217
223
|
|
|
218
224
|
class ScopedEl extends LitElement {}
|
|
219
225
|
|
|
220
|
-
const
|
|
226
|
+
const tagName = defineCE(
|
|
221
227
|
class extends ScopedElementsMixin(SlotMixin(LitElement)) {
|
|
222
228
|
static get scopedElements() {
|
|
223
229
|
return {
|
|
@@ -240,16 +246,10 @@ describe('SlotMixin', () => {
|
|
|
240
246
|
},
|
|
241
247
|
);
|
|
242
248
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
} catch (e) {
|
|
248
|
-
// @ts-ignore
|
|
249
|
-
error = e.toString();
|
|
250
|
-
}
|
|
251
|
-
// it throws when it uses our temp mock (error is browser specific, so we check overlapping part)
|
|
252
|
-
expect(error).to.include('.importNode is not a function');
|
|
249
|
+
const tag = unsafeStatic(tagName);
|
|
250
|
+
await fixture(html`<${tag}></${tag}>`);
|
|
251
|
+
|
|
252
|
+
expect(outputObj.createElementCallCount).to.equal(1);
|
|
253
253
|
|
|
254
254
|
unMockScopedRegistry();
|
|
255
255
|
});
|
|
@@ -257,7 +257,7 @@ describe('SlotMixin', () => {
|
|
|
257
257
|
it('does not scope elements when polyfill not loaded', async () => {
|
|
258
258
|
class ScopedEl extends LitElement {}
|
|
259
259
|
|
|
260
|
-
const
|
|
260
|
+
const tagName = defineCE(
|
|
261
261
|
class extends ScopedElementsMixin(SlotMixin(LitElement)) {
|
|
262
262
|
static get scopedElements() {
|
|
263
263
|
return {
|
|
@@ -280,10 +280,17 @@ describe('SlotMixin', () => {
|
|
|
280
280
|
},
|
|
281
281
|
);
|
|
282
282
|
|
|
283
|
+
const renderTarget = document.createElement('div');
|
|
284
|
+
const el = document.createElement(tagName);
|
|
285
|
+
|
|
286
|
+
// We don't use fixture, so we limit the amount of calls to document.createElement
|
|
283
287
|
const docSpy = sinon.spy(document, 'createElement');
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
288
|
+
document.body.appendChild(renderTarget);
|
|
289
|
+
renderTarget.appendChild(el);
|
|
290
|
+
|
|
291
|
+
expect(docSpy.callCount).to.equal(2);
|
|
292
|
+
|
|
293
|
+
document.body.removeChild(renderTarget);
|
|
287
294
|
docSpy.restore();
|
|
288
295
|
});
|
|
289
296
|
});
|
|
@@ -1,56 +1,35 @@
|
|
|
1
1
|
import { getDecimalSeparator } from './getDecimalSeparator.js';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* @param {string} value to evaluate
|
|
5
|
-
* @return {boolean} true if value equal . or ,
|
|
6
|
-
*/
|
|
7
|
-
function isDecimalSeparator(value) {
|
|
8
|
-
return value === '.' || value === ',';
|
|
9
|
-
}
|
|
10
|
-
|
|
11
3
|
/**
|
|
12
4
|
* Determines the best possible parsing mode.
|
|
13
5
|
*
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
-
* - [space]123 => xxx123 (heuristic)
|
|
19
|
-
* - ,123 => unclear
|
|
20
|
-
* - if 1.000,123 (we find a different separator) => 1000.123 (heuristic)
|
|
21
|
-
* - if 1,000,123 (we find only same separators) => 1000123 (unparseable)
|
|
22
|
-
* - if 100,123 (we find no more separators) => unclear
|
|
23
|
-
* - if en => 100123 (withLocale)
|
|
24
|
-
* - if nl => 100.123 (withLocale)
|
|
25
|
-
*
|
|
26
|
-
* See also {@link parseAmount}
|
|
6
|
+
* It has 3 "methods" of returning numbers
|
|
7
|
+
* - 'unparseable': becomes just numbers
|
|
8
|
+
* - 'withLocale': result depends on given or global locale
|
|
9
|
+
* - 'heuristic': result depends on considering separators
|
|
27
10
|
*
|
|
28
11
|
* @example
|
|
29
|
-
*
|
|
12
|
+
* parseNumber('1.234.567'); // method: unparseable => 1234567
|
|
13
|
+
* parseNumber('1.234'); // method: withLocale => depending on locale 1234 or 1.234
|
|
14
|
+
* parseNumber('1.234,56'); // method: heuristic => 1234.56
|
|
15
|
+
* parseNumber('1 234.56'); // method: heuristic => 1234.56
|
|
16
|
+
* parseNumber('1,234.56'); // method: heuristic => 1234.56
|
|
30
17
|
*
|
|
31
18
|
* @param {string} value Clean number (only [0-9 ,.]) to be parsed
|
|
19
|
+
* @param {object} options
|
|
20
|
+
* @param {string?} [options.mode] auto|pasted
|
|
32
21
|
* @return {string} unparseable|withLocale|heuristic
|
|
33
22
|
*/
|
|
34
23
|
function getParseMode(value, { mode = 'auto' } = {}) {
|
|
35
24
|
const separators = value.match(/[., ]/g);
|
|
36
25
|
|
|
37
|
-
if (mode === 'auto' && separators
|
|
26
|
+
if (!separators || (mode === 'auto' && separators.length === 1)) {
|
|
38
27
|
return 'withLocale';
|
|
39
28
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const charAtLastSeparatorPosition = value[value.length - 4];
|
|
43
|
-
if (isDecimalSeparator(charAtLastSeparatorPosition)) {
|
|
44
|
-
const firstPart = value.substring(0, value.length - 4);
|
|
45
|
-
const otherSeparators = firstPart.match(/[., ]/g);
|
|
46
|
-
if (otherSeparators) {
|
|
47
|
-
const lastSeparator = charAtLastSeparatorPosition;
|
|
48
|
-
return otherSeparators.indexOf(lastSeparator) === -1 ? 'heuristic' : 'unparseable';
|
|
49
|
-
}
|
|
50
|
-
return 'withLocale';
|
|
51
|
-
}
|
|
29
|
+
if (separators.length === 1 || separators[0] !== separators[separators.length - 1]) {
|
|
30
|
+
return 'heuristic';
|
|
52
31
|
}
|
|
53
|
-
return '
|
|
32
|
+
return 'unparseable';
|
|
54
33
|
}
|
|
55
34
|
|
|
56
35
|
/**
|
|
@@ -72,19 +72,10 @@ describe('parseNumber()', () => {
|
|
|
72
72
|
expect(parseNumber('123456.78', { mode: 'pasted' })).to.equal(123456.78);
|
|
73
73
|
});
|
|
74
74
|
|
|
75
|
-
it('detects separators
|
|
76
|
-
expect(parseNumber('1.234.
|
|
77
|
-
expect(parseNumber('1,234,
|
|
78
|
-
|
|
79
|
-
expect(parseNumber('1.234.56')).to.equal(1234.56);
|
|
80
|
-
expect(parseNumber('1,234,56')).to.equal(1234.56);
|
|
75
|
+
it('detects separators unparseable when there are 2 same ones e.g. 1.234.56', () => {
|
|
76
|
+
expect(parseNumber('1.234.56')).to.equal(123456);
|
|
77
|
+
expect(parseNumber('1,234,56')).to.equal(123456);
|
|
81
78
|
expect(parseNumber('1 234 56')).to.equal(123456);
|
|
82
|
-
|
|
83
|
-
expect(parseNumber('1.234.5678')).to.equal(1234.5678);
|
|
84
|
-
expect(parseNumber('1,234,5678')).to.equal(1234.5678);
|
|
85
|
-
|
|
86
|
-
expect(parseNumber('1.234.56789')).to.equal(1234.56789);
|
|
87
|
-
expect(parseNumber('1,234,56789')).to.equal(1234.56789);
|
|
88
79
|
});
|
|
89
80
|
|
|
90
81
|
it('uses locale to parse amount if there is only one separator e.g. 1.234', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseNumber.d.ts","sourceRoot":"","sources":["../../../../../components/localize/src/number/parseNumber.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parseNumber.d.ts","sourceRoot":"","sources":["../../../../../components/localize/src/number/parseNumber.js"],"names":[],"mappings":"AAkFA;;;;;;;;;;;;;;;;;;GAkBG;AACH,mCAHW,MAAM,6GA6BhB"}
|