@lindle/linoardo 1.0.19 → 1.0.21

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 (153) hide show
  1. package/dist/button.cjs +30 -15
  2. package/dist/button.cjs.map +1 -1
  3. package/dist/button.d.cts +17 -7
  4. package/dist/button.d.ts +17 -7
  5. package/dist/button.js +1 -1
  6. package/dist/card.cjs +82 -20
  7. package/dist/card.cjs.map +1 -1
  8. package/dist/card.d.cts +8 -1
  9. package/dist/card.d.ts +8 -1
  10. package/dist/card.js +1 -1
  11. package/dist/chip.cjs +17 -10
  12. package/dist/chip.cjs.map +1 -1
  13. package/dist/chip.d.cts +7 -4
  14. package/dist/chip.d.ts +7 -4
  15. package/dist/chip.js +1 -1
  16. package/dist/chunk-2UL3S6KC.js +147 -0
  17. package/dist/chunk-2UL3S6KC.js.map +1 -0
  18. package/dist/{chunk-N65GNKRG.js → chunk-5LWU5T2C.js} +48 -42
  19. package/dist/chunk-5LWU5T2C.js.map +1 -0
  20. package/dist/{chunk-XFPBICJG.js → chunk-5WQW6YSJ.js} +12 -3
  21. package/dist/chunk-5WQW6YSJ.js.map +1 -0
  22. package/dist/{chunk-5GY2JCBO.js → chunk-AK7LFJI4.js} +16 -5
  23. package/dist/chunk-AK7LFJI4.js.map +1 -0
  24. package/dist/{chunk-PWK6MLZT.js → chunk-DSZ3EOQB.js} +19 -12
  25. package/dist/chunk-DSZ3EOQB.js.map +1 -0
  26. package/dist/{chunk-AOHXZ7OM.js → chunk-GMDNSU26.js} +19 -5
  27. package/dist/chunk-GMDNSU26.js.map +1 -0
  28. package/dist/chunk-HAXGOTZO.js +94 -0
  29. package/dist/chunk-HAXGOTZO.js.map +1 -0
  30. package/dist/chunk-HEXJCQRO.js +51 -0
  31. package/dist/chunk-HEXJCQRO.js.map +1 -0
  32. package/dist/chunk-JGEXEDKS.js +168 -0
  33. package/dist/chunk-JGEXEDKS.js.map +1 -0
  34. package/dist/{chunk-GA6HSRN6.js → chunk-KRYWWWXR.js} +20 -7
  35. package/dist/chunk-KRYWWWXR.js.map +1 -0
  36. package/dist/{chunk-U6NAIIDI.js → chunk-LIEBZOLG.js} +42 -20
  37. package/dist/chunk-LIEBZOLG.js.map +1 -0
  38. package/dist/{chunk-E32P5AHO.js → chunk-LYP7V32H.js} +10 -4
  39. package/dist/chunk-LYP7V32H.js.map +1 -0
  40. package/dist/chunk-QRBJFDV5.js +170 -0
  41. package/dist/chunk-QRBJFDV5.js.map +1 -0
  42. package/dist/{chunk-SZU6OYLS.js → chunk-RFPNVLAD.js} +31 -17
  43. package/dist/chunk-RFPNVLAD.js.map +1 -0
  44. package/dist/chunk-SAGQYMS3.js +167 -0
  45. package/dist/chunk-SAGQYMS3.js.map +1 -0
  46. package/dist/{chunk-QGQ66FJD.js → chunk-T37VPLS4.js} +2 -2
  47. package/dist/chunk-T37VPLS4.js.map +1 -0
  48. package/dist/{chunk-32KFNI6K.js → chunk-U2AL7XFY.js} +48 -28
  49. package/dist/chunk-U2AL7XFY.js.map +1 -0
  50. package/dist/chunk-VPF7M2PB.js +141 -0
  51. package/dist/chunk-VPF7M2PB.js.map +1 -0
  52. package/dist/dialog.cjs +40 -18
  53. package/dist/dialog.cjs.map +1 -1
  54. package/dist/dialog.d.cts +3 -0
  55. package/dist/dialog.d.ts +3 -0
  56. package/dist/dialog.js +1 -1
  57. package/dist/expansion-panel/item.cjs +11 -2
  58. package/dist/expansion-panel/item.cjs.map +1 -1
  59. package/dist/expansion-panel/item.js +1 -1
  60. package/dist/expansion-panel.cjs +25 -6
  61. package/dist/expansion-panel.cjs.map +1 -1
  62. package/dist/expansion-panel.js +2 -2
  63. package/dist/hero.cjs +143 -0
  64. package/dist/hero.cjs.map +1 -0
  65. package/dist/hero.d.cts +34 -0
  66. package/dist/hero.d.ts +34 -0
  67. package/dist/hero.js +3 -0
  68. package/dist/hero.js.map +1 -0
  69. package/dist/icon.cjs +53 -0
  70. package/dist/icon.cjs.map +1 -0
  71. package/dist/icon.d.cts +15 -0
  72. package/dist/icon.d.ts +15 -0
  73. package/dist/icon.js +3 -0
  74. package/dist/icon.js.map +1 -0
  75. package/dist/{index-Md3BuoGM.d.cts → index-B5n8tN2G.d.cts} +3 -0
  76. package/dist/{index-d_JuI06O.d.ts → index-D4-O-oJt.d.ts} +3 -0
  77. package/dist/index.cjs +1013 -173
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +8 -2
  80. package/dist/index.d.ts +8 -2
  81. package/dist/index.js +18 -13
  82. package/dist/input.cjs +104 -30
  83. package/dist/input.cjs.map +1 -1
  84. package/dist/input.d.cts +8 -19
  85. package/dist/input.d.ts +8 -19
  86. package/dist/input.js +1 -1
  87. package/dist/list/item.cjs +10 -1
  88. package/dist/list/item.cjs.map +1 -1
  89. package/dist/list/item.d.cts +1 -1
  90. package/dist/list/item.d.ts +1 -1
  91. package/dist/list/item.js +1 -1
  92. package/dist/list.cjs +23 -3
  93. package/dist/list.cjs.map +1 -1
  94. package/dist/list.d.cts +5 -2
  95. package/dist/list.d.ts +5 -2
  96. package/dist/list.js +2 -2
  97. package/dist/masonry.cjs +116 -0
  98. package/dist/masonry.cjs.map +1 -0
  99. package/dist/masonry.d.cts +45 -0
  100. package/dist/masonry.d.ts +45 -0
  101. package/dist/masonry.js +3 -0
  102. package/dist/masonry.js.map +1 -0
  103. package/dist/menu.cjs.map +1 -1
  104. package/dist/menu.d.cts +3 -0
  105. package/dist/menu.d.ts +3 -0
  106. package/dist/menu.js +1 -1
  107. package/dist/profileCard.cjs +391 -0
  108. package/dist/profileCard.cjs.map +1 -0
  109. package/dist/profileCard.d.cts +29 -0
  110. package/dist/profileCard.d.ts +29 -0
  111. package/dist/profileCard.js +5 -0
  112. package/dist/profileCard.js.map +1 -0
  113. package/dist/select.cjs +173 -0
  114. package/dist/select.cjs.map +1 -0
  115. package/dist/select.d.cts +29 -0
  116. package/dist/select.d.ts +29 -0
  117. package/dist/select.js +3 -0
  118. package/dist/select.js.map +1 -0
  119. package/dist/slider.cjs +17 -3
  120. package/dist/slider.cjs.map +1 -1
  121. package/dist/slider.d.cts +3 -0
  122. package/dist/slider.d.ts +3 -0
  123. package/dist/slider.js +1 -1
  124. package/dist/styles.css +1199 -9
  125. package/dist/switch.cjs +46 -40
  126. package/dist/switch.cjs.map +1 -1
  127. package/dist/switch.d.cts +4 -1
  128. package/dist/switch.d.ts +4 -1
  129. package/dist/switch.js +1 -1
  130. package/dist/tooltip.cjs +46 -26
  131. package/dist/tooltip.cjs.map +1 -1
  132. package/dist/tooltip.d.cts +3 -0
  133. package/dist/tooltip.d.ts +3 -0
  134. package/dist/tooltip.js +1 -1
  135. package/dist/types-BCqIOkp1.d.cts +24 -0
  136. package/dist/types-ChXN4u7x.d.ts +24 -0
  137. package/package.json +30 -5
  138. package/readme.md +1 -0
  139. package/dist/chunk-32KFNI6K.js.map +0 -1
  140. package/dist/chunk-5GY2JCBO.js.map +0 -1
  141. package/dist/chunk-AOHXZ7OM.js.map +0 -1
  142. package/dist/chunk-E32P5AHO.js.map +0 -1
  143. package/dist/chunk-GA6HSRN6.js.map +0 -1
  144. package/dist/chunk-N65GNKRG.js.map +0 -1
  145. package/dist/chunk-PWK6MLZT.js.map +0 -1
  146. package/dist/chunk-PYG5SDNO.js +0 -98
  147. package/dist/chunk-PYG5SDNO.js.map +0 -1
  148. package/dist/chunk-QGQ66FJD.js.map +0 -1
  149. package/dist/chunk-SZU6OYLS.js.map +0 -1
  150. package/dist/chunk-U6NAIIDI.js.map +0 -1
  151. package/dist/chunk-V4BVJOSC.js +0 -85
  152. package/dist/chunk-V4BVJOSC.js.map +0 -1
  153. package/dist/chunk-XFPBICJG.js.map +0 -1
package/dist/list.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { P as Palette } from './global.types-E2uVLemv.cjs';
3
- import { b as ListVariant, c as ListDensity, d as ListLines, e as ListRounded } from './index-Md3BuoGM.cjs';
4
- export { L as ListItem, a as ListItemProps } from './index-Md3BuoGM.cjs';
3
+ import { b as ListVariant, c as ListDensity, d as ListLines, e as ListRounded } from './index-B5n8tN2G.cjs';
4
+ export { L as ListItem, a as ListItemProps } from './index-B5n8tN2G.cjs';
5
5
 
6
6
  interface ListProps extends react.HTMLAttributes<HTMLDivElement> {
7
7
  variant?: ListVariant;
@@ -12,6 +12,9 @@ interface ListProps extends react.HTMLAttributes<HTMLDivElement> {
12
12
  rounded?: ListRounded;
13
13
  color?: Palette;
14
14
  }
15
+ /**
16
+ * List container that normalizes spacing, rounding and density for nested `ListItem` children.
17
+ */
15
18
  declare const List: react.ForwardRefExoticComponent<ListProps & react.RefAttributes<HTMLDivElement>>;
16
19
 
17
20
  export { ListDensity, ListLines, type ListProps, ListRounded, ListVariant, List as default };
package/dist/list.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { P as Palette } from './global.types-E2uVLemv.js';
3
- import { b as ListVariant, c as ListDensity, d as ListLines, e as ListRounded } from './index-d_JuI06O.js';
4
- export { L as ListItem, a as ListItemProps } from './index-d_JuI06O.js';
3
+ import { b as ListVariant, c as ListDensity, d as ListLines, e as ListRounded } from './index-D4-O-oJt.js';
4
+ export { L as ListItem, a as ListItemProps } from './index-D4-O-oJt.js';
5
5
 
6
6
  interface ListProps extends react.HTMLAttributes<HTMLDivElement> {
7
7
  variant?: ListVariant;
@@ -12,6 +12,9 @@ interface ListProps extends react.HTMLAttributes<HTMLDivElement> {
12
12
  rounded?: ListRounded;
13
13
  color?: Palette;
14
14
  }
15
+ /**
16
+ * List container that normalizes spacing, rounding and density for nested `ListItem` children.
17
+ */
15
18
  declare const List: react.ForwardRefExoticComponent<ListProps & react.RefAttributes<HTMLDivElement>>;
16
19
 
17
20
  export { ListDensity, ListLines, type ListProps, ListRounded, ListVariant, List as default };
package/dist/list.js CHANGED
@@ -1,4 +1,4 @@
1
- export { List_default as default } from './chunk-5GY2JCBO.js';
2
- export { Item_default as ListItem } from './chunk-XFPBICJG.js';
1
+ export { List_default as default } from './chunk-AK7LFJI4.js';
2
+ export { Item_default as ListItem } from './chunk-5WQW6YSJ.js';
3
3
  //# sourceMappingURL=list.js.map
4
4
  //# sourceMappingURL=list.js.map
@@ -0,0 +1,116 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var tailwindMerge = require('tailwind-merge');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ // src/Containment/Masonry/index.tsx
28
+ var masonryBaseClass = "masonry-grid w-full";
29
+ var itemBaseClass = "masonry-item block break-inside-avoid";
30
+ var MasonryBase = (props, ref) => {
31
+ const {
32
+ items,
33
+ renderItem,
34
+ getKey,
35
+ column = 2,
36
+ columnWidth,
37
+ maxColumn,
38
+ gutter = 16,
39
+ className,
40
+ itemClassName,
41
+ itemStyle,
42
+ children,
43
+ style,
44
+ role = "list",
45
+ ...rest
46
+ } = props;
47
+ const resolvedGutter = toCssLength(gutter);
48
+ const columnCount = resolveColumnCount(column, maxColumn, Boolean(columnWidth));
49
+ const layoutStyle = {
50
+ columnGap: resolvedGutter,
51
+ columnCount,
52
+ columnWidth: columnWidth ? toCssLength(columnWidth) : void 0,
53
+ columnFill: "balance",
54
+ ...style
55
+ };
56
+ const wrapItem = (content, key) => /* @__PURE__ */ jsxRuntime.jsx(
57
+ "div",
58
+ {
59
+ className: tailwindMerge.twMerge(itemBaseClass, itemClassName),
60
+ style: { breakInside: "avoid", marginBottom: resolvedGutter, width: "100%", ...itemStyle },
61
+ children: content
62
+ },
63
+ key
64
+ );
65
+ const renderedItems = items && items.length ? items.map((item, index) => {
66
+ const content = resolveItemContent(item, index, renderItem);
67
+ return wrapItem(content, resolveItemKey(item, index, getKey));
68
+ }) : React__namespace.Children.map(children, (child, index) => wrapItem(child, resolveChildKey(child, index))) ?? null;
69
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, ref, role, className: tailwindMerge.twMerge(masonryBaseClass, className), style: layoutStyle, children: renderedItems });
70
+ };
71
+ var Masonry = React__namespace.forwardRef(MasonryBase);
72
+ Masonry.displayName = "Masonry";
73
+ var Masonry_default = Masonry;
74
+ function toCssLength(value) {
75
+ if (value === void 0) return void 0;
76
+ return typeof value === "number" ? `${value}px` : value;
77
+ }
78
+ function normalizeColumns(value) {
79
+ if (value === void 0) return void 0;
80
+ if (!Number.isFinite(value)) return void 0;
81
+ return Math.max(1, Math.floor(value));
82
+ }
83
+ function resolveColumnCount(column, maxColumn, hasColumnWidth) {
84
+ const normalizedMax = normalizeColumns(maxColumn);
85
+ if (hasColumnWidth) {
86
+ return normalizedMax;
87
+ }
88
+ const normalizedColumn = normalizeColumns(column);
89
+ if (normalizedColumn && normalizedMax) {
90
+ return Math.min(normalizedColumn, normalizedMax);
91
+ }
92
+ return normalizedColumn ?? normalizedMax;
93
+ }
94
+ function resolveItemKey(item, index, getKey) {
95
+ if (getKey) return getKey(item, index);
96
+ if (React__namespace.isValidElement(item) && item.key != null) {
97
+ return item.key;
98
+ }
99
+ return index;
100
+ }
101
+ function resolveChildKey(child, index) {
102
+ if (React__namespace.isValidElement(child) && child.key != null) {
103
+ return child.key;
104
+ }
105
+ return index;
106
+ }
107
+ function resolveItemContent(item, index, renderItem) {
108
+ if (renderItem) {
109
+ return renderItem(item, index);
110
+ }
111
+ return item;
112
+ }
113
+
114
+ module.exports = Masonry_default;
115
+ //# sourceMappingURL=masonry.cjs.map
116
+ //# sourceMappingURL=masonry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Containment/Masonry/index.tsx"],"names":["jsx","twMerge","React"],"mappings":"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","file":"masonry.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { MasonryComponent, MasonryProps, MasonryRenderItem } from './types.masonry';\n\nconst masonryBaseClass = 'masonry-grid w-full';\nconst itemBaseClass = 'masonry-item block break-inside-avoid';\n\nconst MasonryBase = <T,>(props: MasonryProps<T>, ref: React.ForwardedRef<HTMLDivElement>) => {\n const {\n items,\n renderItem,\n getKey,\n column = 2,\n columnWidth,\n maxColumn,\n gutter = 16,\n className,\n itemClassName,\n itemStyle,\n children,\n style,\n role = 'list',\n ...rest\n } = props;\n\n const resolvedGutter = toCssLength(gutter);\n const columnCount = resolveColumnCount(column, maxColumn, Boolean(columnWidth));\n\n const layoutStyle: React.CSSProperties = {\n columnGap: resolvedGutter,\n columnCount,\n columnWidth: columnWidth ? toCssLength(columnWidth) : undefined,\n columnFill: 'balance',\n ...style\n };\n\n const wrapItem = (content: React.ReactNode, key: React.Key) => (\n <div\n key={key}\n className={twMerge(itemBaseClass, itemClassName)}\n style={{ breakInside: 'avoid', marginBottom: resolvedGutter, width: '100%', ...itemStyle }}\n >\n {content}\n </div>\n );\n\n const renderedItems =\n items && items.length\n ? items.map((item, index) => {\n const content = resolveItemContent(item, index, renderItem);\n return wrapItem(content, resolveItemKey(item, index, getKey));\n })\n : React.Children.map(children, (child, index) => wrapItem(child, resolveChildKey(child, index))) ?? null;\n\n return (\n <div {...rest} ref={ref} role={role} className={twMerge(masonryBaseClass, className)} style={layoutStyle}>\n {renderedItems}\n </div>\n );\n};\n\nconst Masonry = React.forwardRef(MasonryBase) as MasonryComponent;\n\nMasonry.displayName = 'Masonry';\n\nexport type { MasonryProps, MasonryRenderItem } from './types.masonry';\nexport default Masonry;\n\nfunction toCssLength(value?: number | string) {\n if (value === undefined) return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nfunction normalizeColumns(value?: number) {\n if (value === undefined) return undefined;\n if (!Number.isFinite(value)) return undefined;\n return Math.max(1, Math.floor(value));\n}\n\nfunction resolveColumnCount(column?: number, maxColumn?: number, hasColumnWidth?: boolean) {\n const normalizedMax = normalizeColumns(maxColumn);\n if (hasColumnWidth) {\n return normalizedMax;\n }\n\n const normalizedColumn = normalizeColumns(column);\n\n if (normalizedColumn && normalizedMax) {\n return Math.min(normalizedColumn, normalizedMax);\n }\n\n return normalizedColumn ?? normalizedMax;\n}\n\nfunction resolveItemKey<T>(item: T, index: number, getKey?: (item: T, index: number) => React.Key) {\n if (getKey) return getKey(item, index);\n if (React.isValidElement(item) && item.key != null) {\n return item.key;\n }\n return index;\n}\n\nfunction resolveChildKey(child: React.ReactNode, index: number) {\n if (React.isValidElement(child) && child.key != null) {\n return child.key;\n }\n return index;\n}\n\nfunction resolveItemContent<T>(item: T, index: number, renderItem?: MasonryRenderItem<T>) {\n if (renderItem) {\n return renderItem(item, index);\n }\n return item as React.ReactNode;\n}\n"]}
@@ -0,0 +1,45 @@
1
+ import { ReactNode, CSSProperties, RefAttributes, ReactElement } from 'react';
2
+
3
+ type MasonryRenderItem<T> = (item: T, index: number) => ReactNode;
4
+ type MasonryProps<T = unknown> = React.HTMLAttributes<HTMLDivElement> & {
5
+ /**
6
+ * Data items to render inside the masonry layout. If omitted, children are used instead.
7
+ */
8
+ items?: readonly T[];
9
+ /**
10
+ * Render function for each item when `items` is provided.
11
+ */
12
+ renderItem?: MasonryRenderItem<T>;
13
+ /**
14
+ * Custom key generator for `items`.
15
+ */
16
+ getKey?: (item: T, index: number) => React.Key;
17
+ /**
18
+ * Fixed number of columns. Ignored when `columnWidth` is set.
19
+ */
20
+ column?: number;
21
+ /**
22
+ * Desired width of each column (e.g. 240 or '16rem'). CSS handles responsiveness.
23
+ */
24
+ columnWidth?: number | string;
25
+ /**
26
+ * Maximum number of columns when using `columnWidth`.
27
+ */
28
+ maxColumn?: number;
29
+ /**
30
+ * Gap between columns and items (number is treated as pixels).
31
+ */
32
+ gutter?: number | string;
33
+ /**
34
+ * Extra classes/styles applied to each masonry item wrapper.
35
+ */
36
+ itemClassName?: string;
37
+ itemStyle?: CSSProperties;
38
+ };
39
+ type MasonryComponent = (<T = unknown>(props: MasonryProps<T> & RefAttributes<HTMLDivElement>) => ReactElement | null) & {
40
+ displayName?: string;
41
+ };
42
+
43
+ declare const Masonry: MasonryComponent;
44
+
45
+ export { type MasonryProps, type MasonryRenderItem, Masonry as default };
@@ -0,0 +1,45 @@
1
+ import { ReactNode, CSSProperties, RefAttributes, ReactElement } from 'react';
2
+
3
+ type MasonryRenderItem<T> = (item: T, index: number) => ReactNode;
4
+ type MasonryProps<T = unknown> = React.HTMLAttributes<HTMLDivElement> & {
5
+ /**
6
+ * Data items to render inside the masonry layout. If omitted, children are used instead.
7
+ */
8
+ items?: readonly T[];
9
+ /**
10
+ * Render function for each item when `items` is provided.
11
+ */
12
+ renderItem?: MasonryRenderItem<T>;
13
+ /**
14
+ * Custom key generator for `items`.
15
+ */
16
+ getKey?: (item: T, index: number) => React.Key;
17
+ /**
18
+ * Fixed number of columns. Ignored when `columnWidth` is set.
19
+ */
20
+ column?: number;
21
+ /**
22
+ * Desired width of each column (e.g. 240 or '16rem'). CSS handles responsiveness.
23
+ */
24
+ columnWidth?: number | string;
25
+ /**
26
+ * Maximum number of columns when using `columnWidth`.
27
+ */
28
+ maxColumn?: number;
29
+ /**
30
+ * Gap between columns and items (number is treated as pixels).
31
+ */
32
+ gutter?: number | string;
33
+ /**
34
+ * Extra classes/styles applied to each masonry item wrapper.
35
+ */
36
+ itemClassName?: string;
37
+ itemStyle?: CSSProperties;
38
+ };
39
+ type MasonryComponent = (<T = unknown>(props: MasonryProps<T> & RefAttributes<HTMLDivElement>) => ReactElement | null) & {
40
+ displayName?: string;
41
+ };
42
+
43
+ declare const Masonry: MasonryComponent;
44
+
45
+ export { type MasonryProps, type MasonryRenderItem, Masonry as default };
@@ -0,0 +1,3 @@
1
+ export { Masonry_default as default } from './chunk-HAXGOTZO.js';
2
+ //# sourceMappingURL=masonry.js.map
3
+ //# sourceMappingURL=masonry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"masonry.js"}
package/dist/menu.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Containment/Menu/index.tsx"],"names":["React","jsx","twMerge","jsxs","Fragment"],"mappings":"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","file":"menu.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport type MenuPlacement = 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n activator: React.ReactNode;\n children: React.ReactNode;\n placement?: MenuPlacement;\n open?: boolean;\n openOnHover?: boolean;\n openOnFocus?: boolean;\n matchActivatorWidth?: boolean;\n keepMounted?: boolean;\n scrim?: boolean;\n contentClassName?: string;\n contentProps?: React.HTMLAttributes<HTMLDivElement>;\n overlayClassName?: string;\n}\n\nconst placementClasses: Record<MenuPlacement, string> = {\n 'bottom-start': 'left-0 top-full origin-top-left',\n bottom: 'left-1/2 top-full -translate-x-1/2 origin-top',\n 'bottom-end': 'right-0 top-full origin-top-right',\n 'top-start': 'left-0 bottom-full origin-bottom-left',\n top: 'left-1/2 bottom-full -translate-x-1/2 origin-bottom',\n 'top-end': 'right-0 bottom-full origin-bottom-right'\n};\n\nconst offsetClasses: Record<'top' | 'bottom', string> = {\n top: 'mb-2',\n bottom: 'mt-2'\n};\n\nconst menuBaseClasses =\n 'absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2';\n\nconst overlayBaseClasses = 'fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]';\n\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>((props, ref) => {\n const {\n activator,\n children,\n placement = 'bottom-start',\n open,\n openOnHover = true,\n openOnFocus = true,\n matchActivatorWidth = false,\n keepMounted = false,\n scrim = false,\n contentClassName,\n contentProps,\n overlayClassName,\n className,\n ...rest\n } = props;\n\n const { onMouseEnter, onMouseLeave, onFocus, onBlur, ...restProps } = rest;\n\n const hasContent = children !== undefined && children !== null;\n const isControlled = typeof open === 'boolean';\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const closeTimer = React.useRef<number | null>(null);\n const visible = isControlled ? Boolean(open) : uncontrolledOpen;\n const shouldRenderContent = hasContent && (keepMounted || visible || (!isControlled && (openOnHover || openOnFocus)));\n const verticalPlacement = placement.startsWith('top') ? 'top' : 'bottom';\n\n const clearCloseTimer = () => {\n if (closeTimer.current !== null) {\n window.clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n };\n\n const openMenu = () => {\n clearCloseTimer();\n if (!isControlled) {\n setUncontrolledOpen(true);\n }\n };\n\n const scheduleClose = () => {\n clearCloseTimer();\n if (!isControlled) {\n closeTimer.current = window.setTimeout(() => {\n setUncontrolledOpen(false);\n closeTimer.current = null;\n }, 120);\n }\n };\n\n React.useEffect(() => {\n return () => clearCloseTimer();\n }, []);\n\n const visibilityClasses = visible ? 'pointer-events-auto opacity-100 scale-100' : 'pointer-events-none opacity-0 scale-95';\n\n const {\n className: contentExtraClassName,\n style: contentStyle,\n role: contentRole,\n tabIndex: contentTabIndex,\n ...restContentProps\n } = contentProps ?? {};\n\n const overlayNode = scrim && visible ? <div className={twMerge(overlayBaseClasses, overlayClassName)} aria-hidden /> : null;\n\n return (\n <>\n {overlayNode}\n <div\n {...restProps}\n ref={ref}\n className={twMerge('relative inline-flex min-w-0 group/menu', className)}\n data-open={visible || undefined}\n onMouseEnter={event => {\n if (openOnHover) {\n openMenu();\n }\n onMouseEnter?.(event);\n }}\n onMouseLeave={event => {\n if (openOnHover) {\n scheduleClose();\n }\n onMouseLeave?.(event);\n }}\n onFocus={event => {\n if (openOnFocus) {\n openMenu();\n }\n onFocus?.(event);\n }}\n onBlur={event => {\n if (openOnFocus) {\n scheduleClose();\n }\n onBlur?.(event);\n }}\n >\n <div className='inline-flex w-full min-w-0'>{activator}</div>\n {shouldRenderContent ? (\n <div\n {...restContentProps}\n className={twMerge(\n menuBaseClasses,\n placementClasses[placement],\n offsetClasses[verticalPlacement],\n matchActivatorWidth ? 'min-w-full' : undefined,\n visibilityClasses,\n contentClassName,\n contentExtraClassName\n )}\n data-state={visible ? 'open' : 'closed'}\n role={contentRole ?? 'menu'}\n tabIndex={contentTabIndex ?? -1}\n style={contentStyle}\n onMouseEnter={event => {\n if (openOnHover) {\n openMenu();\n }\n restContentProps?.onMouseEnter?.(event);\n }}\n onMouseLeave={event => {\n if (openOnHover) {\n scheduleClose();\n }\n restContentProps?.onMouseLeave?.(event);\n }}\n >\n {children}\n </div>\n ) : null}\n </div>\n </>\n );\n});\n\nMenu.displayName = 'Menu';\n\nexport default Menu;\n"]}
1
+ {"version":3,"sources":["../src/Containment/Menu/index.tsx"],"names":["React","jsx","twMerge","jsxs","Fragment"],"mappings":"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","file":"menu.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport type MenuPlacement =\n | 'bottom-start'\n | 'bottom'\n | 'bottom-end'\n | 'top-start'\n | 'top'\n | 'top-end';\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n activator: React.ReactNode;\n children: React.ReactNode;\n placement?: MenuPlacement;\n open?: boolean;\n openOnHover?: boolean;\n openOnFocus?: boolean;\n matchActivatorWidth?: boolean;\n keepMounted?: boolean;\n scrim?: boolean;\n contentClassName?: string;\n contentProps?: React.HTMLAttributes<HTMLDivElement>;\n overlayClassName?: string;\n}\n\nconst placementClasses: Record<MenuPlacement, string> = {\n 'bottom-start': 'left-0 top-full origin-top-left',\n bottom: 'left-1/2 top-full -translate-x-1/2 origin-top',\n 'bottom-end': 'right-0 top-full origin-top-right',\n 'top-start': 'left-0 bottom-full origin-bottom-left',\n top: 'left-1/2 bottom-full -translate-x-1/2 origin-bottom',\n 'top-end': 'right-0 bottom-full origin-bottom-right'\n};\n\nconst offsetClasses: Record<'top' | 'bottom', string> = {\n top: 'mb-2',\n bottom: 'mt-2'\n};\n\nconst menuBaseClasses =\n 'absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2';\n\nconst overlayBaseClasses = 'fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]';\n\n/**\n * Contextual menu that opens relative to an activator with optional hover/focus behavior and scrim.\n */\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>((props, ref) => {\n const {\n activator,\n children,\n placement = 'bottom-start',\n open,\n openOnHover = true,\n openOnFocus = true,\n matchActivatorWidth = false,\n keepMounted = false,\n scrim = false,\n contentClassName,\n contentProps,\n overlayClassName,\n className,\n ...rest\n } = props;\n\n const { onMouseEnter, onMouseLeave, onFocus, onBlur, ...restProps } = rest;\n\n const hasContent = children !== undefined && children !== null;\n const isControlled = typeof open === 'boolean';\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const closeTimer = React.useRef<number | null>(null);\n const visible = isControlled ? Boolean(open) : uncontrolledOpen;\n const shouldRenderContent =\n hasContent && (keepMounted || visible || (!isControlled && (openOnHover || openOnFocus)));\n const verticalPlacement = placement.startsWith('top') ? 'top' : 'bottom';\n\n const clearCloseTimer = () => {\n if (closeTimer.current !== null) {\n window.clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n };\n\n const openMenu = () => {\n clearCloseTimer();\n if (!isControlled) {\n setUncontrolledOpen(true);\n }\n };\n\n const scheduleClose = () => {\n clearCloseTimer();\n if (!isControlled) {\n closeTimer.current = window.setTimeout(() => {\n setUncontrolledOpen(false);\n closeTimer.current = null;\n }, 120);\n }\n };\n\n React.useEffect(() => {\n return () => clearCloseTimer();\n }, []);\n\n const visibilityClasses = visible\n ? 'pointer-events-auto opacity-100 scale-100'\n : 'pointer-events-none opacity-0 scale-95';\n\n const {\n className: contentExtraClassName,\n style: contentStyle,\n role: contentRole,\n tabIndex: contentTabIndex,\n ...restContentProps\n } = contentProps ?? {};\n\n const overlayNode =\n scrim && visible ? (\n <div className={twMerge(overlayBaseClasses, overlayClassName)} aria-hidden />\n ) : null;\n\n return (\n <>\n {overlayNode}\n <div\n {...restProps}\n ref={ref}\n className={twMerge('relative inline-flex min-w-0 group/menu', className)}\n data-open={visible || undefined}\n onMouseEnter={event => {\n if (openOnHover) {\n openMenu();\n }\n onMouseEnter?.(event);\n }}\n onMouseLeave={event => {\n if (openOnHover) {\n scheduleClose();\n }\n onMouseLeave?.(event);\n }}\n onFocus={event => {\n if (openOnFocus) {\n openMenu();\n }\n onFocus?.(event);\n }}\n onBlur={event => {\n if (openOnFocus) {\n scheduleClose();\n }\n onBlur?.(event);\n }}\n >\n <div className='inline-flex w-full min-w-0'>{activator}</div>\n {shouldRenderContent ? (\n <div\n {...restContentProps}\n className={twMerge(\n menuBaseClasses,\n placementClasses[placement],\n offsetClasses[verticalPlacement],\n matchActivatorWidth ? 'min-w-full' : undefined,\n visibilityClasses,\n contentClassName,\n contentExtraClassName\n )}\n data-state={visible ? 'open' : 'closed'}\n role={contentRole ?? 'menu'}\n tabIndex={contentTabIndex ?? -1}\n style={contentStyle}\n onMouseEnter={event => {\n if (openOnHover) {\n openMenu();\n }\n restContentProps?.onMouseEnter?.(event);\n }}\n onMouseLeave={event => {\n if (openOnHover) {\n scheduleClose();\n }\n restContentProps?.onMouseLeave?.(event);\n }}\n >\n {children}\n </div>\n ) : null}\n </div>\n </>\n );\n});\n\nMenu.displayName = 'Menu';\n\nexport default Menu;\n"]}
package/dist/menu.d.cts CHANGED
@@ -15,6 +15,9 @@ interface MenuProps extends Omit<react.HTMLAttributes<HTMLDivElement>, 'children
15
15
  contentProps?: react.HTMLAttributes<HTMLDivElement>;
16
16
  overlayClassName?: string;
17
17
  }
18
+ /**
19
+ * Contextual menu that opens relative to an activator with optional hover/focus behavior and scrim.
20
+ */
18
21
  declare const Menu: react.ForwardRefExoticComponent<MenuProps & react.RefAttributes<HTMLDivElement>>;
19
22
 
20
23
  export { type MenuPlacement, type MenuProps, Menu as default };
package/dist/menu.d.ts CHANGED
@@ -15,6 +15,9 @@ interface MenuProps extends Omit<react.HTMLAttributes<HTMLDivElement>, 'children
15
15
  contentProps?: react.HTMLAttributes<HTMLDivElement>;
16
16
  overlayClassName?: string;
17
17
  }
18
+ /**
19
+ * Contextual menu that opens relative to an activator with optional hover/focus behavior and scrim.
20
+ */
18
21
  declare const Menu: react.ForwardRefExoticComponent<MenuProps & react.RefAttributes<HTMLDivElement>>;
19
22
 
20
23
  export { type MenuPlacement, type MenuProps, Menu as default };
package/dist/menu.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Menu_default as default } from './chunk-QGQ66FJD.js';
1
+ export { Menu_default as default } from './chunk-T37VPLS4.js';
2
2
  //# sourceMappingURL=menu.js.map
3
3
  //# sourceMappingURL=menu.js.map