@custmaz/layout-icons 0.1.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,31 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ Initial release.
6
+
7
+ ## Overview
8
+
9
+ A focused, customisable set of SVG icon components for representing layout and container structures in user interfaces.
10
+
11
+
12
+ ### Features
13
+ - Layout and container-oriented icons
14
+ - Outline and filled variants
15
+ - Consistent sizing and corner-radius control
16
+ - Sensible accessibility defaults with optional titles
17
+ - Lightweight, dependency-free SVG components
18
+
19
+
20
+ ### Included Icons
21
+ - Grid (2×2)
22
+ - Grid3x3
23
+ - Masonry
24
+ - List
25
+ - Tall
26
+ - Landscape
27
+ - Card
28
+ - Split
29
+ - HamburgerMenu
30
+ - Kebab (three horizontal dots)
31
+ - Meatballs (three vertical dots)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 custmaz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,148 @@
1
+ # Layout Icons
2
+
3
+ A focused, customisable set of SVG icon components for representing layout and container structures in user interfaces.
4
+
5
+ ---
6
+
7
+ ## Design Principles
8
+
9
+ This library is intentionally narrow in scope.
10
+
11
+ - Icons represent layout structure, not visual decoration
12
+ - All icons share a consistent grid, sizing, and corner-radius model
13
+ - Components are designed to scale, style, and customise
14
+ - Accessibility is supported via optional `title` props
15
+
16
+ See the [Changelog](./CHANGELOG.md) for details on versions and updates.
17
+
18
+ ---
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ npm install @custmaz/layout-icons
24
+ ```
25
+
26
+ ---
27
+
28
+ ## Maintainer
29
+
30
+ This library is currently maintained solely by the author.
31
+ External contributions are not accepted at this time to ensure consistency and quality.
32
+
33
+ ---
34
+ ## Basic Usage
35
+
36
+ Import and use the icons in your React components:
37
+
38
+ ```tsx
39
+ import { List, HamburgerMenu, Card } from "@custmaz/layout-icons";
40
+
41
+ export function Example() {
42
+ return (
43
+ <div>
44
+ <List />
45
+ <HamburgerMenu />
46
+ <Card />
47
+ </div>
48
+ );
49
+ }
50
+ ```
51
+ Icons inherit their colour from their parent element.
52
+
53
+ ---
54
+
55
+ ## Customisation
56
+
57
+ All icons share a consistent set of props:
58
+
59
+ ``` tsx
60
+ <Grid
61
+ size={32} // Width & height
62
+ strokeWidth={2} // Outline thickness
63
+ radius={4} // Corner rounding
64
+ variant="outline" // "outline" or "filled"
65
+ title="Grid layout" // Accessibility label
66
+ />
67
+ ```
68
+
69
+ These props allow you to adjust scale, stroke weight, corner rounding, and visual style without changing the icon structure.
70
+
71
+ ---
72
+
73
+ ## Props Reference
74
+
75
+ | Prop | Type | Default | Description |
76
+ |-------------|-----------------------------------|-----------|-----------------------------------------|
77
+ | size | number \| string | 24 | Width and height of the icon |
78
+ | strokeWidth | number | 0.8 | Stroke thickness (outline only) |
79
+ | radius | number | 1 | Corner radius |
80
+ | variant | "outline" \| "filled" | "outline" | Visual style |
81
+ | title | string | — | Enables accessibility |
82
+
83
+ > Note: Defaults are for version 0.1.0
84
+
85
+ ---
86
+
87
+ ## Theming
88
+
89
+ Icons are plain SVG elements and can be styled using standard CSS techniques.
90
+
91
+ ``` tsx
92
+ <div style={{ color: "#1f2937" }}>
93
+ <Grid />
94
+ <Masonry />
95
+ </div>
96
+ ```
97
+
98
+ Works with:
99
+ * CSS/SCSS
100
+ * CSS Modules
101
+ * Tailwind
102
+ * styled-components
103
+ * inline styles
104
+
105
+ ---
106
+
107
+ ## Accessibility
108
+ Icons are decorative by default.
109
+
110
+ To provide an accessible label, pass a `title` prop:
111
+
112
+ ``` tsx
113
+ <Grid title="Grid layout" />
114
+ ```
115
+
116
+ This ensures that the icon is announced properly by screen readers.
117
+
118
+ ---
119
+
120
+ ### Available Icons
121
+
122
+ #### Layout:
123
+ * Grid
124
+ * Grid3x3
125
+ * Masonry
126
+ * List
127
+ * Tall
128
+ * Landscape
129
+ * Split
130
+ * Card
131
+
132
+ #### Menus:
133
+ * HamburgerMenu
134
+ * Kebab (three horizontal dots)
135
+ * Meatballs (three vertical dots)
136
+
137
+ ---
138
+
139
+ ## Issues
140
+
141
+ Bug reports and feature requests can be filed on GitHub:
142
+
143
+ https://github.com/custmaz/layout-icons/issues
144
+
145
+ ---
146
+
147
+ ## License
148
+ MIT
@@ -0,0 +1,67 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ declare const Grid: {
5
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
6
+ displayName: string;
7
+ };
8
+
9
+ declare const Grid3x3: {
10
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
11
+ displayName: string;
12
+ };
13
+
14
+ declare const Masonry: {
15
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
16
+ displayName: string;
17
+ };
18
+
19
+ declare const List: {
20
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
21
+ displayName: string;
22
+ };
23
+
24
+ declare const Tall: {
25
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
26
+ displayName: string;
27
+ };
28
+
29
+ declare const Landscape: {
30
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
31
+ displayName: string;
32
+ };
33
+
34
+ declare const Card: {
35
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
36
+ displayName: string;
37
+ };
38
+
39
+ declare const Split: {
40
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
41
+ displayName: string;
42
+ };
43
+
44
+ declare const HamburgerMenu: {
45
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
46
+ displayName: string;
47
+ };
48
+
49
+ declare const Kebab: {
50
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
51
+ displayName: string;
52
+ };
53
+
54
+ declare const Meatballs: {
55
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
56
+ displayName: string;
57
+ };
58
+
59
+ interface IconProps extends React.SVGProps<SVGSVGElement> {
60
+ size?: number | string;
61
+ strokeWidth?: number;
62
+ radius?: number;
63
+ variant?: "outline" | "filled";
64
+ title?: string;
65
+ }
66
+
67
+ export { Card, Grid, Grid3x3, HamburgerMenu, type IconProps, Kebab, Landscape, List, Masonry, Meatballs, Split, Tall };
@@ -0,0 +1,67 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ declare const Grid: {
5
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
6
+ displayName: string;
7
+ };
8
+
9
+ declare const Grid3x3: {
10
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
11
+ displayName: string;
12
+ };
13
+
14
+ declare const Masonry: {
15
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
16
+ displayName: string;
17
+ };
18
+
19
+ declare const List: {
20
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
21
+ displayName: string;
22
+ };
23
+
24
+ declare const Tall: {
25
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
26
+ displayName: string;
27
+ };
28
+
29
+ declare const Landscape: {
30
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
31
+ displayName: string;
32
+ };
33
+
34
+ declare const Card: {
35
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
36
+ displayName: string;
37
+ };
38
+
39
+ declare const Split: {
40
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
41
+ displayName: string;
42
+ };
43
+
44
+ declare const HamburgerMenu: {
45
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
46
+ displayName: string;
47
+ };
48
+
49
+ declare const Kebab: {
50
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
51
+ displayName: string;
52
+ };
53
+
54
+ declare const Meatballs: {
55
+ ({ size, strokeWidth, radius, variant, title, ...props }: IconProps): react_jsx_runtime.JSX.Element;
56
+ displayName: string;
57
+ };
58
+
59
+ interface IconProps extends React.SVGProps<SVGSVGElement> {
60
+ size?: number | string;
61
+ strokeWidth?: number;
62
+ radius?: number;
63
+ variant?: "outline" | "filled";
64
+ title?: string;
65
+ }
66
+
67
+ export { Card, Grid, Grid3x3, HamburgerMenu, type IconProps, Kebab, Landscape, List, Masonry, Meatballs, Split, Tall };
package/dist/index.js ADDED
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.tsx
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ Card: () => Card,
24
+ Grid: () => Grid,
25
+ Grid3x3: () => Grid3x3,
26
+ HamburgerMenu: () => HamburgerMenu,
27
+ Kebab: () => Kebab,
28
+ Landscape: () => Landscape,
29
+ List: () => List,
30
+ Masonry: () => Masonry,
31
+ Meatballs: () => Meatballs,
32
+ Split: () => Split,
33
+ Tall: () => Tall
34
+ });
35
+ module.exports = __toCommonJS(index_exports);
36
+
37
+ // src/createIcon.tsx
38
+ var import_jsx_runtime = require("react/jsx-runtime");
39
+ function createIcon(name, render) {
40
+ const Icon = ({
41
+ size = 24,
42
+ strokeWidth = 0.8,
43
+ radius = 1,
44
+ variant = "outline",
45
+ title,
46
+ ...props
47
+ }) => {
48
+ const ariaHidden = title == null ? true : void 0;
49
+ const role = title ? "img" : void 0;
50
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
51
+ "svg",
52
+ {
53
+ width: size,
54
+ height: size,
55
+ viewBox: "0 0 24 24",
56
+ fill: variant === "filled" ? "currentColor" : "none",
57
+ stroke: variant === "outline" ? "currentColor" : "none",
58
+ strokeWidth: variant === "outline" ? strokeWidth : void 0,
59
+ strokeLinecap: "round",
60
+ strokeLinejoin: "round",
61
+ focusable: "false",
62
+ "aria-hidden": ariaHidden,
63
+ role,
64
+ ...props,
65
+ children: [
66
+ title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("title", { children: title }),
67
+ render({ radius, variant })
68
+ ]
69
+ }
70
+ );
71
+ };
72
+ Icon.displayName = name;
73
+ return Icon;
74
+ }
75
+
76
+ // src/iconLayout.tsx
77
+ function repeat(count, render) {
78
+ return Array.from({ length: count }, (_, i) => render(i));
79
+ }
80
+ function horizontalStack(options) {
81
+ const { count, startX, gap, render } = options;
82
+ return repeat(count, (i) => {
83
+ const x = startX + i * gap;
84
+ return render(x, i);
85
+ });
86
+ }
87
+ function verticalStack(options) {
88
+ const { count, startY, gap, render } = options;
89
+ return repeat(count, (i) => {
90
+ const y = startY + i * gap;
91
+ return render(y, i);
92
+ });
93
+ }
94
+ function grid(options) {
95
+ const { rows, cols, startX, startY, cellSize, gap, render } = options;
96
+ return repeat(
97
+ rows,
98
+ (row) => repeat(cols, (col) => {
99
+ const x = startX + col * (cellSize + gap);
100
+ const y = startY + row * (cellSize + gap);
101
+ return render(x, y, row, col);
102
+ })
103
+ );
104
+ }
105
+
106
+ // src/icons/Grid.tsx
107
+ var import_jsx_runtime2 = require("react/jsx-runtime");
108
+ var Grid = createIcon("Grid", ({ radius }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children: grid({
109
+ rows: 2,
110
+ cols: 2,
111
+ startX: 2,
112
+ startY: 2,
113
+ cellSize: 7,
114
+ gap: 1.5,
115
+ render: (x, y, row, col) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
116
+ "rect",
117
+ {
118
+ x,
119
+ y,
120
+ width: 7,
121
+ height: 7,
122
+ rx: radius
123
+ },
124
+ `${row}-${col}`
125
+ )
126
+ }) }));
127
+
128
+ // src/icons/Grid3x3.tsx
129
+ var import_jsx_runtime3 = require("react/jsx-runtime");
130
+ var Grid3x3 = createIcon("Grid3x3", ({ radius }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: grid({
131
+ rows: 3,
132
+ cols: 3,
133
+ startX: 2,
134
+ startY: 2,
135
+ cellSize: 5,
136
+ gap: 1.5,
137
+ render: (x, y, row, col) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
138
+ "rect",
139
+ {
140
+ x,
141
+ y,
142
+ width: 5,
143
+ height: 5,
144
+ rx: radius
145
+ },
146
+ `${row}-${col}`
147
+ )
148
+ }) }));
149
+
150
+ // src/icons/Masonry.tsx
151
+ var import_jsx_runtime4 = require("react/jsx-runtime");
152
+ var Masonry = createIcon("Masonry", ({ radius }) => {
153
+ const blocks = [
154
+ { x: 3, y: 3, width: 6, height: 18 },
155
+ { x: 11, y: 3, width: 5, height: 10 },
156
+ { x: 11, y: 15, width: 5, height: 6 },
157
+ { x: 18, y: 3, width: 3, height: 18 }
158
+ ];
159
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, { children: blocks.map((props, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("rect", { ...props, rx: radius }, i)) });
160
+ });
161
+
162
+ // src/icons/List.tsx
163
+ var import_jsx_runtime5 = require("react/jsx-runtime");
164
+ var List = createIcon("List", ({ radius }) => {
165
+ const rows = [
166
+ { iconY: 4, textY: 5.5 },
167
+ { iconY: 10, textY: 11.5 },
168
+ { iconY: 16, textY: 17.5 }
169
+ ];
170
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, { children: rows.map(({ iconY, textY }, i) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("g", { children: [
171
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
172
+ "rect",
173
+ {
174
+ x: 3,
175
+ y: iconY,
176
+ width: 5,
177
+ height: 5,
178
+ rx: radius
179
+ }
180
+ ),
181
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
182
+ "rect",
183
+ {
184
+ x: 11,
185
+ y: textY,
186
+ width: 10,
187
+ height: 2,
188
+ rx: 1
189
+ }
190
+ )
191
+ ] }, i)) });
192
+ });
193
+
194
+ // src/icons/Tall.tsx
195
+ var import_jsx_runtime6 = require("react/jsx-runtime");
196
+ var Tall = createIcon("Tall", ({ radius }) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: horizontalStack({
197
+ count: 3,
198
+ startX: 3,
199
+ gap: 6.5,
200
+ render: (x, i) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
201
+ "rect",
202
+ {
203
+ x,
204
+ y: 3,
205
+ width: 5,
206
+ height: 18,
207
+ rx: radius
208
+ },
209
+ i
210
+ )
211
+ }) }));
212
+
213
+ // src/icons/Landscape.tsx
214
+ var import_jsx_runtime7 = require("react/jsx-runtime");
215
+ var Landscape = createIcon("Landscape", ({ radius }) => {
216
+ const rows = [
217
+ { y: 3, height: 5 },
218
+ { y: 10, height: 5 },
219
+ { y: 17, height: 4 }
220
+ ];
221
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_jsx_runtime7.Fragment, { children: rows.map(({ y, height }, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
222
+ "rect",
223
+ {
224
+ x: 3,
225
+ y,
226
+ width: 18,
227
+ height,
228
+ rx: radius
229
+ },
230
+ i
231
+ )) });
232
+ });
233
+
234
+ // src/icons/Card.tsx
235
+ var import_jsx_runtime8 = require("react/jsx-runtime");
236
+ var Card = createIcon("Card", ({ radius, variant }) => {
237
+ const outerPadding = 4;
238
+ const size = 16;
239
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
240
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
241
+ "rect",
242
+ {
243
+ x: outerPadding,
244
+ y: outerPadding,
245
+ width: size,
246
+ height: size,
247
+ rx: radius + 1
248
+ }
249
+ ),
250
+ variant === "outline" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
251
+ "rect",
252
+ {
253
+ x: 6,
254
+ y: 7,
255
+ width: 12,
256
+ height: 2,
257
+ rx: 1
258
+ }
259
+ )
260
+ ] });
261
+ });
262
+
263
+ // src/icons/Split.tsx
264
+ var import_jsx_runtime9 = require("react/jsx-runtime");
265
+ var Split = createIcon("Split", ({ radius }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: horizontalStack({
266
+ count: 2,
267
+ startX: 3,
268
+ gap: 10,
269
+ render: (x, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
270
+ "rect",
271
+ {
272
+ x,
273
+ y: 3,
274
+ width: 8,
275
+ height: 18,
276
+ rx: radius
277
+ },
278
+ i
279
+ )
280
+ }) }));
281
+
282
+ // src/icons/HamburgerMenu.tsx
283
+ var import_jsx_runtime10 = require("react/jsx-runtime");
284
+ var HamburgerMenu = createIcon(
285
+ "HamburgerMenu",
286
+ ({ radius }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: verticalStack({
287
+ count: 3,
288
+ startY: 5,
289
+ gap: 5.75,
290
+ render: (y, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
291
+ "rect",
292
+ {
293
+ x: 3,
294
+ y,
295
+ width: 18,
296
+ height: 2.5,
297
+ rx: radius
298
+ },
299
+ i
300
+ )
301
+ }) })
302
+ );
303
+
304
+ // src/icons/Kebab.tsx
305
+ var import_jsx_runtime11 = require("react/jsx-runtime");
306
+ var Kebab = createIcon("Kebab", () => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, { children: horizontalStack({
307
+ count: 3,
308
+ startX: 6,
309
+ gap: 6,
310
+ render: (x, i) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("circle", { cx: x, cy: 12, r: 1.5 }, i)
311
+ }) }));
312
+
313
+ // src/icons/Meatballs.tsx
314
+ var import_jsx_runtime12 = require("react/jsx-runtime");
315
+ var Meatballs = createIcon("Meatballs", () => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_jsx_runtime12.Fragment, { children: verticalStack({
316
+ count: 3,
317
+ startY: 6,
318
+ gap: 6,
319
+ render: (y, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("circle", { cx: 12, cy: y, r: 1.5 }, i)
320
+ }) }));
321
+ // Annotate the CommonJS export names for ESM import in node:
322
+ 0 && (module.exports = {
323
+ Card,
324
+ Grid,
325
+ Grid3x3,
326
+ HamburgerMenu,
327
+ Kebab,
328
+ Landscape,
329
+ List,
330
+ Masonry,
331
+ Meatballs,
332
+ Split,
333
+ Tall
334
+ });