timered-counter 0.0.1 → 0.0.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.
@@ -213,6 +213,28 @@
213
213
  "module": "src/mixins/counter-base.ts"
214
214
  }
215
215
  },
216
+ {
217
+ "kind": "field",
218
+ "name": "__partsOptions",
219
+ "type": {
220
+ "text": "Partial<PartsOptions> | null"
221
+ },
222
+ "privacy": "private",
223
+ "default": "null"
224
+ },
225
+ {
226
+ "kind": "field",
227
+ "name": "partsOptions",
228
+ "type": {
229
+ "text": "InnerPartsOptions"
230
+ },
231
+ "description": "这是 `usePartData` 的配置项. `usePartData` 被用于从数值的变化中生成用于滚动的数据.\n这里不会有太多解释, 因为它是一个底层的配置项. 你可以查看 `CounterPartsMixinClass` 的源码了解更多信息.",
232
+ "attribute": "parts-options",
233
+ "inheritedFrom": {
234
+ "name": "CounterPartsMixin",
235
+ "module": "src/mixins/counter-parts.ts"
236
+ }
237
+ },
216
238
  {
217
239
  "kind": "field",
218
240
  "name": "__from",
@@ -608,19 +630,6 @@
608
630
  "module": "src/mixins/counter-parts.ts"
609
631
  }
610
632
  },
611
- {
612
- "kind": "field",
613
- "name": "partsOptions",
614
- "type": {
615
- "text": "InnerPartsOptions"
616
- },
617
- "description": "这是 `usePartData` 的配置项. `usePartData` 被用于从数值的变化中生成用于滚动的数据.\n这里不会有太多解释, 因为它是一个底层的配置项. 你可以查看 `CounterPartsMixinClass` 的源码了解更多信息.",
618
- "attribute": "parts-options",
619
- "inheritedFrom": {
620
- "name": "CounterPartsMixin",
621
- "module": "src/mixins/counter-parts.ts"
622
- }
623
- },
624
633
  {
625
634
  "kind": "field",
626
635
  "name": "parts",
@@ -5621,90 +5630,6 @@
5621
5630
  "declarations": [],
5622
5631
  "exports": []
5623
5632
  },
5624
- {
5625
- "kind": "javascript-module",
5626
- "path": "src/styles/timered-counter-datetime-styles.ts",
5627
- "declarations": [
5628
- {
5629
- "kind": "variable",
5630
- "name": "timeredCounterDatetimeStyles",
5631
- "default": "css` ::part(part-suffix) { font-size: 0.4em; line-height: 1; } `"
5632
- }
5633
- ],
5634
- "exports": [
5635
- {
5636
- "kind": "js",
5637
- "name": "timeredCounterDatetimeStyles",
5638
- "declaration": {
5639
- "name": "timeredCounterDatetimeStyles",
5640
- "module": "src/styles/timered-counter-datetime-styles.ts"
5641
- }
5642
- }
5643
- ]
5644
- },
5645
- {
5646
- "kind": "javascript-module",
5647
- "path": "src/styles/timered-counter-number-styles.ts",
5648
- "declarations": [
5649
- {
5650
- "kind": "variable",
5651
- "name": "timeredCounterNumberStyles",
5652
- "default": "css``"
5653
- }
5654
- ],
5655
- "exports": [
5656
- {
5657
- "kind": "js",
5658
- "name": "timeredCounterNumberStyles",
5659
- "declaration": {
5660
- "name": "timeredCounterNumberStyles",
5661
- "module": "src/styles/timered-counter-number-styles.ts"
5662
- }
5663
- }
5664
- ]
5665
- },
5666
- {
5667
- "kind": "javascript-module",
5668
- "path": "src/styles/timered-counter-string-styles.ts",
5669
- "declarations": [
5670
- {
5671
- "kind": "variable",
5672
- "name": "timeredCounterStringStyles",
5673
- "default": "css``"
5674
- }
5675
- ],
5676
- "exports": [
5677
- {
5678
- "kind": "js",
5679
- "name": "timeredCounterStringStyles",
5680
- "declaration": {
5681
- "name": "timeredCounterStringStyles",
5682
- "module": "src/styles/timered-counter-string-styles.ts"
5683
- }
5684
- }
5685
- ]
5686
- },
5687
- {
5688
- "kind": "javascript-module",
5689
- "path": "src/styles/timered-counter-styles.ts",
5690
- "declarations": [
5691
- {
5692
- "kind": "variable",
5693
- "name": "timeredCounterStyles",
5694
- "default": "css` .timered-counter { position: relative; display: inline-flex; overflow: hidden; /** inline-block 和 overflow-hidden 同时存在会使得基线为下边缘. 手动设置 align-bottom 以修正这个问题. @see https://stackoverflow.com/questions/22421782/css-overflow-hidden-increases-height-of-container @see https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align */ vertical-align: bottom; } .timered-counter.debug { overflow: visible; } //.timered-counter-datetime-duration .duration-unit { // font-size: 0.4em; // line-height: 1; //} `"
5695
- }
5696
- ],
5697
- "exports": [
5698
- {
5699
- "kind": "js",
5700
- "name": "timeredCounterStyles",
5701
- "declaration": {
5702
- "name": "timeredCounterStyles",
5703
- "module": "src/styles/timered-counter-styles.ts"
5704
- }
5705
- }
5706
- ]
5707
- },
5708
5633
  {
5709
5634
  "kind": "javascript-module",
5710
5635
  "path": "src/types/duration.ts",
@@ -7756,6 +7681,90 @@
7756
7681
  }
7757
7682
  ]
7758
7683
  },
7684
+ {
7685
+ "kind": "javascript-module",
7686
+ "path": "src/styles/timered-counter-datetime-styles.ts",
7687
+ "declarations": [
7688
+ {
7689
+ "kind": "variable",
7690
+ "name": "timeredCounterDatetimeStyles",
7691
+ "default": "css` ::part(part-suffix) { font-size: 0.4em; line-height: 1; } `"
7692
+ }
7693
+ ],
7694
+ "exports": [
7695
+ {
7696
+ "kind": "js",
7697
+ "name": "timeredCounterDatetimeStyles",
7698
+ "declaration": {
7699
+ "name": "timeredCounterDatetimeStyles",
7700
+ "module": "src/styles/timered-counter-datetime-styles.ts"
7701
+ }
7702
+ }
7703
+ ]
7704
+ },
7705
+ {
7706
+ "kind": "javascript-module",
7707
+ "path": "src/styles/timered-counter-number-styles.ts",
7708
+ "declarations": [
7709
+ {
7710
+ "kind": "variable",
7711
+ "name": "timeredCounterNumberStyles",
7712
+ "default": "css``"
7713
+ }
7714
+ ],
7715
+ "exports": [
7716
+ {
7717
+ "kind": "js",
7718
+ "name": "timeredCounterNumberStyles",
7719
+ "declaration": {
7720
+ "name": "timeredCounterNumberStyles",
7721
+ "module": "src/styles/timered-counter-number-styles.ts"
7722
+ }
7723
+ }
7724
+ ]
7725
+ },
7726
+ {
7727
+ "kind": "javascript-module",
7728
+ "path": "src/styles/timered-counter-string-styles.ts",
7729
+ "declarations": [
7730
+ {
7731
+ "kind": "variable",
7732
+ "name": "timeredCounterStringStyles",
7733
+ "default": "css``"
7734
+ }
7735
+ ],
7736
+ "exports": [
7737
+ {
7738
+ "kind": "js",
7739
+ "name": "timeredCounterStringStyles",
7740
+ "declaration": {
7741
+ "name": "timeredCounterStringStyles",
7742
+ "module": "src/styles/timered-counter-string-styles.ts"
7743
+ }
7744
+ }
7745
+ ]
7746
+ },
7747
+ {
7748
+ "kind": "javascript-module",
7749
+ "path": "src/styles/timered-counter-styles.ts",
7750
+ "declarations": [
7751
+ {
7752
+ "kind": "variable",
7753
+ "name": "timeredCounterStyles",
7754
+ "default": "css` .timered-counter { position: relative; display: inline-flex; overflow: hidden; /** inline-block 和 overflow-hidden 同时存在会使得基线为下边缘. 手动设置 align-bottom 以修正这个问题. @see https://stackoverflow.com/questions/22421782/css-overflow-hidden-increases-height-of-container @see https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align */ vertical-align: bottom; } .timered-counter.debug { overflow: visible; } //.timered-counter-datetime-duration .duration-unit { // font-size: 0.4em; // line-height: 1; //} `"
7755
+ }
7756
+ ],
7757
+ "exports": [
7758
+ {
7759
+ "kind": "js",
7760
+ "name": "timeredCounterStyles",
7761
+ "declaration": {
7762
+ "name": "timeredCounterStyles",
7763
+ "module": "src/styles/timered-counter-styles.ts"
7764
+ }
7765
+ }
7766
+ ]
7767
+ },
7759
7768
  {
7760
7769
  "kind": "javascript-module",
7761
7770
  "path": "storybook-static/sb-manager/globals-module-info.js",
@@ -8452,13 +8461,13 @@
8452
8461
  },
8453
8462
  {
8454
8463
  "kind": "javascript-module",
8455
- "path": "storybook-static/sb-addons/essentials-measure-7/manager-bundle.js",
8464
+ "path": "storybook-static/sb-addons/essentials-outline-8/manager-bundle.js",
8456
8465
  "declarations": [],
8457
8466
  "exports": []
8458
8467
  },
8459
8468
  {
8460
8469
  "kind": "javascript-module",
8461
- "path": "storybook-static/sb-addons/essentials-outline-8/manager-bundle.js",
8470
+ "path": "storybook-static/sb-addons/essentials-measure-7/manager-bundle.js",
8462
8471
  "declarations": [],
8463
8472
  "exports": []
8464
8473
  },
@@ -89,7 +89,8 @@ export const CounterBaseMixin = (superClass) => {
89
89
  ? this.initialValue
90
90
  : this.value;
91
91
  }
92
- else {
92
+ else if (!changedProperties.has('oldValue')) {
93
+ // oldValue 未被手动设置时, 使用默认策略更新 oldValue.
93
94
  this.oldValue = changedProperties.get('value') ?? this.oldValue;
94
95
  }
95
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"counter-base.js","sourceRoot":"","sources":["../../../src/mixins/counter-base.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAO3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAoCvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAI9B,UAAa,EACb,EAAE;IACF,MAAM,qBAAsB,SAAQ,UAAU;QAW5C,IAAI,KAAK;YACP,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,KAAK,CAAC,KAAQ;YAChB,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,CAC1C,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;gBAC1D,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,KAAK,CACV,CAAC;YAEF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAErB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAWD,IAAI,QAAQ;YACV,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,QAAQ,CAAC,KAAQ;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;YAC5B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QAKD;;;;WAIG;QAOH,IAAI,YAAY;YACd,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,YAAY,CAAC,KAAQ;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QAMD;;;;;WAKG;QAaH,IAAI,MAAM;YACR,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,IAAI,MAAM,CACR,KAE2D;YAE3D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAElC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3C,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAChC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAgBD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YA/HT,YAAO,GAAM,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YA4B7D,6DAA6D;YAErD,eAAU,GAAM,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAiBhE,gEAAgE;YAExD,mBAAc,GAAM,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAuB5D,aAAQ,GAE8C,OAAO,CAAC;YAsCtE,mBAAc,GAAgB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACjD,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAGpC,cAAS,GAAkB,IAAI,CAAC;YAGhC,iBAAY,GAAkB,IAAI,CAAC,SAAS,CAAC;YAe7C;;;;;eAKG;YACK,uBAAkB,GAAG,IAAI,CAAC;YAZhC,aAAa;YACb,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC;YACnD,aAAa;YACb,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC;QACrD,CAAC;QAUQ,UAAU,CAAC,iBAAuC;YACzD,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAEpC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;oBAChC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;wBAC7C,CAAC,CAAC,IAAI,CAAC,YAAY;wBACnB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAC/D,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,IAAI,CAAC;YACT,IAAI;QACN,CAAC;KACF;IAzJC;QARC,QAAQ,CAAC;YACR,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE;gBACT,WAAW,EAAE,cAAc,CAAC,eAAe,CAAC,WAAW;aACxD;YACD,UAAU,EAAE,IAAI;SACjB,CAAC;sDAGD;IA0BD;QANC,QAAQ,CAAC;YACR,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,cAAc,CAAC,eAAe;YACzC,UAAU,EAAE,IAAI;SACjB,CAAC;yDAGD;IAsBD;QANC,QAAQ,CAAC;YACR,SAAS,EAAE,eAAe;YAC1B,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,cAAc,CAAC,eAAe;YACzC,UAAU,EAAE,IAAI;SACjB,CAAC;6DAGD;IA8BD;QAZC,QAAQ,CAAC;YACR,SAAS,EAAE,KAAK,CAAC,EAAE;gBACjB,IAAI,SAAS,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAEnC,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,UAAU,EAAE,IAAI;SACjB,CAAC;uDAGD;IAqBD;QADC,KAAK,EAAE;4DACwB;IAGhC;QADC,KAAK,EAAE;+DACqC;IA6C/C,OAAO,qBAAsE,CAAC;AAChF,CAAC,CAAC","sourcesContent":["import { LitElement, PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { isNonNullish, isNullish, isString } from 'remeda';\nimport { Constructor } from 'type-fest';\nimport {\n NumberAdapter,\n AvailableNumberAdapterValueType,\n} from '../number-adapter/index.js';\nimport { StringAdapter } from '../string-adapter/index.js';\nimport { CounterAdapter } from '../counter-adapter.js';\n\nexport declare class CounterBaseMixinInterface<\n V extends AvailableNumberAdapterValueType,\n> {\n static NUMBER_ADAPTER: NumberAdapter;\n\n static STRING_ADAPTER: StringAdapter;\n\n get value(): V;\n\n set value(value: V);\n\n get oldValue(): V;\n\n set oldValue(value: V);\n\n get initialValue(): V;\n\n set initialValue(value: V);\n\n direction: 'up' | 'down';\n\n oldDirection: 'up' | 'down';\n\n locale:\n | Intl.UnicodeBCP47LocaleIdentifier\n | [Intl.UnicodeBCP47LocaleIdentifier, Intl.LocaleOptions];\n\n localeInstance: Intl.Locale;\n\n numberAdapter: NumberAdapter;\n\n stringAdapter: StringAdapter;\n}\n\nexport const CounterBaseMixin = <\n V extends AvailableNumberAdapterValueType,\n T extends Constructor<LitElement> = Constructor<LitElement>,\n>(\n superClass: T,\n) => {\n class CounterBaseMixinClass extends superClass {\n private __value: V = CounterAdapter.NUMBER_ADAPTER.create(0);\n\n @property({\n attribute: 'value',\n reflect: true,\n converter: {\n toAttribute: CounterAdapter.VALUE_CONVERTER.toAttribute,\n },\n noAccessor: true,\n })\n get value() {\n return this.numberAdapter.create(this.__value);\n }\n\n set value(value: V) {\n value = CounterAdapter.NUMBER_ADAPTER.create(\n isNullish(value) || (isString(value) && value.trim() === '')\n ? 0\n : value,\n );\n\n const old = this.__value;\n this.__value = value;\n\n if (!this.numberAdapter.eq(this.__value, old)) {\n this.requestUpdate('value', old);\n }\n }\n // value: V = CounterBaseMixinClass.NUMBER_ADAPTER.create(0);\n\n private __oldValue: V = CounterAdapter.NUMBER_ADAPTER.create(0);\n\n @property({\n attribute: 'old-value',\n reflect: true,\n converter: CounterAdapter.VALUE_CONVERTER,\n noAccessor: true,\n })\n get oldValue() {\n return this.numberAdapter.create(this.__oldValue);\n }\n\n set oldValue(value: V) {\n const old = this.__oldValue;\n this.__oldValue = value;\n this.requestUpdate('oldValue', old);\n }\n // oldValue: V = CounterBaseMixinClass.NUMBER_ADAPTER.create(0);\n\n private __initialValue: V = CounterAdapter.NUMBER_ADAPTER.create(0);\n\n /**\n * 如果初始值被设置, 组件初始化时会使用该值而不是 `value`, 然后在初始化完成后, 将内部值更新为 `value`.\n *\n * 这对于初始化完成后启动动画效果非常有用.\n */\n @property({\n attribute: 'initial-value',\n reflect: true,\n converter: CounterAdapter.VALUE_CONVERTER,\n noAccessor: true,\n })\n get initialValue() {\n return this.numberAdapter.create(this.__initialValue);\n }\n\n set initialValue(value: V) {\n const old = this.__initialValue;\n this.__initialValue = value;\n this.requestUpdate('initialValue', old);\n }\n\n private __locale:\n | Intl.UnicodeBCP47LocaleIdentifier\n | [Intl.UnicodeBCP47LocaleIdentifier, Intl.LocaleOptions] = 'en-US';\n\n /**\n * 自定义本地化配置, 否则从浏览器环境中获取.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale\n *\n * @default \"en-US\"\n */\n @property({\n converter: value => {\n if (isNullish(value)) return value;\n\n try {\n return JSON.parse(value);\n } catch (error) {\n return value;\n }\n },\n noAccessor: true,\n })\n get locale() {\n return this.__locale;\n }\n\n set locale(\n value:\n | Intl.UnicodeBCP47LocaleIdentifier\n | [Intl.UnicodeBCP47LocaleIdentifier, Intl.LocaleOptions],\n ) {\n const old = this.__locale;\n this.__locale = value;\n this.requestUpdate('locale', old);\n\n this.localeInstance = isString(this.__locale)\n ? new Intl.Locale(this.__locale)\n : new Intl.Locale(...this.__locale);\n }\n\n localeInstance: Intl.Locale = isString(this.locale)\n ? new Intl.Locale(this.locale)\n : new Intl.Locale(...this.locale);\n\n @state()\n direction: 'up' | 'down' = 'up';\n\n @state()\n oldDirection: 'up' | 'down' = this.direction;\n\n numberAdapter: NumberAdapter;\n\n stringAdapter: StringAdapter;\n\n constructor(...args: any[]) {\n super(...args);\n\n // @ts-ignore\n this.numberAdapter = CounterAdapter.NUMBER_ADAPTER;\n // @ts-ignore\n this.stringAdapter = CounterAdapter.STRING_ADAPTER;\n }\n\n /**\n * 第一次更新时, changedProperties 中 value 的旧值始终为 undefined.\n * 因此, 当 value 第一次更新时, oldValue 的值应当来自 initialValue 或 value.\n * 以保证 oldValue 始终有值.\n * @private\n */\n private isValueFirstUpdate = true;\n\n override willUpdate(changedProperties: PropertyValues<this>) {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has('value')) {\n if (this.isValueFirstUpdate) {\n this.isValueFirstUpdate = false;\n this.oldValue = isNonNullish(this.initialValue)\n ? this.initialValue\n : this.value;\n } else {\n this.oldValue = changedProperties.get('value') ?? this.oldValue;\n }\n }\n\n this.oldDirection = this.direction;\n this.direction = this.numberAdapter.gt(this.value, this.oldValue)\n ? 'down'\n : 'up';\n // }\n }\n }\n\n return CounterBaseMixinClass as Constructor<CounterBaseMixinInterface<V>> & T;\n};\n"]}
1
+ {"version":3,"file":"counter-base.js","sourceRoot":"","sources":["../../../src/mixins/counter-base.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { isNonNullish, isNullish, isString } from 'remeda';\nimport { Constructor } from 'type-fest';\nimport {\n NumberAdapter,\n AvailableNumberAdapterValueType,\n} from '../number-adapter/index.js';\nimport { StringAdapter } from '../string-adapter/index.js';\nimport { CounterAdapter } from '../counter-adapter.js';\n\nexport declare class CounterBaseMixinInterface<\n V extends AvailableNumberAdapterValueType,\n> {\n static NUMBER_ADAPTER: NumberAdapter;\n\n static STRING_ADAPTER: StringAdapter;\n\n get value(): V;\n\n set value(value: V);\n\n get oldValue(): V;\n\n set oldValue(value: V);\n\n get initialValue(): V;\n\n set initialValue(value: V);\n\n direction: 'up' | 'down';\n\n oldDirection: 'up' | 'down';\n\n locale:\n | Intl.UnicodeBCP47LocaleIdentifier\n | [Intl.UnicodeBCP47LocaleIdentifier, Intl.LocaleOptions];\n\n localeInstance: Intl.Locale;\n\n numberAdapter: NumberAdapter;\n\n stringAdapter: StringAdapter;\n}\n\nexport const CounterBaseMixin = <\n V extends AvailableNumberAdapterValueType,\n T extends Constructor<LitElement> = Constructor<LitElement>,\n>(\n superClass: T,\n) => {\n class CounterBaseMixinClass extends superClass {\n private __value: V = CounterAdapter.NUMBER_ADAPTER.create(0);\n\n @property({\n attribute: 'value',\n reflect: true,\n converter: {\n toAttribute: CounterAdapter.VALUE_CONVERTER.toAttribute,\n },\n noAccessor: true,\n })\n get value() {\n return this.numberAdapter.create(this.__value);\n }\n\n set value(value: V) {\n value = CounterAdapter.NUMBER_ADAPTER.create(\n isNullish(value) || (isString(value) && value.trim() === '')\n ? 0\n : value,\n );\n\n const old = this.__value;\n this.__value = value;\n\n if (!this.numberAdapter.eq(this.__value, old)) {\n this.requestUpdate('value', old);\n }\n }\n // value: V = CounterBaseMixinClass.NUMBER_ADAPTER.create(0);\n\n private __oldValue: V = CounterAdapter.NUMBER_ADAPTER.create(0);\n\n @property({\n attribute: 'old-value',\n reflect: true,\n converter: CounterAdapter.VALUE_CONVERTER,\n noAccessor: true,\n })\n get oldValue() {\n return this.numberAdapter.create(this.__oldValue);\n }\n\n set oldValue(value: V) {\n const old = this.__oldValue;\n this.__oldValue = value;\n this.requestUpdate('oldValue', old);\n }\n // oldValue: V = CounterBaseMixinClass.NUMBER_ADAPTER.create(0);\n\n private __initialValue: V = CounterAdapter.NUMBER_ADAPTER.create(0);\n\n /**\n * 如果初始值被设置, 组件初始化时会使用该值而不是 `value`, 然后在初始化完成后, 将内部值更新为 `value`.\n *\n * 这对于初始化完成后启动动画效果非常有用.\n */\n @property({\n attribute: 'initial-value',\n reflect: true,\n converter: CounterAdapter.VALUE_CONVERTER,\n noAccessor: true,\n })\n get initialValue() {\n return this.numberAdapter.create(this.__initialValue);\n }\n\n set initialValue(value: V) {\n const old = this.__initialValue;\n this.__initialValue = value;\n this.requestUpdate('initialValue', old);\n }\n\n private __locale:\n | Intl.UnicodeBCP47LocaleIdentifier\n | [Intl.UnicodeBCP47LocaleIdentifier, Intl.LocaleOptions] = 'en-US';\n\n /**\n * 自定义本地化配置, 否则从浏览器环境中获取.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale\n *\n * @default \"en-US\"\n */\n @property({\n converter: value => {\n if (isNullish(value)) return value;\n\n try {\n return JSON.parse(value);\n } catch (error) {\n return value;\n }\n },\n noAccessor: true,\n })\n get locale() {\n return this.__locale;\n }\n\n set locale(\n value:\n | Intl.UnicodeBCP47LocaleIdentifier\n | [Intl.UnicodeBCP47LocaleIdentifier, Intl.LocaleOptions],\n ) {\n const old = this.__locale;\n this.__locale = value;\n this.requestUpdate('locale', old);\n\n this.localeInstance = isString(this.__locale)\n ? new Intl.Locale(this.__locale)\n : new Intl.Locale(...this.__locale);\n }\n\n localeInstance: Intl.Locale = isString(this.locale)\n ? new Intl.Locale(this.locale)\n : new Intl.Locale(...this.locale);\n\n @state()\n direction: 'up' | 'down' = 'up';\n\n @state()\n oldDirection: 'up' | 'down' = this.direction;\n\n numberAdapter: NumberAdapter;\n\n stringAdapter: StringAdapter;\n\n constructor(...args: any[]) {\n super(...args);\n\n // @ts-ignore\n this.numberAdapter = CounterAdapter.NUMBER_ADAPTER;\n // @ts-ignore\n this.stringAdapter = CounterAdapter.STRING_ADAPTER;\n }\n\n /**\n * 第一次更新时, changedProperties 中 value 的旧值始终为 undefined.\n * 因此, 当 value 第一次更新时, oldValue 的值应当来自 initialValue 或 value.\n * 以保证 oldValue 始终有值.\n * @private\n */\n private isValueFirstUpdate = true;\n\n override willUpdate(changedProperties: PropertyValues<this>) {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has('value')) {\n if (this.isValueFirstUpdate) {\n this.isValueFirstUpdate = false;\n this.oldValue = isNonNullish(this.initialValue)\n ? this.initialValue\n : this.value;\n } else if (!changedProperties.has('oldValue')) {\n // oldValue 未被手动设置时, 使用默认策略更新 oldValue.\n this.oldValue = changedProperties.get('value') ?? this.oldValue;\n }\n }\n\n this.oldDirection = this.direction;\n this.direction = this.numberAdapter.gt(this.value, this.oldValue)\n ? 'down'\n : 'up';\n // }\n }\n }\n\n return CounterBaseMixinClass as Constructor<CounterBaseMixinInterface<V>> & T;\n};\n"]}
@@ -9,6 +9,7 @@ export declare class TimeredCounterString extends TimeredCounter {
9
9
  get initialValue(): any;
10
10
  set initialValue(value: any);
11
11
  private __valueString;
12
+ private __oldValueString;
12
13
  get value(): any;
13
14
  /**
14
15
  * 通过 property 设置 value 时, 支持任意字符串.
@@ -25,6 +25,7 @@ let TimeredCounterString = class TimeredCounterString extends TimeredCounter {
25
25
  this.__alphabet = '';
26
26
  this.__initialValueString = '';
27
27
  this.__valueString = '';
28
+ this.__oldValueString = '';
28
29
  this.__partsOptions = null;
29
30
  this.__decimalToAnyBase = anyBase(this.stringAdapter, '0123456789', this.__alphabet);
30
31
  this.__anyBaseToDecimal = anyBase(this.stringAdapter, this.__alphabet, '0123456789');
@@ -66,6 +67,7 @@ let TimeredCounterString = class TimeredCounterString extends TimeredCounter {
66
67
  else if (this.__valueString === value) {
67
68
  return;
68
69
  }
70
+ this.__oldValueString = this.__valueString;
69
71
  this.__valueString = value ?? '';
70
72
  if (isEmpty(this.__valueString)) {
71
73
  super.value = this.numberAdapter.create(0);
@@ -75,6 +77,10 @@ let TimeredCounterString = class TimeredCounterString extends TimeredCounter {
75
77
  ? ''
76
78
  : this.__decimalToAnyBase(this.numberAdapter.toString(this.value));
77
79
  this.__updateAlphabet(this.__valueString, oldValueString);
80
+ /**
81
+ * 由于 oldValue 基于之前的 `__alphabet` 计算, 当 通过 `__updateAlphabet` 更新 `__alphabet` 后, 需要同步更新 oldValue.
82
+ */
83
+ super.oldValue = this.numberAdapter.create(this.__anyBaseToDecimal(this.__oldValueString));
78
84
  super.value = this.numberAdapter.create(this.__anyBaseToDecimal(this.__valueString));
79
85
  }
80
86
  get partsOptions() {
@@ -1 +1 @@
1
- {"version":3,"file":"timered-counter-string.js","sourceRoot":"","sources":["../../src/timered-counter-string.ts"],"names":[],"mappings":"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","sourcesContent":["import { customElement } from 'lit/decorators.js';\nimport { PropertyValues } from 'lit';\nimport { isEmpty, isString } from 'remeda';\nimport { TimeredCounter } from './timered-counter.js';\nimport { timeredCounterStringStyles } from './styles/timered-counter-string-styles.js';\nimport { anyBase } from './utils/any-base.js';\nimport { PartsOptions } from './mixins/counter-parts.js';\nimport { AvailableNumberAdapterValueType } from './number-adapter/index.js';\n\n/**\n * 替换一些特定的字符.\n * 1. \" \": 空格字符在 HTML 中会被忽略导致无法计算字符宽度, 使用 \\xa0 替换.\n */\nconst REPLACED_CHARS: Record<string, string> = {\n ' ': '\\xa0', // &nbsp;\n};\n\n@customElement('timered-counter-string')\nexport class TimeredCounterString extends TimeredCounter {\n static styles = [...TimeredCounter.styles, timeredCounterStringStyles];\n\n // /**\n // * 自定义字符集, 传入的 `value` 的字符串表示形式的每个字符都**必须**被包含在该字符集中.\n // *\n // * @default `value` 的去重字符集.\n // */\n // @property({\n // reflect: true,\n // })\n private __alphabet: string = '';\n\n private __initialValueString = '';\n\n get initialValue() {\n return super.initialValue;\n }\n\n set initialValue(value: any) {\n if (!isString(value)) {\n try {\n value = value.toString();\n } catch (error) {\n throw new Error(`value ${value} is not a string.`);\n }\n }\n\n this.__initialValueString = value ?? '';\n\n if (isEmpty(this.__alphabet) || isEmpty(this.__initialValueString)) {\n super.initialValue = this.numberAdapter.create(0);\n return;\n }\n\n super.initialValue = this.numberAdapter.create(\n this.__anyBaseToDecimal(value),\n );\n }\n\n private __valueString = '';\n\n get value() {\n return super.value;\n }\n\n /**\n * 通过 property 设置 value 时, 支持任意字符串.\n */\n set value(value: any) {\n if (!isString(value)) {\n try {\n value = value.toString();\n } catch (error) {\n throw new Error(`value ${value} is not a string.`);\n }\n } else if (this.__valueString === value) {\n return;\n }\n\n this.__valueString = value ?? '';\n\n if (isEmpty(this.__valueString)) {\n super.value = this.numberAdapter.create(0);\n return;\n }\n\n const oldValueString = isEmpty(this.__alphabet)\n ? ''\n : this.__decimalToAnyBase(this.numberAdapter.toString(this.value));\n\n this.__updateAlphabet(this.__valueString, oldValueString);\n\n super.value = this.numberAdapter.create(\n this.__anyBaseToDecimal(this.__valueString),\n );\n }\n\n private __partsOptions: Partial<PartsOptions> | null = null;\n\n get partsOptions(): Partial<PartsOptions> {\n return super.partsOptions;\n }\n\n set partsOptions(value: Partial<PartsOptions>) {\n this.__partsOptions = value;\n super.partsOptions = {\n type: 'string',\n fillChar: REPLACED_CHARS[' '],\n ...this.__partsOptions,\n digitToChar: {\n ' ': REPLACED_CHARS[' '],\n ...this.__partsOptions.digitToChar,\n },\n };\n }\n\n /**\n * 根据 `value`, `initialValue`, `oldValue` 更新字符集.\n * @private\n */\n private __updateAlphabet(value: string, oldValue: string) {\n const allChars =\n isEmpty(value) && isEmpty(oldValue)\n ? ''\n : `\\x00${oldValue ?? ''}${value ?? ''}`;\n\n const charSet = new Set(this.stringAdapter.stringToChars(allChars));\n // if (charSet.size < 10) {\n // for (let i = 0; i < 10; i++) {\n // charSet.add(i.toString());\n // if (charSet.size >= 10) break;\n // }\n // }\n\n this.__alphabet = Array.from(charSet).sort().join('');\n\n const sa = this.stringAdapter;\n const alphabet = this.__alphabet;\n\n this.__decimalToAnyBase = anyBase(sa, '0123456789', alphabet);\n this.__anyBaseToDecimal = anyBase(sa, alphabet, '0123456789');\n }\n\n private __decimalToAnyBase = anyBase(\n this.stringAdapter,\n '0123456789',\n this.__alphabet,\n );\n\n private __anyBaseToDecimal = anyBase(\n this.stringAdapter,\n this.__alphabet,\n '0123456789',\n );\n\n override sampleToString(value: AvailableNumberAdapterValueType): string {\n return this.__decimalToAnyBase(this.numberAdapter.toString(value));\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.__updateAlphabet(this.__valueString, this.__initialValueString);\n this.initialValue = this.__initialValueString;\n this.value = this.__valueString;\n }\n\n override firstUpdated(_changedProperties: PropertyValues<this>) {\n super.firstUpdated(_changedProperties);\n\n /**\n * TimeredCounterString 有自定义的 `fillChar` 和 `digitToChar`. 实例化时需要手动触发 `partsOptions` 的 setter.\n */\n this.partsOptions = this.__partsOptions ?? {};\n }\n}\n"]}
1
+ {"version":3,"file":"timered-counter-string.js","sourceRoot":"","sources":["../../src/timered-counter-string.ts"],"names":[],"mappings":"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","sourcesContent":["import { customElement } from 'lit/decorators.js';\nimport { PropertyValues } from 'lit';\nimport { isEmpty, isString } from 'remeda';\nimport { TimeredCounter } from './timered-counter.js';\nimport { timeredCounterStringStyles } from './styles/timered-counter-string-styles.js';\nimport { anyBase } from './utils/any-base.js';\nimport { PartsOptions } from './mixins/counter-parts.js';\nimport { AvailableNumberAdapterValueType } from './number-adapter/index.js';\n\n/**\n * 替换一些特定的字符.\n * 1. \" \": 空格字符在 HTML 中会被忽略导致无法计算字符宽度, 使用 \\xa0 替换.\n */\nconst REPLACED_CHARS: Record<string, string> = {\n ' ': '\\xa0', // &nbsp;\n};\n\n@customElement('timered-counter-string')\nexport class TimeredCounterString extends TimeredCounter {\n static styles = [...TimeredCounter.styles, timeredCounterStringStyles];\n\n // /**\n // * 自定义字符集, 传入的 `value` 的字符串表示形式的每个字符都**必须**被包含在该字符集中.\n // *\n // * @default `value` 的去重字符集.\n // */\n // @property({\n // reflect: true,\n // })\n private __alphabet: string = '';\n\n private __initialValueString = '';\n\n get initialValue() {\n return super.initialValue;\n }\n\n set initialValue(value: any) {\n if (!isString(value)) {\n try {\n value = value.toString();\n } catch (error) {\n throw new Error(`value ${value} is not a string.`);\n }\n }\n\n this.__initialValueString = value ?? '';\n\n if (isEmpty(this.__alphabet) || isEmpty(this.__initialValueString)) {\n super.initialValue = this.numberAdapter.create(0);\n return;\n }\n\n super.initialValue = this.numberAdapter.create(\n this.__anyBaseToDecimal(value),\n );\n }\n\n private __valueString = '';\n\n private __oldValueString = '';\n\n get value() {\n return super.value;\n }\n\n /**\n * 通过 property 设置 value 时, 支持任意字符串.\n */\n set value(value: any) {\n if (!isString(value)) {\n try {\n value = value.toString();\n } catch (error) {\n throw new Error(`value ${value} is not a string.`);\n }\n } else if (this.__valueString === value) {\n return;\n }\n\n this.__oldValueString = this.__valueString;\n this.__valueString = value ?? '';\n\n if (isEmpty(this.__valueString)) {\n super.value = this.numberAdapter.create(0);\n return;\n }\n\n const oldValueString = isEmpty(this.__alphabet)\n ? ''\n : this.__decimalToAnyBase(this.numberAdapter.toString(this.value));\n\n this.__updateAlphabet(this.__valueString, oldValueString);\n\n /**\n * 由于 oldValue 基于之前的 `__alphabet` 计算, 当 通过 `__updateAlphabet` 更新 `__alphabet` 后, 需要同步更新 oldValue.\n */\n super.oldValue = this.numberAdapter.create(\n this.__anyBaseToDecimal(this.__oldValueString),\n );\n\n super.value = this.numberAdapter.create(\n this.__anyBaseToDecimal(this.__valueString),\n );\n }\n\n private __partsOptions: Partial<PartsOptions> | null = null;\n\n get partsOptions(): Partial<PartsOptions> {\n return super.partsOptions;\n }\n\n set partsOptions(value: Partial<PartsOptions>) {\n this.__partsOptions = value;\n super.partsOptions = {\n type: 'string',\n fillChar: REPLACED_CHARS[' '],\n ...this.__partsOptions,\n digitToChar: {\n ' ': REPLACED_CHARS[' '],\n ...this.__partsOptions.digitToChar,\n },\n };\n }\n\n /**\n * 根据 `value`, `initialValue`, `oldValue` 更新字符集.\n * @private\n */\n private __updateAlphabet(value: string, oldValue: string) {\n const allChars =\n isEmpty(value) && isEmpty(oldValue)\n ? ''\n : `\\x00${oldValue ?? ''}${value ?? ''}`;\n\n const charSet = new Set(this.stringAdapter.stringToChars(allChars));\n // if (charSet.size < 10) {\n // for (let i = 0; i < 10; i++) {\n // charSet.add(i.toString());\n // if (charSet.size >= 10) break;\n // }\n // }\n\n this.__alphabet = Array.from(charSet).sort().join('');\n\n const sa = this.stringAdapter;\n const alphabet = this.__alphabet;\n\n this.__decimalToAnyBase = anyBase(sa, '0123456789', alphabet);\n this.__anyBaseToDecimal = anyBase(sa, alphabet, '0123456789');\n }\n\n private __decimalToAnyBase = anyBase(\n this.stringAdapter,\n '0123456789',\n this.__alphabet,\n );\n\n private __anyBaseToDecimal = anyBase(\n this.stringAdapter,\n this.__alphabet,\n '0123456789',\n );\n\n override sampleToString(value: AvailableNumberAdapterValueType): string {\n return this.__decimalToAnyBase(this.numberAdapter.toString(value));\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.__updateAlphabet(this.__valueString, this.__initialValueString);\n this.initialValue = this.__initialValueString;\n this.value = this.__valueString;\n }\n\n override firstUpdated(_changedProperties: PropertyValues<this>) {\n super.firstUpdated(_changedProperties);\n\n /**\n * TimeredCounterString 有自定义的 `fillChar` 和 `digitToChar`. 实例化时需要手动触发 `partsOptions` 的 setter.\n */\n this.partsOptions = this.__partsOptions ?? {};\n }\n}\n"]}