{"_id":"@quartz-community/utils","_rev":"4-b15d5aa2e00bfcd6d6c67fe4471090c2","name":"@quartz-community/utils","dist-tags":{"latest":"1.0.1"},"versions":{"0.1.0":{"name":"@quartz-community/utils","version":"0.1.0","keywords":["quartz","quartz-plugin","utilities","path","dom"],"author":{"name":"Quartz Community"},"license":"MIT","_id":"@quartz-community/utils@0.1.0","maintainers":[{"name":"aarnphm","email":"aaron.pham.2k21@gmail.com"},{"name":"saberzero1","email":"github@emilebangma.com"}],"homepage":"https://quartz.jzhao.xyz","bugs":{"url":"https://github.com/quartz-community/utils/issues"},"dist":{"shasum":"4256a7e698f1968da513e62bf15f128a904a49de","tarball":"https://registry.npmjs.org/@quartz-community/utils/-/utils-0.1.0.tgz","fileCount":31,"integrity":"sha512-F/7+i2AKbeH6LRglZfhyLbyBuozFwTFFU1ZpTBCIQpnfzOXaTJRU9Gjfo80NngADQmVoVGaFS2nTcLTX/uLEBw==","signatures":[{"sig":"MEYCIQD8h5bwAnuWz6rxqPcCEctxtVgj/upyhb3YfR4mi6O1XgIhALIQTjmoPSG6/l8eMVw7PzBvfPcccrJ96WNoiD6P7QiR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@quartz-community%2futils@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":113638},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.9.2","node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./dom":{"types":"./dist/dom.d.ts","import":"./dist/dom.js"},"./jsx":{"types":"./dist/jsx.d.ts","import":"./dist/jsx.js"},"./date":{"types":"./dist/date.d.ts","import":"./dist/date.js"},"./lang":{"types":"./dist/lang.d.ts","import":"./dist/lang.js"},"./path":{"types":"./dist/path.d.ts","import":"./dist/path.js"},"./sort":{"types":"./dist/sort.d.ts","import":"./dist/sort.js"},"./emoji":{"types":"./dist/emoji.d.ts","import":"./dist/emoji.js"},"./escape":{"types":"./dist/escape.d.ts","import":"./dist/escape.js"},"./package.json":"./package.json"},"gitHead":"6b7d26ec707a44fd8b93596c425fb55e1a9277df","scripts":{"dev":"tsup --watch","lint":"eslint . --max-warnings=0","test":"vitest run","build":"tsup","check":"npm run typecheck && npm run lint && npm run format && npm run test","format":"prettier . --check","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"saberzero1","email":"github@emilebangma.com"},"repository":{"url":"git+https://github.com/quartz-community/utils.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared utility functions for Quartz community plugins.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"@quartz-community/types":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"hast":"^0.0.2","tsup":"^8.5.0","eslint":"^8.57.0","vitest":"^2.1.9","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.0","github-slugger":"^2.0.0","eslint-config-prettier":"^9.1.0","hast-util-to-jsx-runtime":"^2.3.6","@typescript-eslint/parser":"^7.18.0","@typescript-eslint/eslint-plugin":"^7.18.0"},"peerDependencies":{"preact":"^10.0.0","github-slugger":"^2.0.0","hast-util-to-jsx-runtime":"^2.3.6"},"peerDependenciesMeta":{"github-slugger":{"optional":true},"hast-util-to-jsx-runtime":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.1.0_1784760985572_0.24136770494634896","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@quartz-community/utils","version":"0.1.1","keywords":["quartz","quartz-plugin","utilities","path","dom"],"author":{"name":"Quartz Community"},"license":"MIT","_id":"@quartz-community/utils@0.1.1","maintainers":[{"name":"aarnphm","email":"aaron.pham.2k21@gmail.com"},{"name":"saberzero1","email":"github@emilebangma.com"}],"homepage":"https://quartz.jzhao.xyz","bugs":{"url":"https://github.com/quartz-community/utils/issues"},"dist":{"shasum":"0aad6176fc40fb9d8f78e64744cd89b8d461ec2c","tarball":"https://registry.npmjs.org/@quartz-community/utils/-/utils-0.1.1.tgz","fileCount":31,"integrity":"sha512-6qZ6gRZ7Pg96r9GVMOAhqWrs13C/0Deg6PKHK6U7S8/nE9NnzuPnta0SZvIf7PwlMa9DnpkHsTozrxrDsnq+bg==","signatures":[{"sig":"MEQCIDNPJXysjHXWAa/u+uWx6AqXUOFlnR/xiAyjWgsKzIz9AiAf/7H+I3vzIQZ0SoSD4w3UK8H6tIA8qePiaY5AK65Scg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114122},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.9.2","node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./dom":{"types":"./dist/dom.d.ts","import":"./dist/dom.js"},"./jsx":{"types":"./dist/jsx.d.ts","import":"./dist/jsx.js"},"./date":{"types":"./dist/date.d.ts","import":"./dist/date.js"},"./lang":{"types":"./dist/lang.d.ts","import":"./dist/lang.js"},"./path":{"types":"./dist/path.d.ts","import":"./dist/path.js"},"./sort":{"types":"./dist/sort.d.ts","import":"./dist/sort.js"},"./emoji":{"types":"./dist/emoji.d.ts","import":"./dist/emoji.js"},"./escape":{"types":"./dist/escape.d.ts","import":"./dist/escape.js"},"./package.json":"./package.json"},"gitHead":"9da5e8de5b2a2a33dc7c15168282058217ff3e3f","scripts":{"dev":"tsup --watch","lint":"eslint . --max-warnings=0","test":"vitest run","build":"tsup","check":"npm run typecheck && npm run lint && npm run format && npm run test","format":"prettier . --check","release":"npm run build && changeset publish","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"saberzero1","email":"github@emilebangma.com"},"repository":{"url":"git+https://github.com/quartz-community/utils.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared utility functions for Quartz community plugins.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"@quartz-community/types":"^0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"hast":"^0.0.2","tsup":"^8.5.0","eslint":"^8.57.0","vitest":"^2.1.9","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.0","github-slugger":"^2.0.0","@changesets/cli":"^2.29.2","eslint-config-prettier":"^9.1.0","hast-util-to-jsx-runtime":"^2.3.6","@typescript-eslint/parser":"^7.18.0","@typescript-eslint/eslint-plugin":"^7.18.0"},"peerDependencies":{"preact":"^10.0.0","github-slugger":"^2.0.0","hast-util-to-jsx-runtime":"^2.3.6"},"peerDependenciesMeta":{"github-slugger":{"optional":true},"hast-util-to-jsx-runtime":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.1.1_1784848353363_0.1001426413491906","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@quartz-community/utils","version":"1.0.0","keywords":["quartz","quartz-plugin","utilities","path","dom"],"author":{"name":"Quartz Community"},"license":"MIT","_id":"@quartz-community/utils@1.0.0","maintainers":[{"name":"aarnphm","email":"aaron.pham.2k21@gmail.com"},{"name":"saberzero1","email":"github@emilebangma.com"}],"homepage":"https://quartz.jzhao.xyz","bugs":{"url":"https://github.com/quartz-community/utils/issues"},"dist":{"shasum":"1c7ac8e6304193011aa7459c7c26c47b166403a8","tarball":"https://registry.npmjs.org/@quartz-community/utils/-/utils-1.0.0.tgz","fileCount":31,"integrity":"sha512-EaeakR/wxd4sTw4L6FJ04fYMzhha1UfI8tMi3H6KvUz4QWOHcTRmfo7ykiBDq6S9s7qJMacob/1wnNcFfVA20Q==","signatures":[{"sig":"MEQCIF4vPMPq5MBPBTWX3OpDW5lBTR5+KZqYCpT9Dr52t3W6AiBWqLAipv2+DzNyV40a8x/VvIlPp9bZrlVKY0jE0d9DhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114473},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.9.2","node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./dom":{"types":"./dist/dom.d.ts","import":"./dist/dom.js"},"./jsx":{"types":"./dist/jsx.d.ts","import":"./dist/jsx.js"},"./date":{"types":"./dist/date.d.ts","import":"./dist/date.js"},"./lang":{"types":"./dist/lang.d.ts","import":"./dist/lang.js"},"./path":{"types":"./dist/path.d.ts","import":"./dist/path.js"},"./sort":{"types":"./dist/sort.d.ts","import":"./dist/sort.js"},"./emoji":{"types":"./dist/emoji.d.ts","import":"./dist/emoji.js"},"./escape":{"types":"./dist/escape.d.ts","import":"./dist/escape.js"},"./package.json":"./package.json"},"gitHead":"f0dc9766e8d51c2cad3b3e1ce93ab14c2bd7b1df","scripts":{"dev":"tsup --watch","lint":"eslint . --max-warnings=0","test":"vitest run","build":"tsup","check":"npm run typecheck && npm run lint && npm run format && npm run test","format":"prettier . --check","release":"npm run build && changeset publish","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"saberzero1","email":"github@emilebangma.com"},"repository":{"url":"git+https://github.com/quartz-community/utils.git","type":"git"},"_npmVersion":"10.9.8","description":"Shared utility functions for Quartz community plugins.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"@quartz-community/types":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"hast":"^0.0.2","tsup":"^8.5.0","eslint":"^8.57.0","vitest":"^2.1.9","prettier":"^3.6.2","typescript":"^5.9.3","@types/node":"^24.10.0","github-slugger":"^2.0.0","@changesets/cli":"^2.29.2","eslint-config-prettier":"^9.1.0","hast-util-to-jsx-runtime":"^2.3.6","@typescript-eslint/parser":"^7.18.0","@typescript-eslint/eslint-plugin":"^7.18.0"},"peerDependencies":{"preact":"^10.0.0","github-slugger":"^2.0.0","hast-util-to-jsx-runtime":"^2.3.6"},"peerDependenciesMeta":{"github-slugger":{"optional":true},"hast-util-to-jsx-runtime":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.0_1789428983006_0.9308987342294917","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@quartz-community/utils","version":"1.0.1","description":"Shared utility functions for Quartz community plugins.","type":"module","license":"MIT","author":{"name":"Quartz Community"},"homepage":"https://quartz.jzhao.xyz","repository":{"type":"git","url":"git+https://github.com/quartz-community/utils.git"},"keywords":["quartz","quartz-plugin","utilities","path","dom"],"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./path":{"types":"./dist/path.d.ts","import":"./dist/path.js"},"./dom":{"types":"./dist/dom.d.ts","import":"./dist/dom.js"},"./lang":{"types":"./dist/lang.d.ts","import":"./dist/lang.js"},"./escape":{"types":"./dist/escape.d.ts","import":"./dist/escape.js"},"./jsx":{"types":"./dist/jsx.d.ts","import":"./dist/jsx.js"},"./date":{"types":"./dist/date.d.ts","import":"./dist/date.js"},"./emoji":{"types":"./dist/emoji.d.ts","import":"./dist/emoji.js"},"./sort":{"types":"./dist/sort.d.ts","import":"./dist/sort.js"},"./package.json":"./package.json"},"main":"./dist/index.js","types":"./dist/index.d.ts","sideEffects":false,"dependencies":{"@quartz-community/types":"^1.0.0"},"scripts":{"build":"tsup","dev":"tsup --watch","lint":"eslint . --max-warnings=0","format":"prettier . --check","test":"vitest run","typecheck":"tsc --noEmit","check":"npm run typecheck && npm run lint && npm run format && npm run test","prepublishOnly":"npm run build","release":"npm run build && changeset publish"},"peerDependencies":{"github-slugger":"^2.0.0","hast-util-to-jsx-runtime":"^2.3.6","preact":"^10.0.0"},"devDependencies":{"@changesets/cli":"^2.29.2","@types/node":"^24.10.0","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0","eslint":"^8.57.0","eslint-config-prettier":"^9.1.0","github-slugger":"^2.0.0","hast":"^0.0.2","hast-util-to-jsx-runtime":"^2.3.6","preact":"^10.0.0","prettier":"^3.6.2","tsup":"^8.5.0","typescript":"^5.9.3","vitest":"^2.1.9"},"engines":{"node":">=22","npm":">=10.9.2"},"peerDependenciesMeta":{"hast-util-to-jsx-runtime":{"optional":true},"github-slugger":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@quartz-community/utils@1.0.1","gitHead":"4a81fd21bf003a3bf3125dcb59c4fad3e99a1f93","bugs":{"url":"https://github.com/quartz-community/utils/issues"},"_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-oN19Y1KTZOMRuovPnD55wvVup++sZzao0MXihuLNaEEtH1QAg5z4hRrP2ySXF4Ra68T+3ehIICHWa8dHB0LM3A==","shasum":"7f1671129bdd3e4c783c068e65b34ede6a856b9a","tarball":"https://registry.npmjs.org/@quartz-community/utils/-/utils-1.0.1.tgz","fileCount":31,"unpackedSize":114961,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCSZ3QB/ttnjImApMBxKhXcNW7VL3m+a7ZGqBRB5CUK0QIhAK7s1g6h7+PZ6q9K59fsFzqrAsx7BN3FLeasyjz2VC1e"}]},"_npmUser":{"name":"saberzero1","email":"github@emilebangma.com"},"directories":{},"maintainers":[{"name":"aarnphm","email":"aaron.pham.2k21@gmail.com"},{"name":"saberzero1","email":"github@emilebangma.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/utils_1.0.1_1789594773178_0.5198027773384211"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T22:56:25.425Z","modified":"2026-09-16T21:39:33.501Z","0.1.0":"2026-07-22T22:56:25.728Z","0.1.1":"2026-07-23T23:12:33.508Z","1.0.0":"2026-09-14T23:36:23.153Z","1.0.1":"2026-09-16T21:39:33.311Z"},"bugs":{"url":"https://github.com/quartz-community/utils/issues"},"author":{"name":"Quartz Community"},"license":"MIT","homepage":"https://quartz.jzhao.xyz","keywords":["quartz","quartz-plugin","utilities","path","dom"],"repository":{"type":"git","url":"git+https://github.com/quartz-community/utils.git"},"description":"Shared utility functions for Quartz community plugins.","maintainers":[{"name":"aarnphm","email":"aaron.pham.2k21@gmail.com"},{"name":"saberzero1","email":"github@emilebangma.com"}],"readme":"# @quartz-community/utils\n\nShared utility functions for Quartz community plugins.\n\n## Installation\n\n```bash\nnpm install @quartz-community/utils\n```\n\nOr using GitHub:\n\n```bash\nnpm install github:quartz-community/utils\n```\n\n## Usage\n\n```ts\nimport {\n  simplifySlug,\n  getFullSlug,\n  joinSegments,\n  removeAllChildren,\n  classNames,\n} from \"@quartz-community/utils\";\n\n// Path utilities\nconst slug = simplifySlug(\"folder/index\"); // \"folder/\"\nconst currentSlug = getFullSlug(window); // e.g., \"blog/my-post\"\nconst path = joinSegments(\"a\", \"b\", \"c\"); // \"a/b/c\"\n\n// DOM utilities\nremoveAllChildren(document.getElementById(\"container\")!);\n\n// Language utilities\nconst classes = classNames(\"btn\", isActive && \"active\", null); // \"btn active\"\n```\n\n## Modules\n\n### Path (`@quartz-community/utils/path`)\n\nPath manipulation utilities for Quartz slugs:\n\n- `simplifySlug(slug)` - Remove `/index` suffix from slugs\n- `getFullSlug(window)` - Get current page slug from document body dataset\n- `getFullSlugFromUrl()` - Get current page slug from URL pathname\n- `joinSegments(...segments)` - Join path segments with proper slash handling\n- `resolvePath(path)` - Ensure path starts with `/`\n- `endsWith(str, suffix)` - Check if path ends with suffix\n- `trimSuffix(str, suffix)` - Remove suffix from path\n- `stripSlashes(str, onlyPrefix?)` - Remove leading/trailing slashes\n- `getFileExtension(path)` - Get file extension\n- `isFolderPath(path)` - Check if path represents a folder\n- `getAllSegmentPrefixes(path)` - Get all path prefixes\n\n### DOM (`@quartz-community/utils/dom`)\n\nDOM manipulation utilities:\n\n- `removeAllChildren(element)` - Remove all child nodes from an element\n- `registerEscapeHandler(container, callback)` - Register Escape key and click-outside handlers\n- `normalizeRelativeURLs(document, baseUrl)` - Convert relative URLs to absolute\n\n### Lang (`@quartz-community/utils/lang`)\n\nLanguage/general utilities:\n\n- `classNames(...classes)` - Combine CSS class names, filtering falsy values\n\n## Types\n\nThe package exports TypeScript types for type-safe slug handling:\n\n```ts\nimport type { FullSlug, SimpleSlug, RelativeURL } from \"@quartz-community/utils\";\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}