neogestify-ui-components 1.2.21 → 2.0.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.
Files changed (52) hide show
  1. package/README.md +352 -2
  2. package/dist/components/VenueMapEditor/index.d.mts +202 -0
  3. package/dist/components/VenueMapEditor/index.d.ts +202 -0
  4. package/dist/components/VenueMapEditor/index.js +2684 -0
  5. package/dist/components/VenueMapEditor/index.js.map +1 -0
  6. package/dist/components/VenueMapEditor/index.mjs +2676 -0
  7. package/dist/components/VenueMapEditor/index.mjs.map +1 -0
  8. package/dist/components/alerts/index.js.map +1 -1
  9. package/dist/components/alerts/index.mjs.map +1 -1
  10. package/dist/components/html/index.d.mts +2 -0
  11. package/dist/components/html/index.d.ts +2 -0
  12. package/dist/components/html/index.js +24 -58
  13. package/dist/components/html/index.js.map +1 -1
  14. package/dist/components/html/index.mjs +24 -58
  15. package/dist/components/html/index.mjs.map +1 -1
  16. package/dist/components/icons/index.d.mts +18 -2
  17. package/dist/components/icons/index.d.ts +18 -2
  18. package/dist/components/icons/index.js +97 -11
  19. package/dist/components/icons/index.js.map +1 -1
  20. package/dist/components/icons/index.mjs +82 -12
  21. package/dist/components/icons/index.mjs.map +1 -1
  22. package/dist/context/theme/index.js.map +1 -1
  23. package/dist/context/theme/index.mjs.map +1 -1
  24. package/dist/index.d.mts +2 -1
  25. package/dist/index.d.ts +2 -1
  26. package/dist/index.js +2734 -69
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +2713 -71
  29. package/dist/index.mjs.map +1 -1
  30. package/package.json +9 -4
  31. package/src/components/VenueMapEditor/VenueMapEditor.tsx +851 -0
  32. package/src/components/VenueMapEditor/VenueMapViewer.tsx +13 -0
  33. package/src/components/VenueMapEditor/components/Artboard.tsx +405 -0
  34. package/src/components/VenueMapEditor/components/EditorCanvas.tsx +472 -0
  35. package/src/components/VenueMapEditor/components/ElementNode.tsx +357 -0
  36. package/src/components/VenueMapEditor/components/FloorTabs.tsx +137 -0
  37. package/src/components/VenueMapEditor/components/GridOverlay.tsx +67 -0
  38. package/src/components/VenueMapEditor/components/PropertiesPanel.tsx +198 -0
  39. package/src/components/VenueMapEditor/components/Toolbar.tsx +254 -0
  40. package/src/components/VenueMapEditor/components/WallLayer.tsx +117 -0
  41. package/src/components/VenueMapEditor/hooks/useDrag.ts +79 -0
  42. package/src/components/VenueMapEditor/hooks/useHistory.ts +74 -0
  43. package/src/components/VenueMapEditor/hooks/usePanZoom.ts +114 -0
  44. package/src/components/VenueMapEditor/hooks/useSelection.ts +42 -0
  45. package/src/components/VenueMapEditor/index.ts +34 -0
  46. package/src/components/VenueMapEditor/types.ts +173 -0
  47. package/src/components/VenueMapEditor/utils/idGen.ts +2 -0
  48. package/src/components/VenueMapEditor/utils/snapUtils.ts +38 -0
  49. package/src/components/VenueMapEditor/utils/wallGeometry.ts +83 -0
  50. package/src/components/html/Input.tsx +48 -80
  51. package/src/components/icons/icons.tsx +153 -14
  52. package/src/index.ts +1 -0
@@ -4,12 +4,16 @@ interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
4
4
  label?: string | ReactNode;
5
5
  error?: string;
6
6
  helperText?: string;
7
+ icon?: ReactNode;
8
+ iconSide?: 'left' | 'right';
7
9
  }
8
10
 
9
11
  export const Input: FC<InputProps> = ({
10
12
  label,
11
13
  error,
12
14
  helperText,
15
+ icon,
16
+ iconSide = 'left',
13
17
  className = '',
14
18
  id,
15
19
  type,
@@ -20,7 +24,9 @@ export const Input: FC<InputProps> = ({
20
24
  // ── Default text input ────────────────────────────────────────────────────
21
25
  const baseClasses = 'appearance-none relative block w-full px-3 py-2 border placeholder-gray-500 dark:placeholder-gray-400 text-gray-900 dark:text-white bg-white dark:bg-gray-800 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 focus:z-10 sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200';
22
26
  const errorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400 focus:border-red-500' : 'border-gray-300 dark:border-gray-600';
23
- const classes = `${baseClasses} ${errorClasses} ${className}`;
27
+ const iconPaddingLeft = icon && iconSide === 'left' ? 'pl-9' : '';
28
+ const iconPaddingRight = icon && iconSide === 'right' ? 'pr-9' : '';
29
+ const classes = `${baseClasses} ${errorClasses} ${iconPaddingLeft} ${iconPaddingRight} ${className}`.trim();
24
30
 
25
31
  // ── Checkbox / Radio ──────────────────────────────────────────────────────
26
32
  const toggleShape = type === 'radio' ? 'rounded-full' : 'rounded';
@@ -37,37 +43,31 @@ export const Input: FC<InputProps> = ({
37
43
  const wrapperBase = 'space-y-1 w-full';
38
44
  const wrapperClasses = hasHidden ? `${wrapperBase} hidden` : wrapperBase;
39
45
 
46
+ const labelNode = label && (
47
+ typeof label === 'string' ? (
48
+ <label htmlFor={inputId} className="block text-sm font-medium text-gray-700 dark:text-gray-300">
49
+ {label}
50
+ </label>
51
+ ) : label
52
+ );
53
+
54
+ const errorNode = error && (
55
+ <p className="text-sm text-red-600 dark:text-red-400" role="alert">{error}</p>
56
+ );
57
+
58
+ const helperNode = helperText && !error && (
59
+ <p className="text-sm text-gray-500 dark:text-gray-400">{helperText}</p>
60
+ );
61
+
40
62
  if (type === 'checkbox' || type === 'radio') {
41
63
  return (
42
64
  <div className={wrapperClasses}>
43
65
  <div className="flex items-center space-x-2">
44
- <input
45
- id={inputId}
46
- type={type}
47
- className={toggleClasses}
48
- {...props}
49
- />
50
- {label && typeof label === 'string' ? (
51
- <label
52
- htmlFor={inputId}
53
- className="block text-sm font-medium text-gray-700 dark:text-gray-300"
54
- >
55
- {label}
56
- </label>
57
- ) : (
58
- label
59
- )}
66
+ <input id={inputId} type={type} className={toggleClasses} {...props} />
67
+ {labelNode}
60
68
  </div>
61
- {error && (
62
- <p className="text-sm text-red-600 dark:text-red-400" role="alert">
63
- {error}
64
- </p>
65
- )}
66
- {helperText && !error && (
67
- <p className="text-sm text-gray-500 dark:text-gray-400">
68
- {helperText}
69
- </p>
70
- )}
69
+ {errorNode}
70
+ {helperNode}
71
71
  </div>
72
72
  );
73
73
  }
@@ -75,64 +75,32 @@ export const Input: FC<InputProps> = ({
75
75
  if (type === 'file') {
76
76
  return (
77
77
  <div className={wrapperClasses}>
78
- {label && typeof label === 'string' ? (
79
- <label
80
- htmlFor={inputId}
81
- className="block text-sm font-medium text-gray-700 dark:text-gray-300"
82
- >
83
- {label}
84
- </label>
85
- ) : (
86
- label
87
- )}
88
- <input
89
- id={inputId}
90
- type="file"
91
- className={fileClasses}
92
- {...props}
93
- />
94
- {error && (
95
- <p className="text-sm text-red-600 dark:text-red-400" role="alert">
96
- {error}
97
- </p>
98
- )}
99
- {helperText && !error && (
100
- <p className="text-sm text-gray-500 dark:text-gray-400">
101
- {helperText}
102
- </p>
103
- )}
78
+ {labelNode}
79
+ <input id={inputId} type="file" className={fileClasses} {...props} />
80
+ {errorNode}
81
+ {helperNode}
104
82
  </div>
105
83
  );
106
84
  }
107
85
 
108
86
  return (
109
87
  <div className={wrapperClasses}>
110
- {label && typeof label === 'string' ? (
111
- <label
112
- htmlFor={inputId}
113
- className="block text-sm font-medium text-gray-700 dark:text-gray-300"
114
- >
115
- {label}
116
- </label>
117
- ) : (
118
- label
119
- )}
120
- <input
121
- id={inputId}
122
- className={classes}
123
- type={type}
124
- {...props}
125
- />
126
- {error && (
127
- <p className="text-sm text-red-600 dark:text-red-400" role="alert">
128
- {error}
129
- </p>
130
- )}
131
- {helperText && !error && (
132
- <p className="text-sm text-gray-500 dark:text-gray-400">
133
- {helperText}
134
- </p>
135
- )}
88
+ {labelNode}
89
+ <div className="relative">
90
+ {icon && iconSide === 'left' && (
91
+ <div className="pointer-events-none absolute inset-y-0 left-0 z-10 flex items-center pl-3 text-gray-400 dark:text-gray-500">
92
+ {icon}
93
+ </div>
94
+ )}
95
+ <input id={inputId} className={classes} type={type} {...props} />
96
+ {icon && iconSide === 'right' && (
97
+ <div className="pointer-events-none absolute inset-y-0 right-0 z-10 flex items-center pr-3 text-gray-400 dark:text-gray-500">
98
+ {icon}
99
+ </div>
100
+ )}
101
+ </div>
102
+ {errorNode}
103
+ {helperNode}
136
104
  </div>
137
105
  );
138
- };
106
+ };
@@ -111,19 +111,6 @@ export function LogoutIcon({ className }: Props) {
111
111
  )
112
112
  }
113
113
 
114
- export function TruckIcon({ className }: Props) {
115
- return (
116
- <svg className={className} fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
117
- <path
118
- strokeLinecap="round"
119
- strokeLinejoin="round"
120
- strokeWidth={2}
121
- d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
122
- />
123
- </svg>
124
- )
125
- }
126
-
127
114
  export function HomeIcon({ className }: Props) {
128
115
  return (
129
116
  <svg className={className} fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
@@ -498,7 +485,7 @@ export function PasteIcon({ className }: Props) {
498
485
 
499
486
  export function RestaurantMenuIcon({ className }: Props) {
500
487
  return (
501
- <svg xmlns="http://www.w3.org/2000/svg" className={className} viewBox="0 0 24 24"><path fill="currentColor" d="M6 22q-.825 0-1.412-.587T4 20v-2q-.425 0-.712-.288T3 17t.288-.712T4 16v-3q-.425 0-.712-.288T3 12t.288-.712T4 11V8q-.425 0-.712-.288T3 7t.288-.712T4 6V4q0-.825.588-1.412T6 2h12q.825 0 1.413.588T20 4v16q0 .825-.587 1.413T18 22zm0-2h12V4H6v2q.425 0 .713.288T7 7t-.288.713T6 8v3q.425 0 .713.288T7 12t-.288.713T6 13v3q.425 0 .713.288T7 17t-.288.713T6 18zm3.5-7v3.25q0 .325.213.538t.537.212.538-.213.212-.537V13q.65-.175 1.075-.712t.425-1.213V7.5q0-.2-.15-.35T12 7t-.35.15-.15.35v3.275h-.75V7.5q0-.2-.15-.35T10.25 7t-.35.15-.15.35v3.275H9V7.5q0-.2-.15-.35T8.5 7t-.35.15T8 7.5v3.575q0 .675.425 1.213T9.5 13m5.5 0v3.25q0 .325.213.538t.537.212.538-.213.212-.537V7.575q0-.275-.187-.425T15.825 7q-.325 0-.712.175t-.738.525q-.425.425-.65.963T13.5 9.825V12q0 .425.288.713T14.5 13zm-9 7V4z"/></svg>
488
+ <svg xmlns="http://www.w3.org/2000/svg" className={className} viewBox="0 0 24 24"><path fill="currentColor" d="M6 22q-.825 0-1.412-.587T4 20v-2q-.425 0-.712-.288T3 17t.288-.712T4 16v-3q-.425 0-.712-.288T3 12t.288-.712T4 11V8q-.425 0-.712-.288T3 7t.288-.712T4 6V4q0-.825.588-1.412T6 2h12q.825 0 1.413.588T20 4v16q0 .825-.587 1.413T18 22zm0-2h12V4H6v2q.425 0 .713.288T7 7t-.288.713T6 8v3q.425 0 .713.288T7 12t-.288.713T6 13v3q.425 0 .713.288T7 17t-.288.713T6 18zm3.5-7v3.25q0 .325.213.538t.537.212.538-.213.212-.537V13q.65-.175 1.075-.712t.425-1.213V7.5q0-.2-.15-.35T12 7t-.35.15-.15.35v3.275h-.75V7.5q0-.2-.15-.35T10.25 7t-.35.15-.15.35v3.275H9V7.5q0-.2-.15-.35T8.5 7t-.35.15T8 7.5v3.575q0 .675.425 1.213T9.5 13m5.5 0v3.25q0 .325.213.538t.537.212.538-.213.212-.537V7.575q0-.275-.187-.425T15.825 7q-.325 0-.712.175t-.738.525q-.425.425-.65.963T13.5 9.825V12q0 .425.288.713T14.5 13zm-9 7V4z" /></svg>
502
489
  )
503
490
  }
504
491
 
@@ -548,4 +535,156 @@ export function MonitorIcon({ className }: Props) {
548
535
  <path fill="currentColor" d="M4 18q-.825 0-1.412-.587T2 16V5q0-.825.588-1.412T4 3h16q.825 0 1.413.588T22 5v11q0 .825-.587 1.413T20 18h-3l.7.7q.15.15.225.338t.075.387V20q0 .425-.288.712T17 21H7q-.425 0-.712-.288T6 20v-.575q0-.2.075-.387T6.3 18.7L7 18zm0-2h16V5H4zm0 0V5z" />
549
536
  </svg>
550
537
  )
538
+ }
539
+
540
+ export function TruckIcon({ className }: Props) {
541
+ return (
542
+ <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor">
543
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.5} d="M8.25 18.75a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m3 0h6m-9 0H3.375a1.125 1.125 0 0 1-1.125-1.125V14.25m17.25 4.5a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m3 0h1.125c.621 0 1.129-.504 1.09-1.124a17.902 17.902 0 0 0-3.213-9.193 2.056 2.056 0 0 0-1.58-.86H14.25M16.5 18.75h-2.25m0-11.177v-.958c0-.568-.422-1.048-.987-1.106a48.554 48.554 0 0 0-10.026 0 1.106 1.106 0 0 0-.987 1.106v7.635m12-6.677v6.677m0 4.5v-4.5m0 0h-12" />
544
+ </svg>
545
+ )
546
+ }
547
+
548
+ export function IconCursor({ className }: Props) {
549
+ return (
550
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
551
+ <path d="M2 1l12 5.5-5.5 1.5L7 13.5 2 1z" />
552
+ </svg>
553
+ );
554
+ }
555
+
556
+ export function IconHand({ className }: Props) {
557
+ return (
558
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
559
+ <path d="M8 1a1 1 0 011 1v4.586l1.293-1.293a1 1 0 111.414 1.414L8 10.414 4.293 6.707a1 1 0 111.414-1.414L7 6.586V2a1 1 0 011-1z" />
560
+ <path d="M3 8a1 1 0 011-1h.5V4.5a1 1 0 012 0V7h1V3.5a1 1 0 012 0V7h1V4.5a1 1 0 012 0V9a5 5 0 01-5 5H6A3 3 0 013 11V8z" />
561
+ </svg>
562
+ );
563
+ }
564
+
565
+ export function IconGrid({ className }: Props) {
566
+ return (
567
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
568
+ <path
569
+ fillRule="evenodd"
570
+ d="M1 1h6v6H1V1zm8 0h6v6H9V1zM1 9h6v6H1V9zm8 0h6v6H9V9z"
571
+ clipRule="evenodd"
572
+ opacity={0.7}
573
+ />
574
+ </svg>
575
+ );
576
+ }
577
+
578
+ export function IconZoomIn({ className }: Props) {
579
+ return (
580
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
581
+ <path d="M6.5 1a5.5 5.5 0 104.39 8.803l3.154 3.153a.75.75 0 001.06-1.06l-3.153-3.154A5.5 5.5 0 006.5 1zM2.5 6.5a4 4 0 118 0 4 4 0 01-8 0zM6 4.75a.75.75 0 011.5 0V6h1.25a.75.75 0 010 1.5H7.5v1.25a.75.75 0 01-1.5 0V7.5H4.75a.75.75 0 010-1.5H6V4.75z" />
582
+ </svg>
583
+ );
584
+ }
585
+
586
+ export function IconZoomOut({ className }: Props) {
587
+ return (
588
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
589
+ <path d="M6.5 1a5.5 5.5 0 104.39 8.803l3.154 3.153a.75.75 0 001.06-1.06l-3.153-3.154A5.5 5.5 0 006.5 1zM2.5 6.5a4 4 0 118 0 4 4 0 01-8 0zM4.75 6a.75.75 0 000 1.5h3.5a.75.75 0 000-1.5h-3.5z" />
590
+ </svg>
591
+ );
592
+ }
593
+
594
+ export function IconReset({ className }: Props) {
595
+ return (
596
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
597
+ <path d="M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM8 4a.75.75 0 01.75.75v3.19l1.28 1.28a.75.75 0 01-1.06 1.06l-1.5-1.5A.75.75 0 017.25 8V4.75A.75.75 0 018 4z" />
598
+ </svg>
599
+ );
600
+ }
601
+
602
+ export function IconUndo({ className }: Props) {
603
+ return (
604
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
605
+ <path d="M2.5 5.5A.5.5 0 013 5h5a5 5 0 110 10H3a.5.5 0 010-1h5a4 4 0 100-8H3.707l1.647 1.646a.5.5 0 01-.708.708l-2.5-2.5a.5.5 0 010-.708l2.5-2.5a.5.5 0 01.708.708L3.207 5H3a.5.5 0 01-.5-.5z" />
606
+ </svg>
607
+ );
608
+ }
609
+
610
+ export function IconRedo({ className }: Props) {
611
+ return (
612
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
613
+ <path d="M13.5 5.5A.5.5 0 0113 5H8a4 4 0 100 8h5a.5.5 0 010 1H8A5 5 0 118 5h4.293l-1.647-1.646a.5.5 0 01.708-.708l2.5 2.5a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708-.708L12.793 6H13a.5.5 0 01.5.5z" />
614
+ </svg>
615
+ );
616
+ }
617
+
618
+ export function IconPlace({ className }: Props) {
619
+ return (
620
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
621
+ <path d="M2 2a.5.5 0 01.5-.5h2a.5.5 0 010 1H3v1.5a.5.5 0 01-1 0V2zm11 0a.5.5 0 00-.5-.5h-2a.5.5 0 000 1H12v1.5a.5.5 0 001 0V2zM2 14a.5.5 0 00.5.5h2a.5.5 0 000-1H3v-1.5a.5.5 0 00-1 0V14zm11 0a.5.5 0 01-.5.5h-2a.5.5 0 010-1H12v-1.5a.5.5 0 011 0V14zM8 4.5a.5.5 0 000 1V7H6.5a.5.5 0 000 1H8v1.5a.5.5 0 001 0V8h1.5a.5.5 0 000-1H9V5.5a.5.5 0 00-1 0z" />
622
+ </svg>
623
+ );
624
+ }
625
+
626
+ export function IconErase({ className }: Props) {
627
+ return (
628
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
629
+ <path d="M8.086 2.207a2 2 0 012.828 0l2.879 2.878a2 2 0 010 2.83l-7.513 7.51A2 2 0 014.872 16H2.4a1 1 0 01-.966-.741L.8 13.2a2 2 0 01.5-1.946l7.786-9.047zM7.586 5L5 7.586 8.414 11 11 8.414 7.586 5zM6 12L4 10l-1.5 1.5a1 1 0 000 1.414l.587.587A1 1 0 003.793 15H5l1-1-1-1 1-1z" />
630
+ </svg>
631
+ );
632
+ }
633
+
634
+ export function IconDuplicate({ className }: Props) {
635
+ return (
636
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
637
+ <path d="M4 2a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2V4a2 2 0 00-2-2H4zm0 1h8a1 1 0 011 1v8a1 1 0 01-1 1H4a1 1 0 01-1-1V4a1 1 0 011-1z" />
638
+ <path d="M2 5H1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1v-1H9v1H1V6h1V5z" />
639
+ </svg>
640
+ );
641
+ }
642
+
643
+ export function IconWall({ className }: Props) {
644
+ return (
645
+ <svg viewBox="0 0 16 16" className={className} fill="none" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round">
646
+ {/* Two parallel lines forming a wall corner — represents wall cross-section */}
647
+ <path strokeWidth="2" d="M3 14 L3 2 L14 2" />
648
+ <path strokeWidth="2" d="M6 14 L6 5 L14 5" />
649
+ </svg>
650
+ );
651
+ }
652
+
653
+ export function IconDownload({ className }: Props) {
654
+ return (
655
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
656
+ <path d="M.5 9.9a.5.5 0 01.5.5v2.5a1 1 0 001 1h12a1 1 0 001-1v-2.5a.5.5 0 011 0v2.5a2 2 0 01-2 2H2a2 2 0 01-2-2v-2.5a.5.5 0 01.5-.5z"/>
657
+ <path d="M7.646 11.854a.5.5 0 00.708 0l3-3a.5.5 0 00-.708-.708L8.5 10.293V1.5a.5.5 0 00-1 0v8.793L5.354 8.146a.5.5 0 10-.708.708l3 3z"/>
658
+ </svg>
659
+ );
660
+ }
661
+
662
+ export function IconUpload({ className }: Props) {
663
+ return (
664
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
665
+ <path d="M.5 9.9a.5.5 0 01.5.5v2.5a1 1 0 001 1h12a1 1 0 001-1v-2.5a.5.5 0 011 0v2.5a2 2 0 01-2 2H2a2 2 0 01-2-2v-2.5a.5.5 0 01.5-.5z"/>
666
+ <path d="M7.646 1.146a.5.5 0 01.708 0l3 3a.5.5 0 01-.708.708L8.5 2.707V11.5a.5.5 0 01-1 0V2.707L5.354 4.854a.5.5 0 11-.708-.708l3-3z"/>
667
+ </svg>
668
+ );
669
+ }
670
+
671
+ export function IconPolygon({ className }: Props) {
672
+ return (
673
+ <svg viewBox="0 0 16 16" className={className} fill="none" stroke="currentColor" strokeLinejoin="round">
674
+ <path strokeWidth="1.5" d="M8 2 L14 6 L12 13 L4 13 L2 6 Z"/>
675
+ <circle cx="8" cy="2" r="1.5" fill="currentColor" stroke="none"/>
676
+ <circle cx="14" cy="6" r="1.5" fill="currentColor" stroke="none"/>
677
+ <circle cx="12" cy="13" r="1.5" fill="currentColor" stroke="none"/>
678
+ <circle cx="4" cy="13" r="1.5" fill="currentColor" stroke="none"/>
679
+ <circle cx="2" cy="6" r="1.5" fill="currentColor" stroke="none"/>
680
+ </svg>
681
+ );
682
+ }
683
+
684
+ export function IconLayers({ className }: Props) {
685
+ return (
686
+ <svg viewBox="0 0 16 16" className={className} fill="currentColor">
687
+ <path d="M8.235 1.559a.5.5 0 0 0-.47 0l-7.5 4a.5.5 0 0 0 0 .882L3.188 8 .265 9.559a.5.5 0 0 0 0 .882l7.5 4a.5.5 0 0 0 .47 0l7.5-4a.5.5 0 0 0 0-.882L12.813 8l2.922-1.559a.5.5 0 0 0 0-.882l-7.5-4zm3.515 7.008L14.438 10 8 13.433 1.562 10 4.25 8.567l3.515 1.874a.5.5 0 0 0 .47 0l3.515-1.874zM8 9.433 1.562 6 8 2.567 14.438 6 8 9.433z"/>
688
+ </svg>
689
+ );
551
690
  }
package/src/index.ts CHANGED
@@ -3,3 +3,4 @@ export * from './components/html/index';
3
3
  export * from './components/icons/index';
4
4
  export * from './components/alerts/index';
5
5
  export * from './context/theme/index';
6
+ export * from './components/VenueMapEditor/index';