@columbia-libraries/cul-toolkit 5.1.3 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- var CULMenu=function(m){"use strict";/*!
2
- * CUL Menu v5.1.3
1
+ var CULMenu=(function(r){"use strict";/*!
2
+ * CUL Menu v5.3.0
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}({});
4
+ */const u={"Services & Tools":[{href:"https://library.columbia.edu/services.html",value:"Services & Tools"},{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/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://dlc.library.columbia.edu",value:"Digital Collections"},{href:"https://library.columbia.edu/collections/eresources.html",value:"E-Resources"},{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://library.columbia.edu/research-teaching/copyright.html",value:"Copyright Information"},{href:"https://library.columbia.edu/research-teaching/getting-started.html",value:"Getting Started with the Libraries"},{href:"https://library.columbia.edu/research-teaching/global.html",value:"Global Studies"},{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"}]},A="data:application/json;base64,ewogICJTZXJ2aWNlcyAmIFRvb2xzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2VydmljZXMgJiBUb29scyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL2FsdW1uaS5odG1sIiwKICAgICAgInZhbHVlIjogIkZvciBBbHVtbmkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzL2ZhY3VsdHkuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJGb3IgRmFjdWx0eSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMuaHRtbCNhdWRpZW5jZT1zdHVkZW50IiwKICAgICAgInZhbHVlIjogIkZvciBTdHVkZW50cyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL3Zpc2l0b3JzLmh0bWwiLAogICAgICAidmFsdWUiOiAiRm9yIFZpc2l0b3JzIgogICAgfQogIF0sCiAgIkxpYnJhcmllcyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJMaWJyYXJpZXMgJiBBZmZpbGlhdGVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYXZlcnkuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBdmVyeSBBcmNoaXRlY3R1cmFsICYgRmluZSBBcnRzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9idXJrZS5odG1sIiwKICAgICAgInZhbHVlIjogIkJ1cmtlIExpYnJhcnkgYXQgVW5pb24gVGhlb2xvZ2ljYWwgU2VtaW5hcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9idXNpbmVzcy5odG1sIiwKICAgICAgInZhbHVlIjogIkJ1c2luZXNzICYgRWNvbm9taWNzIExpYnJhcnkgaW4gVXJpcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1c2luZXNzLW1hbmhhdHRhbnZpbGxlLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVzaW5lc3MgTGlicmFyeSBhdCBNYW5oYXR0YW52aWxsZSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1dGxlci5odG1sIiwKICAgICAgInZhbHVlIjogIkJ1dGxlciBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvZWFzdGFzaWFuLmh0bWwiLAogICAgICAidmFsdWUiOiAiQy5WLiBTdGFyciBFYXN0IEFzaWFuIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9tdXNpYy5odG1sIiwKICAgICAgInZhbHVlIjogIkdhYmUgTS4gV2llbmVyIE11c2ljICYgQXJ0cyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmN1bWMuY29sdW1iaWEuZWR1LyIsCiAgICAgICJ2YWx1ZSI6ICJIZWFsdGggU2NpZW5jZXMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2pvdXJuYWxpc20uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJKb3VybmFsaXNtIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9sZWhtYW4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJMZWhtYW4gU29jaWFsIFNjaWVuY2VzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwOi8vd3d3Lmxhdy5jb2x1bWJpYS5lZHUvbGlicmFyeS8iLAogICAgICAidmFsdWUiOiAiTGkgTHUgTGF3IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9tYXRoLmh0bWwiLAogICAgICAidmFsdWUiOiAiTWF0aGVtYXRpY3MgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL3JibWwuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSYXJlIEJvb2sgJiBNYW51c2NyaXB0IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zY2llbmNlLWVuZ2luZWVyaW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2NpZW5jZSAmIEVuZ2luZWVyaW5nIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zb2NpYWwtd29yay5odG1sIiwKICAgICAgInZhbHVlIjogIlNvY2lhbCBXb3JrIExpYnJhcnkiCiAgICB9CiAgXSwKICAiQ29sbGVjdGlvbnMiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCBPdXIgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2FjYWRlbWljY29tbW9ucy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkFjYWRlbWljIENvbW1vbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2FyY2hpdmVzLXBvcnRhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkFyY2hpdmFsIENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9jbGlvIiwKICAgICAgInZhbHVlIjogIkNMSU86IENvbHVtYmlhIExpYnJhcmllcyBDYXRhbG9nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQ29sbGVjdGlvbiBEZXZlbG9wbWVudCIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vZGxjLmxpYnJhcnkuY29sdW1iaWEuZWR1IiwKICAgICAgInZhbHVlIjogIkRpZ2l0YWwgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2VyZXNvdXJjZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJFLVJlc291cmNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vcmVzb2x2ZXIubGlicmFyeS5jb2x1bWJpYS5lZHUvbHdlYjAwMDQiLAogICAgICAidmFsdWUiOiAiUmVjb21tZW5kIGEgVGl0bGUgZm9yIFB1cmNoYXNlIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50L3JlcGF0cmlhdGlvbi1yZXR1cm4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSZXBhdHJpYXRpb24iCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3N0YWZmL3N1YmplY3Qtc3BlY2lhbGlzdHMtYnktc3ViamVjdC5odG1sIiwKICAgICAgInZhbHVlIjogIlN1YmplY3QgU3BlY2lhbGlzdHMiCiAgICB9CiAgXSwKICAiVXNpbmcgdGhlIExpYnJhcmllcyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJVc2luZyB0aGUgTGlicmFyaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYWNjZXNzLXByaXZpbGVnZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBY2Nlc3MgUHJpdmlsZWdlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL2Rpc2FiaWxpdHkuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBY2Nlc3NpYmlsaXR5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYm9ycm93aW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiQm9ycm93LCBSZXF1ZXN0LCBSZW5ldyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvcmVzZXJ2ZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3Vyc2UgUmVzZXJ2ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2hvdXJzLmxpYnJhcnkuY29sdW1iaWEuZWR1LyIsCiAgICAgICJ2YWx1ZSI6ICJIb3VycyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL3ByaW50aW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiUHJpbnQsIFNjYW4sIERpZ2l0aXplIgogICAgfQogIF0sCiAgIlJlc2VhcmNoICYgVGVhY2hpbmciOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvcmVzZWFyY2gtdGVhY2hpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSZXNlYXJjaCAmIFRlYWNoaW5nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy9jb3B5cmlnaHQuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3B5cmlnaHQgSW5mb3JtYXRpb24iCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dldHRpbmctc3RhcnRlZC5odG1sIiwKICAgICAgInZhbHVlIjogIkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dsb2JhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkdsb2JhbCBTdHVkaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy9vcGVuLXNjaG9sYXJzaGlwLmh0bWwiLAogICAgICAidmFsdWUiOiAiT3BlbiBTY2hvbGFyc2hpcCBTZXJ2aWNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvcmVzZWFyY2gtZGF0YS1zZXJ2aWNlcy5odG1sIiwKICAgICAgInZhbHVlIjogIlJlc2VhcmNoIERhdGEgU2VydmljZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzL3N1YmplY3QtZ3VpZGVzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU3ViamVjdCAmIENvdXJzZSBHdWlkZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL3dvcmtzaG9wcy5odG1sIiwKICAgICAgInZhbHVlIjogIldvcmtzaG9wcyAmIFRyYWluaW5nIgogICAgfQogIF0sCiAgIkFib3V0IjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQWJvdXQgdGhlIExpYnJhcmllcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvam9icy1pbnRlcm5zaGlwcy5odG1sIiwKICAgICAgInZhbHVlIjogIkpvYnMgJiBJbnRlcm5zaGlwcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvbmV3cy9hbGVydC5odG1sIiwKICAgICAgInZhbHVlIjogIkxpYnJhcnkgU3RhdHVzIFVwZGF0ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L25ld3MuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJOZXdzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC92YWx1ZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJPdXIgVmFsdWVzICYgQ29tbWl0bWVudCBpbiBBY3Rpb24iCiAgICB9LAogICAgICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy5odG1sIiwKICAgICAgInZhbHVlIjogIlBvbGljaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9zdGFmZi5odG1sIiwKICAgICAgInZhbHVlIjogIlN0YWZmIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9zdHJhdGVnaWNkaXJlY3Rpb25zLmxpYnJhcnkuY29sdW1iaWEuZWR1LyIsCiAgICAgICJ2YWx1ZSI6ICJTdHJhdGVnaWMgRGlyZWN0aW9ucyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvc3R1ZGVudF9hZHZpc29yeV9jb21taXR0ZWUuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJTdHVkZW50IExpYnJhcnkgQWR2aXNvcnkgQ29tbWl0dGVlIgogICAgfQogIF0KfQo=";async function b(i){const e=i||A;try{const l=await fetch(d(e),{cache:"no-store",signal:AbortSignal.timeout(3e3)});if(!l.ok)throw new Error("Menu fetch failed");return await l.json()}catch(l){return console.warn("[CUL Menu] Remote menu unavailable, using bundled example.",l),u}}function d(i){return i.includes("?")?i:`${i}?v=5.3.0`}async function n(i){const e=document.querySelectorAll("[data-cul-menu]");if(!e.length)return;const l=await b(i);e.forEach((a,g)=>{const t=W(a,g),I=y(l,t);a.replaceChildren(I),h(a)})}function h(i){i.classList.remove("cul-menu-loading"),i.classList.add("cul-menu-loaded")}function W(i,e){return{prefix:i.dataset.menuId||`culmenu-${e}`,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 y(i,e){const l=document.createElement("ul");l.className=e.listClasses;for(const a in i){const g=document.createElement("li");g.className="mb-1";const t=`${e.prefix}-${p(a)}-collapse`,I=document.createElement(e.toggleTag);I.className=e.toggleClasses,I.textContent=a,e.useCollapse&&(I.setAttribute("data-bs-toggle","collapse"),I.setAttribute("data-bs-target",`#${t}`),I.setAttribute("aria-expanded","false")),g.appendChild(I);const C=document.createElement("div");C.className=e.useCollapse?"collapse":"",C.id=t;const c=document.createElement("ul");c.className="btn-toggle-nav list-unstyled fw-normal pb-1",i[a].forEach(o=>{const m=document.createElement("li"),s=document.createElement("a");s.href=o.href,s.textContent=o.value,s.className=e.itemClasses,m.appendChild(s),c.appendChild(m)}),C.appendChild(c),g.appendChild(C),l.appendChild(g)}return l}function p(i){return i.toLowerCase().replace(/\s+/g,"-")}async function J(i,e){const l=document.querySelector(i);if(!l)return;const a=l.querySelector("ul");if(!a){console.warn("CUL navbar menu: <ul> not found");return}const g=await b(e),t=l.dataset.menuId||"cul-navbar";a.replaceChildren(Z(g,t)),Y(l)}function Y(i){i.classList.remove("cul-menu-loading"),i.classList.add("cul-menu-loaded")}function Z(i,e){const l=document.createDocumentFragment();for(const a in i){const g=`${e}-${v(a)}`,t=document.createElement("li");t.className="nav-item dropdown position-static d-inline-flex";const I=document.createElement("a");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);const C=document.createElement("div");C.id=`${g}-dropdown`,C.className="dropdown-menu w-100 border-top-0 border-left-0 border-right-0 rounded-0 py-0 my-0";const c=document.createElement("div");c.className="py-3 bg-secondary text-white";const o=document.createElement("div");o.className="container cul-cols",i[a].forEach(m=>{const s=document.createElement("a");s.href=m.href,s.className="d-block py-1 text-white dropdown-item bg-secondary",s.textContent=m.value,o.appendChild(s)}),c.appendChild(o),C.appendChild(c),t.appendChild(C),l.appendChild(t)}return l}function v(i){return i.toLowerCase().replace(/\s+/g,"-")}function H(i){return n(i.url)}function L(i){return J(i.selector,i.url)}return r.initCollapse=H,r.initNavbar=L,r.makeCULmenu=n,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),r})({});
5
5
  //# sourceMappingURL=cul-menu.bundle.js.map
@@ -1 +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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"}
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,ewogICJTZXJ2aWNlcyAmIFRvb2xzIjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2VydmljZXMgJiBUb29scyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL2FsdW1uaS5odG1sIiwKICAgICAgInZhbHVlIjogIkZvciBBbHVtbmkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzL2ZhY3VsdHkuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJGb3IgRmFjdWx0eSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMuaHRtbCNhdWRpZW5jZT1zdHVkZW50IiwKICAgICAgInZhbHVlIjogIkZvciBTdHVkZW50cyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL3Zpc2l0b3JzLmh0bWwiLAogICAgICAidmFsdWUiOiAiRm9yIFZpc2l0b3JzIgogICAgfQogIF0sCiAgIkxpYnJhcmllcyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJMaWJyYXJpZXMgJiBBZmZpbGlhdGVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvYXZlcnkuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBdmVyeSBBcmNoaXRlY3R1cmFsICYgRmluZSBBcnRzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9idXJrZS5odG1sIiwKICAgICAgInZhbHVlIjogIkJ1cmtlIExpYnJhcnkgYXQgVW5pb24gVGhlb2xvZ2ljYWwgU2VtaW5hcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9idXNpbmVzcy5odG1sIiwKICAgICAgInZhbHVlIjogIkJ1c2luZXNzICYgRWNvbm9taWNzIExpYnJhcnkgaW4gVXJpcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1c2luZXNzLW1hbmhhdHRhbnZpbGxlLmh0bWwiLAogICAgICAidmFsdWUiOiAiQnVzaW5lc3MgTGlicmFyeSBhdCBNYW5oYXR0YW52aWxsZSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2J1dGxlci5odG1sIiwKICAgICAgInZhbHVlIjogIkJ1dGxlciBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9saWJyYXJpZXMvZWFzdGFzaWFuLmh0bWwiLAogICAgICAidmFsdWUiOiAiQy5WLiBTdGFyciBFYXN0IEFzaWFuIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9tdXNpYy5odG1sIiwKICAgICAgInZhbHVlIjogIkdhYmUgTS4gV2llbmVyIE11c2ljICYgQXJ0cyBMaWJyYXJ5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmN1bWMuY29sdW1iaWEuZWR1LyIsCiAgICAgICJ2YWx1ZSI6ICJIZWFsdGggU2NpZW5jZXMgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL2pvdXJuYWxpc20uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJKb3VybmFsaXNtIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9sZWhtYW4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJMZWhtYW4gU29jaWFsIFNjaWVuY2VzIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwOi8vd3d3Lmxhdy5jb2x1bWJpYS5lZHUvbGlicmFyeS8iLAogICAgICAidmFsdWUiOiAiTGkgTHUgTGF3IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9tYXRoLmh0bWwiLAogICAgICAidmFsdWUiOiAiTWF0aGVtYXRpY3MgTGlicmFyeSIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvbGlicmFyaWVzL3JibWwuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSYXJlIEJvb2sgJiBNYW51c2NyaXB0IExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zY2llbmNlLWVuZ2luZWVyaW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiU2NpZW5jZSAmIEVuZ2luZWVyaW5nIExpYnJhcnkiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2xpYnJhcmllcy9zb2NpYWwtd29yay5odG1sIiwKICAgICAgInZhbHVlIjogIlNvY2lhbCBXb3JrIExpYnJhcnkiCiAgICB9CiAgXSwKICAiQ29sbGVjdGlvbnMiOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvY29sbGVjdGlvbnMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBYm91dCBPdXIgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2FjYWRlbWljY29tbW9ucy5jb2x1bWJpYS5lZHUvIiwKICAgICAgInZhbHVlIjogIkFjYWRlbWljIENvbW1vbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2FyY2hpdmVzLXBvcnRhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkFyY2hpdmFsIENvbGxlY3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9yZXNvbHZlci5saWJyYXJ5LmNvbHVtYmlhLmVkdS9jbGlvIiwKICAgICAgInZhbHVlIjogIkNMSU86IENvbHVtYmlhIExpYnJhcmllcyBDYXRhbG9nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQ29sbGVjdGlvbiBEZXZlbG9wbWVudCIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vZGxjLmxpYnJhcnkuY29sdW1iaWEuZWR1IiwKICAgICAgInZhbHVlIjogIkRpZ2l0YWwgQ29sbGVjdGlvbnMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2NvbGxlY3Rpb25zL2VyZXNvdXJjZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJFLVJlc291cmNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vcmVzb2x2ZXIubGlicmFyeS5jb2x1bWJpYS5lZHUvbHdlYjAwMDQiLAogICAgICAidmFsdWUiOiAiUmVjb21tZW5kIGEgVGl0bGUgZm9yIFB1cmNoYXNlIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy9jb2xsZWN0aW9uLWRldmVsb3BtZW50L3JlcGF0cmlhdGlvbi1yZXR1cm4uaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSZXBhdHJpYXRpb24iCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L3N0YWZmL3N1YmplY3Qtc3BlY2lhbGlzdHMtYnktc3ViamVjdC5odG1sIiwKICAgICAgInZhbHVlIjogIlN1YmplY3QgU3BlY2lhbGlzdHMiCiAgICB9CiAgXSwKICAiVXNpbmcgdGhlIExpYnJhcmllcyI6IFsKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJVc2luZyB0aGUgTGlicmFyaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYWNjZXNzLXByaXZpbGVnZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBY2Nlc3MgUHJpdmlsZWdlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL2Rpc2FiaWxpdHkuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJBY2Nlc3NpYmlsaXR5IgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS91c2luZy1saWJyYXJpZXMvYm9ycm93aW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiQm9ycm93LCBSZXF1ZXN0LCBSZW5ldyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvcmVzZXJ2ZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3Vyc2UgUmVzZXJ2ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2hvdXJzLmxpYnJhcnkuY29sdW1iaWEuZWR1LyIsCiAgICAgICJ2YWx1ZSI6ICJIb3VycyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvdXNpbmctbGlicmFyaWVzL3ByaW50aW5nLmh0bWwiLAogICAgICAidmFsdWUiOiAiUHJpbnQsIFNjYW4sIERpZ2l0aXplIgogICAgfQogIF0sCiAgIlJlc2VhcmNoICYgVGVhY2hpbmciOiBbCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvcmVzZWFyY2gtdGVhY2hpbmcuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJSZXNlYXJjaCAmIFRlYWNoaW5nIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy9jb3B5cmlnaHQuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJDb3B5cmlnaHQgSW5mb3JtYXRpb24iCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dldHRpbmctc3RhcnRlZC5odG1sIiwKICAgICAgInZhbHVlIjogIkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBMaWJyYXJpZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL2dsb2JhbC5odG1sIiwKICAgICAgInZhbHVlIjogIkdsb2JhbCBTdHVkaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9yZXNlYXJjaC10ZWFjaGluZy9vcGVuLXNjaG9sYXJzaGlwLmh0bWwiLAogICAgICAidmFsdWUiOiAiT3BlbiBTY2hvbGFyc2hpcCBTZXJ2aWNlcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvc2VydmljZXMvcmVzZWFyY2gtZGF0YS1zZXJ2aWNlcy5odG1sIiwKICAgICAgInZhbHVlIjogIlJlc2VhcmNoIERhdGEgU2VydmljZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3NlcnZpY2VzL3N1YmplY3QtZ3VpZGVzLmh0bWwiLAogICAgICAidmFsdWUiOiAiU3ViamVjdCAmIENvdXJzZSBHdWlkZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L3Jlc2VhcmNoLXRlYWNoaW5nL3dvcmtzaG9wcy5odG1sIiwKICAgICAgInZhbHVlIjogIldvcmtzaG9wcyAmIFRyYWluaW5nIgogICAgfQogIF0sCiAgIkFib3V0IjogWwogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0Lmh0bWwiLAogICAgICAidmFsdWUiOiAiQWJvdXQgdGhlIExpYnJhcmllcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvam9icy1pbnRlcm5zaGlwcy5odG1sIiwKICAgICAgInZhbHVlIjogIkpvYnMgJiBJbnRlcm5zaGlwcyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvbmV3cy9hbGVydC5odG1sIiwKICAgICAgInZhbHVlIjogIkxpYnJhcnkgU3RhdHVzIFVwZGF0ZXMiCiAgICB9LAogICAgewogICAgICAiaHJlZiI6ICJodHRwczovL2xpYnJhcnkuY29sdW1iaWEuZWR1L2Fib3V0L25ld3MuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJOZXdzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC92YWx1ZXMuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJPdXIgVmFsdWVzICYgQ29tbWl0bWVudCBpbiBBY3Rpb24iCiAgICB9LAogICAgICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9wb2xpY2llcy5odG1sIiwKICAgICAgInZhbHVlIjogIlBvbGljaWVzIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9saWJyYXJ5LmNvbHVtYmlhLmVkdS9hYm91dC9zdGFmZi5odG1sIiwKICAgICAgInZhbHVlIjogIlN0YWZmIgogICAgfSwKICAgIHsKICAgICAgImhyZWYiOiAiaHR0cHM6Ly9zdHJhdGVnaWNkaXJlY3Rpb25zLmxpYnJhcnkuY29sdW1iaWEuZWR1LyIsCiAgICAgICJ2YWx1ZSI6ICJTdHJhdGVnaWMgRGlyZWN0aW9ucyIKICAgIH0sCiAgICB7CiAgICAgICJocmVmIjogImh0dHBzOi8vbGlicmFyeS5jb2x1bWJpYS5lZHUvYWJvdXQvc3R1ZGVudF9hZHZpc29yeV9jb21taXR0ZWUuaHRtbCIsCiAgICAgICJ2YWx1ZSI6ICJTdHVkZW50IExpYnJhcnkgQWR2aXNvcnkgQ29tbWl0dGVlIgogICAgfQogIF0KfQo=\"","// 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@columbia-libraries/cul-toolkit",
3
- "version": "5.1.3",
3
+ "version": "5.3.0",
4
4
  "description": "CUL customized Bootstrap 5 with Vite! Intended only for CUL projects and therefore unsupported.",
5
5
  "type": "module",
6
6
  "main": "dist/bundles/cul-menu.bundle.js",
@@ -17,7 +17,8 @@
17
17
  "dist/bundles",
18
18
  "dist/js",
19
19
  "dist/setup.js",
20
- "dist/setup.css"
20
+ "dist/setup.css",
21
+ "src/scss"
21
22
  ],
22
23
  "keywords": [
23
24
  "cul"
@@ -46,7 +47,7 @@
46
47
  "cssnano": "^7.1.2",
47
48
  "postcss": "^8.5.6",
48
49
  "sass": "^1.83.0",
49
- "vite": "^5.4.11",
50
+ "vite": "^6.4.1",
50
51
  "vite-plugin-handlebars": "^2.0.0"
51
52
  },
52
53
  "dependencies": {
@@ -0,0 +1,122 @@
1
+ :root {
2
+ --a-link-color: #2c6bac;
3
+ --a-visited-color: #769ac5;
4
+ --nav-a-link-color: #3a6fa2;
5
+ --icon-grey-color: #595959;
6
+ --nav-tabs-link-active-color: #f8f9fa;
7
+ --text-shadow-color: 1px 1px 1px rgba(0,0,0,0.5);
8
+ --cul-darkblue-color: #093552;
9
+ }
10
+ a:link:not(.btn) {
11
+ color:var(--a-link-color);
12
+ }
13
+ a:visited:not(.btn) {
14
+ color:var(--a-link-color);
15
+ }
16
+ #CULnavbar,#header {
17
+ .navbar-brand .img-fluid {
18
+ min-height: 1em;
19
+ }
20
+ a {
21
+ text-decoration: none;
22
+ }
23
+ }
24
+ #CULbrand {
25
+ max-width:400px;
26
+ }
27
+ @media (min-width: 576px) {
28
+ #global-menu {
29
+ font-size: 80%;
30
+ }
31
+ }
32
+ #site-name {
33
+ display: block;
34
+ padding: 1rem 0;
35
+ margin-bottom: 0;
36
+ img {
37
+ width:100vw;
38
+ height:auto;
39
+ }
40
+ }
41
+ #main-menu a:link {
42
+ color:var(--nav-a-link-color);
43
+ }
44
+ #main-menu a:visited {
45
+ color:var(--nav-a-link-color);
46
+ }
47
+ .jumbotron {
48
+ border-radius: 0;
49
+ }
50
+
51
+ /* full-width dropdown menu */
52
+ #main-menu .nav-item.show > a {
53
+ color:var(--secondary);
54
+ }
55
+ .cul-cols {
56
+ column-width: 18em;
57
+ column-gap: 2em;
58
+ column-rule: 1px solid #e3e3e3;
59
+ a {
60
+ break-inside: avoid;
61
+ white-space: normal;
62
+ }
63
+ }
64
+ /* /full-width dropdown menu */
65
+
66
+ /* #fat-footer */
67
+ #fat-footer {
68
+ background-color:var(--cul-darkblue-color);
69
+ font-size: .75rem;
70
+ }
71
+ .fatf-icon i {
72
+ font-size: 1.5rem;
73
+ }
74
+ /* /#fat-footer */
75
+
76
+ /* misc */
77
+ .bg-CULDarkBlue {
78
+ background-color: var(--cul-darkblue-color);
79
+ }
80
+ /* /misc */
81
+
82
+ .tt-menu { padding: 1em 0.5em; width:100%; background-color: var(--bs-primary-bg-subtle); word-wrap: break-word; border-bottom: 1px solid #ccc; border-radius: var(--bs-border-radius) !important; }
83
+ .best-bet-result { margin-bottom: 1em; }
84
+ .offcanvas .tt-menu { position: static !important; }
85
+ .twitter-typeahead { width: 100%; }
86
+ input[type="search"]::-webkit-search-decoration,
87
+ input[type="search"]::-webkit-search-cancel-button,
88
+ input[type="search"]::-webkit-search-results-button,
89
+ input[type="search"]::-webkit-search-results-decoration {
90
+ -webkit-appearance:none;
91
+ }
92
+
93
+ /* animations */
94
+ .animate {
95
+ animation-duration: 0.75s;
96
+ animation-delay: 0.1s;
97
+ animation-name: animate-fade;
98
+ animation-timing-function: cubic-bezier(.26, .53, .74, 1.48);
99
+ animation-fill-mode: backwards;
100
+ }
101
+ /* Roll In */
102
+ .animate.roll { animation-name: animate-roll; }
103
+
104
+ @keyframes animate-roll {
105
+ 0% {
106
+ opacity: 0;
107
+ transform: scale(0, 0) rotate(360deg);
108
+ }
109
+ 100% {
110
+ opacity: 1;
111
+ transform: scale(1, 1) rotate(0deg);
112
+ }
113
+ }
114
+
115
+ /* menu loading */
116
+ .cul-menu-loading {
117
+ opacity: 0.6;
118
+ }
119
+ .cul-menu-loaded {
120
+ opacity: 1;
121
+ }
122
+
@@ -0,0 +1,40 @@
1
+ .btn-toggle {
2
+ padding: .25rem .5rem;
3
+ font-weight: 600;
4
+ color: var(--bs-emphasis-color);
5
+ background-color: transparent;
6
+ }
7
+ .btn-toggle:hover,
8
+ .btn-toggle:focus {
9
+ color: rgba(var(--bs-emphasis-color-rgb), .85);
10
+ background-color: var(--bs-tertiary-bg);
11
+ }
12
+
13
+ .btn-toggle::before {
14
+ width: 1.25em;
15
+ line-height: 0;
16
+ content: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e");
17
+ transition: transform .35s ease;
18
+ transform-origin: .5em 50%;
19
+ }
20
+
21
+ [data-bs-theme="dark"] .btn-toggle::before {
22
+ content: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%28255,255,255,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e");
23
+ }
24
+
25
+ .btn-toggle[aria-expanded="true"] {
26
+ color: rgba(var(--bs-emphasis-color-rgb), .85);
27
+ }
28
+ .btn-toggle[aria-expanded="true"]::before {
29
+ transform: rotate(90deg);
30
+ }
31
+
32
+ .btn-toggle-nav a {
33
+ padding: .1875rem .5rem;
34
+ margin-top: .125rem;
35
+ margin-left: 1.25rem;
36
+ }
37
+ .btn-toggle-nav a:hover,
38
+ .btn-toggle-nav a:focus {
39
+ background-color: var(--bs-tertiary-bg);
40
+ }
@@ -0,0 +1,3 @@
1
+ $blue: #3A6FA2;
2
+ $cyan: #769ac5;
3
+ $body-bg: #fff;
@@ -0,0 +1,5 @@
1
+ @import "./variables";
2
+ @import "bootstrap/scss/bootstrap";
3
+ @import "./cul";
4
+ @import "./sidebars";
5
+