@number-flow/svelte 0.1.3 → 0.1.5

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.
@@ -1,7 +1,10 @@
1
1
  <script context="module">import { NumberFlowLite, define } from "number-flow";
2
2
  export class NumberFlowElement extends NumberFlowLite {
3
- set parts(parts) {
4
- super.parts = parts;
3
+ set __svelte_manual(manual) {
4
+ this.manual = manual;
5
+ }
6
+ set data(data) {
7
+ super.data = data;
5
8
  }
6
9
  }
7
10
  Object.keys(NumberFlowElement.defaultProps).forEach((key) => {
@@ -18,11 +21,15 @@ define("number-flow-svelte", NumberFlowElement);
18
21
 
19
22
  <script>import {
20
23
  render as renderFlow,
21
- partitionParts
24
+ formatToData
22
25
  } from "number-flow";
26
+ import { writable } from "svelte/store";
27
+ import { getGroupContext } from "./group.js";
23
28
  export let locales = void 0;
24
29
  export let format = void 0;
25
30
  export let value;
31
+ export let prefix = void 0;
32
+ export let suffix = void 0;
26
33
  export let willChange = false;
27
34
  export let transformTiming = NumberFlowElement.defaultProps.transformTiming;
28
35
  export let spinTiming = NumberFlowElement.defaultProps.spinTiming;
@@ -32,8 +39,12 @@ export let respectMotionPreference = NumberFlowElement.defaultProps.respectMotio
32
39
  export let trend = NumberFlowElement.defaultProps.trend;
33
40
  export let continuous = NumberFlowElement.defaultProps.continuous;
34
41
  export let el = void 0;
42
+ const elStore = writable(el);
43
+ $: $elStore = el;
35
44
  $: formatter = new Intl.NumberFormat(locales, format);
36
- $: parts = partitionParts(value, formatter);
45
+ $: data = formatToData(value, formatter, prefix, suffix);
46
+ const group = getGroupContext();
47
+ group?.register?.(elStore);
37
48
  </script>
38
49
 
39
50
  <number-flow-svelte
@@ -42,6 +53,7 @@ $: parts = partitionParts(value, formatter);
42
53
  data-will-change={willChange ? '' : undefined}
43
54
  on:animationsstart
44
55
  on:animationsfinish
56
+ __svelte_manual={Boolean(group)}
45
57
  __svelte_transformTiming={transformTiming}
46
58
  __svelte_spinTiming={spinTiming}
47
59
  __svelte_opacityTiming={opacityTiming}
@@ -49,7 +61,7 @@ $: parts = partitionParts(value, formatter);
49
61
  __svelte_respectMotionPreference={respectMotionPreference}
50
62
  __svelte_trend={trend}
51
63
  __svelte_continuous={continuous}
52
- {parts}
64
+ {data}
53
65
  >
54
- {@html renderFlow({ formatted: parts.formatted, willChange })}
66
+ {@html renderFlow({ valueAsString: data.valueAsString, willChange })}
55
67
  </number-flow-svelte>
@@ -1,7 +1,8 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import { NumberFlowLite, type PartitionedParts } from 'number-flow';
2
+ import { NumberFlowLite, type Data } from 'number-flow';
3
3
  export declare class NumberFlowElement extends NumberFlowLite {
4
- set parts(parts: PartitionedParts | undefined);
4
+ set __svelte_manual(manual: boolean);
5
+ set data(data: Data | undefined);
5
6
  }
6
7
  import { type Value, type Format, type Props as NumberFlowProps } from 'number-flow';
7
8
  import type { HTMLAttributes } from 'svelte/elements';
@@ -11,6 +12,8 @@ declare const __propDef: {
11
12
  locales?: Intl.LocalesArgument;
12
13
  format?: Format;
13
14
  value: Value;
15
+ prefix?: string;
16
+ suffix?: string;
14
17
  willChange?: boolean;
15
18
  };
16
19
  slots: {};
@@ -0,0 +1,30 @@
1
+ <script>import { get } from "svelte/store";
2
+ import { beforeUpdate, onDestroy, tick } from "svelte";
3
+ import { setGroupContext } from "./group.js";
4
+ const flows = /* @__PURE__ */ new Set();
5
+ let updating = false;
6
+ const registerWithGroup = (el) => {
7
+ flows.add(el);
8
+ beforeUpdate(async () => {
9
+ if (updating) return;
10
+ updating = true;
11
+ flows.forEach(async (flow) => {
12
+ {
13
+ const f = get(flow);
14
+ if (!f || !f.created) return;
15
+ f.willUpdate();
16
+ }
17
+ await tick();
18
+ get(flow)?.didUpdate();
19
+ });
20
+ await tick();
21
+ updating = false;
22
+ });
23
+ onDestroy(() => {
24
+ flows.delete(el);
25
+ });
26
+ };
27
+ setGroupContext({ register: registerWithGroup });
28
+ </script>
29
+
30
+ <slot />
@@ -0,0 +1,18 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {
8
+ default: {};
9
+ };
10
+ exports?: {} | undefined;
11
+ bindings?: string | undefined;
12
+ };
13
+ export type NumberFlowGroupProps = typeof __propDef.props;
14
+ export type NumberFlowGroupEvents = typeof __propDef.events;
15
+ export type NumberFlowGroupSlots = typeof __propDef.slots;
16
+ export default class NumberFlowGroup extends SvelteComponent<NumberFlowGroupProps, NumberFlowGroupEvents, NumberFlowGroupSlots> {
17
+ }
18
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { NumberFlowLite } from 'number-flow';
2
+ import type { Readable } from 'svelte/store';
3
+ export type RegisterWithGroup = (el: Readable<NumberFlowLite | undefined>) => void;
4
+ export type GroupContext = {
5
+ register: RegisterWithGroup;
6
+ };
7
+ export declare function setGroupContext(ctx: GroupContext): void;
8
+ export declare function getGroupContext(): GroupContext | undefined;
package/dist/group.js ADDED
@@ -0,0 +1,8 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ let groupKey = Symbol('group');
3
+ export function setGroupContext(ctx) {
4
+ setContext(groupKey, ctx);
5
+ }
6
+ export function getGroupContext() {
7
+ return getContext(groupKey);
8
+ }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export type { Value, Format, Trend } from 'number-flow';
2
+ export { default as NumberFlowGroup } from './NumberFlowGroup.svelte';
2
3
  export { default, NumberFlowElement } from './NumberFlow.svelte';
3
4
  export declare const getCanAnimate: ({ respectMotionPreference }?: {
4
5
  respectMotionPreference?: boolean | undefined;
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { canAnimate as _canAnimate, prefersReducedMotion as _prefersReducedMotion } from 'number-flow';
2
2
  import { onMount } from 'svelte';
3
3
  import { derived, readable } from 'svelte/store';
4
+ export { default as NumberFlowGroup } from './NumberFlowGroup.svelte';
4
5
  export { default, NumberFlowElement } from './NumberFlow.svelte';
5
6
  const canAnimate = readable(_canAnimate, (set) => {
6
7
  onMount(() => {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.1.3",
6
+ "version": "0.1.5",
7
7
  "description": "A component to transition and format numbers.",
8
8
  "license": "MIT",
9
9
  "homepage": "https://number-flow.barvian.me/svelte",
@@ -41,7 +41,7 @@
41
41
  }
42
42
  },
43
43
  "dependencies": {
44
- "number-flow": "0.3.6"
44
+ "number-flow": "0.3.8"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "svelte": "^4 || ^5"
@@ -62,6 +62,7 @@
62
62
  },
63
63
  "scripts": {
64
64
  "dev": "vite dev",
65
+ "build:watch": "svelte-package --watch",
65
66
  "build": "svelte-kit sync && svelte-package && publint",
66
67
  "build:site": "vite build && pnpm build",
67
68
  "preview": "vite preview",