@expcat/tigercat-react 0.0.67 → 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.
Files changed (196) hide show
  1. package/dist/chunk-2DOPHSZP.js +32 -0
  2. package/dist/chunk-2TS6X5RA.js +73 -0
  3. package/dist/chunk-2Y327ZU4.js +493 -0
  4. package/dist/chunk-3OF7XPIQ.js +90 -0
  5. package/dist/chunk-3WPKVV4N.js +140 -0
  6. package/dist/chunk-5FRENLDC.js +194 -0
  7. package/dist/chunk-5QKMQRCW.js +89 -0
  8. package/dist/chunk-5ZVSFIZD.js +50 -0
  9. package/dist/chunk-6MGEGOYJ.js +108 -0
  10. package/dist/chunk-6PUSRC6S.js +68 -0
  11. package/dist/chunk-72ZRDBXN.js +25 -0
  12. package/dist/chunk-77D7VQMG.js +43 -0
  13. package/dist/chunk-7P6PHSFM.js +548 -0
  14. package/dist/chunk-AG6GVQ5O.js +271 -0
  15. package/dist/chunk-AQ6DHCP6.js +53 -0
  16. package/dist/chunk-AQQRWISY.js +184 -0
  17. package/dist/chunk-C5EFBJBR.js +540 -0
  18. package/dist/chunk-D3I2SY7X.js +301 -0
  19. package/dist/chunk-DZJUFU55.js +300 -0
  20. package/dist/chunk-EI2GHMQS.js +37 -0
  21. package/dist/chunk-ENR3RIMM.js +205 -0
  22. package/dist/chunk-EQWQXURG.js +18 -0
  23. package/dist/chunk-EUHWE7MN.js +267 -0
  24. package/dist/chunk-FAKTU64M.js +67 -0
  25. package/dist/chunk-FQ6UHRAO.js +499 -0
  26. package/dist/chunk-GX74TC62.js +54 -0
  27. package/dist/chunk-HDDBBZQH.js +321 -0
  28. package/dist/chunk-IFY46RWU.js +25 -0
  29. package/dist/chunk-IQINYCU6.js +99 -0
  30. package/dist/chunk-IY4LEJYF.js +78 -0
  31. package/dist/chunk-JW64IJP2.js +210 -0
  32. package/dist/chunk-KUCFT2OA.js +43 -0
  33. package/dist/chunk-LNKI6HQ3.js +152 -0
  34. package/dist/chunk-LXA2YBAO.js +38 -0
  35. package/dist/chunk-MKWXJZ3T.js +74 -0
  36. package/dist/chunk-NEULKOYJ.js +48 -0
  37. package/dist/chunk-NI2WNZRT.js +38 -0
  38. package/dist/chunk-OFCKGWTS.js +12 -0
  39. package/dist/chunk-OTRGVENC.js +305 -0
  40. package/dist/chunk-P273E6XE.js +219 -0
  41. package/dist/chunk-Q3DPJHNM.js +407 -0
  42. package/dist/chunk-QFVE7GKD.js +109 -0
  43. package/dist/chunk-QL6OBKEN.js +84 -0
  44. package/dist/chunk-QL6UEG3U.js +27 -0
  45. package/dist/chunk-QORSSZX4.js +144 -0
  46. package/dist/chunk-R4JSBXGG.js +12 -0
  47. package/dist/chunk-R5BQHZWB.js +698 -0
  48. package/dist/chunk-R7MS42PL.js +90 -0
  49. package/dist/chunk-TB2UHDOZ.js +19 -0
  50. package/dist/chunk-TBIEWDY5.js +175 -0
  51. package/dist/chunk-TJFS44SH.js +48 -0
  52. package/dist/chunk-TZ26HQAW.js +85 -0
  53. package/dist/chunk-U4ZVEPYD.js +71 -0
  54. package/dist/chunk-UFAXJVMD.js +120 -0
  55. package/dist/chunk-VJJ76I7U.js +19 -0
  56. package/dist/chunk-VO4WDK4K.js +37 -0
  57. package/dist/chunk-VSF4DF7N.js +84 -0
  58. package/dist/chunk-VVO4V4IK.js +56 -0
  59. package/dist/chunk-WK5HN4OH.js +113 -0
  60. package/dist/chunk-XZDJ5FRB.js +333 -0
  61. package/dist/chunk-YE2M2HNM.js +168 -0
  62. package/dist/chunk-YYGTJKP5.js +39 -0
  63. package/dist/chunk-ZREFCRX3.js +52 -0
  64. package/dist/components/Alert.d.ts +24 -0
  65. package/dist/components/Alert.js +10 -0
  66. package/dist/components/Avatar.d.ts +12 -0
  67. package/dist/components/Avatar.js +10 -0
  68. package/dist/components/Badge.d.ts +12 -0
  69. package/dist/components/Badge.js +10 -0
  70. package/dist/components/Breadcrumb.d.ts +13 -0
  71. package/dist/components/Breadcrumb.js +14 -0
  72. package/dist/components/BreadcrumbItem.d.ts +21 -0
  73. package/dist/components/BreadcrumbItem.js +11 -0
  74. package/dist/components/Button.d.ts +8 -0
  75. package/dist/components/Button.js +10 -0
  76. package/dist/components/Card.d.ts +33 -0
  77. package/dist/components/Card.js +10 -0
  78. package/dist/components/Checkbox.d.ts +48 -0
  79. package/dist/components/Checkbox.js +11 -0
  80. package/dist/components/CheckboxGroup.d.ts +39 -0
  81. package/dist/components/CheckboxGroup.js +14 -0
  82. package/dist/components/Code.d.ts +9 -0
  83. package/dist/components/Code.js +16 -0
  84. package/dist/components/Col.d.ts +7 -0
  85. package/dist/components/Col.js +11 -0
  86. package/dist/components/ConfigProvider.d.ts +14 -0
  87. package/dist/components/ConfigProvider.js +14 -0
  88. package/dist/components/Container.d.ts +13 -0
  89. package/dist/components/Container.js +10 -0
  90. package/dist/components/Content.d.ts +9 -0
  91. package/dist/components/Content.js +10 -0
  92. package/dist/components/DatePicker.d.ts +24 -0
  93. package/dist/components/DatePicker.js +10 -0
  94. package/dist/components/Descriptions.d.ts +53 -0
  95. package/dist/components/Descriptions.js +16 -0
  96. package/dist/components/Divider.d.ts +12 -0
  97. package/dist/components/Divider.js +10 -0
  98. package/dist/components/Drawer.d.ts +19 -0
  99. package/dist/components/Drawer.js +11 -0
  100. package/dist/components/Dropdown.d.ts +22 -0
  101. package/dist/components/Dropdown.js +16 -0
  102. package/dist/components/DropdownItem.d.ts +17 -0
  103. package/dist/components/DropdownItem.js +13 -0
  104. package/dist/components/DropdownMenu.d.ts +13 -0
  105. package/dist/components/DropdownMenu.js +10 -0
  106. package/dist/components/Footer.d.ts +9 -0
  107. package/dist/components/Footer.js +10 -0
  108. package/dist/components/Form.d.ts +56 -0
  109. package/dist/components/Form.js +14 -0
  110. package/dist/components/FormItem.d.ts +16 -0
  111. package/dist/components/FormItem.js +11 -0
  112. package/dist/components/Header.d.ts +9 -0
  113. package/dist/components/Header.js +10 -0
  114. package/dist/components/Icon.d.ts +9 -0
  115. package/dist/components/Icon.js +10 -0
  116. package/dist/components/Input.d.ts +28 -0
  117. package/dist/components/Input.js +10 -0
  118. package/dist/components/Layout.d.ts +9 -0
  119. package/dist/components/Layout.js +10 -0
  120. package/dist/components/Link.d.ts +10 -0
  121. package/dist/components/Link.js +10 -0
  122. package/dist/components/List.d.ts +94 -0
  123. package/dist/components/List.js +12 -0
  124. package/dist/components/Loading.d.ts +8 -0
  125. package/dist/components/Loading.js +10 -0
  126. package/dist/components/Menu.d.ts +35 -0
  127. package/dist/components/Menu.js +14 -0
  128. package/dist/components/MenuItem.d.ts +20 -0
  129. package/dist/components/MenuItem.js +11 -0
  130. package/dist/components/MenuItemGroup.d.ts +16 -0
  131. package/dist/components/MenuItemGroup.js +12 -0
  132. package/dist/components/Message.d.ts +44 -0
  133. package/dist/components/Message.js +20 -0
  134. package/dist/components/Modal.d.ts +41 -0
  135. package/dist/components/Modal.js +11 -0
  136. package/dist/components/Notification.d.ts +40 -0
  137. package/dist/components/Notification.js +20 -0
  138. package/dist/components/Pagination.d.ts +11 -0
  139. package/dist/components/Pagination.js +16 -0
  140. package/dist/components/Popconfirm.d.ts +34 -0
  141. package/dist/components/Popconfirm.js +10 -0
  142. package/dist/components/Popover.d.ts +14 -0
  143. package/dist/components/Popover.js +10 -0
  144. package/dist/components/Progress.d.ts +8 -0
  145. package/dist/components/Progress.js +10 -0
  146. package/dist/components/Radio.d.ts +20 -0
  147. package/dist/components/Radio.js +11 -0
  148. package/dist/components/RadioGroup.d.ts +28 -0
  149. package/dist/components/RadioGroup.js +14 -0
  150. package/dist/components/Row.d.ts +11 -0
  151. package/dist/components/Row.js +14 -0
  152. package/dist/components/Select.d.ts +23 -0
  153. package/dist/components/Select.js +10 -0
  154. package/dist/components/Sidebar.d.ts +9 -0
  155. package/dist/components/Sidebar.js +10 -0
  156. package/dist/components/Skeleton.d.ts +7 -0
  157. package/dist/components/Skeleton.js +10 -0
  158. package/dist/components/Slider.d.ts +12 -0
  159. package/dist/components/Slider.js +10 -0
  160. package/dist/components/Space.d.ts +11 -0
  161. package/dist/components/Space.js +10 -0
  162. package/dist/components/Steps.d.ts +31 -0
  163. package/dist/components/Steps.js +14 -0
  164. package/dist/components/StepsItem.d.ts +36 -0
  165. package/dist/components/StepsItem.js +10 -0
  166. package/dist/components/SubMenu.d.ts +20 -0
  167. package/dist/components/SubMenu.js +13 -0
  168. package/dist/components/Switch.d.ts +12 -0
  169. package/dist/components/Switch.js +10 -0
  170. package/dist/components/TabPane.d.ts +42 -0
  171. package/dist/components/TabPane.js +10 -0
  172. package/dist/components/Table.d.ts +46 -0
  173. package/dist/components/Table.js +10 -0
  174. package/dist/components/Tabs.d.ts +43 -0
  175. package/dist/components/Tabs.js +14 -0
  176. package/dist/components/Tag.d.ts +16 -0
  177. package/dist/components/Tag.js +10 -0
  178. package/dist/components/Text.d.ts +9 -0
  179. package/dist/components/Text.js +10 -0
  180. package/dist/components/Textarea.d.ts +13 -0
  181. package/dist/components/Textarea.js +10 -0
  182. package/dist/components/TimePicker.d.ts +28 -0
  183. package/dist/components/TimePicker.js +10 -0
  184. package/dist/components/Timeline.d.ts +47 -0
  185. package/dist/components/Timeline.js +10 -0
  186. package/dist/components/Tooltip.d.ts +15 -0
  187. package/dist/components/Tooltip.js +10 -0
  188. package/dist/components/Tree.d.ts +154 -0
  189. package/dist/components/Tree.js +16 -0
  190. package/dist/components/Upload.d.ts +16 -0
  191. package/dist/components/Upload.js +11 -0
  192. package/dist/index.d.ts +77 -0
  193. package/dist/index.js +364 -0
  194. package/package.json +3 -6
  195. package/dist/styles/index.css +0 -4
  196. package/dist/styles/index.d.mts +0 -2
@@ -0,0 +1,140 @@
1
+ 'use strict';
2
+
3
+ var chunkQFVE7GKD_js = require('./chunk-QFVE7GKD.js');
4
+ var react = require('react');
5
+ var tigercatCore = require('@expcat/tigercat-core');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function getMenuButtonsWithin(menuEl) {
9
+ return Array.from(
10
+ menuEl.querySelectorAll('button[data-tiger-menuitem="true"]')
11
+ ).filter((el) => !el.disabled);
12
+ }
13
+ function roveFocus(current, next) {
14
+ const menuEl = current.closest('ul[role="menu"]');
15
+ if (!menuEl) {
16
+ next.focus();
17
+ return;
18
+ }
19
+ const items = getMenuButtonsWithin(menuEl);
20
+ items.forEach((el) => {
21
+ el.tabIndex = el === next ? 0 : -1;
22
+ });
23
+ next.focus();
24
+ }
25
+ function moveFocus(current, delta) {
26
+ const menuEl = current.closest('ul[role="menu"]');
27
+ if (!menuEl) return;
28
+ const items = getMenuButtonsWithin(menuEl);
29
+ const currentIndex = items.indexOf(current);
30
+ if (currentIndex < 0) return;
31
+ const nextIndex = (currentIndex + delta + items.length) % items.length;
32
+ roveFocus(current, items[nextIndex]);
33
+ }
34
+ function focusEdge(current, edge) {
35
+ const menuEl = current.closest('ul[role="menu"]');
36
+ if (!menuEl) return;
37
+ const items = getMenuButtonsWithin(menuEl);
38
+ if (items.length === 0) return;
39
+ roveFocus(current, edge === "start" ? items[0] : items[items.length - 1]);
40
+ }
41
+ var MenuItem = ({
42
+ itemKey,
43
+ disabled = false,
44
+ icon,
45
+ className,
46
+ children,
47
+ level = 0,
48
+ collapsed: collapsedOverride
49
+ }) => {
50
+ const menuContext = chunkQFVE7GKD_js.useMenuContext();
51
+ if (!menuContext) {
52
+ console.warn("MenuItem must be used within Menu component");
53
+ }
54
+ const isSelected = !!menuContext && tigercatCore.isKeySelected(itemKey, menuContext.selectedKeys);
55
+ const effectiveCollapsed = collapsedOverride ?? (menuContext ? menuContext.collapsed : false);
56
+ const itemClasses = tigercatCore.classNames(
57
+ menuContext ? tigercatCore.getMenuItemClasses(isSelected, disabled, menuContext.theme, effectiveCollapsed) : "flex items-center px-4 py-2 cursor-pointer transition-colors duration-200",
58
+ className
59
+ );
60
+ const indentStyle = menuContext && menuContext.mode === "inline" && level > 0 ? tigercatCore.getMenuItemIndent(level, menuContext.inlineIndent) : {};
61
+ const handleClick = react.useCallback(() => {
62
+ if (!disabled && menuContext) {
63
+ menuContext.handleSelect(itemKey);
64
+ }
65
+ }, [disabled, menuContext, itemKey]);
66
+ const handleKeyDown = react.useCallback(
67
+ (event) => {
68
+ if (!menuContext) return;
69
+ const current = event.currentTarget;
70
+ const rootMenu = current.closest('ul[role="menu"]');
71
+ const isRoot = rootMenu?.dataset.tigerMenuRoot === "true";
72
+ const isHorizontalRoot = isRoot && menuContext.mode === "horizontal";
73
+ const nextKey = isHorizontalRoot ? "ArrowRight" : "ArrowDown";
74
+ const prevKey = isHorizontalRoot ? "ArrowLeft" : "ArrowUp";
75
+ if (event.key === nextKey) {
76
+ event.preventDefault();
77
+ moveFocus(current, 1);
78
+ return;
79
+ }
80
+ if (event.key === prevKey) {
81
+ event.preventDefault();
82
+ moveFocus(current, -1);
83
+ return;
84
+ }
85
+ if (event.key === "Home") {
86
+ event.preventDefault();
87
+ focusEdge(current, "start");
88
+ return;
89
+ }
90
+ if (event.key === "End") {
91
+ event.preventDefault();
92
+ focusEdge(current, "end");
93
+ return;
94
+ }
95
+ if (event.key === "Enter" || event.key === " ") {
96
+ event.preventDefault();
97
+ handleClick();
98
+ }
99
+ },
100
+ [menuContext, handleClick]
101
+ );
102
+ const renderIcon = () => {
103
+ if (!icon) return null;
104
+ if (typeof icon === "string") {
105
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: tigercatCore.menuItemIconClasses, dangerouslySetInnerHTML: { __html: icon } });
106
+ }
107
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: tigercatCore.menuItemIconClasses, children: icon });
108
+ };
109
+ const renderLabel = () => {
110
+ if (!effectiveCollapsed) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children });
111
+ if (!icon) {
112
+ const text = String(children || "");
113
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 text-center", children: text.charAt(0).toUpperCase() });
114
+ }
115
+ return null;
116
+ };
117
+ return /* @__PURE__ */ jsxRuntime.jsx("li", { role: "none", children: /* @__PURE__ */ jsxRuntime.jsxs(
118
+ "button",
119
+ {
120
+ type: "button",
121
+ className: itemClasses,
122
+ style: indentStyle,
123
+ role: "menuitem",
124
+ "data-tiger-menuitem": "true",
125
+ "data-tiger-selected": isSelected ? "true" : "false",
126
+ "aria-current": isSelected ? "page" : void 0,
127
+ "aria-disabled": disabled ? "true" : void 0,
128
+ disabled,
129
+ tabIndex: -1,
130
+ onClick: handleClick,
131
+ onKeyDown: handleKeyDown,
132
+ children: [
133
+ renderIcon(),
134
+ renderLabel()
135
+ ]
136
+ }
137
+ ) });
138
+ };
139
+
140
+ exports.MenuItem = MenuItem;
@@ -0,0 +1,194 @@
1
+ 'use strict';
2
+
3
+ var chunkNEULKOYJ_js = require('./chunk-NEULKOYJ.js');
4
+ var React = require('react');
5
+ var reactDom = require('react-dom');
6
+ var tigercatCore = require('@expcat/tigercat-core');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var React__default = /*#__PURE__*/_interopDefault(React);
12
+
13
+ var CloseIcon = () => /* @__PURE__ */ jsxRuntime.jsx(
14
+ "svg",
15
+ {
16
+ className: "w-5 h-5",
17
+ fill: "none",
18
+ stroke: "currentColor",
19
+ viewBox: tigercatCore.closeIconViewBox,
20
+ xmlns: "http://www.w3.org/2000/svg",
21
+ children: /* @__PURE__ */ jsxRuntime.jsx(
22
+ "path",
23
+ {
24
+ strokeLinecap: tigercatCore.closeIconPathStrokeLinecap,
25
+ strokeLinejoin: tigercatCore.closeIconPathStrokeLinejoin,
26
+ strokeWidth: tigercatCore.closeIconPathStrokeWidth,
27
+ d: tigercatCore.closeIconPathD
28
+ }
29
+ )
30
+ }
31
+ );
32
+ var Drawer = ({
33
+ visible = false,
34
+ placement = "right",
35
+ size = "md",
36
+ title,
37
+ header,
38
+ closable = true,
39
+ mask = true,
40
+ maskClosable = true,
41
+ zIndex = 1e3,
42
+ className,
43
+ bodyClassName,
44
+ destroyOnClose = false,
45
+ onClose,
46
+ onAfterEnter,
47
+ onAfterLeave,
48
+ closeAriaLabel,
49
+ locale,
50
+ children,
51
+ footer,
52
+ style,
53
+ ...rest
54
+ }) => {
55
+ const [hasBeenOpened, setHasBeenOpened] = React__default.default.useState(visible);
56
+ React.useEffect(() => {
57
+ if (visible) setHasBeenOpened(true);
58
+ }, [visible]);
59
+ const shouldRender = destroyOnClose ? visible : hasBeenOpened;
60
+ const handleClose = React.useCallback(() => {
61
+ onClose?.();
62
+ }, [onClose]);
63
+ const handleMaskClick = React.useCallback(
64
+ (event) => {
65
+ if (!maskClosable) return;
66
+ if (event.target === event.currentTarget) {
67
+ handleClose();
68
+ }
69
+ },
70
+ [maskClosable, handleClose]
71
+ );
72
+ chunkNEULKOYJ_js.useEscapeKey({ enabled: visible, onEscape: handleClose });
73
+ const previousVisible = React.useRef(false);
74
+ React.useEffect(() => {
75
+ if (visible === previousVisible.current) return;
76
+ previousVisible.current = visible;
77
+ const timer = window.setTimeout(() => {
78
+ if (visible) {
79
+ onAfterEnter?.();
80
+ } else {
81
+ onAfterLeave?.();
82
+ }
83
+ }, 300);
84
+ return () => window.clearTimeout(timer);
85
+ }, [visible, onAfterEnter, onAfterLeave]);
86
+ const reactId = React.useId();
87
+ const drawerId = React.useMemo(() => `tiger-drawer-${reactId}`, [reactId]);
88
+ const titleId = `${drawerId}-title`;
89
+ const {
90
+ ["aria-labelledby"]: _ariaLabelledby,
91
+ role: _role,
92
+ tabIndex: _tabIndex,
93
+ ...dialogDivProps
94
+ } = rest;
95
+ const ariaLabelledby = rest["aria-labelledby"] ?? (title || header ? titleId : void 0);
96
+ const dialogRef = React.useRef(null);
97
+ const closeButtonRef = React.useRef(null);
98
+ const previousActiveElementRef = React.useRef(null);
99
+ const resolvedCloseAriaLabel = tigercatCore.resolveLocaleText(
100
+ "Close drawer",
101
+ closeAriaLabel,
102
+ locale?.drawer?.closeAriaLabel,
103
+ locale?.common?.closeText
104
+ );
105
+ React.useEffect(() => {
106
+ if (!visible) return;
107
+ previousActiveElementRef.current = tigercatCore.captureActiveElement();
108
+ const timer = window.setTimeout(() => {
109
+ tigercatCore.focusFirst([closeButtonRef.current, dialogRef.current]);
110
+ }, 0);
111
+ return () => window.clearTimeout(timer);
112
+ }, [visible]);
113
+ React.useEffect(() => {
114
+ if (visible) return;
115
+ tigercatCore.restoreFocus(previousActiveElementRef.current);
116
+ }, [visible]);
117
+ const containerClasses = tigercatCore.classNames(
118
+ tigercatCore.getDrawerContainerClasses(zIndex),
119
+ !visible && "pointer-events-none"
120
+ );
121
+ const maskClasses = tigercatCore.getDrawerMaskClasses(visible);
122
+ const panelClasses = tigercatCore.classNames(
123
+ tigercatCore.getDrawerPanelClasses(placement, visible, size),
124
+ "flex flex-col",
125
+ className
126
+ );
127
+ const headerClasses = tigercatCore.getDrawerHeaderClasses();
128
+ const bodyClasses = tigercatCore.getDrawerBodyClasses(bodyClassName);
129
+ const footerClasses = tigercatCore.getDrawerFooterClasses();
130
+ const closeButtonClasses = tigercatCore.getDrawerCloseButtonClasses();
131
+ const titleClasses = tigercatCore.getDrawerTitleClasses();
132
+ if (!shouldRender) {
133
+ return null;
134
+ }
135
+ const drawerContent = /* @__PURE__ */ jsxRuntime.jsxs(
136
+ "div",
137
+ {
138
+ className: containerClasses,
139
+ style: { zIndex },
140
+ hidden: !visible,
141
+ "aria-hidden": !visible ? "true" : void 0,
142
+ "data-tiger-drawer-root": "",
143
+ children: [
144
+ mask && /* @__PURE__ */ jsxRuntime.jsx(
145
+ "div",
146
+ {
147
+ className: maskClasses,
148
+ onClick: handleMaskClick,
149
+ "aria-hidden": "true",
150
+ "data-tiger-drawer-mask": ""
151
+ }
152
+ ),
153
+ /* @__PURE__ */ jsxRuntime.jsxs(
154
+ "div",
155
+ {
156
+ className: panelClasses,
157
+ style,
158
+ ...dialogDivProps,
159
+ role: "dialog",
160
+ "aria-modal": "true",
161
+ "aria-labelledby": ariaLabelledby,
162
+ tabIndex: -1,
163
+ ref: dialogRef,
164
+ "data-tiger-drawer": "",
165
+ children: [
166
+ (title || header || closable) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: headerClasses, children: [
167
+ (title || header) && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: titleClasses, id: titleId, children: header || title }),
168
+ closable && /* @__PURE__ */ jsxRuntime.jsx(
169
+ "button",
170
+ {
171
+ type: "button",
172
+ className: closeButtonClasses,
173
+ onClick: handleClose,
174
+ "aria-label": resolvedCloseAriaLabel,
175
+ ref: closeButtonRef,
176
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, {})
177
+ }
178
+ )
179
+ ] }),
180
+ children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: bodyClasses, children }),
181
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: footerClasses, children: footer })
182
+ ]
183
+ }
184
+ )
185
+ ]
186
+ }
187
+ );
188
+ if (typeof document === "undefined") {
189
+ return null;
190
+ }
191
+ return reactDom.createPortal(drawerContent, document.body);
192
+ };
193
+
194
+ exports.Drawer = Drawer;
@@ -0,0 +1,89 @@
1
+ 'use strict';
2
+
3
+ var chunkVSF4DF7N_js = require('./chunk-VSF4DF7N.js');
4
+ var react = require('react');
5
+ var tigercatCore = require('@expcat/tigercat-core');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ var Radio = ({
9
+ value,
10
+ size,
11
+ disabled,
12
+ name,
13
+ checked,
14
+ defaultChecked = false,
15
+ onChange,
16
+ children,
17
+ className,
18
+ style,
19
+ ...props
20
+ }) => {
21
+ const groupContext = react.useContext(chunkVSF4DF7N_js.RadioGroupContext);
22
+ const [internalChecked, setInternalChecked] = react.useState(defaultChecked);
23
+ const isCheckedControlled = checked !== void 0;
24
+ const isInGroup = !!groupContext;
25
+ const actualSize = size || groupContext?.size || "md";
26
+ const actualDisabled = disabled !== void 0 ? disabled : groupContext?.disabled || false;
27
+ const actualName = name || groupContext?.name || "";
28
+ const isChecked = checked !== void 0 ? checked : groupContext?.value !== void 0 ? groupContext.value === value : internalChecked;
29
+ const colors = tigercatCore.getRadioColorClasses();
30
+ const radioClasses = tigercatCore.getRadioVisualClasses({
31
+ size: actualSize,
32
+ checked: isChecked,
33
+ disabled: actualDisabled,
34
+ colors
35
+ });
36
+ const dotClasses = tigercatCore.getRadioDotClasses({
37
+ size: actualSize,
38
+ checked: isChecked,
39
+ colors
40
+ });
41
+ const labelClasses = tigercatCore.getRadioLabelClasses({
42
+ size: actualSize,
43
+ disabled: actualDisabled,
44
+ colors
45
+ });
46
+ const handleChange = (event) => {
47
+ if (actualDisabled) {
48
+ event.preventDefault();
49
+ return;
50
+ }
51
+ const newChecked = event.target.checked;
52
+ if (!newChecked) return;
53
+ if (!isCheckedControlled && !isInGroup) {
54
+ setInternalChecked(true);
55
+ }
56
+ onChange?.(value);
57
+ groupContext?.onChange?.(value);
58
+ };
59
+ const handleKeyDown = (event) => {
60
+ props.onKeyDown?.(event);
61
+ if (event.defaultPrevented) return;
62
+ if (actualDisabled) return;
63
+ if (event.key === "Enter") {
64
+ event.preventDefault();
65
+ const input = event.currentTarget;
66
+ if (!input.checked) input.click();
67
+ }
68
+ };
69
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: tigercatCore.classNames("inline-flex items-center", className), style, children: [
70
+ /* @__PURE__ */ jsxRuntime.jsx(
71
+ "input",
72
+ {
73
+ type: "radio",
74
+ className: "sr-only peer",
75
+ ...props,
76
+ name: actualName,
77
+ value,
78
+ checked: isChecked,
79
+ disabled: actualDisabled,
80
+ onChange: handleChange,
81
+ onKeyDown: handleKeyDown
82
+ }
83
+ ),
84
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: radioClasses, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: dotClasses }) }),
85
+ children && /* @__PURE__ */ jsxRuntime.jsx("span", { className: labelClasses, children })
86
+ ] });
87
+ };
88
+
89
+ exports.Radio = Radio;
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ var tigercatCore = require('@expcat/tigercat-core');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/components/Badge.tsx
7
+ var Badge = ({
8
+ variant = "danger",
9
+ size = "md",
10
+ type = "number",
11
+ content,
12
+ max = 99,
13
+ showZero = false,
14
+ position = "top-right",
15
+ standalone = true,
16
+ className,
17
+ children,
18
+ ["aria-label"]: ariaLabelProp,
19
+ ...props
20
+ }) => {
21
+ const isDot = type === "dot";
22
+ const isHidden = tigercatCore.shouldHideBadge(content, type, showZero);
23
+ const displayContent = tigercatCore.formatBadgeContent(content, max, showZero);
24
+ const sizeClass = isDot ? tigercatCore.dotSizeClasses[size] : tigercatCore.badgeSizeClasses[size];
25
+ const badgeClasses = tigercatCore.classNames(
26
+ tigercatCore.badgeBaseClasses,
27
+ tigercatCore.getBadgeVariantClasses(variant),
28
+ sizeClass,
29
+ tigercatCore.badgeTypeClasses[type],
30
+ !standalone && tigercatCore.badgePositionClasses[position],
31
+ className
32
+ );
33
+ const computedAriaLabel = ariaLabelProp ?? (isDot ? "notification" : type === "number" ? `${displayContent} notifications` : `${displayContent ?? ""}`);
34
+ if (isHidden) {
35
+ if (standalone) {
36
+ return null;
37
+ }
38
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
39
+ }
40
+ const badgeElement = /* @__PURE__ */ jsxRuntime.jsx("span", { ...props, className: badgeClasses, role: "status", "aria-label": computedAriaLabel, children: !isDot && displayContent });
41
+ if (standalone) {
42
+ return badgeElement;
43
+ }
44
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tigercatCore.badgeWrapperClasses, children: [
45
+ children,
46
+ badgeElement
47
+ ] });
48
+ };
49
+
50
+ exports.Badge = Badge;
@@ -0,0 +1,108 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var tigercatCore = require('@expcat/tigercat-core');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ // src/components/Loading.tsx
8
+ var Loading = ({
9
+ variant = "spinner",
10
+ size = "md",
11
+ color = "primary",
12
+ text,
13
+ fullscreen = false,
14
+ delay = 0,
15
+ background = "rgba(255, 255, 255, 0.9)",
16
+ customColor,
17
+ className = "",
18
+ style,
19
+ ...props
20
+ }) => {
21
+ react.useEffect(() => {
22
+ tigercatCore.injectLoadingAnimationStyles();
23
+ }, []);
24
+ const [visible, setVisible] = react.useState(delay === 0);
25
+ react.useEffect(() => {
26
+ if (delay > 0) {
27
+ const timer = setTimeout(() => {
28
+ setVisible(true);
29
+ }, delay);
30
+ return () => clearTimeout(timer);
31
+ }
32
+ }, [delay]);
33
+ const spinnerClasses = tigercatCore.getLoadingClasses(variant, size, color, customColor);
34
+ const textClasses = tigercatCore.getLoadingTextClasses(size, color, customColor);
35
+ const containerClasses = tigercatCore.classNames(
36
+ fullscreen ? tigercatCore.loadingFullscreenBaseClasses : tigercatCore.loadingContainerBaseClasses,
37
+ className
38
+ );
39
+ const mergedStyle = {
40
+ ...customColor ? { color: customColor } : null,
41
+ ...fullscreen ? { backgroundColor: background } : null,
42
+ ...style
43
+ };
44
+ const renderSpinner = () => {
45
+ const svg = tigercatCore.getSpinnerSVG(variant);
46
+ return /* @__PURE__ */ jsxRuntime.jsx(
47
+ "svg",
48
+ {
49
+ className: spinnerClasses,
50
+ xmlns: "http://www.w3.org/2000/svg",
51
+ fill: "none",
52
+ viewBox: svg.viewBox,
53
+ children: svg.elements.map((el, index) => {
54
+ if (el.type === "circle") {
55
+ return /* @__PURE__ */ jsxRuntime.jsx("circle", { ...el.attrs }, index);
56
+ } else if (el.type === "path") {
57
+ return /* @__PURE__ */ jsxRuntime.jsx("path", { ...el.attrs }, index);
58
+ }
59
+ return null;
60
+ })
61
+ }
62
+ );
63
+ };
64
+ const renderDots = () => {
65
+ const colorClass = customColor ? "" : tigercatCore.loadingColorClasses[color];
66
+ const steps = [0, 1, 2];
67
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: tigercatCore.getLoadingDotsWrapperClasses(size), children: steps.map((i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: tigercatCore.getLoadingDotClasses(size, i, colorClass) }, i)) });
68
+ };
69
+ const renderBars = () => {
70
+ const colorClass = customColor ? "" : tigercatCore.loadingColorClasses[color];
71
+ const steps = [0, 1, 2];
72
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: tigercatCore.getLoadingBarsWrapperClasses(size), children: steps.map((i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: tigercatCore.getLoadingBarClasses(size, i, colorClass) }, i)) });
73
+ };
74
+ const renderIndicator = () => {
75
+ switch (variant) {
76
+ case "dots":
77
+ return renderDots();
78
+ case "bars":
79
+ return renderBars();
80
+ case "spinner":
81
+ case "ring":
82
+ case "pulse":
83
+ default:
84
+ return renderSpinner();
85
+ }
86
+ };
87
+ if (!visible) {
88
+ return null;
89
+ }
90
+ return /* @__PURE__ */ jsxRuntime.jsxs(
91
+ "div",
92
+ {
93
+ className: containerClasses,
94
+ style: mergedStyle,
95
+ role: "status",
96
+ "aria-label": text || "Loading",
97
+ "aria-live": "polite",
98
+ "aria-busy": true,
99
+ ...props,
100
+ children: [
101
+ renderIndicator(),
102
+ text && /* @__PURE__ */ jsxRuntime.jsx("div", { className: textClasses, children: text })
103
+ ]
104
+ }
105
+ );
106
+ };
107
+
108
+ exports.Loading = Loading;
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var chunk2DOPHSZP_js = require('./chunk-2DOPHSZP.js');
4
+ var react = require('react');
5
+ var tigercatCore = require('@expcat/tigercat-core');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ var BreadcrumbItem = ({
9
+ href,
10
+ target,
11
+ current = false,
12
+ separator: customSeparator,
13
+ className,
14
+ style,
15
+ onClick,
16
+ children,
17
+ icon,
18
+ ...props
19
+ }) => {
20
+ const breadcrumbContext = chunk2DOPHSZP_js.useBreadcrumbContext();
21
+ const itemClasses = react.useMemo(
22
+ () => tigercatCore.getBreadcrumbItemClasses(current, className),
23
+ [current, className]
24
+ );
25
+ const linkClasses = react.useMemo(() => tigercatCore.getBreadcrumbLinkClasses(current), [current]);
26
+ const separatorClasses = react.useMemo(() => tigercatCore.getBreadcrumbSeparatorClasses(), []);
27
+ const separatorContent = react.useMemo(() => {
28
+ const sep = customSeparator !== void 0 ? customSeparator : breadcrumbContext?.separator || "/";
29
+ return tigercatCore.getSeparatorContent(sep);
30
+ }, [customSeparator, breadcrumbContext]);
31
+ const handleClick = react.useCallback(
32
+ (event) => {
33
+ if (!current) {
34
+ onClick?.(event);
35
+ }
36
+ },
37
+ [current, onClick]
38
+ );
39
+ const computedRel = react.useMemo(() => {
40
+ if (target === "_blank") {
41
+ return "noopener noreferrer";
42
+ }
43
+ return void 0;
44
+ }, [target]);
45
+ const contentElements = icon ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
46
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex", children: icon }),
47
+ children
48
+ ] }) : children;
49
+ const linkElement = href && !current ? /* @__PURE__ */ jsxRuntime.jsx(
50
+ "a",
51
+ {
52
+ className: linkClasses,
53
+ href,
54
+ target,
55
+ rel: computedRel,
56
+ "aria-current": current ? "page" : void 0,
57
+ onClick: handleClick,
58
+ children: contentElements
59
+ }
60
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: linkClasses, "aria-current": current ? "page" : void 0, children: contentElements });
61
+ const separatorElement = !current ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: separatorClasses, "aria-hidden": "true", children: separatorContent }) : null;
62
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: itemClasses, style, ...props, children: [
63
+ linkElement,
64
+ separatorElement
65
+ ] });
66
+ };
67
+
68
+ exports.BreadcrumbItem = BreadcrumbItem;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var tigercatCore = require('@expcat/tigercat-core');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/components/Container.tsx
7
+ var Container = ({
8
+ maxWidth = false,
9
+ center = true,
10
+ padding = true,
11
+ children,
12
+ className,
13
+ as: Component = "div",
14
+ ...props
15
+ }) => {
16
+ const containerClasses = tigercatCore.getContainerClasses({
17
+ maxWidth,
18
+ center,
19
+ padding,
20
+ className
21
+ });
22
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ...props, className: containerClasses, children });
23
+ };
24
+
25
+ exports.Container = Container;