{"_id":"@apostrophecms/anchors","_rev":"21-37333116dadbd93fb5707cacd2cad0d8","name":"@apostrophecms/anchors","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0-beta":{"name":"@apostrophecms/anchors","version":"1.0.0-beta","keywords":["apostrophecms","apostrophe"],"author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/anchors@1.0.0-beta","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"falkodev","email":"anthony@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/anchors#readme","bugs":{"url":"https://github.com/apostrophecms/anchors/issues"},"dist":{"shasum":"e20d59a0926b6fc7a11260b0c553cb56ff6a5f84","tarball":"https://registry.npmjs.org/@apostrophecms/anchors/-/anchors-1.0.0-beta.tgz","fileCount":12,"integrity":"sha512-zY8G+vpAUv5/+AF5BFj3DgQ/CeNaBJ2DdJH2XkTVtU6OIczMQoHfsOIC9Pfo3WgUzS0B1pZoR6VKKBQlDjDECA==","signatures":[{"sig":"MEYCIQClY1sZPrES3n3JD9nRRrIskMo1TBLIcXKCkO9x78KAFAIhAMXXCNH+Sv8EHPhH0qxhTQfQwHgAh3EmM9zoMM965VG6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11994,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhw2lcCRA9TVsSAnZWagAAGU0P/0FqQPQeQwq+qDoMhIKC\nqM0h4ZM2WXNOFM0yLqpeiDqKQtdT8BczvCb2OY+2DMRBL1UytQ0W/ztREEx7\n7uX5f/SASfE3zn7HWDqKRrPE6GGjJCHSHNLdBsExIsrd7elTR0E1KIWq6Fvu\n3QrZRo6PEkQNYluWLuQwUA4DJSX11cVEi9Y3a9n7dhbPhIxYQcYB5xr6xKzZ\njVOgFaCIqKPdqh057qBICG775a4EU903yfBVEFHkHm3GJ2GQjWU5wbaEq+cs\nDgoIqwc3kszhxwmBw/TYrKejmO2tW+gBDW0YFD6xH5kG4KGQEwYoZHmZHvnh\n2VejGd0CnuCMB6ey7g4RAqnClGVMfNXSVrMlRebhrazFcmJ6dFRzlcjMMaZU\nbdq5T5sLdTyrFJLF+XhfEJIbEByDm71y2oW7oujQhfbMLJBTz7J8WS/59xGu\np4Ltpsy8MgS5iuJ1KJaq/h3B/RLMl/MIIg0mBjH/S+Aqrt9iqXvdo3ZiTYh7\nz5nE/nYJsnA6opUlY7VONoYJoZf95kfopBc38OWC0j+2oco9IDFPBTZ8onYu\n2hlmLAMxoanueMK7RLhpa4DRYtT5yZyMNTWyDIvEphIosQQc/lWLUI8bc39I\n2h//hH9upWMNQAzDRfL/MUWmOjsfo0YV2Q9m4Y6gKoF1IdcRiSbjBjqByCeb\n1fja\r\n=cQpg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"e8b2b87d814f2ea4b1d1aa329e32384de3325e34","scripts":{"lint":"npm run eslint","test":"npm run lint && mocha","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/anchors.git","type":"git"},"_npmVersion":"6.14.15","description":"A module bundle that supports linking to individual Apostrophe widgets.","directories":{},"_nodeVersion":"16.13.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^7.1.2","eslint":"^7.9.0","apostrophe":"^3.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/anchors_1.0.0-beta_1640196444100_0.7863310954309399","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"@apostrophecms/anchors","version":"1.0.0","keywords":["apostrophecms","apostrophe"],"author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/anchors@1.0.0","maintainers":[{"name":"falkodev","email":"anthony@apostrophecms.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"mhiggins","email":"mhiggins.louis@gmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/anchors#readme","bugs":{"url":"https://github.com/apostrophecms/anchors/issues"},"dist":{"shasum":"d9685fe369348362b33c8ea026d5fab95a26c897","tarball":"https://registry.npmjs.org/@apostrophecms/anchors/-/anchors-1.0.0.tgz","fileCount":12,"integrity":"sha512-PGOtk4E92ZKsY9VmN/z9dOqxyaatqu5lxc8rJG2Q2FwDzyWBpxQtJ+qyoaM54NiC+WgQqfOpOgYjHK8/iXhrJg==","signatures":[{"sig":"MEUCICpHsIDtywawtAjwA/W1Zm7+2FJIAJ7iyn56h9PRfOA+AiEA8PgpNcqHJK2BXdF0kmnn5r6cPhDRzdZFPlsUaH//kRg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyCz2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq5rQ/5ATWDznrzxCERjkIvCCoElNGxYvLpw7MvPyA5PXXFjTCe00Nz\r\nP6zG8l5/K3vaFQ8DTTvKrPIbCYHUpmTerzKIUIcnGvAhHJgiujKBKurrRlmR\r\n7cq8v768zlF0ySzoH/AQO7qFXISY/RccmmsUtmCziaW+enFgutvWOWfFOcdZ\r\npBc9LY5konvCuuh6PFmAtDTA/j9LkVeVaqcVBaeTVA5/5R3avU45v7qI/Flb\r\nmg1TOqB3s8Lq/wMIEkpFQ+wtPpWY/I3C37l6xw+j5kxmybTkeGzz8K+jXQ2z\r\n085psfmgmpHNhjHfsNZw0zKFoXEIFqi4rhEf+S+vldtVLbxazjVWQpNnr79+\r\n/GvpoEtWT2ks6SSPuxv46P8uu7ky4/I0B+1Djqn4Mg1XKwbemX/LfrsIUs7E\r\ng5GPkeQvk49zwOl0E3OyGZ8VZ9+ZQy2NlizhWaCEHTjBuHn/hTd/NF10lTMm\r\n+7Qz3/aFBDLi/LZxkG3cd2yaA3FtUvf63jTb1nsME3S0FNm1HR1Q8R+f31fv\r\nDF7V7ZoqqxXn3q1ZWYqTEPoeJbJH+SAFJezmnyznGH9GgrBrO6CCsh9+xNt9\r\nWu38aXdoL5t23kKmIgWDJcjy7yEe7Yn+9FoyLGhQhlGbFxl6Y5UZ+IQsia50\r\nFNB/iSec9Cq54BET/vICcEaatb0jia9de+M=\r\n=nq0U\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"a23f6425a9d32151dc88d59f6c1fc17f6541de09","scripts":{"lint":"npm run eslint","test":"npm run lint && mocha","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/anchors.git","type":"git"},"_npmVersion":"8.19.2","description":"A module bundle that supports linking to individual Apostrophe widgets.","directories":{},"_nodeVersion":"16.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^7.1.2","eslint":"^7.9.0","apostrophe":"^3.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/anchors_1.0.0_1674063094141_0.488399556068023","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@apostrophecms/anchors","version":"1.0.1","keywords":["apostrophecms","apostrophe"],"author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/anchors@1.0.1","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/anchors#readme","bugs":{"url":"https://github.com/apostrophecms/anchors/issues"},"dist":{"shasum":"4518bfb4e5c91961d436a79dbfc3ecef5f043f75","tarball":"https://registry.npmjs.org/@apostrophecms/anchors/-/anchors-1.0.1.tgz","fileCount":18,"integrity":"sha512-9LoFmwsNUz0fjSXvCXTv9gXElX3tdhY+IySRKR/T3WTzoW/+lAhv9w4o/TCMVR4Sva4/irHjC9lxKdgajP/22g==","signatures":[{"sig":"MEYCIQD3PEgIY9XfZFf+KedVi3jZCkrL+AqT6ZgFmWu6Ait3lAIhAIEq96NVqiaSYeIX5hNas5zWW+E/Fj+J6q7aXKqLu/H1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13036},"main":"index.js","gitHead":"27ad6215cd9785dbd971029b15e05d9c89ba71f0","scripts":{"lint":"npm run eslint","test":"npm run lint && mocha","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/anchors.git","type":"git"},"_npmVersion":"10.7.0","description":"A module bundle that supports linking to individual Apostrophe widgets.","directories":{},"_nodeVersion":"18.20.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^7.1.2","eslint":"^7.9.0","apostrophe":"^3.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/anchors_1.0.1_1730381816308_0.5017996571141017","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@apostrophecms/anchors","version":"1.0.2","keywords":["apostrophecms","apostrophe"],"author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/anchors@1.0.2","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"homepage":"https://github.com/apostrophecms/anchors#readme","bugs":{"url":"https://github.com/apostrophecms/anchors/issues"},"dist":{"shasum":"a7275405501035b389ec841b304428dcb2f30e21","tarball":"https://registry.npmjs.org/@apostrophecms/anchors/-/anchors-1.0.2.tgz","fileCount":18,"integrity":"sha512-1Vaid0i0ulsJkhWQgKz0ZzVLxFZSItlAhsr2wMIvpeYXe42dPAA2Eyuaic0DCqDxfKCwlx+DKpW1ntfetpT7nw==","signatures":[{"sig":"MEUCIQDnKwjYR+4WwmIvVdmcCaX5b8rKO+zBhT4kPGrFt1911gIgS7Jre6xnSx9bPtVAc2k/rUtEAxvTjdmW+U3BZuDtjBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16381},"main":"index.js","gitHead":"b782db1dc07a5c121e9810c040861c017a1071e1","scripts":{"lint":"npm run eslint","test":"npm run lint && mocha","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/anchors.git","type":"git"},"_npmVersion":"10.8.2","description":"A module bundle that supports linking to individual Apostrophe widgets.","directories":{},"_nodeVersion":"20.19.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^7.1.2","eslint":"^7.9.0","apostrophe":"^3.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/anchors_1.0.2_1754497627836_0.7924089848614877","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@apostrophecms/anchors","version":"1.1.0","keywords":["apostrophecms","apostrophe"],"author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/anchors@1.1.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"homepage":"https://github.com/apostrophecms/anchors#readme","bugs":{"url":"https://github.com/apostrophecms/anchors/issues"},"dist":{"shasum":"db979c677ca8a7b82f70fe11b0c3896df2575a2d","tarball":"https://registry.npmjs.org/@apostrophecms/anchors/-/anchors-1.1.0.tgz","fileCount":18,"integrity":"sha512-c9NLc5ayv7kJBuUUtmRc5UC2at06ahGFxdAclq48bT8ZvjWPfoBwz02DMrz8NzU70JD03rTSGCQyhXuotns07Q==","signatures":[{"sig":"MEQCIG+cvPnjS8yi+uJAoJlLBw3/NexOmwjJi5V+hPftSKnhAiBkkSftDj8E/7FUHaej+tKbdbhJ7WKYNG+at/fVa57nJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15458},"main":"index.js","gitHead":"064aefbce514d17a57a7101ea7cf92539d97dcda","scripts":{"lint":"npm run eslint","test":"npm run lint && mocha","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/anchors.git","type":"git"},"_npmVersion":"10.9.2","description":"A module bundle that supports linking to individual Apostrophe widgets.","directories":{},"_nodeVersion":"20.19.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^7.1.2","eslint":"^7.9.0","apostrophe":"^3.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/anchors_1.1.0_1759343238291_0.6892774874013143","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2021-12-22T18:07:24.020Z","modified":"2026-01-26T19:09:02.568Z","1.0.0-beta":"2021-12-22T18:07:24.265Z","1.0.0":"2023-01-18T17:31:34.292Z","1.0.1":"2024-10-31T13:36:56.509Z","1.0.2":"2025-08-06T16:27:08.017Z","1.1.0":"2025-10-01T18:27:18.483Z"},"bugs":{"url":"https://github.com/apostrophecms/anchors/issues"},"author":{"name":"Apostrophe Technologies"},"license":"MIT","homepage":"https://github.com/apostrophecms/anchors#readme","keywords":["apostrophecms","apostrophe"],"repository":{"url":"git+https://github.com/apostrophecms/anchors.git","type":"git"},"description":"A module bundle that supports linking to individual Apostrophe widgets.","maintainers":[{"email":"alex@apostrophecms.com","name":"alexgilbert"},{"email":"tom@apostrophecms.com","name":"boutell"},{"email":"stuart+npm@apostrophecms.com","name":"romanek"},{"email":"robert.means1969+apostrophecms@gmail.com","name":"bodonkey"}],"readme":"<div align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/apostrophecms/apostrophe/main/logo.svg\" alt=\"ApostropheCMS logo\" width=\"80\" height=\"80\" />\n\n  <h1>Apostrophe Anchors</h1>\n\n  <p>\n    <a aria-label=\"Apostrophe logo\" href=\"https://docs.apostrophecms.org\">\n      <img src=\"https://img.shields.io/badge/MADE%20FOR%20ApostropheCMS-000000.svg?style=for-the-badge&logo=Apostrophe&labelColor=6516dd\">\n    </a>\n    <a aria-label=\"Join the community on Discord\" href=\"http://chat.apostrophecms.org\">\n      <img alt=\"\" src=\"https://img.shields.io/discord/517772094482677790?color=5865f2&label=Join%20the%20Discord&logo=discord&logoColor=fff&labelColor=000&style=for-the-badge&logoWidth=20\" />\n    </a>\n    <a aria-label=\"License\" href=\"https://github.com/apostrophecms/anchors/blob/main/LICENSE.md\">\n      <img alt=\"\" src=\"https://img.shields.io/static/v1?style=for-the-badge&labelColor=000000&label=License&message=MIT&color=3DA639\" />\n    </a>\n  </p>\n</div>\n\n**Enable deep linking and smooth navigation** with automatic anchor generation for all ApostropheCMS widgets. Perfect for landing pages, documentation sites, and content-heavy applications where users need to link directly to specific sections.\n\n## Why Apostrophe Anchors?\n\n- **🎯 Improve User Experience**: Let visitors bookmark and share links to specific content sections\n- **📈 Boost SEO**: Search engines can index and link directly to your content sections\n- **⚡ Zero Configuration**: Works automatically with all widget types out of the box\n- **🛠️ Developer Friendly**: Customize anchor attributes and disable for specific widgets as needed\n- **🔗 Marketing Ready**: Perfect for campaign landing pages where you need to link to specific sections\n\n## Installation\n\nTo install the module, use the command line to run this command in an Apostrophe project's root directory:\n\n```bash\nnpm install @apostrophecms/anchors\n```\n\n## Usage\n\nConfigure the anchor modules in the `app.js` file:\n\n```javascript\nimport apostrophe from 'apostrophe';\n\napostrophe ({\n  root: import.meta,\n  shortName: 'my-project',\n  modules: {\n    '@apostrophecms/anchors': {},\n  }\n});\n```\n\nWhen the modules are active, all widget types will have a new \"HTML Anchor Value\" field. When an editor populates that field with a slug-style string, the widget HTML markup will be wrapped with a new `div` with an attribute (an `id` by default) set to the anchor value. This attribute can be targeted by anchor links, e.g., `href=\"#anchor-id-value\"`.\n\nThe only Apostrophe core widget type with this feature disabled is the rich text widget, `@apostrophecms/rich-text-widget`.\n\nThe \"HTML Anchor Value\" field is a \"slug\" type field, which means it is limited to lowercase characters and dashes for consistent usage.\n\n## Configuration Options\n\n### `anchorAttribute`\n\nBy default, the anchor attribute is an `id`. This makes it easy to link to the widget with a hash `href` matching the anchor value as described above. **Developers have the option to use another anchor attribute** if they prefer to target the HTML element with custom JavaScript instead.\n\nTo do this, include an `anchorAttribute` option on the individual widget type. You can also add this option on the root `@apostrophecms/widget-type` module or the `@apostrophecms/anchors-widget-type` module to set this for all widget types.\n\n```javascript\n// modules/my-banner-widget/index.js\nexport default {\n  options: {\n    anchorAttribute: 'data-anchor'\n  }\n};\n```\n\nIn this example the wrapping `div` element would look like this:\n\n```html\n<div data-anchor=\"anchor-id-value\">\n  <!-- Normal widget markup here -->\n</div>\n```\n\n### `anchors: false`\n\nDevelopers can choose to disable this module's features for any widget type by setting an `anchors: false` option on the widget type.\n\n```javascript\n// modules/my-banner-widget/index.js\nexport default {\n  options: {\n    anchors: false\n  }\n};\n```\n\nThis is automatically set for the rich text widget. That can be reversed by setting `anchors: true` on `@apostrophecms/rich-text-widget`.\n\n### `anchorDefault`\n\nTo help content editors populate anchor values automatically, set the `anchorDefault` option to the name of an existing field on a widget type. The \"HTML Anchor Value\" field will populate automatically based on the value of the named field [using the `following` field option mechanism](https://docs.apostrophecms.org/reference/field-types/slug.html#optional).\n\n```javascript\n// modules/my-banner-widget/index.js\nexport default {\n  options: {\n    anchorDefault: 'heading'\n  },\n  fields: {\n    add: {\n      heading: {\n        type: 'string',\n        label: 'Heading'\n      }\n    }\n  }\n};\n```\n\n## Use Cases\n\n**Landing Pages**: Create marketing pages where different sections can be linked to directly from emails, ads, or social media.\n\n**Documentation**: Allow readers to bookmark and share links to specific sections of your documentation.\n\n**Long-form Content**: Help readers navigate lengthy articles or reports by providing direct links to sections.\n\n**Campaign Pages**: Enable marketing campaigns to link directly to specific product features or testimonials.\n\n### Getting Started with Astro + ApostropheCMS\n\nNew to using ApostropheCMS with Astro? Check out our starter kits:\n- **[starter-kit-astro-essentials](https://github.com/apostrophecms/starter-kit-astro-essentials)** - Essential features for most projects\n- **[starter-kit-astro-apollo](https://github.com/apostrophecms/starter-kit-astro-apollo)** - Advanced features with Apollo integration\n\n---\n\n<div>\n  <p>Made with ❤️ by the <a href=\"https://apostrophecms.com\">ApostropheCMS</a> team. <strong>Found this useful? <a href=\"https://github.com/apostrophecms/anchors\">Give us a star on GitHub!</a> ⭐</strong>\n  </p>\n</div>","readmeFilename":"README.md"}