@columbia-libraries/cul-toolkit 5.0.4 → 5.1.3

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.
@@ -0,0 +1,357 @@
1
+ /*!
2
+ * CUL Menu v5.1.3
3
+ * (c) 2026
4
+ */
5
+ const b = [
6
+ {
7
+ href: "https://library.columbia.edu/libraries.html",
8
+ value: "Libraries & Affiliates"
9
+ },
10
+ {
11
+ href: "https://library.columbia.edu/libraries/avery.html",
12
+ value: "Avery Architectural & Fine Arts Library"
13
+ },
14
+ {
15
+ href: "https://library.columbia.edu/libraries/burke.html",
16
+ value: "Burke Library at Union Theological Seminary"
17
+ },
18
+ {
19
+ href: "https://library.columbia.edu/libraries/business.html",
20
+ value: "Business & Economics Library in Uris"
21
+ },
22
+ {
23
+ href: "https://library.columbia.edu/libraries/business-manhattanville.html",
24
+ value: "Business Library at Manhattanville"
25
+ },
26
+ {
27
+ href: "https://library.columbia.edu/libraries/butler.html",
28
+ value: "Butler Library"
29
+ },
30
+ {
31
+ href: "https://library.columbia.edu/libraries/eastasian.html",
32
+ value: "C.V. Starr East Asian Library"
33
+ },
34
+ {
35
+ href: "https://library.columbia.edu/libraries/music.html",
36
+ value: "Gabe M. Wiener Music & Arts Library"
37
+ },
38
+ {
39
+ href: "https://library.cumc.columbia.edu/",
40
+ value: "Health Sciences Library"
41
+ },
42
+ {
43
+ href: "https://library.columbia.edu/libraries/journalism.html",
44
+ value: "Journalism Library"
45
+ },
46
+ {
47
+ href: "https://library.columbia.edu/libraries/lehman.html",
48
+ value: "Lehman Social Sciences Library"
49
+ },
50
+ {
51
+ href: "http://www.law.columbia.edu/library/",
52
+ value: "Li Lu Law Library"
53
+ },
54
+ {
55
+ href: "https://library.columbia.edu/libraries/math.html",
56
+ value: "Mathematics Library"
57
+ },
58
+ {
59
+ href: "https://library.columbia.edu/libraries/undergraduate.html",
60
+ value: "Milstein Undergraduate Library"
61
+ },
62
+ {
63
+ href: "https://library.columbia.edu/libraries/rbml.html",
64
+ value: "Rare Book & Manuscript Library"
65
+ },
66
+ {
67
+ href: "https://library.columbia.edu/libraries/science-engineering.html",
68
+ value: "Science & Engineering Library"
69
+ },
70
+ {
71
+ href: "https://library.columbia.edu/libraries/social-work.html",
72
+ value: "Social Work Library"
73
+ }
74
+ ], A = [
75
+ {
76
+ href: "https://library.columbia.edu/collections.html",
77
+ value: "About Our Collections"
78
+ },
79
+ {
80
+ href: "https://academiccommons.columbia.edu/",
81
+ value: "Academic Commons"
82
+ },
83
+ {
84
+ href: "https://library.columbia.edu/collections/archives-portal.html",
85
+ value: "Archival Collections"
86
+ },
87
+ {
88
+ href: "https://resolver.library.columbia.edu/clio",
89
+ value: "CLIO: Columbia Libraries Catalog"
90
+ },
91
+ {
92
+ href: "https://library.columbia.edu/about/policies/collection-development.html",
93
+ value: "Collection Development"
94
+ },
95
+ {
96
+ href: "https://library.columbia.edu/collections/digital-collections.html",
97
+ value: "Digital Collections & Exhibitions"
98
+ },
99
+ {
100
+ href: "https://library.columbia.edu/collections/eresources.html",
101
+ value: "E-Resources"
102
+ },
103
+ {
104
+ href: "https://library.columbia.edu/collections/oral-history-portal.html",
105
+ value: "Oral History Collections"
106
+ },
107
+ {
108
+ href: "https://resolver.library.columbia.edu/lweb0004",
109
+ value: "Recommend a Title for Purchase"
110
+ },
111
+ {
112
+ href: "https://library.columbia.edu/about/policies/collection-development/repatriation-return.html",
113
+ value: "Repatriation"
114
+ },
115
+ {
116
+ href: "https://library.columbia.edu/about/staff/subject-specialists-by-subject.html",
117
+ value: "Subject Specialists"
118
+ }
119
+ ], n = [
120
+ {
121
+ href: "https://library.columbia.edu/about.html",
122
+ value: "About the Libraries"
123
+ },
124
+ {
125
+ href: "https://library.columbia.edu/about/jobs-internships.html",
126
+ value: "Jobs & Internships"
127
+ },
128
+ {
129
+ href: "https://library.columbia.edu/about/news/alert.html",
130
+ value: "Library Status Updates"
131
+ },
132
+ {
133
+ href: "https://library.columbia.edu/about/news.html",
134
+ value: "News"
135
+ },
136
+ {
137
+ href: "https://library.columbia.edu/about/values.html",
138
+ value: "Our Values & Commitment in Action"
139
+ },
140
+ {
141
+ href: "https://library.columbia.edu/about/policies.html",
142
+ value: "Policies"
143
+ },
144
+ {
145
+ href: "https://library.columbia.edu/about/staff.html",
146
+ value: "Staff"
147
+ },
148
+ {
149
+ href: "https://strategicdirections.library.columbia.edu/",
150
+ value: "Strategic Directions"
151
+ },
152
+ {
153
+ href: "https://library.columbia.edu/about/student_advisory_committee.html",
154
+ value: "Student Library Advisory Committee"
155
+ }
156
+ ], u = {
157
+ "Services & Tools": [
158
+ {
159
+ href: "https://library.columbia.edu/services.html",
160
+ value: "Services & Tools"
161
+ },
162
+ {
163
+ href: "https://library.columbia.edu/services/faq.html",
164
+ value: "FAQ"
165
+ },
166
+ {
167
+ href: "https://library.columbia.edu/using-libraries/alumni.html",
168
+ value: "For Alumni"
169
+ },
170
+ {
171
+ href: "https://library.columbia.edu/services/faculty.html",
172
+ value: "For Faculty"
173
+ },
174
+ {
175
+ href: "https://library.columbia.edu/services.html#audience=student",
176
+ value: "For Students"
177
+ },
178
+ {
179
+ href: "https://library.columbia.edu/using-libraries/visitors.html",
180
+ value: "For Visitors"
181
+ }
182
+ ],
183
+ Libraries: b,
184
+ Collections: A,
185
+ "Using the Libraries": [
186
+ {
187
+ href: "https://library.columbia.edu/using-libraries.html",
188
+ value: "Using the Libraries"
189
+ },
190
+ {
191
+ href: "https://library.columbia.edu/using-libraries/access-privileges.html",
192
+ value: "Access Privileges"
193
+ },
194
+ {
195
+ href: "https://library.columbia.edu/using-libraries/disability.html",
196
+ value: "Accessibility"
197
+ },
198
+ {
199
+ href: "https://library.columbia.edu/using-libraries/borrowing.html",
200
+ value: "Borrow, Request, Renew"
201
+ },
202
+ {
203
+ href: "https://library.columbia.edu/services/reserves.html",
204
+ value: "Course Reserves"
205
+ },
206
+ {
207
+ href: "https://hours.library.columbia.edu/",
208
+ value: "Hours"
209
+ },
210
+ {
211
+ href: "https://library.columbia.edu/using-libraries/printing.html",
212
+ value: "Print, Scan, Digitize"
213
+ }
214
+ ],
215
+ "Research & Teaching": [
216
+ {
217
+ href: "https://library.columbia.edu/research-teaching.html",
218
+ value: "Research & Teaching"
219
+ },
220
+ {
221
+ href: "https://copyright.columbia.edu/index.html",
222
+ value: "Copyright Advisory Services"
223
+ },
224
+ {
225
+ href: "https://library.columbia.edu/research-teaching/getting-started.html",
226
+ value: "Getting Started with the Libraries"
227
+ },
228
+ {
229
+ href: "https://library.columbia.edu/research-teaching/open-scholarship.html",
230
+ value: "Open Scholarship Services"
231
+ },
232
+ {
233
+ href: "https://library.columbia.edu/services/research-data-services.html",
234
+ value: "Research Data Services"
235
+ },
236
+ {
237
+ href: "https://library.columbia.edu/services/subject-guides.html",
238
+ value: "Subject & Course Guides"
239
+ },
240
+ {
241
+ href: "https://library.columbia.edu/research-teaching/workshops.html",
242
+ value: "Workshops & Training"
243
+ }
244
+ ],
245
+ About: n
246
+ }, d = "data:application/json;base64,ewogICJTZXJ2aWNlcyAmIFRvb2xzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2VydmljZXMgJiBUb29scyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFxLmh0bWwiLAogICAgICAidmFsdWUiOiAiRkFRIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYWx1bW5pLmh0bWwiLAogICAgICAidmFsdWUiOiAiRm9yIEFsdW1uaSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFjdWx0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkZvciBGYWN1bHR5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy5odG1sI2F1ZGllbmNlPXN0dWRlbnQiLAogICAgICAidmFsdWUiOiAiRm9yIFN0dWRlbnRzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvdmlzaXRvcnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJGb3IgVmlzaXRvcnMiCiAgICB9CiAgXSwKICAiTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIkxpYnJhcmllcyAmIEFmZmlsaWF0ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9hdmVyeS5odG1sIiwKICAgICAgInZhbHVlIjogIkF2ZXJ5IEFyY2hpdGVjdHVyYWwgJiBGaW5lIEFydHMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1cmtlLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVya2UgTGlicmFyeSBhdCBVbmlvbiBUaGVvbG9naWNhbCBTZW1pbmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1c2luZXNzLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVzaW5lc3MgJiBFY29ub21pY3MgTGlicmFyeSBpbiBVcmlzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnVzaW5lc3MtbWFuaGF0dGFudmlsbGUuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCdXNpbmVzcyBMaWJyYXJ5IGF0IE1hbmhhdHRhbnZpbGxlIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnV0bGVyLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnV0bGVyIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9lYXN0YXNpYW4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDLlYuIFN0YXJyIEVhc3QgQXNpYW4gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL211c2ljLmh0bWwiLAogICAgICAidmFsdWUiOiAiR2FiZSBNLiBXaWVuZXIgTXVzaWMgJiBBcnRzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY3VtYy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhlYWx0aCBTY2llbmNlcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvam91cm5hbGlzbS5odG1sIiwKICAgICAgInZhbHVlIjogIkpvdXJuYWxpc20gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2xlaG1hbi5odG1sIiwKICAgICAgInZhbHVlIjogIkxlaG1hbiBTb2NpYWwgU2NpZW5jZXMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHA6Ly93d3cubGF3LmNvbHVtYmlhLmVkdS9saWJyYXJ5LyIsCiAgICAgICJ2YWx1ZSI6ICJMaSBMdSBMYXcgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL21hdGguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJNYXRoZW1hdGljcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvdW5kZXJncmFkdWF0ZS5odG1sIiwKICAgICAgInZhbHVlIjogIk1pbHN0ZWluIFVuZGVyZ3JhZHVhdGUgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL3JibWwuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSYXJlIEJvb2sgJiBNYW51c2NyaXB0IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zY2llbmNlLWVuZ2luZWVyaW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2NpZW5jZSAmIEVuZ2luZWVyaW5nIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zb2NpYWwtd29yay5odG1sIiwKICAgICAgInZhbHVlIjogIlNvY2lhbCBXb3JrIExpYnJhcnkiCiAgICB9CiAgXSwKICAiQ29sbGVjdGlvbnMiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCBPdXIgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2FjYWRlbWljY29tbW9ucy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkFjYWRlbWljIENvbW1vbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2FyY2hpdmVzLXBvcnRhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkFyY2hpdmFsIENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9jbGlvIiwKICAgICAgInZhbHVlIjogIkNMSU86IENvbHVtYmlhIExpYnJhcmllcyBDYXRhbG9nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQ29sbGVjdGlvbiBEZXZlbG9wbWVudCIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZGlnaXRhbC1jb2xsZWN0aW9ucy5odG1sIiwKICAgICAgInZhbHVlIjogIkRpZ2l0YWwgQ29sbGVjdGlvbnMgJiBFeGhpYml0aW9ucyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZXJlc291cmNlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkUtUmVzb3VyY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9jb2xsZWN0aW9ucy9vcmFsLWhpc3RvcnktcG9ydGFsLmh0bWwiLAogICAgICAidmFsdWUiOiAiT3JhbCBIaXN0b3J5IENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9sd2ViMDAwNCIsCiAgICAgICJ2YWx1ZSI6ICJSZWNvbW1lbmQgYSBUaXRsZSBmb3IgUHVyY2hhc2UiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzL2NvbGxlY3Rpb24tZGV2ZWxvcG1lbnQvcmVwYXRyaWF0aW9uLXJldHVybi5odG1sIiwKICAgICAgInZhbHVlIjogIlJlcGF0cmlhdGlvbiIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvc3RhZmYvc3ViamVjdC1zcGVjaWFsaXN0cy1ieS1zdWJqZWN0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiU3ViamVjdCBTcGVjaWFsaXN0cyIKICAgIH0KICBdLAogICJVc2luZyB0aGUgTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIlVzaW5nIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9hY2Nlc3MtcHJpdmlsZWdlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2VzcyBQcml2aWxlZ2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvZGlzYWJpbGl0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2Vzc2liaWxpdHkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9ib3Jyb3dpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCb3Jyb3csIFJlcXVlc3QsIFJlbmV3IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlcnZlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkNvdXJzZSBSZXNlcnZlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vaG91cnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhvdXJzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvcHJpbnRpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJQcmludCwgU2NhbiwgRGlnaXRpemUiCiAgICB9CiAgXSwKICAiUmVzZWFyY2ggJiBUZWFjaGluZyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy5odG1sIiwKICAgICAgInZhbHVlIjogIlJlc2VhcmNoICYgVGVhY2hpbmciCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2NvcHlyaWdodC5jb2x1bWJpYS5lZHUvaW5kZXguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3B5cmlnaHQgQWR2aXNvcnkgU2VydmljZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dldHRpbmctc3RhcnRlZC5odG1sIiwKICAgICAgInZhbHVlIjogIkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL29wZW4tc2Nob2xhcnNoaXAuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJPcGVuIFNjaG9sYXJzaGlwIFNlcnZpY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlYXJjaC1kYXRhLXNlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUmVzZWFyY2ggRGF0YSBTZXJ2aWNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvc3ViamVjdC1ndWlkZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJTdWJqZWN0ICYgQ291cnNlIEd1aWRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvcmVzZWFyY2gtdGVhY2hpbmcvd29ya3Nob3BzLmh0bWwiLAogICAgICAidmFsdWUiOiAiV29ya3Nob3BzICYgVHJhaW5pbmciCiAgICB9CiAgXSwKICAiQWJvdXQiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCB0aGUgTGlicmFyaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9qb2JzLWludGVybnNoaXBzLmh0bWwiLAogICAgICAidmFsdWUiOiAiSm9icyAmIEludGVybnNoaXBzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9uZXdzL2FsZXJ0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiTGlicmFyeSBTdGF0dXMgVXBkYXRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvbmV3cy5odG1sIiwKICAgICAgInZhbHVlIjogIk5ld3MiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3ZhbHVlcy5odG1sIiwKICAgICAgInZhbHVlIjogIk91ciBWYWx1ZXMgJiBDb21taXRtZW50IGluIEFjdGlvbiIKICAgIH0sCiAgICAgICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUG9saWNpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3N0YWZmLmh0bWwiLAogICAgICAidmFsdWUiOiAiU3RhZmYiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL3N0cmF0ZWdpY2RpcmVjdGlvbnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIlN0cmF0ZWdpYyBEaXJlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9zdHVkZW50X2Fkdmlzb3J5X2NvbW1pdHRlZS5odG1sIiwKICAgICAgInZhbHVlIjogIlN0dWRlbnQgTGlicmFyeSBBZHZpc29yeSBDb21taXR0ZWUiCiAgICB9CiAgXQp9Cg==";
247
+ async function r(i) {
248
+ const l = i || d;
249
+ try {
250
+ const e = await fetch(h(l), {
251
+ cache: "no-store",
252
+ signal: AbortSignal.timeout(3e3)
253
+ // fail fast
254
+ });
255
+ if (!e.ok) throw new Error("Menu fetch failed");
256
+ return await e.json();
257
+ } catch (e) {
258
+ return console.warn(
259
+ "[CUL Menu] Remote menu unavailable, using bundled example.",
260
+ e
261
+ ), u;
262
+ }
263
+ }
264
+ function h(i) {
265
+ return i.includes("?") ? i : `${i}?v=5.1.3`;
266
+ }
267
+ async function y(i) {
268
+ const l = document.querySelectorAll("[data-cul-menu]");
269
+ if (!l.length) return;
270
+ const e = await r(i);
271
+ l.forEach((a, s) => {
272
+ const t = J(a, s), I = p(e, t);
273
+ a.replaceChildren(I), W(a);
274
+ });
275
+ }
276
+ function W(i) {
277
+ i.classList.remove("cul-menu-loading"), i.classList.add("cul-menu-loaded");
278
+ }
279
+ function J(i, l) {
280
+ return {
281
+ prefix: i.dataset.menuId || `culmenu-${l}`,
282
+ toggleTag: i.dataset.toggleTag || "button",
283
+ toggleClasses: i.dataset.toggleClasses || "btn btn-toggle ps-0 d-inline-flex w-100 align-items-center rounded border-0 collapsed",
284
+ listClasses: i.dataset.listClasses || "list-unstyled w-100",
285
+ itemClasses: i.dataset.itemClasses || "d-block",
286
+ useCollapse: i.dataset.useCollapse !== "false"
287
+ };
288
+ }
289
+ function p(i, l) {
290
+ const e = document.createElement("ul");
291
+ e.className = l.listClasses;
292
+ for (const a in i) {
293
+ const s = document.createElement("li");
294
+ s.className = "mb-1";
295
+ const t = `${l.prefix}-${v(a)}-collapse`, I = document.createElement(l.toggleTag);
296
+ I.className = l.toggleClasses, I.textContent = a, l.useCollapse && (I.setAttribute("data-bs-toggle", "collapse"), I.setAttribute("data-bs-target", `#${t}`), I.setAttribute("aria-expanded", "false")), s.appendChild(I);
297
+ const g = document.createElement("div");
298
+ g.className = l.useCollapse ? "collapse" : "", g.id = t;
299
+ const o = document.createElement("ul");
300
+ o.className = "btn-toggle-nav list-unstyled fw-normal pb-1", i[a].forEach((c) => {
301
+ const m = document.createElement("li"), C = document.createElement("a");
302
+ C.href = c.href, C.textContent = c.value, C.className = l.itemClasses, m.appendChild(C), o.appendChild(m);
303
+ }), g.appendChild(o), s.appendChild(g), e.appendChild(s);
304
+ }
305
+ return e;
306
+ }
307
+ function v(i) {
308
+ return i.toLowerCase().replace(/\s+/g, "-");
309
+ }
310
+ async function Y(i, l) {
311
+ const e = document.querySelector(i);
312
+ if (!e) return;
313
+ const a = e.querySelector("ul");
314
+ if (!a) {
315
+ console.warn("CUL navbar menu: <ul> not found");
316
+ return;
317
+ }
318
+ const s = await r(l), t = e.dataset.menuId || "cul-navbar";
319
+ a.replaceChildren(Z(s, t)), H(e);
320
+ }
321
+ function H(i) {
322
+ i.classList.remove("cul-menu-loading"), i.classList.add("cul-menu-loaded");
323
+ }
324
+ function Z(i, l) {
325
+ const e = document.createDocumentFragment();
326
+ for (const a in i) {
327
+ const s = `${l}-${L(a)}`, t = document.createElement("li");
328
+ t.className = "nav-item dropdown position-static d-inline-flex";
329
+ const I = document.createElement("a");
330
+ I.href = "#", I.className = "nav-link dropdown-toggle my-2 me-3", I.setAttribute("data-bs-toggle", "dropdown"), I.setAttribute("aria-expanded", "false"), I.textContent = a, t.appendChild(I);
331
+ const g = document.createElement("div");
332
+ g.id = `${s}-dropdown`, g.className = "dropdown-menu w-100 border-top-0 border-left-0 border-right-0 rounded-0 py-0 my-0";
333
+ const o = document.createElement("div");
334
+ o.className = "py-3 bg-secondary text-white";
335
+ const c = document.createElement("div");
336
+ c.className = "container cul-cols", i[a].forEach((m) => {
337
+ const C = document.createElement("a");
338
+ C.href = m.href, C.className = "d-block py-1 text-white dropdown-item bg-secondary", C.textContent = m.value, c.appendChild(C);
339
+ }), o.appendChild(c), g.appendChild(o), t.appendChild(g), e.appendChild(t);
340
+ }
341
+ return e;
342
+ }
343
+ function L(i) {
344
+ return i.toLowerCase().replace(/\s+/g, "-");
345
+ }
346
+ function V(i) {
347
+ return y(i.url);
348
+ }
349
+ function w(i) {
350
+ return Y(i.selector, i.url);
351
+ }
352
+ export {
353
+ V as initCollapse,
354
+ w as initNavbar,
355
+ y as makeCULmenu
356
+ };
357
+ //# sourceMappingURL=cul-menu.bundle.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cul-menu.bundle.es.js","sources":["../../src/js/cul-main-menu.json?url","../../src/js/culmenu-fetch.js","../../src/js/culmenu.js","../../src/js/culmenu-navbar.js","../../src/js/cul-menu-bundle.js"],"sourcesContent":["export default \"data:application/json;base64,ewogICJTZXJ2aWNlcyAmIFRvb2xzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2VydmljZXMgJiBUb29scyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFxLmh0bWwiLAogICAgICAidmFsdWUiOiAiRkFRIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYWx1bW5pLmh0bWwiLAogICAgICAidmFsdWUiOiAiRm9yIEFsdW1uaSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFjdWx0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkZvciBGYWN1bHR5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy5odG1sI2F1ZGllbmNlPXN0dWRlbnQiLAogICAgICAidmFsdWUiOiAiRm9yIFN0dWRlbnRzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvdmlzaXRvcnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJGb3IgVmlzaXRvcnMiCiAgICB9CiAgXSwKICAiTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIkxpYnJhcmllcyAmIEFmZmlsaWF0ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9hdmVyeS5odG1sIiwKICAgICAgInZhbHVlIjogIkF2ZXJ5IEFyY2hpdGVjdHVyYWwgJiBGaW5lIEFydHMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1cmtlLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVya2UgTGlicmFyeSBhdCBVbmlvbiBUaGVvbG9naWNhbCBTZW1pbmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1c2luZXNzLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVzaW5lc3MgJiBFY29ub21pY3MgTGlicmFyeSBpbiBVcmlzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnVzaW5lc3MtbWFuaGF0dGFudmlsbGUuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCdXNpbmVzcyBMaWJyYXJ5IGF0IE1hbmhhdHRhbnZpbGxlIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnV0bGVyLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnV0bGVyIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9lYXN0YXNpYW4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDLlYuIFN0YXJyIEVhc3QgQXNpYW4gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL211c2ljLmh0bWwiLAogICAgICAidmFsdWUiOiAiR2FiZSBNLiBXaWVuZXIgTXVzaWMgJiBBcnRzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY3VtYy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhlYWx0aCBTY2llbmNlcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvam91cm5hbGlzbS5odG1sIiwKICAgICAgInZhbHVlIjogIkpvdXJuYWxpc20gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2xlaG1hbi5odG1sIiwKICAgICAgInZhbHVlIjogIkxlaG1hbiBTb2NpYWwgU2NpZW5jZXMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHA6Ly93d3cubGF3LmNvbHVtYmlhLmVkdS9saWJyYXJ5LyIsCiAgICAgICJ2YWx1ZSI6ICJMaSBMdSBMYXcgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL21hdGguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJNYXRoZW1hdGljcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvdW5kZXJncmFkdWF0ZS5odG1sIiwKICAgICAgInZhbHVlIjogIk1pbHN0ZWluIFVuZGVyZ3JhZHVhdGUgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL3JibWwuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSYXJlIEJvb2sgJiBNYW51c2NyaXB0IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zY2llbmNlLWVuZ2luZWVyaW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2NpZW5jZSAmIEVuZ2luZWVyaW5nIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zb2NpYWwtd29yay5odG1sIiwKICAgICAgInZhbHVlIjogIlNvY2lhbCBXb3JrIExpYnJhcnkiCiAgICB9CiAgXSwKICAiQ29sbGVjdGlvbnMiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCBPdXIgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2FjYWRlbWljY29tbW9ucy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkFjYWRlbWljIENvbW1vbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2FyY2hpdmVzLXBvcnRhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkFyY2hpdmFsIENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9jbGlvIiwKICAgICAgInZhbHVlIjogIkNMSU86IENvbHVtYmlhIExpYnJhcmllcyBDYXRhbG9nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQ29sbGVjdGlvbiBEZXZlbG9wbWVudCIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZGlnaXRhbC1jb2xsZWN0aW9ucy5odG1sIiwKICAgICAgInZhbHVlIjogIkRpZ2l0YWwgQ29sbGVjdGlvbnMgJiBFeGhpYml0aW9ucyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZXJlc291cmNlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkUtUmVzb3VyY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9jb2xsZWN0aW9ucy9vcmFsLWhpc3RvcnktcG9ydGFsLmh0bWwiLAogICAgICAidmFsdWUiOiAiT3JhbCBIaXN0b3J5IENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9sd2ViMDAwNCIsCiAgICAgICJ2YWx1ZSI6ICJSZWNvbW1lbmQgYSBUaXRsZSBmb3IgUHVyY2hhc2UiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzL2NvbGxlY3Rpb24tZGV2ZWxvcG1lbnQvcmVwYXRyaWF0aW9uLXJldHVybi5odG1sIiwKICAgICAgInZhbHVlIjogIlJlcGF0cmlhdGlvbiIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvc3RhZmYvc3ViamVjdC1zcGVjaWFsaXN0cy1ieS1zdWJqZWN0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiU3ViamVjdCBTcGVjaWFsaXN0cyIKICAgIH0KICBdLAogICJVc2luZyB0aGUgTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIlVzaW5nIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9hY2Nlc3MtcHJpdmlsZWdlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2VzcyBQcml2aWxlZ2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvZGlzYWJpbGl0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2Vzc2liaWxpdHkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9ib3Jyb3dpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCb3Jyb3csIFJlcXVlc3QsIFJlbmV3IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlcnZlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkNvdXJzZSBSZXNlcnZlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vaG91cnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhvdXJzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvcHJpbnRpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJQcmludCwgU2NhbiwgRGlnaXRpemUiCiAgICB9CiAgXSwKICAiUmVzZWFyY2ggJiBUZWFjaGluZyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy5odG1sIiwKICAgICAgInZhbHVlIjogIlJlc2VhcmNoICYgVGVhY2hpbmciCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2NvcHlyaWdodC5jb2x1bWJpYS5lZHUvaW5kZXguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3B5cmlnaHQgQWR2aXNvcnkgU2VydmljZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dldHRpbmctc3RhcnRlZC5odG1sIiwKICAgICAgInZhbHVlIjogIkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL29wZW4tc2Nob2xhcnNoaXAuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJPcGVuIFNjaG9sYXJzaGlwIFNlcnZpY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlYXJjaC1kYXRhLXNlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUmVzZWFyY2ggRGF0YSBTZXJ2aWNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvc3ViamVjdC1ndWlkZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJTdWJqZWN0ICYgQ291cnNlIEd1aWRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvcmVzZWFyY2gtdGVhY2hpbmcvd29ya3Nob3BzLmh0bWwiLAogICAgICAidmFsdWUiOiAiV29ya3Nob3BzICYgVHJhaW5pbmciCiAgICB9CiAgXSwKICAiQWJvdXQiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCB0aGUgTGlicmFyaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9qb2JzLWludGVybnNoaXBzLmh0bWwiLAogICAgICAidmFsdWUiOiAiSm9icyAmIEludGVybnNoaXBzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9uZXdzL2FsZXJ0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiTGlicmFyeSBTdGF0dXMgVXBkYXRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvbmV3cy5odG1sIiwKICAgICAgInZhbHVlIjogIk5ld3MiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3ZhbHVlcy5odG1sIiwKICAgICAgInZhbHVlIjogIk91ciBWYWx1ZXMgJiBDb21taXRtZW50IGluIEFjdGlvbiIKICAgIH0sCiAgICAgICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUG9saWNpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3N0YWZmLmh0bWwiLAogICAgICAidmFsdWUiOiAiU3RhZmYiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL3N0cmF0ZWdpY2RpcmVjdGlvbnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIlN0cmF0ZWdpYyBEaXJlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9zdHVkZW50X2Fkdmlzb3J5X2NvbW1pdHRlZS5odG1sIiwKICAgICAgInZhbHVlIjogIlN0dWRlbnQgTGlicmFyeSBBZHZpc29yeSBDb21taXR0ZWUiCiAgICB9CiAgXQp9Cg==\"","// handles fetching menu json with fallback and cache-busting\n\n// culmenu-fetch.js\nimport exampleMenu from './cul-main-menu.json';\nimport exampleMenuUrl from './cul-main-menu.json?url';\n\nexport async function fetchCULmenu(url) {\n const runtimeUrl = url || exampleMenuUrl;\n\n try {\n const res = await fetch(addCacheBusting(runtimeUrl), {\n cache: 'no-store',\n signal: AbortSignal.timeout(3000) // fail fast\n });\n\n if (!res.ok) throw new Error('Menu fetch failed');\n return await res.json();\n\n } catch (err) {\n console.warn(\n '[CUL Menu] Remote menu unavailable, using bundled example.',\n err\n );\n return exampleMenu;\n }\n}\n\nfunction addCacheBusting(url) {\n if (url.includes('?')) return url;\n return `${url}?v=${__VERSION__}`;\n}\n\n","/**\n * culmenu.js\n *\n * vertical / collapse-style cul menu renderer.\n * bootstrap 5 dependent.\n */\n\nimport { fetchCULmenu } from './culmenu-fetch.js';\n\n/**\n * initialize all collapse-style menus\n * @param {string} jsonUrl - optional runtime json url\n */\nexport async function makeCULmenu(jsonUrl) {\n const targets = document.querySelectorAll('[data-cul-menu]');\n if (!targets.length) return;\n\n const menuData = await fetchCULmenu(jsonUrl);\n\n targets.forEach((el, index) => {\n const config = getConfig(el, index);\n const menu = buildCollapseMenu(menuData, config);\n el.replaceChildren(menu);\n\n markLoaded(el);\n });\n}\n\n/** mark container as loaded */\nfunction markLoaded(el) {\n el.classList.remove('cul-menu-loading');\n el.classList.add('cul-menu-loaded');\n}\n\n/** read config from data attributes with safe defaults */\nfunction getConfig(el, index) {\n return {\n prefix: el.dataset.menuId || `culmenu-${index}`,\n toggleTag: el.dataset.toggleTag || 'button',\n toggleClasses:\n el.dataset.toggleClasses ||\n 'btn btn-toggle ps-0 d-inline-flex w-100 align-items-center rounded border-0 collapsed',\n listClasses: el.dataset.listClasses || 'list-unstyled w-100',\n itemClasses: el.dataset.itemClasses || 'd-block',\n useCollapse: el.dataset.useCollapse !== 'false'\n };\n}\n\n/** build collapse menu dom */\nfunction buildCollapseMenu(data, config) {\n const ul = document.createElement('ul');\n ul.className = config.listClasses;\n\n for (const section in data) {\n const li = document.createElement('li');\n li.className = 'mb-1';\n\n const collapseId = `${config.prefix}-${slug(section)}-collapse`;\n\n // toggle element\n const toggle = document.createElement(config.toggleTag);\n toggle.className = config.toggleClasses;\n toggle.textContent = section;\n\n if (config.useCollapse) {\n toggle.setAttribute('data-bs-toggle', 'collapse');\n toggle.setAttribute('data-bs-target', `#${collapseId}`);\n toggle.setAttribute('aria-expanded', 'false');\n }\n\n li.appendChild(toggle);\n\n // collapsible content\n const collapseDiv = document.createElement('div');\n collapseDiv.className = config.useCollapse ? 'collapse' : '';\n collapseDiv.id = collapseId;\n\n const subUl = document.createElement('ul');\n subUl.className = 'btn-toggle-nav list-unstyled fw-normal pb-1';\n\n data[section].forEach(item => {\n const li2 = document.createElement('li');\n const a = document.createElement('a');\n a.href = item.href;\n a.textContent = item.value;\n a.className = config.itemClasses;\n li2.appendChild(a);\n subUl.appendChild(li2);\n });\n\n collapseDiv.appendChild(subUl);\n li.appendChild(collapseDiv);\n ul.appendChild(li);\n }\n\n return ul;\n}\n\n/** utility slugify */\nfunction slug(str) {\n return str.toLowerCase().replace(/\\s+/g, '-');\n}\n\n","/**\n * culmenu-navbar.js\n *\n * navbar / dropdown-style cul menu renderer.\n * matches bootstrap 5 navbar + dropdown + mega-menu pattern.\n */\n\nimport { fetchCULmenu } from './culmenu-fetch.js';\n\n/**\n * initialize navbar menus\n * @param {string} selector - container element\n * @param {string} jsonUrl - optional runtime json url\n */\nexport async function makeCULNavbarMenu(selector, jsonUrl) {\n const root = document.querySelector(selector);\n if (!root) return;\n\n const ul = root.querySelector('ul');\n if (!ul) {\n console.warn('CUL navbar menu: <ul> not found');\n return;\n }\n\n const menuData = await fetchCULmenu(jsonUrl);\n const prefix = root.dataset.menuId || 'cul-navbar';\n\n ul.replaceChildren(buildNavbarItems(menuData, prefix));\n markLoaded(root);\n}\n\nfunction markLoaded(el) {\n el.classList.remove('cul-menu-loading');\n el.classList.add('cul-menu-loaded');\n}\n\nfunction buildNavbarItems(data, prefix) {\n const fragment = document.createDocumentFragment();\n\n for (const section in data) {\n const slug = `${prefix}-${slugify(section)}`;\n\n const li = document.createElement('li');\n li.className = 'nav-item dropdown position-static d-inline-flex';\n\n const toggle = document.createElement('a');\n toggle.href = '#';\n toggle.className = 'nav-link dropdown-toggle my-2 me-3';\n toggle.setAttribute('data-bs-toggle', 'dropdown');\n toggle.setAttribute('aria-expanded', 'false');\n toggle.textContent = section;\n\n li.appendChild(toggle);\n\n const dropdown = document.createElement('div');\n dropdown.id = `${slug}-dropdown`;\n dropdown.className =\n 'dropdown-menu w-100 border-top-0 border-left-0 border-right-0 rounded-0 py-0 my-0';\n\n const innerBg = document.createElement('div');\n innerBg.className = 'py-3 bg-secondary text-white';\n\n const container = document.createElement('div');\n container.className = 'container cul-cols';\n\n data[section].forEach(item => {\n const a = document.createElement('a');\n a.href = item.href;\n a.className = 'd-block py-1 text-white dropdown-item bg-secondary';\n a.textContent = item.value;\n container.appendChild(a);\n });\n\n innerBg.appendChild(container);\n dropdown.appendChild(innerBg);\n li.appendChild(dropdown);\n fragment.appendChild(li);\n }\n\n return fragment;\n}\n\nfunction slugify(str) {\n return str.toLowerCase().replace(/\\s+/g, '-');\n}\n\n","/**\n * cul-menu-bundle.js\n *\n * public bundle entry for cul menu.\n * exposed as global `culmenu` (iife) and es module.\n */\n\n// bundled version for external usage via <script>\n\nimport { makeCULmenu } from './culmenu.js';\nimport { makeCULNavbarMenu } from './culmenu-navbar.js';\n\nfunction initCollapse(options) {\n return makeCULmenu(options.url);\n}\n\nfunction initNavbar(options) {\n return makeCULNavbarMenu(options.selector, options.url);\n}\n\nexport { makeCULmenu, initCollapse, initNavbar };\n\n"],"names":["exampleMenuUrl","fetchCULmenu","url","runtimeUrl","res","addCacheBusting","err","exampleMenu","makeCULmenu","jsonUrl","targets","menuData","el","index","config","getConfig","menu","buildCollapseMenu","markLoaded","data","ul","section","li","collapseId","slug","toggle","collapseDiv","subUl","item","li2","a","str","makeCULNavbarMenu","selector","root","prefix","buildNavbarItems","fragment","slugify","dropdown","innerBg","container","initCollapse","options","initNavbar"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ var CULMenu=function(m){"use strict";/*!
2
+ * CUL Menu v5.1.3
3
+ * (c) 2026
4
+ */const A={"Services & Tools":[{href:"https://library.columbia.edu/services.html",value:"Services & Tools"},{href:"https://library.columbia.edu/services/faq.html",value:"FAQ"},{href:"https://library.columbia.edu/using-libraries/alumni.html",value:"For Alumni"},{href:"https://library.columbia.edu/services/faculty.html",value:"For Faculty"},{href:"https://library.columbia.edu/services.html#audience=student",value:"For Students"},{href:"https://library.columbia.edu/using-libraries/visitors.html",value:"For Visitors"}],Libraries:[{href:"https://library.columbia.edu/libraries.html",value:"Libraries & Affiliates"},{href:"https://library.columbia.edu/libraries/avery.html",value:"Avery Architectural & Fine Arts Library"},{href:"https://library.columbia.edu/libraries/burke.html",value:"Burke Library at Union Theological Seminary"},{href:"https://library.columbia.edu/libraries/business.html",value:"Business & Economics Library in Uris"},{href:"https://library.columbia.edu/libraries/business-manhattanville.html",value:"Business Library at Manhattanville"},{href:"https://library.columbia.edu/libraries/butler.html",value:"Butler Library"},{href:"https://library.columbia.edu/libraries/eastasian.html",value:"C.V. Starr East Asian Library"},{href:"https://library.columbia.edu/libraries/music.html",value:"Gabe M. Wiener Music & Arts Library"},{href:"https://library.cumc.columbia.edu/",value:"Health Sciences Library"},{href:"https://library.columbia.edu/libraries/journalism.html",value:"Journalism Library"},{href:"https://library.columbia.edu/libraries/lehman.html",value:"Lehman Social Sciences Library"},{href:"http://www.law.columbia.edu/library/",value:"Li Lu Law Library"},{href:"https://library.columbia.edu/libraries/math.html",value:"Mathematics Library"},{href:"https://library.columbia.edu/libraries/undergraduate.html",value:"Milstein Undergraduate Library"},{href:"https://library.columbia.edu/libraries/rbml.html",value:"Rare Book & Manuscript Library"},{href:"https://library.columbia.edu/libraries/science-engineering.html",value:"Science & Engineering Library"},{href:"https://library.columbia.edu/libraries/social-work.html",value:"Social Work Library"}],Collections:[{href:"https://library.columbia.edu/collections.html",value:"About Our Collections"},{href:"https://academiccommons.columbia.edu/",value:"Academic Commons"},{href:"https://library.columbia.edu/collections/archives-portal.html",value:"Archival Collections"},{href:"https://resolver.library.columbia.edu/clio",value:"CLIO: Columbia Libraries Catalog"},{href:"https://library.columbia.edu/about/policies/collection-development.html",value:"Collection Development"},{href:"https://library.columbia.edu/collections/digital-collections.html",value:"Digital Collections & Exhibitions"},{href:"https://library.columbia.edu/collections/eresources.html",value:"E-Resources"},{href:"https://library.columbia.edu/collections/oral-history-portal.html",value:"Oral History Collections"},{href:"https://resolver.library.columbia.edu/lweb0004",value:"Recommend a Title for Purchase"},{href:"https://library.columbia.edu/about/policies/collection-development/repatriation-return.html",value:"Repatriation"},{href:"https://library.columbia.edu/about/staff/subject-specialists-by-subject.html",value:"Subject Specialists"}],"Using the Libraries":[{href:"https://library.columbia.edu/using-libraries.html",value:"Using the Libraries"},{href:"https://library.columbia.edu/using-libraries/access-privileges.html",value:"Access Privileges"},{href:"https://library.columbia.edu/using-libraries/disability.html",value:"Accessibility"},{href:"https://library.columbia.edu/using-libraries/borrowing.html",value:"Borrow, Request, Renew"},{href:"https://library.columbia.edu/services/reserves.html",value:"Course Reserves"},{href:"https://hours.library.columbia.edu/",value:"Hours"},{href:"https://library.columbia.edu/using-libraries/printing.html",value:"Print, Scan, Digitize"}],"Research & Teaching":[{href:"https://library.columbia.edu/research-teaching.html",value:"Research & Teaching"},{href:"https://copyright.columbia.edu/index.html",value:"Copyright Advisory Services"},{href:"https://library.columbia.edu/research-teaching/getting-started.html",value:"Getting Started with the Libraries"},{href:"https://library.columbia.edu/research-teaching/open-scholarship.html",value:"Open Scholarship Services"},{href:"https://library.columbia.edu/services/research-data-services.html",value:"Research Data Services"},{href:"https://library.columbia.edu/services/subject-guides.html",value:"Subject & Course Guides"},{href:"https://library.columbia.edu/research-teaching/workshops.html",value:"Workshops & Training"}],About:[{href:"https://library.columbia.edu/about.html",value:"About the Libraries"},{href:"https://library.columbia.edu/about/jobs-internships.html",value:"Jobs & Internships"},{href:"https://library.columbia.edu/about/news/alert.html",value:"Library Status Updates"},{href:"https://library.columbia.edu/about/news.html",value:"News"},{href:"https://library.columbia.edu/about/values.html",value:"Our Values & Commitment in Action"},{href:"https://library.columbia.edu/about/policies.html",value:"Policies"},{href:"https://library.columbia.edu/about/staff.html",value:"Staff"},{href:"https://strategicdirections.library.columbia.edu/",value:"Strategic Directions"},{href:"https://library.columbia.edu/about/student_advisory_committee.html",value:"Student Library Advisory Committee"}]},u="data:application/json;base64,ewogICJTZXJ2aWNlcyAmIFRvb2xzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2VydmljZXMgJiBUb29scyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFxLmh0bWwiLAogICAgICAidmFsdWUiOiAiRkFRIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYWx1bW5pLmh0bWwiLAogICAgICAidmFsdWUiOiAiRm9yIEFsdW1uaSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFjdWx0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkZvciBGYWN1bHR5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy5odG1sI2F1ZGllbmNlPXN0dWRlbnQiLAogICAgICAidmFsdWUiOiAiRm9yIFN0dWRlbnRzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvdmlzaXRvcnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJGb3IgVmlzaXRvcnMiCiAgICB9CiAgXSwKICAiTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIkxpYnJhcmllcyAmIEFmZmlsaWF0ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9hdmVyeS5odG1sIiwKICAgICAgInZhbHVlIjogIkF2ZXJ5IEFyY2hpdGVjdHVyYWwgJiBGaW5lIEFydHMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1cmtlLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVya2UgTGlicmFyeSBhdCBVbmlvbiBUaGVvbG9naWNhbCBTZW1pbmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1c2luZXNzLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVzaW5lc3MgJiBFY29ub21pY3MgTGlicmFyeSBpbiBVcmlzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnVzaW5lc3MtbWFuaGF0dGFudmlsbGUuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCdXNpbmVzcyBMaWJyYXJ5IGF0IE1hbmhhdHRhbnZpbGxlIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnV0bGVyLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnV0bGVyIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9lYXN0YXNpYW4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDLlYuIFN0YXJyIEVhc3QgQXNpYW4gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL211c2ljLmh0bWwiLAogICAgICAidmFsdWUiOiAiR2FiZSBNLiBXaWVuZXIgTXVzaWMgJiBBcnRzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY3VtYy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhlYWx0aCBTY2llbmNlcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvam91cm5hbGlzbS5odG1sIiwKICAgICAgInZhbHVlIjogIkpvdXJuYWxpc20gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2xlaG1hbi5odG1sIiwKICAgICAgInZhbHVlIjogIkxlaG1hbiBTb2NpYWwgU2NpZW5jZXMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHA6Ly93d3cubGF3LmNvbHVtYmlhLmVkdS9saWJyYXJ5LyIsCiAgICAgICJ2YWx1ZSI6ICJMaSBMdSBMYXcgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL21hdGguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJNYXRoZW1hdGljcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvdW5kZXJncmFkdWF0ZS5odG1sIiwKICAgICAgInZhbHVlIjogIk1pbHN0ZWluIFVuZGVyZ3JhZHVhdGUgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL3JibWwuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSYXJlIEJvb2sgJiBNYW51c2NyaXB0IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zY2llbmNlLWVuZ2luZWVyaW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2NpZW5jZSAmIEVuZ2luZWVyaW5nIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zb2NpYWwtd29yay5odG1sIiwKICAgICAgInZhbHVlIjogIlNvY2lhbCBXb3JrIExpYnJhcnkiCiAgICB9CiAgXSwKICAiQ29sbGVjdGlvbnMiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCBPdXIgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2FjYWRlbWljY29tbW9ucy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkFjYWRlbWljIENvbW1vbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2FyY2hpdmVzLXBvcnRhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkFyY2hpdmFsIENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9jbGlvIiwKICAgICAgInZhbHVlIjogIkNMSU86IENvbHVtYmlhIExpYnJhcmllcyBDYXRhbG9nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQ29sbGVjdGlvbiBEZXZlbG9wbWVudCIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZGlnaXRhbC1jb2xsZWN0aW9ucy5odG1sIiwKICAgICAgInZhbHVlIjogIkRpZ2l0YWwgQ29sbGVjdGlvbnMgJiBFeGhpYml0aW9ucyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZXJlc291cmNlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkUtUmVzb3VyY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9jb2xsZWN0aW9ucy9vcmFsLWhpc3RvcnktcG9ydGFsLmh0bWwiLAogICAgICAidmFsdWUiOiAiT3JhbCBIaXN0b3J5IENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9sd2ViMDAwNCIsCiAgICAgICJ2YWx1ZSI6ICJSZWNvbW1lbmQgYSBUaXRsZSBmb3IgUHVyY2hhc2UiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzL2NvbGxlY3Rpb24tZGV2ZWxvcG1lbnQvcmVwYXRyaWF0aW9uLXJldHVybi5odG1sIiwKICAgICAgInZhbHVlIjogIlJlcGF0cmlhdGlvbiIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvc3RhZmYvc3ViamVjdC1zcGVjaWFsaXN0cy1ieS1zdWJqZWN0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiU3ViamVjdCBTcGVjaWFsaXN0cyIKICAgIH0KICBdLAogICJVc2luZyB0aGUgTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIlVzaW5nIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9hY2Nlc3MtcHJpdmlsZWdlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2VzcyBQcml2aWxlZ2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvZGlzYWJpbGl0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2Vzc2liaWxpdHkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9ib3Jyb3dpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCb3Jyb3csIFJlcXVlc3QsIFJlbmV3IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlcnZlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkNvdXJzZSBSZXNlcnZlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vaG91cnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhvdXJzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvcHJpbnRpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJQcmludCwgU2NhbiwgRGlnaXRpemUiCiAgICB9CiAgXSwKICAiUmVzZWFyY2ggJiBUZWFjaGluZyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy5odG1sIiwKICAgICAgInZhbHVlIjogIlJlc2VhcmNoICYgVGVhY2hpbmciCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2NvcHlyaWdodC5jb2x1bWJpYS5lZHUvaW5kZXguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3B5cmlnaHQgQWR2aXNvcnkgU2VydmljZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dldHRpbmctc3RhcnRlZC5odG1sIiwKICAgICAgInZhbHVlIjogIkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL29wZW4tc2Nob2xhcnNoaXAuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJPcGVuIFNjaG9sYXJzaGlwIFNlcnZpY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlYXJjaC1kYXRhLXNlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUmVzZWFyY2ggRGF0YSBTZXJ2aWNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvc3ViamVjdC1ndWlkZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJTdWJqZWN0ICYgQ291cnNlIEd1aWRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvcmVzZWFyY2gtdGVhY2hpbmcvd29ya3Nob3BzLmh0bWwiLAogICAgICAidmFsdWUiOiAiV29ya3Nob3BzICYgVHJhaW5pbmciCiAgICB9CiAgXSwKICAiQWJvdXQiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCB0aGUgTGlicmFyaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9qb2JzLWludGVybnNoaXBzLmh0bWwiLAogICAgICAidmFsdWUiOiAiSm9icyAmIEludGVybnNoaXBzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9uZXdzL2FsZXJ0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiTGlicmFyeSBTdGF0dXMgVXBkYXRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvbmV3cy5odG1sIiwKICAgICAgInZhbHVlIjogIk5ld3MiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3ZhbHVlcy5odG1sIiwKICAgICAgInZhbHVlIjogIk91ciBWYWx1ZXMgJiBDb21taXRtZW50IGluIEFjdGlvbiIKICAgIH0sCiAgICAgICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUG9saWNpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3N0YWZmLmh0bWwiLAogICAgICAidmFsdWUiOiAiU3RhZmYiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL3N0cmF0ZWdpY2RpcmVjdGlvbnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIlN0cmF0ZWdpYyBEaXJlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9zdHVkZW50X2Fkdmlzb3J5X2NvbW1pdHRlZS5odG1sIiwKICAgICAgInZhbHVlIjogIlN0dWRlbnQgTGlicmFyeSBBZHZpc29yeSBDb21taXR0ZWUiCiAgICB9CiAgXQp9Cg==";async function b(i){const l=i||u;try{const e=await fetch(d(l),{cache:"no-store",signal:AbortSignal.timeout(3e3)});if(!e.ok)throw new Error("Menu fetch failed");return await e.json()}catch(e){return console.warn("[CUL Menu] Remote menu unavailable, using bundled example.",e),A}}function d(i){return i.includes("?")?i:`${i}?v=5.1.3`}async function n(i){const l=document.querySelectorAll("[data-cul-menu]");if(!l.length)return;const e=await b(i);l.forEach((I,s)=>{const t=y(I,s),a=W(e,t);I.replaceChildren(a),h(I)})}function h(i){i.classList.remove("cul-menu-loading"),i.classList.add("cul-menu-loaded")}function y(i,l){return{prefix:i.dataset.menuId||`culmenu-${l}`,toggleTag:i.dataset.toggleTag||"button",toggleClasses:i.dataset.toggleClasses||"btn btn-toggle ps-0 d-inline-flex w-100 align-items-center rounded border-0 collapsed",listClasses:i.dataset.listClasses||"list-unstyled w-100",itemClasses:i.dataset.itemClasses||"d-block",useCollapse:i.dataset.useCollapse!=="false"}}function W(i,l){const e=document.createElement("ul");e.className=l.listClasses;for(const I in i){const s=document.createElement("li");s.className="mb-1";const t=`${l.prefix}-${J(I)}-collapse`,a=document.createElement(l.toggleTag);a.className=l.toggleClasses,a.textContent=I,l.useCollapse&&(a.setAttribute("data-bs-toggle","collapse"),a.setAttribute("data-bs-target",`#${t}`),a.setAttribute("aria-expanded","false")),s.appendChild(a);const g=document.createElement("div");g.className=l.useCollapse?"collapse":"",g.id=t;const o=document.createElement("ul");o.className="btn-toggle-nav list-unstyled fw-normal pb-1",i[I].forEach(c=>{const r=document.createElement("li"),C=document.createElement("a");C.href=c.href,C.textContent=c.value,C.className=l.itemClasses,r.appendChild(C),o.appendChild(r)}),g.appendChild(o),s.appendChild(g),e.appendChild(s)}return e}function J(i){return i.toLowerCase().replace(/\s+/g,"-")}async function p(i,l){const e=document.querySelector(i);if(!e)return;const I=e.querySelector("ul");if(!I){console.warn("CUL navbar menu: <ul> not found");return}const s=await b(l),t=e.dataset.menuId||"cul-navbar";I.replaceChildren(Y(s,t)),v(e)}function v(i){i.classList.remove("cul-menu-loading"),i.classList.add("cul-menu-loaded")}function Y(i,l){const e=document.createDocumentFragment();for(const I in i){const s=`${l}-${H(I)}`,t=document.createElement("li");t.className="nav-item dropdown position-static d-inline-flex";const a=document.createElement("a");a.href="#",a.className="nav-link dropdown-toggle my-2 me-3",a.setAttribute("data-bs-toggle","dropdown"),a.setAttribute("aria-expanded","false"),a.textContent=I,t.appendChild(a);const g=document.createElement("div");g.id=`${s}-dropdown`,g.className="dropdown-menu w-100 border-top-0 border-left-0 border-right-0 rounded-0 py-0 my-0";const o=document.createElement("div");o.className="py-3 bg-secondary text-white";const c=document.createElement("div");c.className="container cul-cols",i[I].forEach(r=>{const C=document.createElement("a");C.href=r.href,C.className="d-block py-1 text-white dropdown-item bg-secondary",C.textContent=r.value,c.appendChild(C)}),o.appendChild(c),g.appendChild(o),t.appendChild(g),e.appendChild(t)}return e}function H(i){return i.toLowerCase().replace(/\s+/g,"-")}function Z(i){return n(i.url)}function L(i){return p(i.selector,i.url)}return m.initCollapse=Z,m.initNavbar=L,m.makeCULmenu=n,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"}),m}({});
5
+ //# sourceMappingURL=cul-menu.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cul-menu.bundle.js","sources":["../../src/js/cul-main-menu.json?url","../../src/js/culmenu-fetch.js","../../src/js/culmenu.js","../../src/js/culmenu-navbar.js","../../src/js/cul-menu-bundle.js"],"sourcesContent":["export default \"data:application/json;base64,ewogICJTZXJ2aWNlcyAmIFRvb2xzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2VydmljZXMgJiBUb29scyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFxLmh0bWwiLAogICAgICAidmFsdWUiOiAiRkFRIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYWx1bW5pLmh0bWwiLAogICAgICAidmFsdWUiOiAiRm9yIEFsdW1uaSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvZmFjdWx0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkZvciBGYWN1bHR5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy5odG1sI2F1ZGllbmNlPXN0dWRlbnQiLAogICAgICAidmFsdWUiOiAiRm9yIFN0dWRlbnRzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvdmlzaXRvcnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJGb3IgVmlzaXRvcnMiCiAgICB9CiAgXSwKICAiTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIkxpYnJhcmllcyAmIEFmZmlsaWF0ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9hdmVyeS5odG1sIiwKICAgICAgInZhbHVlIjogIkF2ZXJ5IEFyY2hpdGVjdHVyYWwgJiBGaW5lIEFydHMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1cmtlLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVya2UgTGlicmFyeSBhdCBVbmlvbiBUaGVvbG9naWNhbCBTZW1pbmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1c2luZXNzLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVzaW5lc3MgJiBFY29ub21pY3MgTGlicmFyeSBpbiBVcmlzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnVzaW5lc3MtbWFuaGF0dGFudmlsbGUuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCdXNpbmVzcyBMaWJyYXJ5IGF0IE1hbmhhdHRhbnZpbGxlIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYnV0bGVyLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnV0bGVyIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9lYXN0YXNpYW4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDLlYuIFN0YXJyIEVhc3QgQXNpYW4gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL211c2ljLmh0bWwiLAogICAgICAidmFsdWUiOiAiR2FiZSBNLiBXaWVuZXIgTXVzaWMgJiBBcnRzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY3VtYy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhlYWx0aCBTY2llbmNlcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvam91cm5hbGlzbS5odG1sIiwKICAgICAgInZhbHVlIjogIkpvdXJuYWxpc20gTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2xlaG1hbi5odG1sIiwKICAgICAgInZhbHVlIjogIkxlaG1hbiBTb2NpYWwgU2NpZW5jZXMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHA6Ly93d3cubGF3LmNvbHVtYmlhLmVkdS9saWJyYXJ5LyIsCiAgICAgICJ2YWx1ZSI6ICJMaSBMdSBMYXcgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL21hdGguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJNYXRoZW1hdGljcyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvdW5kZXJncmFkdWF0ZS5odG1sIiwKICAgICAgInZhbHVlIjogIk1pbHN0ZWluIFVuZGVyZ3JhZHVhdGUgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL3JibWwuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSYXJlIEJvb2sgJiBNYW51c2NyaXB0IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zY2llbmNlLWVuZ2luZWVyaW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2NpZW5jZSAmIEVuZ2luZWVyaW5nIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zb2NpYWwtd29yay5odG1sIiwKICAgICAgInZhbHVlIjogIlNvY2lhbCBXb3JrIExpYnJhcnkiCiAgICB9CiAgXSwKICAiQ29sbGVjdGlvbnMiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCBPdXIgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2FjYWRlbWljY29tbW9ucy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkFjYWRlbWljIENvbW1vbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2FyY2hpdmVzLXBvcnRhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkFyY2hpdmFsIENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9jbGlvIiwKICAgICAgInZhbHVlIjogIkNMSU86IENvbHVtYmlhIExpYnJhcmllcyBDYXRhbG9nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQ29sbGVjdGlvbiBEZXZlbG9wbWVudCIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZGlnaXRhbC1jb2xsZWN0aW9ucy5odG1sIiwKICAgICAgInZhbHVlIjogIkRpZ2l0YWwgQ29sbGVjdGlvbnMgJiBFeGhpYml0aW9ucyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMvZXJlc291cmNlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkUtUmVzb3VyY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9jb2xsZWN0aW9ucy9vcmFsLWhpc3RvcnktcG9ydGFsLmh0bWwiLAogICAgICAidmFsdWUiOiAiT3JhbCBIaXN0b3J5IENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9sd2ViMDAwNCIsCiAgICAgICJ2YWx1ZSI6ICJSZWNvbW1lbmQgYSBUaXRsZSBmb3IgUHVyY2hhc2UiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzL2NvbGxlY3Rpb24tZGV2ZWxvcG1lbnQvcmVwYXRyaWF0aW9uLXJldHVybi5odG1sIiwKICAgICAgInZhbHVlIjogIlJlcGF0cmlhdGlvbiIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvc3RhZmYvc3ViamVjdC1zcGVjaWFsaXN0cy1ieS1zdWJqZWN0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiU3ViamVjdCBTcGVjaWFsaXN0cyIKICAgIH0KICBdLAogICJVc2luZyB0aGUgTGlicmFyaWVzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy5odG1sIiwKICAgICAgInZhbHVlIjogIlVzaW5nIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9hY2Nlc3MtcHJpdmlsZWdlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2VzcyBQcml2aWxlZ2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvZGlzYWJpbGl0eS5odG1sIiwKICAgICAgInZhbHVlIjogIkFjY2Vzc2liaWxpdHkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3VzaW5nLWxpYnJhcmllcy9ib3Jyb3dpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJCb3Jyb3csIFJlcXVlc3QsIFJlbmV3IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlcnZlcy5odG1sIiwKICAgICAgInZhbHVlIjogIkNvdXJzZSBSZXNlcnZlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vaG91cnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkhvdXJzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvcHJpbnRpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJQcmludCwgU2NhbiwgRGlnaXRpemUiCiAgICB9CiAgXSwKICAiUmVzZWFyY2ggJiBUZWFjaGluZyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy5odG1sIiwKICAgICAgInZhbHVlIjogIlJlc2VhcmNoICYgVGVhY2hpbmciCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2NvcHlyaWdodC5jb2x1bWJpYS5lZHUvaW5kZXguaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3B5cmlnaHQgQWR2aXNvcnkgU2VydmljZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dldHRpbmctc3RhcnRlZC5odG1sIiwKICAgICAgInZhbHVlIjogIkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL29wZW4tc2Nob2xhcnNoaXAuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJPcGVuIFNjaG9sYXJzaGlwIFNlcnZpY2VzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9zZXJ2aWNlcy9yZXNlYXJjaC1kYXRhLXNlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUmVzZWFyY2ggRGF0YSBTZXJ2aWNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvc3ViamVjdC1ndWlkZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJTdWJqZWN0ICYgQ291cnNlIEd1aWRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvcmVzZWFyY2gtdGVhY2hpbmcvd29ya3Nob3BzLmh0bWwiLAogICAgICAidmFsdWUiOiAiV29ya3Nob3BzICYgVHJhaW5pbmciCiAgICB9CiAgXSwKICAiQWJvdXQiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCB0aGUgTGlicmFyaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9qb2JzLWludGVybnNoaXBzLmh0bWwiLAogICAgICAidmFsdWUiOiAiSm9icyAmIEludGVybnNoaXBzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9uZXdzL2FsZXJ0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiTGlicmFyeSBTdGF0dXMgVXBkYXRlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvbmV3cy5odG1sIiwKICAgICAgInZhbHVlIjogIk5ld3MiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3ZhbHVlcy5odG1sIiwKICAgICAgInZhbHVlIjogIk91ciBWYWx1ZXMgJiBDb21taXRtZW50IGluIEFjdGlvbiIKICAgIH0sCiAgICAgICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3BvbGljaWVzLmh0bWwiLAogICAgICAidmFsdWUiOiAiUG9saWNpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3N0YWZmLmh0bWwiLAogICAgICAidmFsdWUiOiAiU3RhZmYiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL3N0cmF0ZWdpY2RpcmVjdGlvbnMubGlicmFyeS5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIlN0cmF0ZWdpYyBEaXJlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9zdHVkZW50X2Fkdmlzb3J5X2NvbW1pdHRlZS5odG1sIiwKICAgICAgInZhbHVlIjogIlN0dWRlbnQgTGlicmFyeSBBZHZpc29yeSBDb21taXR0ZWUiCiAgICB9CiAgXQp9Cg==\"","// handles fetching menu json with fallback and cache-busting\n\n// culmenu-fetch.js\nimport exampleMenu from './cul-main-menu.json';\nimport exampleMenuUrl from './cul-main-menu.json?url';\n\nexport async function fetchCULmenu(url) {\n const runtimeUrl = url || exampleMenuUrl;\n\n try {\n const res = await fetch(addCacheBusting(runtimeUrl), {\n cache: 'no-store',\n signal: AbortSignal.timeout(3000) // fail fast\n });\n\n if (!res.ok) throw new Error('Menu fetch failed');\n return await res.json();\n\n } catch (err) {\n console.warn(\n '[CUL Menu] Remote menu unavailable, using bundled example.',\n err\n );\n return exampleMenu;\n }\n}\n\nfunction addCacheBusting(url) {\n if (url.includes('?')) return url;\n return `${url}?v=${__VERSION__}`;\n}\n\n","/**\n * culmenu.js\n *\n * vertical / collapse-style cul menu renderer.\n * bootstrap 5 dependent.\n */\n\nimport { fetchCULmenu } from './culmenu-fetch.js';\n\n/**\n * initialize all collapse-style menus\n * @param {string} jsonUrl - optional runtime json url\n */\nexport async function makeCULmenu(jsonUrl) {\n const targets = document.querySelectorAll('[data-cul-menu]');\n if (!targets.length) return;\n\n const menuData = await fetchCULmenu(jsonUrl);\n\n targets.forEach((el, index) => {\n const config = getConfig(el, index);\n const menu = buildCollapseMenu(menuData, config);\n el.replaceChildren(menu);\n\n markLoaded(el);\n });\n}\n\n/** mark container as loaded */\nfunction markLoaded(el) {\n el.classList.remove('cul-menu-loading');\n el.classList.add('cul-menu-loaded');\n}\n\n/** read config from data attributes with safe defaults */\nfunction getConfig(el, index) {\n return {\n prefix: el.dataset.menuId || `culmenu-${index}`,\n toggleTag: el.dataset.toggleTag || 'button',\n toggleClasses:\n el.dataset.toggleClasses ||\n 'btn btn-toggle ps-0 d-inline-flex w-100 align-items-center rounded border-0 collapsed',\n listClasses: el.dataset.listClasses || 'list-unstyled w-100',\n itemClasses: el.dataset.itemClasses || 'd-block',\n useCollapse: el.dataset.useCollapse !== 'false'\n };\n}\n\n/** build collapse menu dom */\nfunction buildCollapseMenu(data, config) {\n const ul = document.createElement('ul');\n ul.className = config.listClasses;\n\n for (const section in data) {\n const li = document.createElement('li');\n li.className = 'mb-1';\n\n const collapseId = `${config.prefix}-${slug(section)}-collapse`;\n\n // toggle element\n const toggle = document.createElement(config.toggleTag);\n toggle.className = config.toggleClasses;\n toggle.textContent = section;\n\n if (config.useCollapse) {\n toggle.setAttribute('data-bs-toggle', 'collapse');\n toggle.setAttribute('data-bs-target', `#${collapseId}`);\n toggle.setAttribute('aria-expanded', 'false');\n }\n\n li.appendChild(toggle);\n\n // collapsible content\n const collapseDiv = document.createElement('div');\n collapseDiv.className = config.useCollapse ? 'collapse' : '';\n collapseDiv.id = collapseId;\n\n const subUl = document.createElement('ul');\n subUl.className = 'btn-toggle-nav list-unstyled fw-normal pb-1';\n\n data[section].forEach(item => {\n const li2 = document.createElement('li');\n const a = document.createElement('a');\n a.href = item.href;\n a.textContent = item.value;\n a.className = config.itemClasses;\n li2.appendChild(a);\n subUl.appendChild(li2);\n });\n\n collapseDiv.appendChild(subUl);\n li.appendChild(collapseDiv);\n ul.appendChild(li);\n }\n\n return ul;\n}\n\n/** utility slugify */\nfunction slug(str) {\n return str.toLowerCase().replace(/\\s+/g, '-');\n}\n\n","/**\n * culmenu-navbar.js\n *\n * navbar / dropdown-style cul menu renderer.\n * matches bootstrap 5 navbar + dropdown + mega-menu pattern.\n */\n\nimport { fetchCULmenu } from './culmenu-fetch.js';\n\n/**\n * initialize navbar menus\n * @param {string} selector - container element\n * @param {string} jsonUrl - optional runtime json url\n */\nexport async function makeCULNavbarMenu(selector, jsonUrl) {\n const root = document.querySelector(selector);\n if (!root) return;\n\n const ul = root.querySelector('ul');\n if (!ul) {\n console.warn('CUL navbar menu: <ul> not found');\n return;\n }\n\n const menuData = await fetchCULmenu(jsonUrl);\n const prefix = root.dataset.menuId || 'cul-navbar';\n\n ul.replaceChildren(buildNavbarItems(menuData, prefix));\n markLoaded(root);\n}\n\nfunction markLoaded(el) {\n el.classList.remove('cul-menu-loading');\n el.classList.add('cul-menu-loaded');\n}\n\nfunction buildNavbarItems(data, prefix) {\n const fragment = document.createDocumentFragment();\n\n for (const section in data) {\n const slug = `${prefix}-${slugify(section)}`;\n\n const li = document.createElement('li');\n li.className = 'nav-item dropdown position-static d-inline-flex';\n\n const toggle = document.createElement('a');\n toggle.href = '#';\n toggle.className = 'nav-link dropdown-toggle my-2 me-3';\n toggle.setAttribute('data-bs-toggle', 'dropdown');\n toggle.setAttribute('aria-expanded', 'false');\n toggle.textContent = section;\n\n li.appendChild(toggle);\n\n const dropdown = document.createElement('div');\n dropdown.id = `${slug}-dropdown`;\n dropdown.className =\n 'dropdown-menu w-100 border-top-0 border-left-0 border-right-0 rounded-0 py-0 my-0';\n\n const innerBg = document.createElement('div');\n innerBg.className = 'py-3 bg-secondary text-white';\n\n const container = document.createElement('div');\n container.className = 'container cul-cols';\n\n data[section].forEach(item => {\n const a = document.createElement('a');\n a.href = item.href;\n a.className = 'd-block py-1 text-white dropdown-item bg-secondary';\n a.textContent = item.value;\n container.appendChild(a);\n });\n\n innerBg.appendChild(container);\n dropdown.appendChild(innerBg);\n li.appendChild(dropdown);\n fragment.appendChild(li);\n }\n\n return fragment;\n}\n\nfunction slugify(str) {\n return str.toLowerCase().replace(/\\s+/g, '-');\n}\n\n","/**\n * cul-menu-bundle.js\n *\n * public bundle entry for cul menu.\n * exposed as global `culmenu` (iife) and es module.\n */\n\n// bundled version for external usage via <script>\n\nimport { makeCULmenu } from './culmenu.js';\nimport { makeCULNavbarMenu } from './culmenu-navbar.js';\n\nfunction initCollapse(options) {\n return makeCULmenu(options.url);\n}\n\nfunction initNavbar(options) {\n return makeCULNavbarMenu(options.selector, options.url);\n}\n\nexport { makeCULmenu, initCollapse, initNavbar };\n\n"],"names":["exampleMenuUrl","fetchCULmenu","url","runtimeUrl","res","addCacheBusting","err","exampleMenu","makeCULmenu","jsonUrl","targets","menuData","el","index","config","getConfig","menu","buildCollapseMenu","markLoaded","data","ul","section","li","collapseId","slug","toggle","collapseDiv","subUl","item","li2","a","str","makeCULNavbarMenu","selector","root","prefix","buildNavbarItems","fragment","slugify","dropdown","innerBg","container","initCollapse","options","initNavbar"],"mappings":"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"}