@jis3r/icons 1.10.0 → 1.12.0

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.
@@ -52,7 +52,7 @@
52
52
  <header
53
53
  class="bg-background bg-opacity-40 fixed top-0 z-50 h-[72px] w-full border-b backdrop-blur-xl"
54
54
  >
55
- <nav class="container flex items-center justify-between py-4">
55
+ <nav class="container mx-auto flex max-w-7xl items-center justify-between py-4">
56
56
  <a href="/" class="cursor-pointer text-base"> moving icons </a>
57
57
  <div class="flex gap-1">
58
58
  <Button
@@ -0,0 +1,99 @@
1
+ <script>
2
+ /**
3
+ * @typedef {Object} Props
4
+ * @property {string} [color]
5
+ * @property {number} [size]
6
+ * @property {number} [strokeWidth]
7
+ * @property {boolean} [isHovered]
8
+ * @property {string} [class]
9
+ */
10
+
11
+ /** @type {Props} */
12
+ let {
13
+ color = 'currentColor',
14
+ size = 24,
15
+ strokeWidth = 2,
16
+ isHovered = false,
17
+ class: className = ''
18
+ } = $props();
19
+
20
+ function handleMouseEnter() {
21
+ isHovered = true;
22
+ }
23
+
24
+ function handleMouseLeave() {
25
+ isHovered = false;
26
+ }
27
+ </script>
28
+
29
+ <div
30
+ class={className}
31
+ aria-label="images"
32
+ role="img"
33
+ onmouseenter={handleMouseEnter}
34
+ onmouseleave={handleMouseLeave}
35
+ >
36
+ <svg
37
+ xmlns="http://www.w3.org/2000/svg"
38
+ width={size}
39
+ height={size}
40
+ viewBox="0 0 24 24"
41
+ fill="none"
42
+ stroke={color}
43
+ stroke-width={strokeWidth}
44
+ stroke-linecap="round"
45
+ stroke-linejoin="round"
46
+ >
47
+ <path
48
+ d="m22 11-1.296-1.296a2.4 2.4 0 0 0-3.408 0L11 16"
49
+ class="images-path-1"
50
+ class:animate={isHovered}
51
+ />
52
+ <path
53
+ d="M4 8a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2"
54
+ class="images-path-2"
55
+ class:animate={isHovered}
56
+ />
57
+ <circle
58
+ cx="13"
59
+ cy="7"
60
+ r="1"
61
+ fill="currentColor"
62
+ class="images-circle"
63
+ class:animate={isHovered}
64
+ />
65
+ <rect x="8" y="2" width="14" height="14" rx="2" class="images-rect" class:animate={isHovered} />
66
+ </svg>
67
+ </div>
68
+
69
+ <style>
70
+ div {
71
+ display: inline-block;
72
+ }
73
+ .images-path-1,
74
+ .images-path-2,
75
+ .images-circle,
76
+ .images-rect {
77
+ transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
78
+ }
79
+
80
+ .images-path-1.animate {
81
+ transform: translate(-3px, 3px);
82
+ }
83
+
84
+ .images-path-2.animate {
85
+ transform: translate(3px, -3px);
86
+ }
87
+
88
+ .images-circle.animate {
89
+ transform: translate(-3px, 3px);
90
+ }
91
+
92
+ .images-rect.animate {
93
+ transform: translate(-3px, 3px);
94
+ }
95
+
96
+ svg {
97
+ overflow: visible;
98
+ }
99
+ </style>
@@ -0,0 +1,19 @@
1
+ export default Images;
2
+ type Images = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<Props>): void;
5
+ };
6
+ declare const Images: import("svelte").Component<{
7
+ color?: string;
8
+ size?: number;
9
+ strokeWidth?: number;
10
+ isHovered?: boolean;
11
+ class?: string;
12
+ }, {}, "">;
13
+ type Props = {
14
+ color?: string;
15
+ size?: number;
16
+ strokeWidth?: number;
17
+ isHovered?: boolean;
18
+ class?: string;
19
+ };
@@ -259,6 +259,7 @@ import house from './house.svelte';
259
259
  import houseWifi from './house-wifi.svelte';
260
260
  import imageDown from './image-down.svelte';
261
261
  import imageOff from './image-off.svelte';
262
+ import images from './images.svelte';
262
263
  import imageUp from './image-up.svelte';
263
264
  import infinity from './infinity.svelte';
264
265
  import kanban from './kanban.svelte';
@@ -274,6 +275,7 @@ import layoutGrid from './layout-grid.svelte';
274
275
  import layoutPanelLeft from './layout-panel-left.svelte';
275
276
  import layoutPanelTop from './layout-panel-top.svelte';
276
277
  import layoutTemplate from './layout-template.svelte';
278
+ import lightbulb from './lightbulb.svelte';
277
279
  import lightbulbOff from './lightbulb-off.svelte';
278
280
  import link2Off from './link-2-off.svelte';
279
281
  import listCheck from './list-check.svelte';
@@ -3265,6 +3267,22 @@ let ICONS_LIST = [
3265
3267
  tags: ['picture', 'photo', 'upload', 'import'],
3266
3268
  categories: ['photography', 'text', 'multimedia', 'files']
3267
3269
  },
3270
+ {
3271
+ name: 'images',
3272
+ icon: images,
3273
+ tags: [
3274
+ 'picture',
3275
+ 'photo',
3276
+ 'multiple',
3277
+ 'copy',
3278
+ 'gallery',
3279
+ 'album',
3280
+ 'collection',
3281
+ 'slideshow',
3282
+ 'showcase'
3283
+ ],
3284
+ categories: ['photography', 'text', 'multimedia', 'files']
3285
+ },
3268
3286
  {
3269
3287
  name: 'infinity',
3270
3288
  icon: infinity,
@@ -3391,6 +3409,12 @@ let ICONS_LIST = [
3391
3409
  tags: ['window', 'webpage', 'block', 'section'],
3392
3410
  categories: ['layout']
3393
3411
  },
3412
+ {
3413
+ name: 'lightbulb',
3414
+ icon: lightbulb,
3415
+ tags: ['idea', 'bright', 'lights'],
3416
+ categories: ['photography']
3417
+ },
3394
3418
  {
3395
3419
  name: 'lightbulb-off',
3396
3420
  icon: lightbulbOff,
@@ -0,0 +1,142 @@
1
+ <script>
2
+ /**
3
+ * @typedef {Object} Props
4
+ * @property {string} [color]
5
+ * @property {number} [size]
6
+ * @property {number} [strokeWidth]
7
+ * @property {boolean} [isHovered]
8
+ * @property {string} [class]
9
+ */
10
+
11
+ /** @type {Props} */
12
+ let {
13
+ color = 'currentColor',
14
+ size = 24,
15
+ strokeWidth = 2,
16
+ isHovered = false,
17
+ class: className = ''
18
+ } = $props();
19
+
20
+ function handleMouseEnter() {
21
+ isHovered = true;
22
+
23
+ setTimeout(() => {
24
+ isHovered = false;
25
+ }, 1100);
26
+ }
27
+ </script>
28
+
29
+ <div class={className} aria-label="lightbulb" role="img" onmouseenter={handleMouseEnter}>
30
+ <svg
31
+ xmlns="http://www.w3.org/2000/svg"
32
+ width={size}
33
+ height={size}
34
+ viewBox="0 0 24 24"
35
+ fill="none"
36
+ stroke={color}
37
+ stroke-width={strokeWidth}
38
+ stroke-linecap="round"
39
+ stroke-linejoin="round"
40
+ class="lightbulb-icon"
41
+ class:animate={isHovered}
42
+ >
43
+ <path
44
+ d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"
45
+ class="lightbulb-path1"
46
+ />
47
+ <path d="M9 18h6" class="lightbulb-path2" />
48
+ <path d="M10 22h4" class="lightbulb-path3" />
49
+ </svg>
50
+ </div>
51
+
52
+ <style>
53
+ div {
54
+ display: inline-block;
55
+ }
56
+
57
+ .lightbulb-icon {
58
+ overflow: visible;
59
+ }
60
+
61
+ .lightbulb-path1 {
62
+ transform-origin: bottom center;
63
+ transform-box: fill-box;
64
+ fill: transparent;
65
+ transition: fill 0s;
66
+ }
67
+
68
+ .lightbulb-path2 {
69
+ transform-origin: bottom center;
70
+ transform-box: fill-box;
71
+ }
72
+
73
+ .lightbulb-icon.animate .lightbulb-path1 {
74
+ animation:
75
+ lightbulb-rotate1 0.8s ease-in-out forwards,
76
+ lightbulb-fill-opacity 0.3s ease-in-out 0.4s forwards;
77
+ fill: currentColor;
78
+ fill-opacity: 0;
79
+ }
80
+
81
+ .lightbulb-icon:not(.animate) .lightbulb-path1 {
82
+ fill: transparent;
83
+ }
84
+
85
+ .lightbulb-icon.animate .lightbulb-path2 {
86
+ animation: lightbulb-rotate2 0.8s ease-in-out forwards;
87
+ }
88
+
89
+ @keyframes lightbulb-rotate1 {
90
+ 0% {
91
+ transform: rotate(0deg);
92
+ }
93
+ 40% {
94
+ transform: rotate(-20deg);
95
+ }
96
+ 60% {
97
+ transform: rotate(15deg);
98
+ }
99
+ 80% {
100
+ transform: rotate(-7deg);
101
+ }
102
+ 100% {
103
+ transform: rotate(0deg);
104
+ }
105
+ }
106
+
107
+ @keyframes lightbulb-fill-opacity {
108
+ 0% {
109
+ fill-opacity: 0;
110
+ }
111
+ 40% {
112
+ fill-opacity: 1;
113
+ }
114
+ 60% {
115
+ fill-opacity: 0;
116
+ }
117
+ 80% {
118
+ fill-opacity: 1;
119
+ }
120
+ 100% {
121
+ fill-opacity: 0;
122
+ }
123
+ }
124
+
125
+ @keyframes lightbulb-rotate2 {
126
+ 0% {
127
+ transform: rotate(0deg);
128
+ }
129
+ 40% {
130
+ transform: rotate(0deg);
131
+ }
132
+ 60% {
133
+ transform: rotate(10deg);
134
+ }
135
+ 80% {
136
+ transform: rotate(-5deg);
137
+ }
138
+ 100% {
139
+ transform: rotate(0deg);
140
+ }
141
+ }
142
+ </style>
@@ -0,0 +1,19 @@
1
+ export default Lightbulb;
2
+ type Lightbulb = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<Props>): void;
5
+ };
6
+ declare const Lightbulb: import("svelte").Component<{
7
+ color?: string;
8
+ size?: number;
9
+ strokeWidth?: number;
10
+ isHovered?: boolean;
11
+ class?: string;
12
+ }, {}, "">;
13
+ type Props = {
14
+ color?: string;
15
+ size?: number;
16
+ strokeWidth?: number;
17
+ isHovered?: boolean;
18
+ class?: string;
19
+ };
package/dist/index.d.ts CHANGED
@@ -260,6 +260,7 @@ export { default as House } from "./icons/house.svelte";
260
260
  export { default as ImageDown } from "./icons/image-down.svelte";
261
261
  export { default as ImageOff } from "./icons/image-off.svelte";
262
262
  export { default as ImageUp } from "./icons/image-up.svelte";
263
+ export { default as Images } from "./icons/images.svelte";
263
264
  export { default as Infinity } from "./icons/infinity.svelte";
264
265
  export { default as Kanban } from "./icons/kanban.svelte";
265
266
  export { default as KeyRound } from "./icons/key-round.svelte";
@@ -275,6 +276,7 @@ export { default as LayoutPanelLeft } from "./icons/layout-panel-left.svelte";
275
276
  export { default as LayoutPanelTop } from "./icons/layout-panel-top.svelte";
276
277
  export { default as LayoutTemplate } from "./icons/layout-template.svelte";
277
278
  export { default as LightbulbOff } from "./icons/lightbulb-off.svelte";
279
+ export { default as Lightbulb } from "./icons/lightbulb.svelte";
278
280
  export { default as Link2Off } from "./icons/link-2-off.svelte";
279
281
  export { default as ListCheck } from "./icons/list-check.svelte";
280
282
  export { default as ListChecks } from "./icons/list-checks.svelte";
package/dist/index.js CHANGED
@@ -260,6 +260,7 @@ export { default as House } from './icons/house.svelte';
260
260
  export { default as ImageDown } from './icons/image-down.svelte';
261
261
  export { default as ImageOff } from './icons/image-off.svelte';
262
262
  export { default as ImageUp } from './icons/image-up.svelte';
263
+ export { default as Images } from './icons/images.svelte';
263
264
  export { default as Infinity } from './icons/infinity.svelte';
264
265
  export { default as Kanban } from './icons/kanban.svelte';
265
266
  export { default as KeyRound } from './icons/key-round.svelte';
@@ -275,6 +276,7 @@ export { default as LayoutPanelLeft } from './icons/layout-panel-left.svelte';
275
276
  export { default as LayoutPanelTop } from './icons/layout-panel-top.svelte';
276
277
  export { default as LayoutTemplate } from './icons/layout-template.svelte';
277
278
  export { default as LightbulbOff } from './icons/lightbulb-off.svelte';
279
+ export { default as Lightbulb } from './icons/lightbulb.svelte';
278
280
  export { default as Link2Off } from './icons/link-2-off.svelte';
279
281
  export { default as ListCheck } from './icons/list-check.svelte';
280
282
  export { default as ListChecks } from './icons/list-checks.svelte';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jis3r/icons",
3
- "version": "1.10.0",
3
+ "version": "1.12.0",
4
4
  "description": "beautifully crafted, moving icons. for svelte.",
5
5
  "keywords": [
6
6
  "svelte",
@@ -49,7 +49,7 @@
49
49
  "@sveltejs/adapter-auto": "^6.0.1",
50
50
  "@sveltejs/kit": "^2.26.1",
51
51
  "@sveltejs/package": "^2.0.0",
52
- "@sveltejs/vite-plugin-svelte": "^5.0.3",
52
+ "@sveltejs/vite-plugin-svelte": "^6.2.1",
53
53
  "@tailwindcss/vite": "^4.1.16",
54
54
  "@types/eslint": "^9.6.0",
55
55
  "autoprefixer": "^10.4.20",