vue-computed-with-control 1.0.2 → 1.0.4

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.
Files changed (4) hide show
  1. package/README.md +36 -16
  2. package/banner.svg +52 -0
  3. package/logo.svg +34 -0
  4. package/package.json +19 -4
package/README.md CHANGED
@@ -1,8 +1,17 @@
1
- # vue-computed-with-control
1
+ <p align="center">
2
+ <img src="logo.svg" alt="vue-computed-with-control" width="180" />
3
+ </p>
2
4
 
3
- Computed with manual control
5
+ <h1 align="center">vue-computed-with-control</h1>
6
+
7
+ <p align="center">A Vue 3 composition API utility that lets you explicitly control computed property updates with manual trigger functions and dependency tracking. Provides fine-grained control over when computations re-run.</p>
8
+
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/vue-computed-with-control"><img src="https://img.shields.io/npm/v/vue-computed-with-control.svg" alt="npm version" /></a>
11
+ <a href="https://www.npmjs.com/package/vue-computed-with-control"><img src="https://img.shields.io/npm/dm/vue-computed-with-control.svg" alt="npm downloads" /></a>
12
+ <a href="https://github.com/vuefrag/vue-computed-with-control/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/vue-computed-with-control.svg" alt="license" /></a>
13
+ </p>
4
14
 
5
- > Extracted from [VueUse](https://vueuse.org/) for standalone use.
6
15
 
7
16
  ## Installation
8
17
 
@@ -19,26 +28,29 @@ import { computedWithControl } from 'vue-computed-with-control';
19
28
  Explicitly define the dependencies of computed.
20
29
 
21
30
  ```ts
22
- import { ref } from 'vue';
23
- import { computedWithControl } from 'vue-computed-with-control';
31
+ import { computedWithControl } from 'vue-computed-with-control'
24
32
 
25
- const source = ref('foo');
26
- const counter = ref(0);
33
+ const source = ref('foo')
34
+ const counter = ref(0)
27
35
 
28
36
  const computedRef = computedWithControl(
29
37
  () => source.value, // watch source, same as `watch`
30
38
  () => counter.value, // computed getter, same as `computed`
31
- );
39
+ )
40
+ ```
41
+
42
+ With this, the changes of `counter` won't trigger `computedRef` to update but the `source` ref does.
32
43
 
33
- console.log(computedRef.value); // 0
44
+ ```ts
45
+ console.log(computedRef.value) // 0
34
46
 
35
- counter.value += 1;
47
+ counter.value += 1
36
48
 
37
- console.log(computedRef.value); // 0 (counter change doesn't trigger update)
49
+ console.log(computedRef.value) // 0
38
50
 
39
- source.value = 'bar';
51
+ source.value = 'bar'
40
52
 
41
- console.log(computedRef.value); // 1 (source change triggers update)
53
+ console.log(computedRef.value) // 1
42
54
  ```
43
55
 
44
56
  ### Manual Triggering
@@ -46,7 +58,12 @@ console.log(computedRef.value); // 1 (source change triggers update)
46
58
  You can also manually trigger the update of the computed by:
47
59
 
48
60
  ```ts
49
- computedRef.trigger();
61
+ const computedRef = computedWithControl(
62
+ () => source.value,
63
+ () => counter.value,
64
+ )
65
+
66
+ computedRef.trigger()
50
67
  ```
51
68
 
52
69
  ### Deep Watch
@@ -55,15 +72,18 @@ Unlike `computed`, `computedWithControl` is shallow by default.
55
72
  You can specify the same options as `watch` to control the behavior:
56
73
 
57
74
  ```ts
58
- const source = ref({ name: 'foo' });
75
+ const source = ref({ name: 'foo' })
59
76
 
60
77
  const computedRef = computedWithControl(
61
78
  source,
62
79
  () => counter.value,
63
80
  { deep: true },
64
- );
81
+ )
65
82
  ```
66
83
 
84
+ > Extracted from [VueUse](https://vueuse.org/) for standalone use.
85
+
86
+
67
87
  ## License
68
88
 
69
89
  MIT
package/banner.svg ADDED
@@ -0,0 +1,52 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 640" width="1280" height="640">
2
+ <defs>
3
+ <linearGradient id="banner-bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#35495e;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#1a252f;stop-opacity:1" />
6
+ </linearGradient>
7
+ </defs>
8
+
9
+ <!-- Background -->
10
+ <rect width="1280" height="640" fill="url(#banner-bg)"/>
11
+
12
+ <!-- Decorative elements -->
13
+ <circle cx="1200" cy="100" r="300" fill="#42b883" opacity="0.05"/>
14
+ <circle cx="80" cy="540" r="200" fill="#42b883" opacity="0.05"/>
15
+
16
+ <!-- Top accent bar -->
17
+ <rect x="0" y="0" width="1280" height="8" fill="#42b883"/>
18
+
19
+ <!-- VueFrag badge -->
20
+ <g transform="translate(80, 80)">
21
+ <rect width="140" height="50" rx="8" fill="#42b883"/>
22
+ <text x="70" y="33" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="22" font-weight="700" fill="white">VueFrag</text>
23
+ </g>
24
+
25
+ <!-- Package name -->
26
+ <text x="80" y="280" font-family="system-ui, -apple-system, sans-serif" font-size="72" font-weight="700" fill="white">vue-computed-with-control</text>
27
+
28
+ <!-- Description -->
29
+ <text x="80" y="360" font-family="system-ui, -apple-system, sans-serif" font-size="32" fill="#94a3b8">Vue 3 computed with manual trigger and dependency control</text>
30
+
31
+ <!-- Install command -->
32
+ <g transform="translate(80, 420)">
33
+ <rect width="500" height="60" rx="8" fill="#0f172a"/>
34
+ <text x="20" y="40" font-family="ui-monospace, monospace" font-size="24" fill="#94a3b8">npm install</text>
35
+ <text x="200" y="40" font-family="ui-monospace, monospace" font-size="24" fill="#42b883">vue-computed-with-control</text>
36
+ </g>
37
+
38
+ <!-- Category badge -->
39
+ <g transform="translate(80, 520)">
40
+ <rect width="172" height="40" rx="20" fill="#42b883" opacity="0.2"/>
41
+ <text x="86" y="27" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="18" fill="#42b883">Reactivity</text>
42
+ </g>
43
+
44
+ <!-- Vue logo hint -->
45
+ <g transform="translate(1080, 480)">
46
+ <polygon points="100,20 140,100 60,100" fill="#42b883" opacity="0.3"/>
47
+ <polygon points="100,40 125,90 75,90" fill="#42b883" opacity="0.5"/>
48
+ </g>
49
+
50
+ <!-- Bottom text -->
51
+ <text x="1200" y="600" text-anchor="end" font-family="system-ui, -apple-system, sans-serif" font-size="18" fill="#64748b">Standalone VueUse function</text>
52
+ </svg>
package/logo.svg ADDED
@@ -0,0 +1,34 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" width="256" height="256">
2
+ <defs>
3
+ <linearGradient id="bg-grad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#35495e;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#1a252f;stop-opacity:1" />
6
+ </linearGradient>
7
+ </defs>
8
+
9
+ <!-- Background -->
10
+ <rect width="96" height="96" rx="16" fill="url(#bg-grad)"/>
11
+
12
+ <!-- Decorative corner accent -->
13
+ <path d="M96 0v20c0-11.046-8.954-20-20-20H96z" fill="#42b883" opacity="0.12"/>
14
+
15
+ <!-- Vue badge -->
16
+ <g transform="translate(8, 8)">
17
+ <rect width="18" height="9" rx="2" fill="#42b883"/>
18
+ <text x="9" y="6.8" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="4.5" font-weight="700" fill="white">VUE</text>
19
+ </g>
20
+
21
+ <!-- Category icon -->
22
+ <g>
23
+ <circle cx="48" cy="28" r="12" fill="none" stroke="#42b883" stroke-width="3"/><circle cx="48" cy="28" r="5" fill="#42b883"/><path d="M36 28h-4M60 28h4M48 16v-4M48 40v4" stroke="#42b883" stroke-width="2" stroke-linecap="round"/>
24
+ </g>
25
+
26
+ <!-- Function name - textLength ensures it fits within bounds -->
27
+ <text x="48" y="60" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="7" font-weight="600" fill="white" textLength="80" lengthAdjust="spacingAndGlyphs">Computed With Control</text>
28
+
29
+ <!-- Category label -->
30
+ <text x="48" y="72" text-anchor="middle" font-family="system-ui, -apple-system, sans-serif" font-size="7" fill="#42b883" opacity="0.85">Reactivity</text>
31
+
32
+ <!-- Bottom accent line -->
33
+ <rect x="28" y="82" width="40" height="2" rx="1" fill="#42b883" opacity="0.5"/>
34
+ </svg>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vue-computed-with-control",
3
- "version": "1.0.2",
4
- "description": "Computed with manual control",
3
+ "version": "1.0.4",
4
+ "description": "Vue 3 computed with manual trigger and dependency control",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
@@ -13,7 +13,9 @@
13
13
  }
14
14
  },
15
15
  "files": [
16
- "dist"
16
+ "dist",
17
+ "logo.svg",
18
+ "banner.svg"
17
19
  ],
18
20
  "scripts": {
19
21
  "build": "unbuild",
@@ -22,8 +24,21 @@
22
24
  "keywords": [
23
25
  "vue",
24
26
  "vue3",
27
+ "vue-3",
25
28
  "composable",
29
+ "composition-api",
26
30
  "vueuse",
31
+ "reactive",
32
+ "reactivity",
33
+ "computed",
34
+ "ref",
35
+ "state",
36
+ "with",
37
+ "control",
38
+ "manual",
39
+ "trigger",
40
+ "dependencies",
41
+ "explicit",
27
42
  "computedWithControl"
28
43
  ],
29
44
  "author": "VueFrag",
@@ -44,4 +59,4 @@
44
59
  "typescript": "^5.0.0",
45
60
  "vue": "^3.4.0"
46
61
  }
47
- }
62
+ }