@tonyarbor/components 0.7.0 → 0.7.1
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/dist/AvatarLogoLockup.d.mts +41 -0
- package/dist/AvatarLogoLockup.d.ts +41 -0
- package/dist/AvatarLogoLockup.js +344 -0
- package/dist/AvatarLogoLockup.js.map +1 -0
- package/dist/AvatarLogoLockup.mjs +9 -0
- package/dist/AvatarLogoLockup.mjs.map +1 -0
- package/dist/TopNavBar.d.mts +103 -0
- package/dist/TopNavBar.d.ts +103 -0
- package/dist/TopNavBar.js +994 -0
- package/dist/TopNavBar.js.map +1 -0
- package/dist/TopNavBar.mjs +13 -0
- package/dist/TopNavBar.mjs.map +1 -0
- package/dist/TopNavItem.d.mts +33 -0
- package/dist/TopNavItem.d.ts +33 -0
- package/dist/TopNavItem.js +108 -0
- package/dist/TopNavItem.js.map +1 -0
- package/dist/TopNavItem.mjs +7 -0
- package/dist/TopNavItem.mjs.map +1 -0
- package/dist/chunk-AVYGOALO.mjs +72 -0
- package/dist/chunk-AVYGOALO.mjs.map +1 -0
- package/dist/chunk-HG2ORLLW.mjs +116 -0
- package/dist/chunk-HG2ORLLW.mjs.map +1 -0
- package/dist/chunk-YUXQQX7M.mjs +182 -0
- package/dist/chunk-YUXQQX7M.mjs.map +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +346 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -1
- package/package.json +16 -1
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AvatarLogoLockup
|
|
3
|
+
} from "./chunk-HG2ORLLW.mjs";
|
|
4
|
+
import {
|
|
5
|
+
TopNavItem
|
|
6
|
+
} from "./chunk-AVYGOALO.mjs";
|
|
7
|
+
import {
|
|
8
|
+
SearchGlobal
|
|
9
|
+
} from "./chunk-UPBHDBAK.mjs";
|
|
10
|
+
import {
|
|
11
|
+
Button
|
|
12
|
+
} from "./chunk-NOUFR6W2.mjs";
|
|
13
|
+
|
|
14
|
+
// src/TopNavBar/TopNavBar.tsx
|
|
15
|
+
import * as React from "react";
|
|
16
|
+
import { Sparkles } from "lucide-react";
|
|
17
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
+
var TopNavBar = React.forwardRef(
|
|
19
|
+
({
|
|
20
|
+
schoolLogoSrc,
|
|
21
|
+
schoolLogoAlt = "School logo",
|
|
22
|
+
onSchoolLogoClick,
|
|
23
|
+
navItems = [],
|
|
24
|
+
onNavItemClick,
|
|
25
|
+
searchValue = "",
|
|
26
|
+
onSearchChange,
|
|
27
|
+
onSearchSubmit,
|
|
28
|
+
onSearchClear,
|
|
29
|
+
actionButtonLabel = "Ask Arbor",
|
|
30
|
+
onActionButtonClick,
|
|
31
|
+
showActionButton = true,
|
|
32
|
+
avatarSrc,
|
|
33
|
+
avatarInitials,
|
|
34
|
+
avatarAlt = "User avatar",
|
|
35
|
+
onAvatarClick,
|
|
36
|
+
onLogoClick,
|
|
37
|
+
className,
|
|
38
|
+
style
|
|
39
|
+
}, ref) => {
|
|
40
|
+
const containerStyles = {
|
|
41
|
+
position: "fixed",
|
|
42
|
+
top: 0,
|
|
43
|
+
left: 0,
|
|
44
|
+
right: 0,
|
|
45
|
+
display: "flex",
|
|
46
|
+
alignItems: "center",
|
|
47
|
+
justifyContent: "space-between",
|
|
48
|
+
padding: "4px 8px",
|
|
49
|
+
backgroundColor: "#ffffff",
|
|
50
|
+
boxShadow: "0px 1px 2px 0px rgba(0, 0, 0, 0.08)",
|
|
51
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
52
|
+
boxSizing: "border-box",
|
|
53
|
+
zIndex: 1e3,
|
|
54
|
+
height: "48px",
|
|
55
|
+
...style
|
|
56
|
+
};
|
|
57
|
+
const leftSectionStyles = {
|
|
58
|
+
display: "flex",
|
|
59
|
+
alignItems: "center",
|
|
60
|
+
gap: "16px"
|
|
61
|
+
};
|
|
62
|
+
const schoolLogoContainerStyles = {
|
|
63
|
+
display: "flex",
|
|
64
|
+
alignItems: "center",
|
|
65
|
+
justifyContent: "center",
|
|
66
|
+
width: "64px",
|
|
67
|
+
height: "40px",
|
|
68
|
+
backgroundColor: "#ffffff",
|
|
69
|
+
border: "1px solid #efefef",
|
|
70
|
+
borderRadius: "8px",
|
|
71
|
+
overflow: "hidden",
|
|
72
|
+
padding: "2px",
|
|
73
|
+
boxSizing: "border-box",
|
|
74
|
+
cursor: onSchoolLogoClick ? "pointer" : "default"
|
|
75
|
+
};
|
|
76
|
+
const schoolLogoImageStyles = {
|
|
77
|
+
maxWidth: "100%",
|
|
78
|
+
maxHeight: "100%",
|
|
79
|
+
objectFit: "contain"
|
|
80
|
+
};
|
|
81
|
+
const placeholderStyles = {
|
|
82
|
+
width: "100%",
|
|
83
|
+
height: "100%",
|
|
84
|
+
display: "flex",
|
|
85
|
+
alignItems: "center",
|
|
86
|
+
justifyContent: "center",
|
|
87
|
+
backgroundColor: "#f8f8f8",
|
|
88
|
+
color: "#949494",
|
|
89
|
+
fontSize: "10px",
|
|
90
|
+
fontWeight: 500,
|
|
91
|
+
textAlign: "center"
|
|
92
|
+
};
|
|
93
|
+
const navItemsGroupStyles = {
|
|
94
|
+
display: "flex",
|
|
95
|
+
alignItems: "center",
|
|
96
|
+
gap: "8px"
|
|
97
|
+
};
|
|
98
|
+
const rightSectionStyles = {
|
|
99
|
+
display: "flex",
|
|
100
|
+
alignItems: "center",
|
|
101
|
+
gap: "16px"
|
|
102
|
+
};
|
|
103
|
+
const actionButtonStyles = {
|
|
104
|
+
display: "flex",
|
|
105
|
+
alignItems: "center",
|
|
106
|
+
gap: "8px"
|
|
107
|
+
};
|
|
108
|
+
const SchoolLogoElement = onSchoolLogoClick ? "button" : "div";
|
|
109
|
+
return /* @__PURE__ */ jsxs("nav", { ref, className, style: containerStyles, children: [
|
|
110
|
+
/* @__PURE__ */ jsxs("div", { style: leftSectionStyles, children: [
|
|
111
|
+
/* @__PURE__ */ jsx(
|
|
112
|
+
SchoolLogoElement,
|
|
113
|
+
{
|
|
114
|
+
style: {
|
|
115
|
+
...schoolLogoContainerStyles,
|
|
116
|
+
...onSchoolLogoClick ? { outline: "none", border: "1px solid #efefef" } : {}
|
|
117
|
+
},
|
|
118
|
+
onClick: onSchoolLogoClick,
|
|
119
|
+
...onSchoolLogoClick ? { type: "button" } : {},
|
|
120
|
+
children: schoolLogoSrc ? /* @__PURE__ */ jsx(
|
|
121
|
+
"img",
|
|
122
|
+
{
|
|
123
|
+
src: schoolLogoSrc,
|
|
124
|
+
alt: schoolLogoAlt,
|
|
125
|
+
style: schoolLogoImageStyles
|
|
126
|
+
}
|
|
127
|
+
) : /* @__PURE__ */ jsx("div", { style: placeholderStyles, children: "Logo" })
|
|
128
|
+
}
|
|
129
|
+
),
|
|
130
|
+
/* @__PURE__ */ jsx("div", { style: navItemsGroupStyles, children: navItems.map((item) => /* @__PURE__ */ jsx(
|
|
131
|
+
TopNavItem,
|
|
132
|
+
{
|
|
133
|
+
active: item.active,
|
|
134
|
+
onClick: () => onNavItemClick?.(item),
|
|
135
|
+
children: item.label
|
|
136
|
+
},
|
|
137
|
+
item.id
|
|
138
|
+
)) })
|
|
139
|
+
] }),
|
|
140
|
+
/* @__PURE__ */ jsxs("div", { style: rightSectionStyles, children: [
|
|
141
|
+
/* @__PURE__ */ jsx(
|
|
142
|
+
SearchGlobal,
|
|
143
|
+
{
|
|
144
|
+
value: searchValue,
|
|
145
|
+
onChange: onSearchChange,
|
|
146
|
+
onSubmit: onSearchSubmit,
|
|
147
|
+
onClear: onSearchClear
|
|
148
|
+
}
|
|
149
|
+
),
|
|
150
|
+
showActionButton && /* @__PURE__ */ jsxs(
|
|
151
|
+
Button,
|
|
152
|
+
{
|
|
153
|
+
variant: "secondary",
|
|
154
|
+
size: "small",
|
|
155
|
+
onClick: onActionButtonClick,
|
|
156
|
+
style: actionButtonStyles,
|
|
157
|
+
children: [
|
|
158
|
+
/* @__PURE__ */ jsx(Sparkles, { size: 16, strokeWidth: 2 }),
|
|
159
|
+
actionButtonLabel
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
),
|
|
163
|
+
/* @__PURE__ */ jsx(
|
|
164
|
+
AvatarLogoLockup,
|
|
165
|
+
{
|
|
166
|
+
avatarSrc,
|
|
167
|
+
avatarInitials,
|
|
168
|
+
avatarAlt,
|
|
169
|
+
onAvatarClick,
|
|
170
|
+
onLogoClick
|
|
171
|
+
}
|
|
172
|
+
)
|
|
173
|
+
] })
|
|
174
|
+
] });
|
|
175
|
+
}
|
|
176
|
+
);
|
|
177
|
+
TopNavBar.displayName = "TopNavBar";
|
|
178
|
+
|
|
179
|
+
export {
|
|
180
|
+
TopNavBar
|
|
181
|
+
};
|
|
182
|
+
//# sourceMappingURL=chunk-YUXQQX7M.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/TopNavBar/TopNavBar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Sparkles } from 'lucide-react';\nimport { TopNavItem } from '../TopNavItem';\nimport { SearchGlobal } from '../SearchGlobal';\nimport { Button } from '../Button';\nimport { AvatarLogoLockup } from '../AvatarLogoLockup';\n\nexport interface NavItem {\n /**\n * Unique identifier for the nav item\n */\n id: string;\n /**\n * Display label for the nav item\n */\n label: string;\n /**\n * Whether this nav item is currently active\n */\n active?: boolean;\n}\n\nexport interface TopNavBarProps {\n /**\n * School logo image source URL\n */\n schoolLogoSrc?: string;\n /**\n * Alt text for school logo\n */\n schoolLogoAlt?: string;\n /**\n * Click handler for school logo\n */\n onSchoolLogoClick?: () => void;\n /**\n * Array of navigation items\n */\n navItems?: NavItem[];\n /**\n * Callback when a nav item is clicked\n */\n onNavItemClick?: (item: NavItem) => void;\n /**\n * Search value\n */\n searchValue?: string;\n /**\n * Search change handler\n */\n onSearchChange?: (value: string) => void;\n /**\n * Search submit handler\n */\n onSearchSubmit?: (value: string) => void;\n /**\n * Search clear handler\n */\n onSearchClear?: () => void;\n /**\n * Action button label (e.g., \"Ask Arbor\")\n */\n actionButtonLabel?: string;\n /**\n * Action button click handler\n */\n onActionButtonClick?: () => void;\n /**\n * Whether to show the action button\n */\n showActionButton?: boolean;\n /**\n * User avatar image source URL\n */\n avatarSrc?: string;\n /**\n * User avatar initials (fallback when no image)\n */\n avatarInitials?: string;\n /**\n * User avatar alt text\n */\n avatarAlt?: string;\n /**\n * Avatar section click handler\n */\n onAvatarClick?: () => void;\n /**\n * Logo section click handler\n */\n onLogoClick?: () => void;\n /**\n * Custom className\n */\n className?: string;\n /**\n * Custom style\n */\n style?: React.CSSProperties;\n}\n\n/**\n * TopNavBar component - Arbor Design System\n *\n * A full-width navigation bar fixed to the top of the page.\n * Contains school logo, navigation items, search, action button, and avatar-logo lockup.\n */\nexport const TopNavBar = React.forwardRef<HTMLElement, TopNavBarProps>(\n (\n {\n schoolLogoSrc,\n schoolLogoAlt = 'School logo',\n onSchoolLogoClick,\n navItems = [],\n onNavItemClick,\n searchValue = '',\n onSearchChange,\n onSearchSubmit,\n onSearchClear,\n actionButtonLabel = 'Ask Arbor',\n onActionButtonClick,\n showActionButton = true,\n avatarSrc,\n avatarInitials,\n avatarAlt = 'User avatar',\n onAvatarClick,\n onLogoClick,\n className,\n style,\n },\n ref\n ) => {\n const containerStyles: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '4px 8px',\n backgroundColor: '#ffffff',\n boxShadow: '0px 1px 2px 0px rgba(0, 0, 0, 0.08)',\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n boxSizing: 'border-box',\n zIndex: 1000,\n height: '48px',\n ...style,\n };\n\n const leftSectionStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n };\n\n const schoolLogoContainerStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '64px',\n height: '40px',\n backgroundColor: '#ffffff',\n border: '1px solid #efefef',\n borderRadius: '8px',\n overflow: 'hidden',\n padding: '2px',\n boxSizing: 'border-box',\n cursor: onSchoolLogoClick ? 'pointer' : 'default',\n };\n\n const schoolLogoImageStyles: React.CSSProperties = {\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: 'contain',\n };\n\n const placeholderStyles: React.CSSProperties = {\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#f8f8f8',\n color: '#949494',\n fontSize: '10px',\n fontWeight: 500,\n textAlign: 'center',\n };\n\n const navItemsGroupStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n };\n\n const rightSectionStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n };\n\n const actionButtonStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n };\n\n const SchoolLogoElement = onSchoolLogoClick ? 'button' : 'div';\n\n return (\n <nav ref={ref} className={className} style={containerStyles}>\n {/* Left section: School logo + Nav items */}\n <div style={leftSectionStyles}>\n <SchoolLogoElement\n style={{\n ...schoolLogoContainerStyles,\n ...(onSchoolLogoClick ? { outline: 'none', border: '1px solid #efefef' } : {}),\n }}\n onClick={onSchoolLogoClick}\n {...(onSchoolLogoClick ? { type: 'button' } : {})}\n >\n {schoolLogoSrc ? (\n <img\n src={schoolLogoSrc}\n alt={schoolLogoAlt}\n style={schoolLogoImageStyles}\n />\n ) : (\n <div style={placeholderStyles}>Logo</div>\n )}\n </SchoolLogoElement>\n\n <div style={navItemsGroupStyles}>\n {navItems.map((item) => (\n <TopNavItem\n key={item.id}\n active={item.active}\n onClick={() => onNavItemClick?.(item)}\n >\n {item.label}\n </TopNavItem>\n ))}\n </div>\n </div>\n\n {/* Right section: Search + Action button + Avatar-Logo lockup */}\n <div style={rightSectionStyles}>\n <SearchGlobal\n value={searchValue}\n onChange={onSearchChange}\n onSubmit={onSearchSubmit}\n onClear={onSearchClear}\n />\n\n {showActionButton && (\n <Button\n variant=\"secondary\"\n size=\"small\"\n onClick={onActionButtonClick}\n style={actionButtonStyles}\n >\n <Sparkles size={16} strokeWidth={2} />\n {actionButtonLabel}\n </Button>\n )}\n\n <AvatarLogoLockup\n avatarSrc={avatarSrc}\n avatarInitials={avatarInitials}\n avatarAlt={avatarAlt}\n onAvatarClick={onAvatarClick}\n onLogoClick={onLogoClick}\n />\n </div>\n </nav>\n );\n }\n);\n\nTopNavBar.displayName = 'TopNavBar';\n"],"mappings":"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","names":[]}
|
package/dist/index.d.mts
CHANGED
|
@@ -34,6 +34,9 @@ export { Section, SectionProps } from './Section.mjs';
|
|
|
34
34
|
export { ModalHeader, ModalHeaderProps } from './ModalHeader.mjs';
|
|
35
35
|
export { ModalFooter, ModalFooterProps } from './ModalFooter.mjs';
|
|
36
36
|
export { Modal, ModalContent, ModalContentProps, ModalProps } from './Modal.mjs';
|
|
37
|
+
export { AvatarLogoLockup, AvatarLogoLockupProps } from './AvatarLogoLockup.mjs';
|
|
38
|
+
export { TopNavItem, TopNavItemProps } from './TopNavItem.mjs';
|
|
39
|
+
export { NavItem, TopNavBar, TopNavBarProps } from './TopNavBar.mjs';
|
|
37
40
|
import 'react';
|
|
38
41
|
|
|
39
42
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,9 @@ export { Section, SectionProps } from './Section.js';
|
|
|
34
34
|
export { ModalHeader, ModalHeaderProps } from './ModalHeader.js';
|
|
35
35
|
export { ModalFooter, ModalFooterProps } from './ModalFooter.js';
|
|
36
36
|
export { Modal, ModalContent, ModalContentProps, ModalProps } from './Modal.js';
|
|
37
|
+
export { AvatarLogoLockup, AvatarLogoLockupProps } from './AvatarLogoLockup.js';
|
|
38
|
+
export { TopNavItem, TopNavItemProps } from './TopNavItem.js';
|
|
39
|
+
export { NavItem, TopNavBar, TopNavBarProps } from './TopNavBar.js';
|
|
37
40
|
import 'react';
|
|
38
41
|
|
|
39
42
|
/**
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var src_exports = {};
|
|
32
32
|
__export(src_exports, {
|
|
33
33
|
Avatar: () => Avatar,
|
|
34
|
+
AvatarLogoLockup: () => AvatarLogoLockup,
|
|
34
35
|
Banner: () => Banner,
|
|
35
36
|
Breadcrumbs: () => Breadcrumbs,
|
|
36
37
|
Button: () => Button,
|
|
@@ -66,7 +67,9 @@ __export(src_exports, {
|
|
|
66
67
|
TextArea: () => TextArea,
|
|
67
68
|
Toast: () => Toast,
|
|
68
69
|
Toggle: () => Toggle,
|
|
69
|
-
Tooltip: () => Tooltip
|
|
70
|
+
Tooltip: () => Tooltip,
|
|
71
|
+
TopNavBar: () => TopNavBar,
|
|
72
|
+
TopNavItem: () => TopNavItem
|
|
70
73
|
});
|
|
71
74
|
module.exports = __toCommonJS(src_exports);
|
|
72
75
|
|
|
@@ -6408,9 +6411,348 @@ var ModalContent = React36.forwardRef(
|
|
|
6408
6411
|
}
|
|
6409
6412
|
);
|
|
6410
6413
|
ModalContent.displayName = "ModalContent";
|
|
6414
|
+
|
|
6415
|
+
// src/AvatarLogoLockup/AvatarLogoLockup.tsx
|
|
6416
|
+
var React37 = __toESM(require("react"));
|
|
6417
|
+
var import_lucide_react14 = require("lucide-react");
|
|
6418
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
6419
|
+
var AvatarLogoLockup = React37.forwardRef(
|
|
6420
|
+
({
|
|
6421
|
+
avatarSrc,
|
|
6422
|
+
avatarInitials,
|
|
6423
|
+
avatarAlt = "User avatar",
|
|
6424
|
+
onAvatarClick,
|
|
6425
|
+
onLogoClick,
|
|
6426
|
+
className,
|
|
6427
|
+
style
|
|
6428
|
+
}, ref) => {
|
|
6429
|
+
const [isHovered, setIsHovered] = React37.useState(false);
|
|
6430
|
+
const containerStyles6 = {
|
|
6431
|
+
display: "inline-flex",
|
|
6432
|
+
alignItems: "center",
|
|
6433
|
+
gap: "4px",
|
|
6434
|
+
padding: "4px",
|
|
6435
|
+
height: "40px",
|
|
6436
|
+
backgroundColor: isHovered ? "#f8f8f8" : "#ffffff",
|
|
6437
|
+
border: "1px solid #efefef",
|
|
6438
|
+
borderRadius: "99px",
|
|
6439
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
6440
|
+
boxSizing: "border-box",
|
|
6441
|
+
transition: "background-color 0.15s ease-in-out",
|
|
6442
|
+
...style
|
|
6443
|
+
};
|
|
6444
|
+
const avatarSectionStyles = {
|
|
6445
|
+
display: "flex",
|
|
6446
|
+
alignItems: "center",
|
|
6447
|
+
gap: "4px",
|
|
6448
|
+
borderRadius: "99px",
|
|
6449
|
+
cursor: onAvatarClick ? "pointer" : "default",
|
|
6450
|
+
backgroundColor: "transparent",
|
|
6451
|
+
border: "none",
|
|
6452
|
+
padding: 0
|
|
6453
|
+
};
|
|
6454
|
+
const dividerStyles = {
|
|
6455
|
+
width: "1px",
|
|
6456
|
+
height: "24px",
|
|
6457
|
+
backgroundColor: "#efefef",
|
|
6458
|
+
flexShrink: 0
|
|
6459
|
+
};
|
|
6460
|
+
const logoSectionStyles = {
|
|
6461
|
+
display: "flex",
|
|
6462
|
+
alignItems: "center",
|
|
6463
|
+
cursor: onLogoClick ? "pointer" : "default",
|
|
6464
|
+
padding: 0
|
|
6465
|
+
};
|
|
6466
|
+
const AvatarSection = onAvatarClick ? "button" : "div";
|
|
6467
|
+
const LogoSection = onLogoClick ? "button" : "div";
|
|
6468
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
6469
|
+
"div",
|
|
6470
|
+
{
|
|
6471
|
+
ref,
|
|
6472
|
+
className,
|
|
6473
|
+
style: containerStyles6,
|
|
6474
|
+
onMouseEnter: () => setIsHovered(true),
|
|
6475
|
+
onMouseLeave: () => setIsHovered(false),
|
|
6476
|
+
children: [
|
|
6477
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
6478
|
+
AvatarSection,
|
|
6479
|
+
{
|
|
6480
|
+
style: {
|
|
6481
|
+
...avatarSectionStyles,
|
|
6482
|
+
...onAvatarClick ? { outline: "none" } : {}
|
|
6483
|
+
},
|
|
6484
|
+
onClick: onAvatarClick,
|
|
6485
|
+
...onAvatarClick ? { type: "button" } : {},
|
|
6486
|
+
children: [
|
|
6487
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
6488
|
+
Avatar,
|
|
6489
|
+
{
|
|
6490
|
+
size: "medium",
|
|
6491
|
+
src: avatarSrc,
|
|
6492
|
+
initials: avatarInitials,
|
|
6493
|
+
alt: avatarAlt
|
|
6494
|
+
}
|
|
6495
|
+
),
|
|
6496
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react14.ChevronDown, { size: 12, color: "#2f2f2f", strokeWidth: 2 })
|
|
6497
|
+
]
|
|
6498
|
+
}
|
|
6499
|
+
),
|
|
6500
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { style: dividerStyles }),
|
|
6501
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
6502
|
+
LogoSection,
|
|
6503
|
+
{
|
|
6504
|
+
style: {
|
|
6505
|
+
...logoSectionStyles,
|
|
6506
|
+
...onLogoClick ? { outline: "none", backgroundColor: "transparent", border: "none" } : {}
|
|
6507
|
+
},
|
|
6508
|
+
onClick: onLogoClick,
|
|
6509
|
+
...onLogoClick ? { type: "button" } : {},
|
|
6510
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Logo, { withText: true, light: true, height: 25 })
|
|
6511
|
+
}
|
|
6512
|
+
)
|
|
6513
|
+
]
|
|
6514
|
+
}
|
|
6515
|
+
);
|
|
6516
|
+
}
|
|
6517
|
+
);
|
|
6518
|
+
AvatarLogoLockup.displayName = "AvatarLogoLockup";
|
|
6519
|
+
|
|
6520
|
+
// src/TopNavItem/TopNavItem.tsx
|
|
6521
|
+
var React38 = __toESM(require("react"));
|
|
6522
|
+
var import_lucide_react15 = require("lucide-react");
|
|
6523
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
6524
|
+
var TopNavItem = React38.forwardRef(
|
|
6525
|
+
({
|
|
6526
|
+
children,
|
|
6527
|
+
active = false,
|
|
6528
|
+
onClick,
|
|
6529
|
+
className,
|
|
6530
|
+
style
|
|
6531
|
+
}, ref) => {
|
|
6532
|
+
const [isHovered, setIsHovered] = React38.useState(false);
|
|
6533
|
+
const [isFocused, setIsFocused] = React38.useState(false);
|
|
6534
|
+
const textColor = active ? "#005700" : "#474747";
|
|
6535
|
+
const iconColor = active ? "#005700" : "#474747";
|
|
6536
|
+
const getBackgroundColor = () => {
|
|
6537
|
+
if (active) return "#f0faf3";
|
|
6538
|
+
if (isHovered) return "#f8f8f8";
|
|
6539
|
+
return "transparent";
|
|
6540
|
+
};
|
|
6541
|
+
const containerStyles6 = {
|
|
6542
|
+
display: "inline-flex",
|
|
6543
|
+
alignItems: "center",
|
|
6544
|
+
justifyContent: "center",
|
|
6545
|
+
gap: "4px",
|
|
6546
|
+
padding: "4px 8px",
|
|
6547
|
+
backgroundColor: getBackgroundColor(),
|
|
6548
|
+
borderRadius: "8px",
|
|
6549
|
+
border: "none",
|
|
6550
|
+
cursor: "pointer",
|
|
6551
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
6552
|
+
boxSizing: "border-box",
|
|
6553
|
+
transition: "background-color 0.15s ease-in-out",
|
|
6554
|
+
outline: "none",
|
|
6555
|
+
boxShadow: isFocused ? "0px 0px 0px 3px #3cad51" : "none",
|
|
6556
|
+
...style
|
|
6557
|
+
};
|
|
6558
|
+
const textStyles3 = {
|
|
6559
|
+
fontSize: "13px",
|
|
6560
|
+
fontWeight: 600,
|
|
6561
|
+
color: textColor,
|
|
6562
|
+
lineHeight: 1.5,
|
|
6563
|
+
textAlign: "center",
|
|
6564
|
+
whiteSpace: "nowrap"
|
|
6565
|
+
};
|
|
6566
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
6567
|
+
"button",
|
|
6568
|
+
{
|
|
6569
|
+
ref,
|
|
6570
|
+
className,
|
|
6571
|
+
style: containerStyles6,
|
|
6572
|
+
onClick,
|
|
6573
|
+
onMouseEnter: () => setIsHovered(true),
|
|
6574
|
+
onMouseLeave: () => setIsHovered(false),
|
|
6575
|
+
onFocus: () => setIsFocused(true),
|
|
6576
|
+
onBlur: () => setIsFocused(false),
|
|
6577
|
+
type: "button",
|
|
6578
|
+
children: [
|
|
6579
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { style: textStyles3, children }),
|
|
6580
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react15.ChevronDown, { size: 12, color: iconColor, strokeWidth: 2 })
|
|
6581
|
+
]
|
|
6582
|
+
}
|
|
6583
|
+
);
|
|
6584
|
+
}
|
|
6585
|
+
);
|
|
6586
|
+
TopNavItem.displayName = "TopNavItem";
|
|
6587
|
+
|
|
6588
|
+
// src/TopNavBar/TopNavBar.tsx
|
|
6589
|
+
var React39 = __toESM(require("react"));
|
|
6590
|
+
var import_lucide_react16 = require("lucide-react");
|
|
6591
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
6592
|
+
var TopNavBar = React39.forwardRef(
|
|
6593
|
+
({
|
|
6594
|
+
schoolLogoSrc,
|
|
6595
|
+
schoolLogoAlt = "School logo",
|
|
6596
|
+
onSchoolLogoClick,
|
|
6597
|
+
navItems = [],
|
|
6598
|
+
onNavItemClick,
|
|
6599
|
+
searchValue = "",
|
|
6600
|
+
onSearchChange,
|
|
6601
|
+
onSearchSubmit,
|
|
6602
|
+
onSearchClear,
|
|
6603
|
+
actionButtonLabel = "Ask Arbor",
|
|
6604
|
+
onActionButtonClick,
|
|
6605
|
+
showActionButton = true,
|
|
6606
|
+
avatarSrc,
|
|
6607
|
+
avatarInitials,
|
|
6608
|
+
avatarAlt = "User avatar",
|
|
6609
|
+
onAvatarClick,
|
|
6610
|
+
onLogoClick,
|
|
6611
|
+
className,
|
|
6612
|
+
style
|
|
6613
|
+
}, ref) => {
|
|
6614
|
+
const containerStyles6 = {
|
|
6615
|
+
position: "fixed",
|
|
6616
|
+
top: 0,
|
|
6617
|
+
left: 0,
|
|
6618
|
+
right: 0,
|
|
6619
|
+
display: "flex",
|
|
6620
|
+
alignItems: "center",
|
|
6621
|
+
justifyContent: "space-between",
|
|
6622
|
+
padding: "4px 8px",
|
|
6623
|
+
backgroundColor: "#ffffff",
|
|
6624
|
+
boxShadow: "0px 1px 2px 0px rgba(0, 0, 0, 0.08)",
|
|
6625
|
+
fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
6626
|
+
boxSizing: "border-box",
|
|
6627
|
+
zIndex: 1e3,
|
|
6628
|
+
height: "48px",
|
|
6629
|
+
...style
|
|
6630
|
+
};
|
|
6631
|
+
const leftSectionStyles = {
|
|
6632
|
+
display: "flex",
|
|
6633
|
+
alignItems: "center",
|
|
6634
|
+
gap: "16px"
|
|
6635
|
+
};
|
|
6636
|
+
const schoolLogoContainerStyles = {
|
|
6637
|
+
display: "flex",
|
|
6638
|
+
alignItems: "center",
|
|
6639
|
+
justifyContent: "center",
|
|
6640
|
+
width: "64px",
|
|
6641
|
+
height: "40px",
|
|
6642
|
+
backgroundColor: "#ffffff",
|
|
6643
|
+
border: "1px solid #efefef",
|
|
6644
|
+
borderRadius: "8px",
|
|
6645
|
+
overflow: "hidden",
|
|
6646
|
+
padding: "2px",
|
|
6647
|
+
boxSizing: "border-box",
|
|
6648
|
+
cursor: onSchoolLogoClick ? "pointer" : "default"
|
|
6649
|
+
};
|
|
6650
|
+
const schoolLogoImageStyles = {
|
|
6651
|
+
maxWidth: "100%",
|
|
6652
|
+
maxHeight: "100%",
|
|
6653
|
+
objectFit: "contain"
|
|
6654
|
+
};
|
|
6655
|
+
const placeholderStyles = {
|
|
6656
|
+
width: "100%",
|
|
6657
|
+
height: "100%",
|
|
6658
|
+
display: "flex",
|
|
6659
|
+
alignItems: "center",
|
|
6660
|
+
justifyContent: "center",
|
|
6661
|
+
backgroundColor: "#f8f8f8",
|
|
6662
|
+
color: "#949494",
|
|
6663
|
+
fontSize: "10px",
|
|
6664
|
+
fontWeight: 500,
|
|
6665
|
+
textAlign: "center"
|
|
6666
|
+
};
|
|
6667
|
+
const navItemsGroupStyles = {
|
|
6668
|
+
display: "flex",
|
|
6669
|
+
alignItems: "center",
|
|
6670
|
+
gap: "8px"
|
|
6671
|
+
};
|
|
6672
|
+
const rightSectionStyles = {
|
|
6673
|
+
display: "flex",
|
|
6674
|
+
alignItems: "center",
|
|
6675
|
+
gap: "16px"
|
|
6676
|
+
};
|
|
6677
|
+
const actionButtonStyles2 = {
|
|
6678
|
+
display: "flex",
|
|
6679
|
+
alignItems: "center",
|
|
6680
|
+
gap: "8px"
|
|
6681
|
+
};
|
|
6682
|
+
const SchoolLogoElement = onSchoolLogoClick ? "button" : "div";
|
|
6683
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("nav", { ref, className, style: containerStyles6, children: [
|
|
6684
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { style: leftSectionStyles, children: [
|
|
6685
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
6686
|
+
SchoolLogoElement,
|
|
6687
|
+
{
|
|
6688
|
+
style: {
|
|
6689
|
+
...schoolLogoContainerStyles,
|
|
6690
|
+
...onSchoolLogoClick ? { outline: "none", border: "1px solid #efefef" } : {}
|
|
6691
|
+
},
|
|
6692
|
+
onClick: onSchoolLogoClick,
|
|
6693
|
+
...onSchoolLogoClick ? { type: "button" } : {},
|
|
6694
|
+
children: schoolLogoSrc ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
6695
|
+
"img",
|
|
6696
|
+
{
|
|
6697
|
+
src: schoolLogoSrc,
|
|
6698
|
+
alt: schoolLogoAlt,
|
|
6699
|
+
style: schoolLogoImageStyles
|
|
6700
|
+
}
|
|
6701
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: placeholderStyles, children: "Logo" })
|
|
6702
|
+
}
|
|
6703
|
+
),
|
|
6704
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: navItemsGroupStyles, children: navItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
6705
|
+
TopNavItem,
|
|
6706
|
+
{
|
|
6707
|
+
active: item.active,
|
|
6708
|
+
onClick: () => onNavItemClick?.(item),
|
|
6709
|
+
children: item.label
|
|
6710
|
+
},
|
|
6711
|
+
item.id
|
|
6712
|
+
)) })
|
|
6713
|
+
] }),
|
|
6714
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { style: rightSectionStyles, children: [
|
|
6715
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
6716
|
+
SearchGlobal,
|
|
6717
|
+
{
|
|
6718
|
+
value: searchValue,
|
|
6719
|
+
onChange: onSearchChange,
|
|
6720
|
+
onSubmit: onSearchSubmit,
|
|
6721
|
+
onClear: onSearchClear
|
|
6722
|
+
}
|
|
6723
|
+
),
|
|
6724
|
+
showActionButton && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
6725
|
+
Button,
|
|
6726
|
+
{
|
|
6727
|
+
variant: "secondary",
|
|
6728
|
+
size: "small",
|
|
6729
|
+
onClick: onActionButtonClick,
|
|
6730
|
+
style: actionButtonStyles2,
|
|
6731
|
+
children: [
|
|
6732
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react16.Sparkles, { size: 16, strokeWidth: 2 }),
|
|
6733
|
+
actionButtonLabel
|
|
6734
|
+
]
|
|
6735
|
+
}
|
|
6736
|
+
),
|
|
6737
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
6738
|
+
AvatarLogoLockup,
|
|
6739
|
+
{
|
|
6740
|
+
avatarSrc,
|
|
6741
|
+
avatarInitials,
|
|
6742
|
+
avatarAlt,
|
|
6743
|
+
onAvatarClick,
|
|
6744
|
+
onLogoClick
|
|
6745
|
+
}
|
|
6746
|
+
)
|
|
6747
|
+
] })
|
|
6748
|
+
] });
|
|
6749
|
+
}
|
|
6750
|
+
);
|
|
6751
|
+
TopNavBar.displayName = "TopNavBar";
|
|
6411
6752
|
// Annotate the CommonJS export names for ESM import in node:
|
|
6412
6753
|
0 && (module.exports = {
|
|
6413
6754
|
Avatar,
|
|
6755
|
+
AvatarLogoLockup,
|
|
6414
6756
|
Banner,
|
|
6415
6757
|
Breadcrumbs,
|
|
6416
6758
|
Button,
|
|
@@ -6446,6 +6788,8 @@ ModalContent.displayName = "ModalContent";
|
|
|
6446
6788
|
TextArea,
|
|
6447
6789
|
Toast,
|
|
6448
6790
|
Toggle,
|
|
6449
|
-
Tooltip
|
|
6791
|
+
Tooltip,
|
|
6792
|
+
TopNavBar,
|
|
6793
|
+
TopNavItem
|
|
6450
6794
|
});
|
|
6451
6795
|
//# sourceMappingURL=index.js.map
|