@lnpg/pkgn-sol 1.0.0-beta.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.
- package/LICENSE +15 -0
- package/README.md +64 -0
- package/dist/assets/fonts/montserrat/Montserrat-Variable-Font.ttf +0 -0
- package/dist/assets/fonts/montserrat/Montserrat-Variable-Italic-Font.ttf +0 -0
- package/dist/assets/fonts/montserrat/OFL.txt +93 -0
- package/dist/assets/fonts/montserrat/README.txt +81 -0
- package/dist/cjs/chunks/dom.cjs +2 -0
- package/dist/cjs/chunks/dom.cjs.map +1 -0
- package/dist/cjs/chunks/inline.cjs +2 -0
- package/dist/cjs/chunks/inline.cjs.map +1 -0
- package/dist/cjs/chunks/pkgn-sol.cjs +2 -0
- package/dist/cjs/chunks/pkgn-sol.cjs.map +1 -0
- package/dist/cjs/elements/break/br/br.cjs +2 -0
- package/dist/cjs/elements/break/br/br.cjs.map +1 -0
- package/dist/cjs/elements/break/break.cjs +2 -0
- package/dist/cjs/elements/break/break.cjs.map +1 -0
- package/dist/cjs/elements/break/wbr/wbr.cjs +2 -0
- package/dist/cjs/elements/break/wbr/wbr.cjs.map +1 -0
- package/dist/cjs/elements/container/container.cjs +2 -0
- package/dist/cjs/elements/container/container.cjs.map +1 -0
- package/dist/cjs/elements/container/div/div.cjs +2 -0
- package/dist/cjs/elements/container/div/div.cjs.map +1 -0
- package/dist/cjs/elements/container/span/span.cjs +2 -0
- package/dist/cjs/elements/container/span/span.cjs.map +1 -0
- package/dist/cjs/elements/figure/figcaption/figcaption.cjs +2 -0
- package/dist/cjs/elements/figure/figcaption/figcaption.cjs.map +1 -0
- package/dist/cjs/elements/figure/figure/figure.cjs +2 -0
- package/dist/cjs/elements/figure/figure/figure.cjs.map +1 -0
- package/dist/cjs/elements/figure/figure.cjs +2 -0
- package/dist/cjs/elements/figure/figure.cjs.map +1 -0
- package/dist/cjs/elements/form/button/button.cjs +2 -0
- package/dist/cjs/elements/form/button/button.cjs.map +1 -0
- package/dist/cjs/elements/form/datalist/datalist.cjs +2 -0
- package/dist/cjs/elements/form/datalist/datalist.cjs.map +1 -0
- package/dist/cjs/elements/form/fieldset/fieldset.cjs +2 -0
- package/dist/cjs/elements/form/fieldset/fieldset.cjs.map +1 -0
- package/dist/cjs/elements/form/form/form.cjs +2 -0
- package/dist/cjs/elements/form/form/form.cjs.map +1 -0
- package/dist/cjs/elements/form/form.cjs +2 -0
- package/dist/cjs/elements/form/form.cjs.map +1 -0
- package/dist/cjs/elements/form/input/input.cjs +2 -0
- package/dist/cjs/elements/form/input/input.cjs.map +1 -0
- package/dist/cjs/elements/form/label/label.cjs +2 -0
- package/dist/cjs/elements/form/label/label.cjs.map +1 -0
- package/dist/cjs/elements/form/legend/legend.cjs +2 -0
- package/dist/cjs/elements/form/legend/legend.cjs.map +1 -0
- package/dist/cjs/elements/form/meter/meter.cjs +2 -0
- package/dist/cjs/elements/form/meter/meter.cjs.map +1 -0
- package/dist/cjs/elements/form/optgroup/optgroup.cjs +2 -0
- package/dist/cjs/elements/form/optgroup/optgroup.cjs.map +1 -0
- package/dist/cjs/elements/form/option/option.cjs +2 -0
- package/dist/cjs/elements/form/option/option.cjs.map +1 -0
- package/dist/cjs/elements/form/output/output.cjs +2 -0
- package/dist/cjs/elements/form/output/output.cjs.map +1 -0
- package/dist/cjs/elements/form/progress/progress.cjs +2 -0
- package/dist/cjs/elements/form/progress/progress.cjs.map +1 -0
- package/dist/cjs/elements/form/select/select.cjs +2 -0
- package/dist/cjs/elements/form/select/select.cjs.map +1 -0
- package/dist/cjs/elements/form/textarea/textarea.cjs +2 -0
- package/dist/cjs/elements/form/textarea/textarea.cjs.map +1 -0
- package/dist/cjs/elements/heading/h1/h1.cjs +2 -0
- package/dist/cjs/elements/heading/h1/h1.cjs.map +1 -0
- package/dist/cjs/elements/heading/h2/h2.cjs +2 -0
- package/dist/cjs/elements/heading/h2/h2.cjs.map +1 -0
- package/dist/cjs/elements/heading/h3/h3.cjs +2 -0
- package/dist/cjs/elements/heading/h3/h3.cjs.map +1 -0
- package/dist/cjs/elements/heading/h4/h4.cjs +2 -0
- package/dist/cjs/elements/heading/h4/h4.cjs.map +1 -0
- package/dist/cjs/elements/heading/h5/h5.cjs +2 -0
- package/dist/cjs/elements/heading/h5/h5.cjs.map +1 -0
- package/dist/cjs/elements/heading/h6/h6.cjs +2 -0
- package/dist/cjs/elements/heading/h6/h6.cjs.map +1 -0
- package/dist/cjs/elements/heading/heading.cjs +2 -0
- package/dist/cjs/elements/heading/heading.cjs.map +1 -0
- package/dist/cjs/elements/inline/a/a.cjs +2 -0
- package/dist/cjs/elements/inline/a/a.cjs.map +1 -0
- package/dist/cjs/elements/inline/abbr/abbr.cjs +2 -0
- package/dist/cjs/elements/inline/abbr/abbr.cjs.map +1 -0
- package/dist/cjs/elements/inline/b/b.cjs +2 -0
- package/dist/cjs/elements/inline/b/b.cjs.map +1 -0
- package/dist/cjs/elements/inline/cite/cite.cjs +2 -0
- package/dist/cjs/elements/inline/cite/cite.cjs.map +1 -0
- package/dist/cjs/elements/inline/code/code.cjs +2 -0
- package/dist/cjs/elements/inline/code/code.cjs.map +1 -0
- package/dist/cjs/elements/inline/data/data.cjs +2 -0
- package/dist/cjs/elements/inline/data/data.cjs.map +1 -0
- package/dist/cjs/elements/inline/dfn/dfn.cjs +2 -0
- package/dist/cjs/elements/inline/dfn/dfn.cjs.map +1 -0
- package/dist/cjs/elements/inline/em/em.cjs +2 -0
- package/dist/cjs/elements/inline/em/em.cjs.map +1 -0
- package/dist/cjs/elements/inline/i/i.cjs +2 -0
- package/dist/cjs/elements/inline/i/i.cjs.map +1 -0
- package/dist/cjs/elements/inline/inline.cjs +1 -0
- package/dist/cjs/elements/inline/kbd/kbd.cjs +2 -0
- package/dist/cjs/elements/inline/kbd/kbd.cjs.map +1 -0
- package/dist/cjs/elements/inline/mark/mark.cjs +2 -0
- package/dist/cjs/elements/inline/mark/mark.cjs.map +1 -0
- package/dist/cjs/elements/inline/q/q.cjs +2 -0
- package/dist/cjs/elements/inline/q/q.cjs.map +1 -0
- package/dist/cjs/elements/inline/rb/rb.cjs +2 -0
- package/dist/cjs/elements/inline/rb/rb.cjs.map +1 -0
- package/dist/cjs/elements/inline/rt/rt.cjs +2 -0
- package/dist/cjs/elements/inline/rt/rt.cjs.map +1 -0
- package/dist/cjs/elements/inline/rtc/rtc.cjs +2 -0
- package/dist/cjs/elements/inline/rtc/rtc.cjs.map +1 -0
- package/dist/cjs/elements/inline/ruby/ruby.cjs +2 -0
- package/dist/cjs/elements/inline/ruby/ruby.cjs.map +1 -0
- package/dist/cjs/elements/inline/s/s.cjs +2 -0
- package/dist/cjs/elements/inline/s/s.cjs.map +1 -0
- package/dist/cjs/elements/inline/samp/samp.cjs +2 -0
- package/dist/cjs/elements/inline/samp/samp.cjs.map +1 -0
- package/dist/cjs/elements/inline/small/small.cjs +2 -0
- package/dist/cjs/elements/inline/small/small.cjs.map +1 -0
- package/dist/cjs/elements/inline/strong/strong.cjs +2 -0
- package/dist/cjs/elements/inline/strong/strong.cjs.map +1 -0
- package/dist/cjs/elements/inline/sub/sub.cjs +2 -0
- package/dist/cjs/elements/inline/sub/sub.cjs.map +1 -0
- package/dist/cjs/elements/inline/sup/sup.cjs +2 -0
- package/dist/cjs/elements/inline/sup/sup.cjs.map +1 -0
- package/dist/cjs/elements/inline/time/time.cjs +2 -0
- package/dist/cjs/elements/inline/time/time.cjs.map +1 -0
- package/dist/cjs/elements/inline/u/u.cjs +2 -0
- package/dist/cjs/elements/inline/u/u.cjs.map +1 -0
- package/dist/cjs/elements/inline/var/var.cjs +2 -0
- package/dist/cjs/elements/inline/var/var.cjs.map +1 -0
- package/dist/cjs/elements/interactive/details/details.cjs +2 -0
- package/dist/cjs/elements/interactive/details/details.cjs.map +1 -0
- package/dist/cjs/elements/interactive/dialog/dialog.cjs +2 -0
- package/dist/cjs/elements/interactive/dialog/dialog.cjs.map +1 -0
- package/dist/cjs/elements/interactive/interactive.cjs +2 -0
- package/dist/cjs/elements/interactive/interactive.cjs.map +1 -0
- package/dist/cjs/elements/interactive/summary/summary.cjs +2 -0
- package/dist/cjs/elements/interactive/summary/summary.cjs.map +1 -0
- package/dist/cjs/elements/layout/article/article.cjs +2 -0
- package/dist/cjs/elements/layout/article/article.cjs.map +1 -0
- package/dist/cjs/elements/layout/aside/aside.cjs +2 -0
- package/dist/cjs/elements/layout/aside/aside.cjs.map +1 -0
- package/dist/cjs/elements/layout/footer/footer.cjs +2 -0
- package/dist/cjs/elements/layout/footer/footer.cjs.map +1 -0
- package/dist/cjs/elements/layout/header/header.cjs +2 -0
- package/dist/cjs/elements/layout/header/header.cjs.map +1 -0
- package/dist/cjs/elements/layout/layout.cjs +2 -0
- package/dist/cjs/elements/layout/layout.cjs.map +1 -0
- package/dist/cjs/elements/layout/main/main.cjs +2 -0
- package/dist/cjs/elements/layout/main/main.cjs.map +1 -0
- package/dist/cjs/elements/layout/nav/nav.cjs +2 -0
- package/dist/cjs/elements/layout/nav/nav.cjs.map +1 -0
- package/dist/cjs/elements/layout/section/section.cjs +2 -0
- package/dist/cjs/elements/layout/section/section.cjs.map +1 -0
- package/dist/cjs/elements/list/dd/dd.cjs +2 -0
- package/dist/cjs/elements/list/dd/dd.cjs.map +1 -0
- package/dist/cjs/elements/list/dl/dl.cjs +2 -0
- package/dist/cjs/elements/list/dl/dl.cjs.map +1 -0
- package/dist/cjs/elements/list/dt/dt.cjs +2 -0
- package/dist/cjs/elements/list/dt/dt.cjs.map +1 -0
- package/dist/cjs/elements/list/li/li.cjs +2 -0
- package/dist/cjs/elements/list/li/li.cjs.map +1 -0
- package/dist/cjs/elements/list/list.cjs +2 -0
- package/dist/cjs/elements/list/list.cjs.map +1 -0
- package/dist/cjs/elements/list/ol/ol.cjs +2 -0
- package/dist/cjs/elements/list/ol/ol.cjs.map +1 -0
- package/dist/cjs/elements/list/ul/ul.cjs +2 -0
- package/dist/cjs/elements/list/ul/ul.cjs.map +1 -0
- package/dist/cjs/elements/media/audio/audio.cjs +2 -0
- package/dist/cjs/elements/media/audio/audio.cjs.map +1 -0
- package/dist/cjs/elements/media/canvas/canvas.cjs +2 -0
- package/dist/cjs/elements/media/canvas/canvas.cjs.map +1 -0
- package/dist/cjs/elements/media/embed/embed.cjs +2 -0
- package/dist/cjs/elements/media/embed/embed.cjs.map +1 -0
- package/dist/cjs/elements/media/iframe/iframe.cjs +2 -0
- package/dist/cjs/elements/media/iframe/iframe.cjs.map +1 -0
- package/dist/cjs/elements/media/img/img.cjs +2 -0
- package/dist/cjs/elements/media/img/img.cjs.map +1 -0
- package/dist/cjs/elements/media/math/math.cjs +2 -0
- package/dist/cjs/elements/media/math/math.cjs.map +1 -0
- package/dist/cjs/elements/media/media.cjs +2 -0
- package/dist/cjs/elements/media/media.cjs.map +1 -0
- package/dist/cjs/elements/media/object/object.cjs +2 -0
- package/dist/cjs/elements/media/object/object.cjs.map +1 -0
- package/dist/cjs/elements/media/svg/svg.cjs +2 -0
- package/dist/cjs/elements/media/svg/svg.cjs.map +1 -0
- package/dist/cjs/elements/media/video/video.cjs +2 -0
- package/dist/cjs/elements/media/video/video.cjs.map +1 -0
- package/dist/cjs/elements/responsive/area/area.cjs +2 -0
- package/dist/cjs/elements/responsive/area/area.cjs.map +1 -0
- package/dist/cjs/elements/responsive/map/map.cjs +2 -0
- package/dist/cjs/elements/responsive/map/map.cjs.map +1 -0
- package/dist/cjs/elements/responsive/picture/picture.cjs +2 -0
- package/dist/cjs/elements/responsive/picture/picture.cjs.map +1 -0
- package/dist/cjs/elements/responsive/responsive.cjs +2 -0
- package/dist/cjs/elements/responsive/responsive.cjs.map +1 -0
- package/dist/cjs/elements/responsive/source/source.cjs +2 -0
- package/dist/cjs/elements/responsive/source/source.cjs.map +1 -0
- package/dist/cjs/elements/responsive/track/track.cjs +2 -0
- package/dist/cjs/elements/responsive/track/track.cjs.map +1 -0
- package/dist/cjs/elements/table/caption/caption.cjs +2 -0
- package/dist/cjs/elements/table/caption/caption.cjs.map +1 -0
- package/dist/cjs/elements/table/col/col.cjs +2 -0
- package/dist/cjs/elements/table/col/col.cjs.map +1 -0
- package/dist/cjs/elements/table/colgroup/colgroup.cjs +2 -0
- package/dist/cjs/elements/table/colgroup/colgroup.cjs.map +1 -0
- package/dist/cjs/elements/table/table/table.cjs +2 -0
- package/dist/cjs/elements/table/table/table.cjs.map +1 -0
- package/dist/cjs/elements/table/table.cjs +2 -0
- package/dist/cjs/elements/table/table.cjs.map +1 -0
- package/dist/cjs/elements/table/tbody/tbody.cjs +2 -0
- package/dist/cjs/elements/table/tbody/tbody.cjs.map +1 -0
- package/dist/cjs/elements/table/td/td.cjs +2 -0
- package/dist/cjs/elements/table/td/td.cjs.map +1 -0
- package/dist/cjs/elements/table/tfoot/tfoot.cjs +2 -0
- package/dist/cjs/elements/table/tfoot/tfoot.cjs.map +1 -0
- package/dist/cjs/elements/table/th/th.cjs +2 -0
- package/dist/cjs/elements/table/th/th.cjs.map +1 -0
- package/dist/cjs/elements/table/thead/thead.cjs +2 -0
- package/dist/cjs/elements/table/thead/thead.cjs.map +1 -0
- package/dist/cjs/elements/table/tr/tr.cjs +2 -0
- package/dist/cjs/elements/table/tr/tr.cjs.map +1 -0
- package/dist/cjs/elements/text/address/address.cjs +2 -0
- package/dist/cjs/elements/text/address/address.cjs.map +1 -0
- package/dist/cjs/elements/text/blockquote/blockquote.cjs +2 -0
- package/dist/cjs/elements/text/blockquote/blockquote.cjs.map +1 -0
- package/dist/cjs/elements/text/hr/hr.cjs +2 -0
- package/dist/cjs/elements/text/hr/hr.cjs.map +1 -0
- package/dist/cjs/elements/text/paragraph/paragraph.cjs +2 -0
- package/dist/cjs/elements/text/paragraph/paragraph.cjs.map +1 -0
- package/dist/cjs/elements/text/pre/pre.cjs +2 -0
- package/dist/cjs/elements/text/pre/pre.cjs.map +1 -0
- package/dist/cjs/elements/text/text.cjs +2 -0
- package/dist/cjs/elements/text/text.cjs.map +1 -0
- package/dist/cjs/elements.cjs +2 -0
- package/dist/cjs/elements.cjs.map +1 -0
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/css/core.css +1 -0
- package/dist/css/core.css.map +1 -0
- package/dist/css/elements/break/br/br.css +1 -0
- package/dist/css/elements/break/br/br.css.map +1 -0
- package/dist/css/elements/break/wbr/wbr.css +1 -0
- package/dist/css/elements/break/wbr/wbr.css.map +1 -0
- package/dist/css/elements/container/div/div.css +1 -0
- package/dist/css/elements/container/div/div.css.map +1 -0
- package/dist/css/elements/container/span/span.css +1 -0
- package/dist/css/elements/container/span/span.css.map +1 -0
- package/dist/css/elements/figure/figcaption/figcaption.css +1 -0
- package/dist/css/elements/figure/figcaption/figcaption.css.map +1 -0
- package/dist/css/elements/figure/figure/figure.css +1 -0
- package/dist/css/elements/figure/figure/figure.css.map +1 -0
- package/dist/css/elements/form/button/button.css +1 -0
- package/dist/css/elements/form/button/button.css.map +1 -0
- package/dist/css/elements/form/datalist/datalist.css +1 -0
- package/dist/css/elements/form/datalist/datalist.css.map +1 -0
- package/dist/css/elements/form/fieldset/fieldset.css +1 -0
- package/dist/css/elements/form/fieldset/fieldset.css.map +1 -0
- package/dist/css/elements/form/form/form.css +1 -0
- package/dist/css/elements/form/form/form.css.map +1 -0
- package/dist/css/elements/form/input/input.css +1 -0
- package/dist/css/elements/form/input/input.css.map +1 -0
- package/dist/css/elements/form/label/label.css +1 -0
- package/dist/css/elements/form/label/label.css.map +1 -0
- package/dist/css/elements/form/legend/legend.css +1 -0
- package/dist/css/elements/form/legend/legend.css.map +1 -0
- package/dist/css/elements/form/meter/meter.css +1 -0
- package/dist/css/elements/form/meter/meter.css.map +1 -0
- package/dist/css/elements/form/optgroup/optgroup.css +1 -0
- package/dist/css/elements/form/optgroup/optgroup.css.map +1 -0
- package/dist/css/elements/form/option/option.css +1 -0
- package/dist/css/elements/form/option/option.css.map +1 -0
- package/dist/css/elements/form/output/output.css +1 -0
- package/dist/css/elements/form/output/output.css.map +1 -0
- package/dist/css/elements/form/progress/progress.css +1 -0
- package/dist/css/elements/form/progress/progress.css.map +1 -0
- package/dist/css/elements/form/select/select.css +1 -0
- package/dist/css/elements/form/select/select.css.map +1 -0
- package/dist/css/elements/form/textarea/textarea.css +1 -0
- package/dist/css/elements/form/textarea/textarea.css.map +1 -0
- package/dist/css/elements/heading/h1/h1.css +1 -0
- package/dist/css/elements/heading/h1/h1.css.map +1 -0
- package/dist/css/elements/heading/h2/h2.css +1 -0
- package/dist/css/elements/heading/h2/h2.css.map +1 -0
- package/dist/css/elements/heading/h3/h3.css +1 -0
- package/dist/css/elements/heading/h3/h3.css.map +1 -0
- package/dist/css/elements/heading/h4/h4.css +1 -0
- package/dist/css/elements/heading/h4/h4.css.map +1 -0
- package/dist/css/elements/heading/h5/h5.css +1 -0
- package/dist/css/elements/heading/h5/h5.css.map +1 -0
- package/dist/css/elements/heading/h6/h6.css +1 -0
- package/dist/css/elements/heading/h6/h6.css.map +1 -0
- package/dist/css/elements/inline/a/a.css +1 -0
- package/dist/css/elements/inline/a/a.css.map +1 -0
- package/dist/css/elements/inline/abbr/abbr.css +1 -0
- package/dist/css/elements/inline/abbr/abbr.css.map +1 -0
- package/dist/css/elements/inline/b/b.css +1 -0
- package/dist/css/elements/inline/b/b.css.map +1 -0
- package/dist/css/elements/inline/cite/cite.css +1 -0
- package/dist/css/elements/inline/cite/cite.css.map +1 -0
- package/dist/css/elements/inline/code/code.css +1 -0
- package/dist/css/elements/inline/code/code.css.map +1 -0
- package/dist/css/elements/inline/data/data.css +1 -0
- package/dist/css/elements/inline/data/data.css.map +1 -0
- package/dist/css/elements/inline/dfn/dfn.css +1 -0
- package/dist/css/elements/inline/dfn/dfn.css.map +1 -0
- package/dist/css/elements/inline/em/em.css +1 -0
- package/dist/css/elements/inline/em/em.css.map +1 -0
- package/dist/css/elements/inline/i/i.css +1 -0
- package/dist/css/elements/inline/i/i.css.map +1 -0
- package/dist/css/elements/inline/kbd/kbd.css +1 -0
- package/dist/css/elements/inline/kbd/kbd.css.map +1 -0
- package/dist/css/elements/inline/mark/mark.css +1 -0
- package/dist/css/elements/inline/mark/mark.css.map +1 -0
- package/dist/css/elements/inline/q/q.css +1 -0
- package/dist/css/elements/inline/q/q.css.map +1 -0
- package/dist/css/elements/inline/rb/rb.css +1 -0
- package/dist/css/elements/inline/rb/rb.css.map +1 -0
- package/dist/css/elements/inline/rp/rp.css +1 -0
- package/dist/css/elements/inline/rp/rp.css.map +1 -0
- package/dist/css/elements/inline/rt/rt.css +1 -0
- package/dist/css/elements/inline/rt/rt.css.map +1 -0
- package/dist/css/elements/inline/rtc/rtc.css +1 -0
- package/dist/css/elements/inline/rtc/rtc.css.map +1 -0
- package/dist/css/elements/inline/ruby/ruby.css +1 -0
- package/dist/css/elements/inline/ruby/ruby.css.map +1 -0
- package/dist/css/elements/inline/s/s.css +1 -0
- package/dist/css/elements/inline/s/s.css.map +1 -0
- package/dist/css/elements/inline/samp/samp.css +1 -0
- package/dist/css/elements/inline/samp/samp.css.map +1 -0
- package/dist/css/elements/inline/small/small.css +1 -0
- package/dist/css/elements/inline/small/small.css.map +1 -0
- package/dist/css/elements/inline/strong/strong.css +1 -0
- package/dist/css/elements/inline/strong/strong.css.map +1 -0
- package/dist/css/elements/inline/sub/sub.css +1 -0
- package/dist/css/elements/inline/sub/sub.css.map +1 -0
- package/dist/css/elements/inline/sup/sup.css +1 -0
- package/dist/css/elements/inline/sup/sup.css.map +1 -0
- package/dist/css/elements/inline/time/time.css +1 -0
- package/dist/css/elements/inline/time/time.css.map +1 -0
- package/dist/css/elements/inline/u/u.css +1 -0
- package/dist/css/elements/inline/u/u.css.map +1 -0
- package/dist/css/elements/inline/var/var.css +1 -0
- package/dist/css/elements/inline/var/var.css.map +1 -0
- package/dist/css/elements/interactive/details/details.css +1 -0
- package/dist/css/elements/interactive/details/details.css.map +1 -0
- package/dist/css/elements/interactive/dialog/dialog.css +1 -0
- package/dist/css/elements/interactive/dialog/dialog.css.map +1 -0
- package/dist/css/elements/interactive/summary/summary.css +1 -0
- package/dist/css/elements/interactive/summary/summary.css.map +1 -0
- package/dist/css/elements/layout/article/article.css +1 -0
- package/dist/css/elements/layout/article/article.css.map +1 -0
- package/dist/css/elements/layout/aside/aside.css +1 -0
- package/dist/css/elements/layout/aside/aside.css.map +1 -0
- package/dist/css/elements/layout/footer/footer.css +1 -0
- package/dist/css/elements/layout/footer/footer.css.map +1 -0
- package/dist/css/elements/layout/header/header.css +1 -0
- package/dist/css/elements/layout/header/header.css.map +1 -0
- package/dist/css/elements/layout/main/main.css +1 -0
- package/dist/css/elements/layout/main/main.css.map +1 -0
- package/dist/css/elements/layout/nav/nav.css +1 -0
- package/dist/css/elements/layout/nav/nav.css.map +1 -0
- package/dist/css/elements/layout/section/section.css +1 -0
- package/dist/css/elements/layout/section/section.css.map +1 -0
- package/dist/css/elements/list/dd/dd.css +1 -0
- package/dist/css/elements/list/dd/dd.css.map +1 -0
- package/dist/css/elements/list/dl/dl.css +1 -0
- package/dist/css/elements/list/dl/dl.css.map +1 -0
- package/dist/css/elements/list/dt/dt.css +1 -0
- package/dist/css/elements/list/dt/dt.css.map +1 -0
- package/dist/css/elements/list/li/li.css +1 -0
- package/dist/css/elements/list/li/li.css.map +1 -0
- package/dist/css/elements/list/ol/ol.css +1 -0
- package/dist/css/elements/list/ol/ol.css.map +1 -0
- package/dist/css/elements/list/ul/ul.css +1 -0
- package/dist/css/elements/list/ul/ul.css.map +1 -0
- package/dist/css/elements/media/audio/audio.css +1 -0
- package/dist/css/elements/media/audio/audio.css.map +1 -0
- package/dist/css/elements/media/canvas/canvas.css +1 -0
- package/dist/css/elements/media/canvas/canvas.css.map +1 -0
- package/dist/css/elements/media/embed/embed.css +1 -0
- package/dist/css/elements/media/embed/embed.css.map +1 -0
- package/dist/css/elements/media/iframe/iframe.css +1 -0
- package/dist/css/elements/media/iframe/iframe.css.map +1 -0
- package/dist/css/elements/media/img/img.css +1 -0
- package/dist/css/elements/media/img/img.css.map +1 -0
- package/dist/css/elements/media/math/math.css +1 -0
- package/dist/css/elements/media/math/math.css.map +1 -0
- package/dist/css/elements/media/object/object.css +1 -0
- package/dist/css/elements/media/object/object.css.map +1 -0
- package/dist/css/elements/media/svg/svg.css +1 -0
- package/dist/css/elements/media/svg/svg.css.map +1 -0
- package/dist/css/elements/media/video/video.css +1 -0
- package/dist/css/elements/media/video/video.css.map +1 -0
- package/dist/css/elements/responsive/area/area.css +1 -0
- package/dist/css/elements/responsive/area/area.css.map +1 -0
- package/dist/css/elements/responsive/map/map.css +1 -0
- package/dist/css/elements/responsive/map/map.css.map +1 -0
- package/dist/css/elements/responsive/picture/picture.css +1 -0
- package/dist/css/elements/responsive/picture/picture.css.map +1 -0
- package/dist/css/elements/responsive/source/source.css +1 -0
- package/dist/css/elements/responsive/source/source.css.map +1 -0
- package/dist/css/elements/responsive/track/track.css +1 -0
- package/dist/css/elements/responsive/track/track.css.map +1 -0
- package/dist/css/elements/table/caption/caption.css +1 -0
- package/dist/css/elements/table/caption/caption.css.map +1 -0
- package/dist/css/elements/table/col/col.css +1 -0
- package/dist/css/elements/table/col/col.css.map +1 -0
- package/dist/css/elements/table/colgroup/colgroup.css +1 -0
- package/dist/css/elements/table/colgroup/colgroup.css.map +1 -0
- package/dist/css/elements/table/table/table.css +1 -0
- package/dist/css/elements/table/table/table.css.map +1 -0
- package/dist/css/elements/table/tbody/tbody.css +1 -0
- package/dist/css/elements/table/tbody/tbody.css.map +1 -0
- package/dist/css/elements/table/td/td.css +1 -0
- package/dist/css/elements/table/td/td.css.map +1 -0
- package/dist/css/elements/table/tfoot/tfoot.css +1 -0
- package/dist/css/elements/table/tfoot/tfoot.css.map +1 -0
- package/dist/css/elements/table/th/th.css +1 -0
- package/dist/css/elements/table/th/th.css.map +1 -0
- package/dist/css/elements/table/thead/thead.css +1 -0
- package/dist/css/elements/table/thead/thead.css.map +1 -0
- package/dist/css/elements/table/tr/tr.css +1 -0
- package/dist/css/elements/table/tr/tr.css.map +1 -0
- package/dist/css/elements/text/address/address.css +1 -0
- package/dist/css/elements/text/address/address.css.map +1 -0
- package/dist/css/elements/text/blockquote/blockquote.css +1 -0
- package/dist/css/elements/text/blockquote/blockquote.css.map +1 -0
- package/dist/css/elements/text/hr/hr.css +1 -0
- package/dist/css/elements/text/hr/hr.css.map +1 -0
- package/dist/css/elements/text/paragraph/paragraph.css +1 -0
- package/dist/css/elements/text/paragraph/paragraph.css.map +1 -0
- package/dist/css/elements/text/pre/pre.css +1 -0
- package/dist/css/elements/text/pre/pre.css.map +1 -0
- package/dist/css/main.css +1 -0
- package/dist/css/main.css.map +1 -0
- package/dist/esm/chunks/dom.js +38 -0
- package/dist/esm/chunks/dom.js.map +1 -0
- package/dist/esm/chunks/inline.js +81 -0
- package/dist/esm/chunks/inline.js.map +1 -0
- package/dist/esm/chunks/pkgn-sol.js +7 -0
- package/dist/esm/chunks/pkgn-sol.js.map +1 -0
- package/dist/esm/elements/break/br/br.js +26 -0
- package/dist/esm/elements/break/br/br.js.map +1 -0
- package/dist/esm/elements/break/break.js +12 -0
- package/dist/esm/elements/break/break.js.map +1 -0
- package/dist/esm/elements/break/wbr/wbr.js +26 -0
- package/dist/esm/elements/break/wbr/wbr.js.map +1 -0
- package/dist/esm/elements/container/container.js +12 -0
- package/dist/esm/elements/container/container.js.map +1 -0
- package/dist/esm/elements/container/div/div.js +26 -0
- package/dist/esm/elements/container/div/div.js.map +1 -0
- package/dist/esm/elements/container/span/span.js +26 -0
- package/dist/esm/elements/container/span/span.js.map +1 -0
- package/dist/esm/elements/figure/figcaption/figcaption.js +26 -0
- package/dist/esm/elements/figure/figcaption/figcaption.js.map +1 -0
- package/dist/esm/elements/figure/figure/figure.js +26 -0
- package/dist/esm/elements/figure/figure/figure.js.map +1 -0
- package/dist/esm/elements/figure/figure.js +12 -0
- package/dist/esm/elements/figure/figure.js.map +1 -0
- package/dist/esm/elements/form/button/button.js +31 -0
- package/dist/esm/elements/form/button/button.js.map +1 -0
- package/dist/esm/elements/form/datalist/datalist.js +26 -0
- package/dist/esm/elements/form/datalist/datalist.js.map +1 -0
- package/dist/esm/elements/form/fieldset/fieldset.js +27 -0
- package/dist/esm/elements/form/fieldset/fieldset.js.map +1 -0
- package/dist/esm/elements/form/form/form.js +27 -0
- package/dist/esm/elements/form/form/form.js.map +1 -0
- package/dist/esm/elements/form/form.js +36 -0
- package/dist/esm/elements/form/form.js.map +1 -0
- package/dist/esm/elements/form/input/input.js +31 -0
- package/dist/esm/elements/form/input/input.js.map +1 -0
- package/dist/esm/elements/form/label/label.js +29 -0
- package/dist/esm/elements/form/label/label.js.map +1 -0
- package/dist/esm/elements/form/legend/legend.js +26 -0
- package/dist/esm/elements/form/legend/legend.js.map +1 -0
- package/dist/esm/elements/form/meter/meter.js +29 -0
- package/dist/esm/elements/form/meter/meter.js.map +1 -0
- package/dist/esm/elements/form/optgroup/optgroup.js +24 -0
- package/dist/esm/elements/form/optgroup/optgroup.js.map +1 -0
- package/dist/esm/elements/form/option/option.js +26 -0
- package/dist/esm/elements/form/option/option.js.map +1 -0
- package/dist/esm/elements/form/output/output.js +27 -0
- package/dist/esm/elements/form/output/output.js.map +1 -0
- package/dist/esm/elements/form/progress/progress.js +27 -0
- package/dist/esm/elements/form/progress/progress.js.map +1 -0
- package/dist/esm/elements/form/select/select.js +29 -0
- package/dist/esm/elements/form/select/select.js.map +1 -0
- package/dist/esm/elements/form/textarea/textarea.js +31 -0
- package/dist/esm/elements/form/textarea/textarea.js.map +1 -0
- package/dist/esm/elements/heading/h1/h1.js +26 -0
- package/dist/esm/elements/heading/h1/h1.js.map +1 -0
- package/dist/esm/elements/heading/h2/h2.js +26 -0
- package/dist/esm/elements/heading/h2/h2.js.map +1 -0
- package/dist/esm/elements/heading/h3/h3.js +26 -0
- package/dist/esm/elements/heading/h3/h3.js.map +1 -0
- package/dist/esm/elements/heading/h4/h4.js +26 -0
- package/dist/esm/elements/heading/h4/h4.js.map +1 -0
- package/dist/esm/elements/heading/h5/h5.js +26 -0
- package/dist/esm/elements/heading/h5/h5.js.map +1 -0
- package/dist/esm/elements/heading/h6/h6.js +26 -0
- package/dist/esm/elements/heading/h6/h6.js.map +1 -0
- package/dist/esm/elements/heading/heading.js +20 -0
- package/dist/esm/elements/heading/heading.js.map +1 -0
- package/dist/esm/elements/inline/a/a.js +28 -0
- package/dist/esm/elements/inline/a/a.js.map +1 -0
- package/dist/esm/elements/inline/abbr/abbr.js +26 -0
- package/dist/esm/elements/inline/abbr/abbr.js.map +1 -0
- package/dist/esm/elements/inline/b/b.js +26 -0
- package/dist/esm/elements/inline/b/b.js.map +1 -0
- package/dist/esm/elements/inline/cite/cite.js +26 -0
- package/dist/esm/elements/inline/cite/cite.js.map +1 -0
- package/dist/esm/elements/inline/code/code.js +26 -0
- package/dist/esm/elements/inline/code/code.js.map +1 -0
- package/dist/esm/elements/inline/data/data.js +26 -0
- package/dist/esm/elements/inline/data/data.js.map +1 -0
- package/dist/esm/elements/inline/dfn/dfn.js +26 -0
- package/dist/esm/elements/inline/dfn/dfn.js.map +1 -0
- package/dist/esm/elements/inline/em/em.js +26 -0
- package/dist/esm/elements/inline/em/em.js.map +1 -0
- package/dist/esm/elements/inline/i/i.js +26 -0
- package/dist/esm/elements/inline/i/i.js.map +1 -0
- package/dist/esm/elements/inline/inline.js +27 -0
- package/dist/esm/elements/inline/kbd/kbd.js +26 -0
- package/dist/esm/elements/inline/kbd/kbd.js.map +1 -0
- package/dist/esm/elements/inline/mark/mark.js +26 -0
- package/dist/esm/elements/inline/mark/mark.js.map +1 -0
- package/dist/esm/elements/inline/q/q.js +33 -0
- package/dist/esm/elements/inline/q/q.js.map +1 -0
- package/dist/esm/elements/inline/rb/rb.js +26 -0
- package/dist/esm/elements/inline/rb/rb.js.map +1 -0
- package/dist/esm/elements/inline/rt/rt.js +26 -0
- package/dist/esm/elements/inline/rt/rt.js.map +1 -0
- package/dist/esm/elements/inline/rtc/rtc.js +27 -0
- package/dist/esm/elements/inline/rtc/rtc.js.map +1 -0
- package/dist/esm/elements/inline/ruby/ruby.js +26 -0
- package/dist/esm/elements/inline/ruby/ruby.js.map +1 -0
- package/dist/esm/elements/inline/s/s.js +26 -0
- package/dist/esm/elements/inline/s/s.js.map +1 -0
- package/dist/esm/elements/inline/samp/samp.js +26 -0
- package/dist/esm/elements/inline/samp/samp.js.map +1 -0
- package/dist/esm/elements/inline/small/small.js +26 -0
- package/dist/esm/elements/inline/small/small.js.map +1 -0
- package/dist/esm/elements/inline/strong/strong.js +26 -0
- package/dist/esm/elements/inline/strong/strong.js.map +1 -0
- package/dist/esm/elements/inline/sub/sub.js +26 -0
- package/dist/esm/elements/inline/sub/sub.js.map +1 -0
- package/dist/esm/elements/inline/sup/sup.js +26 -0
- package/dist/esm/elements/inline/sup/sup.js.map +1 -0
- package/dist/esm/elements/inline/time/time.js +26 -0
- package/dist/esm/elements/inline/time/time.js.map +1 -0
- package/dist/esm/elements/inline/u/u.js +26 -0
- package/dist/esm/elements/inline/u/u.js.map +1 -0
- package/dist/esm/elements/inline/var/var.js +26 -0
- package/dist/esm/elements/inline/var/var.js.map +1 -0
- package/dist/esm/elements/interactive/details/details.js +29 -0
- package/dist/esm/elements/interactive/details/details.js.map +1 -0
- package/dist/esm/elements/interactive/dialog/dialog.js +26 -0
- package/dist/esm/elements/interactive/dialog/dialog.js.map +1 -0
- package/dist/esm/elements/interactive/interactive.js +14 -0
- package/dist/esm/elements/interactive/interactive.js.map +1 -0
- package/dist/esm/elements/interactive/summary/summary.js +26 -0
- package/dist/esm/elements/interactive/summary/summary.js.map +1 -0
- package/dist/esm/elements/layout/article/article.js +26 -0
- package/dist/esm/elements/layout/article/article.js.map +1 -0
- package/dist/esm/elements/layout/aside/aside.js +26 -0
- package/dist/esm/elements/layout/aside/aside.js.map +1 -0
- package/dist/esm/elements/layout/footer/footer.js +26 -0
- package/dist/esm/elements/layout/footer/footer.js.map +1 -0
- package/dist/esm/elements/layout/header/header.js +26 -0
- package/dist/esm/elements/layout/header/header.js.map +1 -0
- package/dist/esm/elements/layout/layout.js +22 -0
- package/dist/esm/elements/layout/layout.js.map +1 -0
- package/dist/esm/elements/layout/main/main.js +26 -0
- package/dist/esm/elements/layout/main/main.js.map +1 -0
- package/dist/esm/elements/layout/nav/nav.js +26 -0
- package/dist/esm/elements/layout/nav/nav.js.map +1 -0
- package/dist/esm/elements/layout/section/section.js +26 -0
- package/dist/esm/elements/layout/section/section.js.map +1 -0
- package/dist/esm/elements/list/dd/dd.js +26 -0
- package/dist/esm/elements/list/dd/dd.js.map +1 -0
- package/dist/esm/elements/list/dl/dl.js +26 -0
- package/dist/esm/elements/list/dl/dl.js.map +1 -0
- package/dist/esm/elements/list/dt/dt.js +26 -0
- package/dist/esm/elements/list/dt/dt.js.map +1 -0
- package/dist/esm/elements/list/li/li.js +27 -0
- package/dist/esm/elements/list/li/li.js.map +1 -0
- package/dist/esm/elements/list/list.js +20 -0
- package/dist/esm/elements/list/list.js.map +1 -0
- package/dist/esm/elements/list/ol/ol.js +27 -0
- package/dist/esm/elements/list/ol/ol.js.map +1 -0
- package/dist/esm/elements/list/ul/ul.js +26 -0
- package/dist/esm/elements/list/ul/ul.js.map +1 -0
- package/dist/esm/elements/media/audio/audio.js +27 -0
- package/dist/esm/elements/media/audio/audio.js.map +1 -0
- package/dist/esm/elements/media/canvas/canvas.js +21 -0
- package/dist/esm/elements/media/canvas/canvas.js.map +1 -0
- package/dist/esm/elements/media/embed/embed.js +44 -0
- package/dist/esm/elements/media/embed/embed.js.map +1 -0
- package/dist/esm/elements/media/iframe/iframe.js +27 -0
- package/dist/esm/elements/media/iframe/iframe.js.map +1 -0
- package/dist/esm/elements/media/img/img.js +25 -0
- package/dist/esm/elements/media/img/img.js.map +1 -0
- package/dist/esm/elements/media/math/math.js +23 -0
- package/dist/esm/elements/media/math/math.js.map +1 -0
- package/dist/esm/elements/media/media.js +26 -0
- package/dist/esm/elements/media/media.js.map +1 -0
- package/dist/esm/elements/media/object/object.js +37 -0
- package/dist/esm/elements/media/object/object.js.map +1 -0
- package/dist/esm/elements/media/svg/svg.js +27 -0
- package/dist/esm/elements/media/svg/svg.js.map +1 -0
- package/dist/esm/elements/media/video/video.js +27 -0
- package/dist/esm/elements/media/video/video.js.map +1 -0
- package/dist/esm/elements/responsive/area/area.js +20 -0
- package/dist/esm/elements/responsive/area/area.js.map +1 -0
- package/dist/esm/elements/responsive/map/map.js +35 -0
- package/dist/esm/elements/responsive/map/map.js.map +1 -0
- package/dist/esm/elements/responsive/picture/picture.js +26 -0
- package/dist/esm/elements/responsive/picture/picture.js.map +1 -0
- package/dist/esm/elements/responsive/responsive.js +18 -0
- package/dist/esm/elements/responsive/responsive.js.map +1 -0
- package/dist/esm/elements/responsive/source/source.js +29 -0
- package/dist/esm/elements/responsive/source/source.js.map +1 -0
- package/dist/esm/elements/responsive/track/track.js +27 -0
- package/dist/esm/elements/responsive/track/track.js.map +1 -0
- package/dist/esm/elements/table/caption/caption.js +26 -0
- package/dist/esm/elements/table/caption/caption.js.map +1 -0
- package/dist/esm/elements/table/col/col.js +30 -0
- package/dist/esm/elements/table/col/col.js.map +1 -0
- package/dist/esm/elements/table/colgroup/colgroup.js +33 -0
- package/dist/esm/elements/table/colgroup/colgroup.js.map +1 -0
- package/dist/esm/elements/table/table/table.js +26 -0
- package/dist/esm/elements/table/table/table.js.map +1 -0
- package/dist/esm/elements/table/table.js +28 -0
- package/dist/esm/elements/table/table.js.map +1 -0
- package/dist/esm/elements/table/tbody/tbody.js +26 -0
- package/dist/esm/elements/table/tbody/tbody.js.map +1 -0
- package/dist/esm/elements/table/td/td.js +39 -0
- package/dist/esm/elements/table/td/td.js.map +1 -0
- package/dist/esm/elements/table/tfoot/tfoot.js +26 -0
- package/dist/esm/elements/table/tfoot/tfoot.js.map +1 -0
- package/dist/esm/elements/table/th/th.js +33 -0
- package/dist/esm/elements/table/th/th.js.map +1 -0
- package/dist/esm/elements/table/thead/thead.js +26 -0
- package/dist/esm/elements/table/thead/thead.js.map +1 -0
- package/dist/esm/elements/table/tr/tr.js +26 -0
- package/dist/esm/elements/table/tr/tr.js.map +1 -0
- package/dist/esm/elements/text/address/address.js +26 -0
- package/dist/esm/elements/text/address/address.js.map +1 -0
- package/dist/esm/elements/text/blockquote/blockquote.js +29 -0
- package/dist/esm/elements/text/blockquote/blockquote.js.map +1 -0
- package/dist/esm/elements/text/hr/hr.js +26 -0
- package/dist/esm/elements/text/hr/hr.js.map +1 -0
- package/dist/esm/elements/text/paragraph/paragraph.js +26 -0
- package/dist/esm/elements/text/paragraph/paragraph.js.map +1 -0
- package/dist/esm/elements/text/pre/pre.js +26 -0
- package/dist/esm/elements/text/pre/pre.js.map +1 -0
- package/dist/esm/elements/text/text.js +18 -0
- package/dist/esm/elements/text/text.js.map +1 -0
- package/dist/esm/elements.js +34 -0
- package/dist/esm/elements.js.map +1 -0
- package/dist/esm/index.js +73 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/types/elements/break/br/index.d.ts +111 -0
- package/dist/types/elements/break/br/index.d.ts.map +1 -0
- package/dist/types/elements/break/index.d.ts +32 -0
- package/dist/types/elements/break/index.d.ts.map +1 -0
- package/dist/types/elements/break/wbr/index.d.ts +112 -0
- package/dist/types/elements/break/wbr/index.d.ts.map +1 -0
- package/dist/types/elements/container/div/index.d.ts +123 -0
- package/dist/types/elements/container/div/index.d.ts.map +1 -0
- package/dist/types/elements/container/index.d.ts +32 -0
- package/dist/types/elements/container/index.d.ts.map +1 -0
- package/dist/types/elements/container/span/index.d.ts +100 -0
- package/dist/types/elements/container/span/index.d.ts.map +1 -0
- package/dist/types/elements/figure/figcaption/index.d.ts +115 -0
- package/dist/types/elements/figure/figcaption/index.d.ts.map +1 -0
- package/dist/types/elements/figure/figure/index.d.ts +124 -0
- package/dist/types/elements/figure/figure/index.d.ts.map +1 -0
- package/dist/types/elements/figure/index.d.ts +38 -0
- package/dist/types/elements/figure/index.d.ts.map +1 -0
- package/dist/types/elements/form/button/index.d.ts +216 -0
- package/dist/types/elements/form/button/index.d.ts.map +1 -0
- package/dist/types/elements/form/datalist/index.d.ts +140 -0
- package/dist/types/elements/form/datalist/index.d.ts.map +1 -0
- package/dist/types/elements/form/fieldset/index.d.ts +147 -0
- package/dist/types/elements/form/fieldset/index.d.ts.map +1 -0
- package/dist/types/elements/form/form/index.d.ts +210 -0
- package/dist/types/elements/form/form/index.d.ts.map +1 -0
- package/dist/types/elements/form/index.d.ts +140 -0
- package/dist/types/elements/form/index.d.ts.map +1 -0
- package/dist/types/elements/form/input/index.d.ts +313 -0
- package/dist/types/elements/form/input/index.d.ts.map +1 -0
- package/dist/types/elements/form/label/index.d.ts +144 -0
- package/dist/types/elements/form/label/index.d.ts.map +1 -0
- package/dist/types/elements/form/legend/index.d.ts +126 -0
- package/dist/types/elements/form/legend/index.d.ts.map +1 -0
- package/dist/types/elements/form/meter/index.d.ts +152 -0
- package/dist/types/elements/form/meter/index.d.ts.map +1 -0
- package/dist/types/elements/form/optgroup/index.d.ts +127 -0
- package/dist/types/elements/form/optgroup/index.d.ts.map +1 -0
- package/dist/types/elements/form/option/index.d.ts +160 -0
- package/dist/types/elements/form/option/index.d.ts.map +1 -0
- package/dist/types/elements/form/output/index.d.ts +146 -0
- package/dist/types/elements/form/output/index.d.ts.map +1 -0
- package/dist/types/elements/form/progress/index.d.ts +140 -0
- package/dist/types/elements/form/progress/index.d.ts.map +1 -0
- package/dist/types/elements/form/select/index.d.ts +158 -0
- package/dist/types/elements/form/select/index.d.ts.map +1 -0
- package/dist/types/elements/form/textarea/index.d.ts +228 -0
- package/dist/types/elements/form/textarea/index.d.ts.map +1 -0
- package/dist/types/elements/heading/h1/index.d.ts +130 -0
- package/dist/types/elements/heading/h1/index.d.ts.map +1 -0
- package/dist/types/elements/heading/h2/index.d.ts +128 -0
- package/dist/types/elements/heading/h2/index.d.ts.map +1 -0
- package/dist/types/elements/heading/h3/index.d.ts +126 -0
- package/dist/types/elements/heading/h3/index.d.ts.map +1 -0
- package/dist/types/elements/heading/h4/index.d.ts +113 -0
- package/dist/types/elements/heading/h4/index.d.ts.map +1 -0
- package/dist/types/elements/heading/h5/index.d.ts +126 -0
- package/dist/types/elements/heading/h5/index.d.ts.map +1 -0
- package/dist/types/elements/heading/h6/index.d.ts +119 -0
- package/dist/types/elements/heading/h6/index.d.ts.map +1 -0
- package/dist/types/elements/heading/index.d.ts +68 -0
- package/dist/types/elements/heading/index.d.ts.map +1 -0
- package/dist/types/elements/index.d.ts +106 -0
- package/dist/types/elements/index.d.ts.map +1 -0
- package/dist/types/elements/inline/a/index.d.ts +203 -0
- package/dist/types/elements/inline/a/index.d.ts.map +1 -0
- package/dist/types/elements/inline/abbr/index.d.ts +132 -0
- package/dist/types/elements/inline/abbr/index.d.ts.map +1 -0
- package/dist/types/elements/inline/b/index.d.ts +121 -0
- package/dist/types/elements/inline/b/index.d.ts.map +1 -0
- package/dist/types/elements/inline/cite/index.d.ts +125 -0
- package/dist/types/elements/inline/cite/index.d.ts.map +1 -0
- package/dist/types/elements/inline/code/index.d.ts +137 -0
- package/dist/types/elements/inline/code/index.d.ts.map +1 -0
- package/dist/types/elements/inline/data/index.d.ts +144 -0
- package/dist/types/elements/inline/data/index.d.ts.map +1 -0
- package/dist/types/elements/inline/dfn/index.d.ts +124 -0
- package/dist/types/elements/inline/dfn/index.d.ts.map +1 -0
- package/dist/types/elements/inline/em/index.d.ts +124 -0
- package/dist/types/elements/inline/em/index.d.ts.map +1 -0
- package/dist/types/elements/inline/i/index.d.ts +143 -0
- package/dist/types/elements/inline/i/index.d.ts.map +1 -0
- package/dist/types/elements/inline/index.d.ts +229 -0
- package/dist/types/elements/inline/index.d.ts.map +1 -0
- package/dist/types/elements/inline/kbd/index.d.ts +123 -0
- package/dist/types/elements/inline/kbd/index.d.ts.map +1 -0
- package/dist/types/elements/inline/mark/index.d.ts +125 -0
- package/dist/types/elements/inline/mark/index.d.ts.map +1 -0
- package/dist/types/elements/inline/q/index.d.ts +138 -0
- package/dist/types/elements/inline/q/index.d.ts.map +1 -0
- package/dist/types/elements/inline/rb/index.d.ts +143 -0
- package/dist/types/elements/inline/rb/index.d.ts.map +1 -0
- package/dist/types/elements/inline/rp/index.d.ts +123 -0
- package/dist/types/elements/inline/rp/index.d.ts.map +1 -0
- package/dist/types/elements/inline/rt/index.d.ts +124 -0
- package/dist/types/elements/inline/rt/index.d.ts.map +1 -0
- package/dist/types/elements/inline/rtc/index.d.ts +122 -0
- package/dist/types/elements/inline/rtc/index.d.ts.map +1 -0
- package/dist/types/elements/inline/ruby/index.d.ts +147 -0
- package/dist/types/elements/inline/ruby/index.d.ts.map +1 -0
- package/dist/types/elements/inline/s/index.d.ts +125 -0
- package/dist/types/elements/inline/s/index.d.ts.map +1 -0
- package/dist/types/elements/inline/samp/index.d.ts +122 -0
- package/dist/types/elements/inline/samp/index.d.ts.map +1 -0
- package/dist/types/elements/inline/small/index.d.ts +138 -0
- package/dist/types/elements/inline/small/index.d.ts.map +1 -0
- package/dist/types/elements/inline/strong/index.d.ts +126 -0
- package/dist/types/elements/inline/strong/index.d.ts.map +1 -0
- package/dist/types/elements/inline/sub/index.d.ts +130 -0
- package/dist/types/elements/inline/sub/index.d.ts.map +1 -0
- package/dist/types/elements/inline/sup/index.d.ts +125 -0
- package/dist/types/elements/inline/sup/index.d.ts.map +1 -0
- package/dist/types/elements/inline/time/index.d.ts +149 -0
- package/dist/types/elements/inline/time/index.d.ts.map +1 -0
- package/dist/types/elements/inline/u/index.d.ts +122 -0
- package/dist/types/elements/inline/u/index.d.ts.map +1 -0
- package/dist/types/elements/inline/var/index.d.ts +127 -0
- package/dist/types/elements/inline/var/index.d.ts.map +1 -0
- package/dist/types/elements/interactive/details/index.d.ts +134 -0
- package/dist/types/elements/interactive/details/index.d.ts.map +1 -0
- package/dist/types/elements/interactive/dialog/index.d.ts +162 -0
- package/dist/types/elements/interactive/dialog/index.d.ts.map +1 -0
- package/dist/types/elements/interactive/index.d.ts +48 -0
- package/dist/types/elements/interactive/index.d.ts.map +1 -0
- package/dist/types/elements/interactive/summary/index.d.ts +122 -0
- package/dist/types/elements/interactive/summary/index.d.ts.map +1 -0
- package/dist/types/elements/layout/article/index.d.ts +129 -0
- package/dist/types/elements/layout/article/index.d.ts.map +1 -0
- package/dist/types/elements/layout/aside/index.d.ts +122 -0
- package/dist/types/elements/layout/aside/index.d.ts.map +1 -0
- package/dist/types/elements/layout/footer/index.d.ts +122 -0
- package/dist/types/elements/layout/footer/index.d.ts.map +1 -0
- package/dist/types/elements/layout/header/index.d.ts +131 -0
- package/dist/types/elements/layout/header/index.d.ts.map +1 -0
- package/dist/types/elements/layout/index.d.ts +83 -0
- package/dist/types/elements/layout/index.d.ts.map +1 -0
- package/dist/types/elements/layout/main/index.d.ts +135 -0
- package/dist/types/elements/layout/main/index.d.ts.map +1 -0
- package/dist/types/elements/layout/nav/index.d.ts +136 -0
- package/dist/types/elements/layout/nav/index.d.ts.map +1 -0
- package/dist/types/elements/layout/section/index.d.ts +128 -0
- package/dist/types/elements/layout/section/index.d.ts.map +1 -0
- package/dist/types/elements/list/dd/index.d.ts +120 -0
- package/dist/types/elements/list/dd/index.d.ts.map +1 -0
- package/dist/types/elements/list/dl/index.d.ts +131 -0
- package/dist/types/elements/list/dl/index.d.ts.map +1 -0
- package/dist/types/elements/list/dt/index.d.ts +126 -0
- package/dist/types/elements/list/dt/index.d.ts.map +1 -0
- package/dist/types/elements/list/index.d.ts +69 -0
- package/dist/types/elements/list/index.d.ts.map +1 -0
- package/dist/types/elements/list/li/index.d.ts +155 -0
- package/dist/types/elements/list/li/index.d.ts.map +1 -0
- package/dist/types/elements/list/ol/index.d.ts +155 -0
- package/dist/types/elements/list/ol/index.d.ts.map +1 -0
- package/dist/types/elements/list/ul/index.d.ts +145 -0
- package/dist/types/elements/list/ul/index.d.ts.map +1 -0
- package/dist/types/elements/media/audio/index.d.ts +197 -0
- package/dist/types/elements/media/audio/index.d.ts.map +1 -0
- package/dist/types/elements/media/canvas/index.d.ts +146 -0
- package/dist/types/elements/media/canvas/index.d.ts.map +1 -0
- package/dist/types/elements/media/embed/index.d.ts +138 -0
- package/dist/types/elements/media/embed/index.d.ts.map +1 -0
- package/dist/types/elements/media/iframe/index.d.ts +222 -0
- package/dist/types/elements/media/iframe/index.d.ts.map +1 -0
- package/dist/types/elements/media/img/index.d.ts +83 -0
- package/dist/types/elements/media/img/index.d.ts.map +1 -0
- package/dist/types/elements/media/index.d.ts +89 -0
- package/dist/types/elements/media/index.d.ts.map +1 -0
- package/dist/types/elements/media/math/index.d.ts +132 -0
- package/dist/types/elements/media/math/index.d.ts.map +1 -0
- package/dist/types/elements/media/object/index.d.ts +183 -0
- package/dist/types/elements/media/object/index.d.ts.map +1 -0
- package/dist/types/elements/media/svg/index.d.ts +44 -0
- package/dist/types/elements/media/svg/index.d.ts.map +1 -0
- package/dist/types/elements/media/video/index.d.ts +225 -0
- package/dist/types/elements/media/video/index.d.ts.map +1 -0
- package/dist/types/elements/responsive/area/index.d.ts +158 -0
- package/dist/types/elements/responsive/area/index.d.ts.map +1 -0
- package/dist/types/elements/responsive/index.d.ts +67 -0
- package/dist/types/elements/responsive/index.d.ts.map +1 -0
- package/dist/types/elements/responsive/map/index.d.ts +138 -0
- package/dist/types/elements/responsive/map/index.d.ts.map +1 -0
- package/dist/types/elements/responsive/picture/index.d.ts +120 -0
- package/dist/types/elements/responsive/picture/index.d.ts.map +1 -0
- package/dist/types/elements/responsive/source/index.d.ts +175 -0
- package/dist/types/elements/responsive/source/index.d.ts.map +1 -0
- package/dist/types/elements/responsive/track/index.d.ts +183 -0
- package/dist/types/elements/responsive/track/index.d.ts.map +1 -0
- package/dist/types/elements/table/caption/index.d.ts +132 -0
- package/dist/types/elements/table/caption/index.d.ts.map +1 -0
- package/dist/types/elements/table/col/index.d.ts +132 -0
- package/dist/types/elements/table/col/index.d.ts.map +1 -0
- package/dist/types/elements/table/colgroup/index.d.ts +147 -0
- package/dist/types/elements/table/colgroup/index.d.ts.map +1 -0
- package/dist/types/elements/table/index.d.ts +102 -0
- package/dist/types/elements/table/index.d.ts.map +1 -0
- package/dist/types/elements/table/table/index.d.ts +143 -0
- package/dist/types/elements/table/table/index.d.ts.map +1 -0
- package/dist/types/elements/table/tbody/index.d.ts +134 -0
- package/dist/types/elements/table/tbody/index.d.ts.map +1 -0
- package/dist/types/elements/table/td/index.d.ts +146 -0
- package/dist/types/elements/table/td/index.d.ts.map +1 -0
- package/dist/types/elements/table/tfoot/index.d.ts +131 -0
- package/dist/types/elements/table/tfoot/index.d.ts.map +1 -0
- package/dist/types/elements/table/th/index.d.ts +187 -0
- package/dist/types/elements/table/th/index.d.ts.map +1 -0
- package/dist/types/elements/table/thead/index.d.ts +130 -0
- package/dist/types/elements/table/thead/index.d.ts.map +1 -0
- package/dist/types/elements/table/tr/index.d.ts +134 -0
- package/dist/types/elements/table/tr/index.d.ts.map +1 -0
- package/dist/types/elements/text/address/index.d.ts +133 -0
- package/dist/types/elements/text/address/index.d.ts.map +1 -0
- package/dist/types/elements/text/blockquote/index.d.ts +153 -0
- package/dist/types/elements/text/blockquote/index.d.ts.map +1 -0
- package/dist/types/elements/text/hr/index.d.ts +121 -0
- package/dist/types/elements/text/hr/index.d.ts.map +1 -0
- package/dist/types/elements/text/index.d.ts +57 -0
- package/dist/types/elements/text/index.d.ts.map +1 -0
- package/dist/types/elements/text/paragraph/index.d.ts +139 -0
- package/dist/types/elements/text/paragraph/index.d.ts.map +1 -0
- package/dist/types/elements/text/pre/index.d.ts +135 -0
- package/dist/types/elements/text/pre/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/ts/adapters/tailwind/v4/index.d.ts +3 -0
- package/dist/types/ts/adapters/tailwind/v4/index.d.ts.map +1 -0
- package/dist/types/ts/adapters/tailwind/v4/plugin.d.ts +11 -0
- package/dist/types/ts/adapters/tailwind/v4/plugin.d.ts.map +1 -0
- package/dist/types/ts/adapters/tailwind/v4/preset.d.ts +12 -0
- package/dist/types/ts/adapters/tailwind/v4/preset.d.ts.map +1 -0
- package/dist/types/ts/dom.d.ts +247 -0
- package/dist/types/ts/dom.d.ts.map +1 -0
- package/package.json +705 -0
- package/src/elements/break/br/br.scss +26 -0
- package/src/elements/break/br/index.ts +150 -0
- package/src/elements/break/index.ts +33 -0
- package/src/elements/break/wbr/index.ts +151 -0
- package/src/elements/break/wbr/wbr.scss +27 -0
- package/src/elements/container/div/div.scss +27 -0
- package/src/elements/container/div/index.ts +163 -0
- package/src/elements/container/index.ts +33 -0
- package/src/elements/container/span/index.ts +137 -0
- package/src/elements/container/span/span.scss +28 -0
- package/src/elements/figure/figcaption/figcaption.scss +53 -0
- package/src/elements/figure/figcaption/index.ts +157 -0
- package/src/elements/figure/figure/figure.scss +53 -0
- package/src/elements/figure/figure/index.ts +164 -0
- package/src/elements/figure/index.ts +39 -0
- package/src/elements/form/button/button.scss +39 -0
- package/src/elements/form/button/index.ts +335 -0
- package/src/elements/form/datalist/datalist.scss +40 -0
- package/src/elements/form/datalist/index.ts +183 -0
- package/src/elements/form/fieldset/fieldset.scss +46 -0
- package/src/elements/form/fieldset/index.ts +211 -0
- package/src/elements/form/form/form.scss +42 -0
- package/src/elements/form/form/index.ts +308 -0
- package/src/elements/form/index.ts +153 -0
- package/src/elements/form/input/index.ts +528 -0
- package/src/elements/form/input/input.scss +39 -0
- package/src/elements/form/label/index.ts +194 -0
- package/src/elements/form/label/label.scss +41 -0
- package/src/elements/form/legend/index.ts +166 -0
- package/src/elements/form/legend/legend.scss +40 -0
- package/src/elements/form/meter/index.ts +231 -0
- package/src/elements/form/meter/meter.scss +36 -0
- package/src/elements/form/optgroup/index.ts +187 -0
- package/src/elements/form/optgroup/optgroup.scss +37 -0
- package/src/elements/form/option/index.ts +218 -0
- package/src/elements/form/option/option.scss +38 -0
- package/src/elements/form/output/index.ts +205 -0
- package/src/elements/form/output/output.scss +42 -0
- package/src/elements/form/progress/index.ts +215 -0
- package/src/elements/form/progress/progress.scss +38 -0
- package/src/elements/form/select/index.ts +250 -0
- package/src/elements/form/select/select.scss +38 -0
- package/src/elements/form/textarea/index.ts +351 -0
- package/src/elements/form/textarea/textarea.scss +39 -0
- package/src/elements/heading/h1/h1.scss +59 -0
- package/src/elements/heading/h1/index.ts +170 -0
- package/src/elements/heading/h2/h2.scss +53 -0
- package/src/elements/heading/h2/index.ts +168 -0
- package/src/elements/heading/h3/h3.scss +54 -0
- package/src/elements/heading/h3/index.ts +166 -0
- package/src/elements/heading/h4/h4.scss +48 -0
- package/src/elements/heading/h4/index.ts +150 -0
- package/src/elements/heading/h5/h5.scss +50 -0
- package/src/elements/heading/h5/index.ts +166 -0
- package/src/elements/heading/h6/h6.scss +48 -0
- package/src/elements/heading/h6/index.ts +158 -0
- package/src/elements/heading/index.ts +73 -0
- package/src/elements/index.ts +118 -0
- package/src/elements/inline/a/a.scss +55 -0
- package/src/elements/inline/a/index.ts +291 -0
- package/src/elements/inline/abbr/abbr.scss +54 -0
- package/src/elements/inline/abbr/index.ts +172 -0
- package/src/elements/inline/b/b.scss +38 -0
- package/src/elements/inline/b/index.ts +161 -0
- package/src/elements/inline/cite/cite.scss +36 -0
- package/src/elements/inline/cite/index.ts +165 -0
- package/src/elements/inline/code/code.scss +45 -0
- package/src/elements/inline/code/index.ts +176 -0
- package/src/elements/inline/data/data.scss +36 -0
- package/src/elements/inline/data/index.ts +208 -0
- package/src/elements/inline/dfn/dfn.scss +36 -0
- package/src/elements/inline/dfn/index.ts +164 -0
- package/src/elements/inline/em/em.scss +35 -0
- package/src/elements/inline/em/index.ts +164 -0
- package/src/elements/inline/i/i.scss +38 -0
- package/src/elements/inline/i/index.ts +182 -0
- package/src/elements/inline/index.ts +254 -0
- package/src/elements/inline/kbd/index.ts +163 -0
- package/src/elements/inline/kbd/kbd.scss +44 -0
- package/src/elements/inline/mark/index.ts +165 -0
- package/src/elements/inline/mark/mark.scss +45 -0
- package/src/elements/inline/q/index.ts +206 -0
- package/src/elements/inline/q/q.scss +44 -0
- package/src/elements/inline/rb/index.ts +186 -0
- package/src/elements/inline/rb/rb.scss +35 -0
- package/src/elements/inline/rp/index.ts +163 -0
- package/src/elements/inline/rp/rp.scss +41 -0
- package/src/elements/inline/rt/index.ts +164 -0
- package/src/elements/inline/rt/rt.scss +36 -0
- package/src/elements/inline/rtc/index.ts +168 -0
- package/src/elements/inline/rtc/rtc.scss +40 -0
- package/src/elements/inline/ruby/index.ts +186 -0
- package/src/elements/inline/ruby/ruby.scss +39 -0
- package/src/elements/inline/s/index.ts +165 -0
- package/src/elements/inline/s/s.scss +37 -0
- package/src/elements/inline/samp/index.ts +162 -0
- package/src/elements/inline/samp/samp.scss +43 -0
- package/src/elements/inline/small/index.ts +177 -0
- package/src/elements/inline/small/small.scss +35 -0
- package/src/elements/inline/strong/index.ts +166 -0
- package/src/elements/inline/strong/strong.scss +35 -0
- package/src/elements/inline/sub/index.ts +170 -0
- package/src/elements/inline/sub/sub.scss +44 -0
- package/src/elements/inline/sup/index.ts +165 -0
- package/src/elements/inline/sup/sup.scss +43 -0
- package/src/elements/inline/time/index.ts +206 -0
- package/src/elements/inline/time/time.scss +38 -0
- package/src/elements/inline/u/index.ts +162 -0
- package/src/elements/inline/u/u.scss +42 -0
- package/src/elements/inline/var/index.ts +167 -0
- package/src/elements/inline/var/var.scss +44 -0
- package/src/elements/interactive/details/details.scss +42 -0
- package/src/elements/interactive/details/index.ts +198 -0
- package/src/elements/interactive/dialog/dialog.scss +55 -0
- package/src/elements/interactive/dialog/index.ts +219 -0
- package/src/elements/interactive/index.ts +50 -0
- package/src/elements/interactive/summary/index.ts +161 -0
- package/src/elements/interactive/summary/summary.scss +48 -0
- package/src/elements/layout/article/article.scss +42 -0
- package/src/elements/layout/article/index.ts +169 -0
- package/src/elements/layout/aside/aside.scss +42 -0
- package/src/elements/layout/aside/index.ts +161 -0
- package/src/elements/layout/footer/footer.scss +42 -0
- package/src/elements/layout/footer/index.ts +161 -0
- package/src/elements/layout/header/header.scss +42 -0
- package/src/elements/layout/header/index.ts +171 -0
- package/src/elements/layout/index.ts +89 -0
- package/src/elements/layout/main/index.ts +175 -0
- package/src/elements/layout/main/main.scss +43 -0
- package/src/elements/layout/nav/index.ts +176 -0
- package/src/elements/layout/nav/nav.scss +42 -0
- package/src/elements/layout/section/index.ts +168 -0
- package/src/elements/layout/section/section.scss +42 -0
- package/src/elements/list/dd/dd.scss +49 -0
- package/src/elements/list/dd/index.ts +159 -0
- package/src/elements/list/dl/dl.scss +39 -0
- package/src/elements/list/dl/index.ts +171 -0
- package/src/elements/list/dt/dt.scss +51 -0
- package/src/elements/list/dt/index.ts +166 -0
- package/src/elements/list/index.ts +74 -0
- package/src/elements/list/li/index.ts +213 -0
- package/src/elements/list/li/li.scss +39 -0
- package/src/elements/list/ol/index.ts +205 -0
- package/src/elements/list/ol/ol.scss +39 -0
- package/src/elements/list/ul/index.ts +195 -0
- package/src/elements/list/ul/ul.scss +42 -0
- package/src/elements/media/audio/audio.scss +43 -0
- package/src/elements/media/audio/index.ts +281 -0
- package/src/elements/media/canvas/canvas.scss +46 -0
- package/src/elements/media/canvas/index.ts +194 -0
- package/src/elements/media/embed/embed.scss +37 -0
- package/src/elements/media/embed/index.ts +246 -0
- package/src/elements/media/iframe/iframe.scss +39 -0
- package/src/elements/media/iframe/index.ts +331 -0
- package/src/elements/media/img/img.scss +47 -0
- package/src/elements/media/img/index.ts +146 -0
- package/src/elements/media/index.ts +97 -0
- package/src/elements/media/math/index.ts +200 -0
- package/src/elements/media/math/math.scss +46 -0
- package/src/elements/media/object/index.ts +282 -0
- package/src/elements/media/object/object.scss +42 -0
- package/src/elements/media/svg/index.ts +122 -0
- package/src/elements/media/svg/svg.scss +44 -0
- package/src/elements/media/video/index.ts +376 -0
- package/src/elements/media/video/video.scss +44 -0
- package/src/elements/responsive/area/area.scss +29 -0
- package/src/elements/responsive/area/index.ts +244 -0
- package/src/elements/responsive/index.ts +71 -0
- package/src/elements/responsive/map/index.ts +231 -0
- package/src/elements/responsive/map/map.scss +38 -0
- package/src/elements/responsive/picture/index.ts +159 -0
- package/src/elements/responsive/picture/picture.scss +32 -0
- package/src/elements/responsive/source/index.ts +247 -0
- package/src/elements/responsive/source/source.scss +28 -0
- package/src/elements/responsive/track/index.ts +254 -0
- package/src/elements/responsive/track/track.scss +28 -0
- package/src/elements/table/caption/caption.scss +54 -0
- package/src/elements/table/caption/index.ts +172 -0
- package/src/elements/table/col/col.scss +32 -0
- package/src/elements/table/col/index.ts +189 -0
- package/src/elements/table/colgroup/colgroup.scss +34 -0
- package/src/elements/table/colgroup/index.ts +224 -0
- package/src/elements/table/index.ts +111 -0
- package/src/elements/table/table/index.ts +183 -0
- package/src/elements/table/table/table.scss +56 -0
- package/src/elements/table/tbody/index.ts +174 -0
- package/src/elements/table/tbody/tbody.scss +32 -0
- package/src/elements/table/td/index.ts +220 -0
- package/src/elements/table/td/td.scss +48 -0
- package/src/elements/table/tfoot/index.ts +171 -0
- package/src/elements/table/tfoot/tfoot.scss +30 -0
- package/src/elements/table/th/index.ts +277 -0
- package/src/elements/table/th/th.scss +48 -0
- package/src/elements/table/thead/index.ts +170 -0
- package/src/elements/table/thead/thead.scss +32 -0
- package/src/elements/table/tr/index.ts +174 -0
- package/src/elements/table/tr/tr.scss +30 -0
- package/src/elements/text/address/address.scss +61 -0
- package/src/elements/text/address/index.ts +173 -0
- package/src/elements/text/blockquote/blockquote.scss +50 -0
- package/src/elements/text/blockquote/index.ts +203 -0
- package/src/elements/text/hr/hr.scss +50 -0
- package/src/elements/text/hr/index.ts +161 -0
- package/src/elements/text/index.ts +61 -0
- package/src/elements/text/paragraph/index.ts +179 -0
- package/src/elements/text/paragraph/paragraph.scss +49 -0
- package/src/elements/text/pre/index.ts +175 -0
- package/src/elements/text/pre/pre.scss +59 -0
- package/src/scss/_elements.scss +178 -0
- package/src/scss/_font-face.scss +35 -0
- package/src/scss/_reboot.scss +120 -0
- package/src/scss/_root.scss +112 -0
- package/src/scss/adapters/bootstrap/v5/index.scss +364 -0
- package/src/scss/core.scss +53 -0
- package/src/scss/functions/_colours.scss +340 -0
- package/src/scss/functions/_fonts.scss +454 -0
- package/src/scss/functions/_index.scss +78 -0
- package/src/scss/functions/_options.scss +233 -0
- package/src/scss/functions/_spacing.scss +405 -0
- package/src/scss/functions/_theme.scss +355 -0
- package/src/scss/functions/_typography.scss +403 -0
- package/src/scss/main.scss +47 -0
- package/src/scss/maps/_colours.scss +344 -0
- package/src/scss/maps/_dark-theme.scss +47 -0
- package/src/scss/maps/_fonts.scss +145 -0
- package/src/scss/maps/_index.scss +96 -0
- package/src/scss/maps/_options.scss +53 -0
- package/src/scss/maps/_spacing.scss +63 -0
- package/src/scss/maps/_theme.scss +206 -0
- package/src/scss/maps/_typography.scss +127 -0
- package/src/scss/mixins/_colours.scss +304 -0
- package/src/scss/mixins/_fonts.scss +227 -0
- package/src/scss/mixins/_index.scss +93 -0
- package/src/scss/mixins/_options.scss +297 -0
- package/src/scss/mixins/_spacing.scss +176 -0
- package/src/scss/mixins/_theme.scss +273 -0
- package/src/scss/mixins/_typography.scss +272 -0
- package/src/scss/tokens/_colours.scss +707 -0
- package/src/scss/tokens/_dark-theme.scss +50 -0
- package/src/scss/tokens/_fonts.scss +81 -0
- package/src/scss/tokens/_index.scss +100 -0
- package/src/scss/tokens/_options.scss +77 -0
- package/src/scss/tokens/_spacing.scss +43 -0
- package/src/scss/tokens/_theme.scss +325 -0
- package/src/scss/tokens/_typography.scss +218 -0
- package/src/ts/adapters/tailwind/v4/index.ts +2 -0
- package/src/ts/adapters/tailwind/v4/plugin.ts +47 -0
- package/src/ts/adapters/tailwind/v4/preset.ts +75 -0
- package/src/ts/dom.ts +378 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.cjs","names":[],"sources":["../../../../../src/elements/form/form/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Form element helpers.\n *\n * @remarks\n * The form element (`<form>`) groups interactive controls for submitting data.\n *\n * Best-practice guidance:\n * - Prefer HTTPS endpoints for `action` to protect user data in transit.\n * - Use `method=\"post\"` for submissions that change server state or include sensitive data.\n * - Use `enctype=\"multipart/form-data\"` when uploading files.\n * - Provide explicit labels for controls and ensure accessible naming.\n * - Consider `rel=\"noopener\"` when using `target=\"_blank\"` to avoid `window.opener` exposure.\n *\n * pkgn-sol notes:\n * - This module is framework-agnostic and has no side effects.\n * - Global attributes are applied via pkgn-sol's shared DOM helper, which blocks:\n * - inline event handler attributes (e.g. `onclick`)\n * - raw `style` attribute injection (use the `style` object instead)\n * - Text passed to factories is assigned via `textContent` (never `innerHTML`).\n *\n * References:\n * - MDN: `<form>` element :contentReference[oaicite:3]{index=3}\n * - WHATWG HTML: Forms & submission attributes :contentReference[oaicite:4]{index=4}\n * - MDN: `rel` on `<form>` / `noopener` :contentReference[oaicite:5]{index=5}\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type AttrValue, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs.\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for forms.\n *\n * @category Constants\n */\nexport const FORM_TAG = 'form' as const;\n\n/**\n * A CSS selector targeting form elements.\n *\n * @category Constants\n */\nexport const FORM_SELECTOR = 'form';\n\n/**\n * Allowed values for the form `method` attribute.\n *\n * @remarks\n * HTML supports `get`, `post`, and `dialog` (for dialog-associated forms).\n *\n * @category Types\n */\nexport type FormMethod = 'get' | 'post' | 'dialog';\n\n/**\n * Allowed values for the form `enctype` attribute.\n *\n * @category Types\n */\nexport type FormEnctype =\n | 'application/x-www-form-urlencoded'\n | 'multipart/form-data'\n | 'text/plain';\n\n/**\n * Allowed values for the form `autocomplete` attribute.\n *\n * @category Types\n */\nexport type FormAutocomplete = 'on' | 'off';\n\n/**\n * Attribute bag for form creation/enhancement.\n *\n * @remarks\n * `<form>` supports standard HTML global attributes plus submission-related\n * attributes (action, method, enctype, target, etc.).\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type FormAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * URL that processes the form submission.\n *\n * @remarks\n * If omitted, the user agent submits to the current document URL.\n */\n action?: string;\n\n /**\n * HTTP method used to submit the form.\n *\n * @remarks\n * Valid values are `get`, `post`, and `dialog`.\n */\n method?: FormMethod;\n\n /**\n * Encoding type for the form submission.\n *\n * @remarks\n * Use `multipart/form-data` when uploading files.\n */\n enctype?: FormEnctype;\n\n /**\n * Character encodings that are acceptable for server processing.\n *\n * @remarks\n * Maps to the `accept-charset` attribute.\n */\n acceptCharset?: string;\n\n /**\n * Whether the browser may autofill this form.\n */\n autocomplete?: FormAutocomplete;\n\n /**\n * Name of the form, used for referencing the form in scripts and documents.\n */\n name?: string;\n\n /**\n * Disable constraint validation when submitting the form.\n *\n * @remarks\n * Maps to the boolean `novalidate` attribute (represented by attribute presence).\n */\n noValidate?: boolean;\n\n /**\n * Where to display the response after submitting the form.\n *\n * @remarks\n * Common values: `_self`, `_blank`, `_parent`, `_top`, or a named browsing context.\n */\n target?: '_self' | '_blank' | '_parent' | '_top' | (string & {});\n\n /**\n * Relationship (link types) for the form submission when `target` creates a new context.\n *\n * @remarks\n * This is a space-separated list of tokens (e.g. `noopener noreferrer`).\n */\n rel?: string;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link FormAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @remarks\n * - Preserves caller-provided `attrs` escape hatch (still validated by `dom.ts`).\n * - Element-specific attributes are merged into `attrs` without overwriting keys\n * explicitly provided by the caller.\n * - Boolean attributes are represented by presence; we set empty-string when true.\n *\n * @param attrs - The form attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: FormAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const {\n aria,\n action,\n method,\n enctype,\n acceptCharset,\n autocomplete,\n name,\n noValidate,\n target,\n rel,\n ...rest\n } = attrs;\n\n // Start with any caller-provided attrs escape hatch (it is still validated by dom.ts).\n const mergedAttrs: Record<string, AttrValue> = { ...(rest.attrs ?? {}) };\n\n // Helper: only set if caller didn't already set the raw attribute explicitly.\n const setIfUnset = (key: string, value: AttrValue | undefined): void => {\n if (value === undefined) return;\n if (Object.prototype.hasOwnProperty.call(mergedAttrs, key)) return;\n mergedAttrs[key] = value;\n };\n\n setIfUnset('action', action);\n setIfUnset('method', method);\n setIfUnset('enctype', enctype);\n setIfUnset('accept-charset', acceptCharset);\n setIfUnset('autocomplete', autocomplete);\n setIfUnset('name', name);\n setIfUnset('target', target);\n setIfUnset('rel', rel);\n\n // Boolean attributes are represented by presence. We set empty-string when true.\n if (noValidate === true) setIfUnset('novalidate', '');\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n if (aria) {\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n }\n\n const hasMappedAria = Object.keys(mappedAria).length > 0;\n const hasMergedAttrs = Object.keys(mergedAttrs).length > 0;\n\n const next: GlobalAttrs = { ...rest };\n if (hasMergedAttrs) next.attrs = mergedAttrs;\n if (hasMappedAria) next.aria = mappedAria;\n\n return next;\n}\n\n/**\n * Create a form element with optional fallback text and attributes.\n *\n * @remarks\n * - Fallback text is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the form (rare, but supported for parity).\n * @param attrs - Optional attributes to apply.\n * @returns The created `<form>` element.\n *\n * @example\n * ```ts\n * import { createForm } from \"@lnpg/pkgn-sol/elements/form/form\";\n *\n * const form = createForm(undefined, {\n * action: \"/submit\",\n * method: \"post\",\n * enctype: \"application/x-www-form-urlencoded\",\n * });\n * document.body.appendChild(form);\n * ```\n *\n * @category DOM\n */\nexport function createForm(text?: string, attrs?: FormAttrs): ElementOf<typeof FORM_TAG> {\n return createElement(FORM_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance form elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceForms(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for form.\n void root;\n}\n"],"mappings":"kMAgEa,EAAW,OAOX,EAAgB,OAgI7B,SAAS,EAAc,EAA4C,CACjE,GAAI,CAAC,EAAO,OAEZ,GAAM,CACJ,OACA,SACA,SACA,UACA,gBACA,eACA,OACA,aACA,SACA,MACA,GAAG,GACD,EAGE,EAAyC,CAAE,GAAI,EAAK,OAAS,EAAE,CAAG,CAGlE,GAAc,EAAa,IAAuC,CAClE,IAAU,IAAA,KACV,OAAO,UAAU,eAAe,KAAK,EAAa,EAAI,GAC1D,EAAY,GAAO,KAGrB,EAAW,SAAU,EAAO,CAC5B,EAAW,SAAU,EAAO,CAC5B,EAAW,UAAW,EAAQ,CAC9B,EAAW,iBAAkB,EAAc,CAC3C,EAAW,eAAgB,EAAa,CACxC,EAAW,OAAQ,EAAK,CACxB,EAAW,SAAU,EAAO,CAC5B,EAAW,MAAO,EAAI,CAGlB,IAAe,IAAM,EAAW,aAAc,GAAG,CAErD,IAAM,EAA+C,EAAE,CACnD,IACE,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,SAGjE,IAAM,EAAgB,OAAO,KAAK,EAAW,CAAC,OAAS,EACjD,EAAiB,OAAO,KAAK,EAAY,CAAC,OAAS,EAEnD,EAAoB,CAAE,GAAG,EAAM,CAIrC,OAHI,IAAgB,EAAK,MAAQ,GAC7B,IAAe,EAAK,KAAO,GAExB,EA8BT,SAAgB,EAAW,EAAe,EAA+C,CACvF,OAAO,EAAA,EAAc,EAAU,EAAc,EAAM,CAAE,EAAK,CAqB5D,SAAgB,EAAa,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../chunks/dom.cjs`),t=require(`./button/button.cjs`),n=require(`./datalist/datalist.cjs`),r=require(`./fieldset/fieldset.cjs`),i=require(`./form/form.cjs`),a=require(`./input/input.cjs`),o=require(`./label/label.cjs`),s=require(`./legend/legend.cjs`),c=require(`./meter/meter.cjs`),l=require(`./optgroup/optgroup.cjs`),u=require(`./option/option.cjs`),d=require(`./output/output.cjs`),f=require(`./progress/progress.cjs`),p=require(`./select/select.cjs`),m=require(`./textarea/textarea.cjs`);var h=e.i({button:()=>t.t,datalist:()=>n.t,fieldset:()=>r.t,form:()=>i.t,input:()=>a.t,label:()=>o.t,legend:()=>s.t,meter:()=>c.t,optgroup:()=>l.t,option:()=>u.t,output:()=>d.t,progress:()=>f.t,select:()=>p.t,textarea:()=>m.t});Object.defineProperty(exports,`button`,{enumerable:!0,get:function(){return t.t}}),Object.defineProperty(exports,`datalist`,{enumerable:!0,get:function(){return n.t}}),Object.defineProperty(exports,`fieldset`,{enumerable:!0,get:function(){return r.t}}),Object.defineProperty(exports,`form`,{enumerable:!0,get:function(){return i.t}}),Object.defineProperty(exports,`input`,{enumerable:!0,get:function(){return a.t}}),Object.defineProperty(exports,`label`,{enumerable:!0,get:function(){return o.t}}),Object.defineProperty(exports,`legend`,{enumerable:!0,get:function(){return s.t}}),Object.defineProperty(exports,`meter`,{enumerable:!0,get:function(){return c.t}}),Object.defineProperty(exports,`optgroup`,{enumerable:!0,get:function(){return l.t}}),Object.defineProperty(exports,`option`,{enumerable:!0,get:function(){return u.t}}),Object.defineProperty(exports,`output`,{enumerable:!0,get:function(){return d.t}}),Object.defineProperty(exports,`progress`,{enumerable:!0,get:function(){return f.t}}),Object.defineProperty(exports,`select`,{enumerable:!0,get:function(){return p.t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`textarea`,{enumerable:!0,get:function(){return m.t}});
|
|
2
|
+
//# sourceMappingURL=form.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.cjs","names":[],"sources":["../../../../src/elements/form/index.ts"],"sourcesContent":["/**\n * Form element factories.\n *\n * Provides framework-agnostic factory functions for common HTML form elements.\n *\n * These factories:\n * - Create semantic form structures using pkgn-sol's hardened DOM helpers.\n * - Forward curated global attributes.\n * - Enforce structured, typed attribute bags.\n * - Preserve correct form semantics and associations (e.g. labels, fieldsets).\n * - Prevent unsafe attribute injection.\n *\n * @module elements/form\n * @since 0.1.0\n */\n\n/**\n * `<button>` element factory namespace.\n *\n * Represents a clickable button used to submit forms, reset forms, or trigger\n * custom actions.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button\n */\nexport * as button from './button';\n\n/**\n * `<datalist>` element factory namespace.\n *\n * Represents a set of `<option>` suggestions for an associated `<input>`,\n * enabling autocomplete-like behavior.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist\n */\nexport * as datalist from './datalist';\n\n/**\n * `<fieldset>` element factory namespace.\n *\n * Represents a grouping container for related form controls, typically paired\n * with a `<legend>` that labels the group.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset\n */\nexport * as fieldset from './fieldset';\n\n/**\n * `<form>` element factory namespace.\n *\n * Represents a document section containing interactive controls for submitting\n * information to a web server or handling via client-side logic.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form\n */\nexport * as form from './form';\n\n/**\n * `<input>` element factory namespace.\n *\n * Represents an interactive control for entering data. The `type` attribute\n * determines the control's behavior and UI.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\n */\nexport * as input from './input';\n\n/**\n * `<label>` element factory namespace.\n *\n * Represents a caption for a form control, improving usability and\n * accessibility. Typically associated via the `for` attribute or by nesting.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label\n */\nexport * as label from './label';\n\n/**\n * `<legend>` element factory namespace.\n *\n * Represents a caption for the content of its parent `<fieldset>`, providing an\n * accessible label for grouped controls.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend\n */\nexport * as legend from './legend';\n\n/**\n * `<meter>` element factory namespace.\n *\n * Represents a scalar measurement within a known range, or a fractional value.\n * Use `<progress>` instead for progress over time.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter\n */\nexport * as meter from './meter';\n\n/**\n * `<optgroup>` element factory namespace.\n *\n * Represents a grouping of `<option>` elements within a `<select>` or\n * `<datalist>`.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup\n */\nexport * as optgroup from './optgroup';\n\n/**\n * `<option>` element factory namespace.\n *\n * Represents an item within a `<select>`, `<datalist>`, or `<optgroup>`.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option\n */\nexport * as option from './option';\n\n/**\n * `<output>` element factory namespace.\n *\n * Represents the result of a calculation or user action, commonly used in\n * forms to display derived values.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output\n */\nexport * as output from './output';\n\n/**\n * `<progress>` element factory namespace.\n *\n * Represents the completion progress of a task, typically over time.\n * Use `<meter>` instead for a measurement within a known range.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress\n */\nexport * as progress from './progress';\n\n/**\n * `<select>` element factory namespace.\n *\n * Represents a control that provides a menu of options for the user to choose\n * from.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n */\nexport * as select from './select';\n\n/**\n * `<textarea>` element factory namespace.\n *\n * Represents a multi-line plain-text editing control.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea\n */\nexport * as textarea from './textarea';\n"],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({INPUT_SELECTOR:()=>r,INPUT_TAG:()=>n,createInput:()=>a,enhanceInputs:()=>o}),n=`input`,r=`input`;function i(e){let{aria:t,type:n,name:r,value:i,placeholder:a,disabled:o,readOnly:s,required:c,multiple:l,checked:u,min:d,max:f,step:p,minLength:m,maxLength:h,pattern:g,size:_,autoComplete:v,autofocus:y,list:b,form:x,formAction:S,formEnctype:C,formMethod:w,formNoValidate:T,formTarget:E,src:D,alt:O,width:k,height:A,accept:j,capture:M,inputMode:N,enterKeyHint:P,popoverTarget:F,popoverTargetAction:I,...L}=e??{},R={...L.attrs??{}},z=(e,t)=>{t!==void 0&&(Object.prototype.hasOwnProperty.call(R,e)||(R[e]=t))};z(`type`,n??`text`),z(`name`,r),z(`value`,i),z(`placeholder`,a),z(`min`,d),z(`max`,f),z(`step`,p),z(`minlength`,typeof m==`number`?m:void 0),z(`maxlength`,typeof h==`number`?h:void 0),z(`pattern`,g),z(`size`,typeof _==`number`?_:void 0),z(`autocomplete`,v),z(`list`,b),z(`form`,x),z(`formaction`,S),z(`formenctype`,C),z(`formmethod`,w),z(`formtarget`,E),z(`src`,D),z(`alt`,O),z(`width`,typeof k==`number`?k:void 0),z(`height`,typeof A==`number`?A:void 0),z(`accept`,j),z(`inputmode`,N),z(`enterkeyhint`,P),z(`popovertarget`,F),z(`popovertargetaction`,I),o===!0&&z(`disabled`,``),s===!0&&z(`readonly`,``),c===!0&&z(`required`,``),l===!0&&z(`multiple`,``),u===!0&&z(`checked`,``),y===!0&&z(`autofocus`,``),T===!0&&z(`formnovalidate`,``),M===!0&&z(`capture`,``),M===`user`&&z(`capture`,`user`),M===`environment`&&z(`capture`,`environment`);let B={...L,attrs:R},V={};if(t&&(typeof t.label==`string`&&(V.label=t.label),typeof t.labelledby==`string`&&(V.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(V.hidden=t.hidden)),Object.keys(V).length>0&&(B.aria=V),Object.keys(R).length===0){let{attrs:e,...t}=B;return t}return B}function a(t){return e.r(n,i(t))}function o(e=document){}exports.INPUT_SELECTOR=r,exports.INPUT_TAG=n,exports.createInput=a,exports.enhanceInputs=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=input.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.cjs","names":[],"sources":["../../../../../src/elements/form/input/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Input element helpers.\n *\n * @remarks\n * The input element (`<input>`) represents a typed data field whose behavior is\n * primarily controlled by its `type` attribute. :contentReference[oaicite:5]{index=5}\n *\n * Best-practice guidance:\n * - Prefer the most specific `type` possible (e.g. `email`, `tel`, `number`)\n * to improve UX and validation behavior.\n * - Always provide an accessible name (visible label, `aria-label`, or\n * `aria-labelledby`).\n * - Treat `autocomplete`, `inputmode`, and `enterkeyhint` as UX hints, not\n * security controls. :contentReference[oaicite:6]{index=6}\n * - For `<input type=\"image\">`, include meaningful `alt` text; while it may be\n * technically optional, it should be provided for usability/accessibility. :contentReference[oaicite:7]{index=7}\n *\n * pkgn-sol-specific conventions:\n * - Defaults `type` to `\"text\"` unless explicitly overridden (typed field or raw\n * attrs escape hatch), matching HTML's default behavior. :contentReference[oaicite:8]{index=8}\n * - Applies global attributes via pkgn-sol's hardened DOM helpers (`dom.ts`),\n * which block inline event handler attributes (e.g. `onclick`) and the raw\n * `style` attribute string.\n * - Supports a small structured ARIA input to reduce typo-based ARIA bugs.\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * @module\n * @category Elements\n */\n\nimport {\n createVoidElement,\n type AttrValue,\n type ElementOf,\n type GlobalAttrs,\n} from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset mapped into {@link GlobalAttrs.aria}.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference(s) to labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * Common input `type` values.\n *\n * @remarks\n * The `type` attribute controls which control is rendered and how values are\n * processed. :contentReference[oaicite:9]{index=9}\n *\n * pkgn-sol models the widely used types while still allowing the raw `attrs` escape\n * hatch for unusual/experimental values.\n *\n * @category Attributes\n */\nexport type InputType =\n | 'text'\n | 'password'\n | 'email'\n | 'number'\n | 'search'\n | 'tel'\n | 'url'\n | 'date'\n | 'datetime-local'\n | 'month'\n | 'week'\n | 'time'\n | 'color'\n | 'checkbox'\n | 'radio'\n | 'file'\n | 'hidden'\n | 'image'\n | 'range'\n | 'reset'\n | 'submit'\n | 'button';\n\n/**\n * Values for the `inputmode` hint.\n *\n * @remarks\n * `inputmode` is a hint to user agents about what kind of virtual keyboard to\n * show. :contentReference[oaicite:10]{index=10}\n *\n * @category Attributes\n */\nexport type InputMode =\n | 'none'\n | 'text'\n | 'tel'\n | 'url'\n | 'email'\n | 'numeric'\n | 'decimal'\n | 'search';\n\n/**\n * Values for the `enterkeyhint` hint.\n *\n * @remarks\n * Defines what action label/icon to present for the enter key on virtual\n * keyboards. :contentReference[oaicite:11]{index=11}\n *\n * @category Attributes\n */\nexport type EnterKeyHint = 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';\n\n/**\n * Values for the `popovertargetaction` attribute when the input is used as a\n * popover invoker button.\n *\n * @category Attributes\n */\nexport type PopoverTargetAction = 'toggle' | 'show' | 'hide';\n\n/**\n * The semantic tag name for inputs.\n *\n * @category Constants\n */\nexport const INPUT_TAG = 'input' as const;\n\n/**\n * A CSS selector targeting input elements.\n *\n * @category Constants\n */\nexport const INPUT_SELECTOR = 'input';\n\n/**\n * Attribute bag for input creation/enhancement.\n *\n * @remarks\n * `<input>` supports a large surface area of attributes, many of which are\n * type-dependent. pkgn-sol models common attributes explicitly and provides\n * {@link GlobalAttrs.attrs} as an escape hatch (validated by `dom.ts`).\n *\n * Notes:\n * - pkgn-sol defaults `type` to `\"text\"` unless explicitly overridden. :contentReference[oaicite:12]{index=12}\n * - Boolean attributes are applied by presence (empty string) when `true`.\n * - For `type=\"image\"`, `alt` should be provided for accessibility. :contentReference[oaicite:13]{index=13}\n *\n * @category Attributes\n */\nexport type InputAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * The input type. Defaults to `\"text\"` in pkgn-sol.\n */\n type?: InputType;\n\n /**\n * Form field name (used during submission).\n */\n name?: string;\n\n /**\n * Initial/current value (type-dependent semantics).\n */\n value?: string;\n\n /**\n * Placeholder hint (text-like types).\n */\n placeholder?: string;\n\n /**\n * Disables the control when true.\n */\n disabled?: boolean;\n\n /**\n * Marks the control read-only when true (where applicable).\n */\n readOnly?: boolean;\n\n /**\n * Marks the control required for form submission.\n */\n required?: boolean;\n\n /**\n * Enables multiple values (e.g. file inputs).\n */\n multiple?: boolean;\n\n /**\n * Marks a checkbox or radio as checked.\n */\n checked?: boolean;\n\n /**\n * Minimum value (number/date/time/range-like types).\n */\n min?: string | number;\n\n /**\n * Maximum value (number/date/time/range-like types).\n */\n max?: string | number;\n\n /**\n * Step interval (number/date/time/range-like types).\n */\n step?: string | number;\n\n /**\n * Minimum length (text-like types).\n */\n minLength?: number;\n\n /**\n * Maximum length (text-like types).\n */\n maxLength?: number;\n\n /**\n * Validation pattern (text-like types).\n */\n pattern?: string;\n\n /**\n * Size hint (visible character width, where applicable).\n */\n size?: number;\n\n /**\n * Autocomplete hint.\n */\n autoComplete?: string;\n\n /**\n * Autofocus hint.\n */\n autofocus?: boolean;\n\n /**\n * Associates the control with a datalist element by ID.\n */\n list?: string;\n\n /**\n * Associates the control with a form element by ID.\n */\n form?: string;\n\n /**\n * Overrides form submission target for submit/image inputs.\n */\n formAction?: string;\n\n /**\n * Overrides form submission encoding for submit/image inputs.\n */\n formEnctype?: 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';\n\n /**\n * Overrides form submission method for submit/image inputs.\n */\n formMethod?: 'get' | 'post' | 'dialog';\n\n /**\n * Prevents constraint validation on submission.\n */\n formNoValidate?: boolean;\n\n /**\n * Overrides form submission browsing context target.\n */\n formTarget?: string;\n\n /**\n * Source URL for `type=\"image\"`.\n */\n src?: string;\n\n /**\n * Alternate text for `type=\"image\"`.\n *\n * @remarks\n * This is only meaningful for image inputs and should be provided. :contentReference[oaicite:14]{index=14}\n */\n alt?: string;\n\n /**\n * Width for `type=\"image\"`.\n */\n width?: number;\n\n /**\n * Height for `type=\"image\"`.\n */\n height?: number;\n\n /**\n * Accepted file types (for `type=\"file\"`).\n */\n accept?: string;\n\n /**\n * Media capture hint (primarily file inputs on mobile).\n *\n * @remarks\n * If set to `true`, the boolean attribute is applied by presence.\n */\n capture?: 'user' | 'environment' | true;\n\n /**\n * Hint for the virtual keyboard shown on touch devices.\n */\n inputMode?: InputMode;\n\n /**\n * Hint for the virtual keyboard enter key label/icon.\n */\n enterKeyHint?: EnterKeyHint;\n\n /**\n * ID of the popover element this input controls (typically `type=\"button\"`).\n */\n popoverTarget?: string;\n\n /**\n * Action to perform on the targeted popover.\n */\n popoverTargetAction?: PopoverTargetAction;\n};\n\n/**\n * Normalize {@link InputAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @remarks\n * Pattern:\n * - Start with any caller-provided raw attrs escape hatch.\n * - Apply typed attributes without overriding explicit raw attributes.\n * - Map structured ARIA into {@link GlobalAttrs.aria}.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: InputAttrs): GlobalAttrs {\n const {\n aria,\n type,\n name,\n value,\n placeholder,\n disabled,\n readOnly,\n required,\n multiple,\n checked,\n min,\n max,\n step,\n minLength,\n maxLength,\n pattern,\n size,\n autoComplete,\n autofocus,\n list,\n form,\n formAction,\n formEnctype,\n formMethod,\n formNoValidate,\n formTarget,\n src,\n alt,\n width,\n height,\n accept,\n capture,\n inputMode,\n enterKeyHint,\n popoverTarget,\n popoverTargetAction,\n ...rest\n } = attrs ?? {};\n\n const mergedAttrs: Record<string, AttrValue> = { ...(rest.attrs ?? {}) };\n\n const setIfUnset = (key: string, v: AttrValue | undefined): void => {\n if (v === undefined) return;\n if (Object.prototype.hasOwnProperty.call(mergedAttrs, key)) return;\n mergedAttrs[key] = v;\n };\n\n // Default type to \"text\" unless explicitly overridden.\n setIfUnset('type', type ?? 'text');\n\n setIfUnset('name', name);\n setIfUnset('value', value);\n setIfUnset('placeholder', placeholder);\n setIfUnset('min', min);\n setIfUnset('max', max);\n setIfUnset('step', step);\n setIfUnset('minlength', typeof minLength === 'number' ? minLength : undefined);\n setIfUnset('maxlength', typeof maxLength === 'number' ? maxLength : undefined);\n setIfUnset('pattern', pattern);\n setIfUnset('size', typeof size === 'number' ? size : undefined);\n setIfUnset('autocomplete', autoComplete);\n setIfUnset('list', list);\n setIfUnset('form', form);\n\n setIfUnset('formaction', formAction);\n setIfUnset('formenctype', formEnctype);\n setIfUnset('formmethod', formMethod);\n setIfUnset('formtarget', formTarget);\n\n setIfUnset('src', src);\n setIfUnset('alt', alt);\n setIfUnset('width', typeof width === 'number' ? width : undefined);\n setIfUnset('height', typeof height === 'number' ? height : undefined);\n\n setIfUnset('accept', accept);\n setIfUnset('inputmode', inputMode);\n setIfUnset('enterkeyhint', enterKeyHint);\n\n setIfUnset('popovertarget', popoverTarget);\n setIfUnset('popovertargetaction', popoverTargetAction);\n\n // Boolean attributes: presence (empty string) when true.\n if (disabled === true) setIfUnset('disabled', '');\n if (readOnly === true) setIfUnset('readonly', '');\n if (required === true) setIfUnset('required', '');\n if (multiple === true) setIfUnset('multiple', '');\n if (checked === true) setIfUnset('checked', '');\n if (autofocus === true) setIfUnset('autofocus', '');\n if (formNoValidate === true) setIfUnset('formnovalidate', '');\n\n if (capture === true) setIfUnset('capture', '');\n if (capture === 'user') setIfUnset('capture', 'user');\n if (capture === 'environment') setIfUnset('capture', 'environment');\n\n const mapped: GlobalAttrs = { ...rest, attrs: mergedAttrs };\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n if (aria) {\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n }\n\n if (Object.keys(mappedAria).length > 0) {\n mapped.aria = mappedAria;\n }\n\n if (Object.keys(mergedAttrs).length === 0) {\n const { attrs: _unused, ...withoutAttrs } = mapped;\n return withoutAttrs;\n }\n\n return mapped;\n}\n\n/**\n * Create an input element with attributes.\n *\n * @remarks\n * - `<input>` is a void element; it never receives text content. :contentReference[oaicite:15]{index=15}\n * - pkgn-sol defaults `type` to `\"text\"` unless overridden. :contentReference[oaicite:16]{index=16}\n * - Global attributes are applied via pkgn-sol's shared DOM helper, including security\n * guards that block inline event handler attributes (e.g. `onclick`) and raw\n * `style` attribute strings.\n *\n * @param attrs - Optional attributes to apply.\n * @returns The created `<input>` element.\n *\n * @example\n * ```ts\n * import { createInput } from \"@lnpg/pkgn-sol/elements/form/input\";\n *\n * const email = createInput({\n * type: \"email\",\n * name: \"email\",\n * autoComplete: \"email\",\n * inputMode: \"email\",\n * });\n * ```\n *\n * @category DOM\n */\nexport function createInput(attrs?: InputAttrs): ElementOf<typeof INPUT_TAG> {\n return createVoidElement(INPUT_TAG, toGlobalAttrs(attrs));\n}\n\n/**\n * Enhance input elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceInputs(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for input.\n void root;\n}\n"],"mappings":"sMA+Ia,EAAY,QAOZ,EAAiB,QAwN9B,SAAS,EAAc,EAAiC,CACtD,GAAM,CACJ,OACA,OACA,OACA,QACA,cACA,WACA,WACA,WACA,WACA,UACA,MACA,MACA,OACA,YACA,YACA,UACA,OACA,eACA,YACA,OACA,OACA,aACA,cACA,aACA,iBACA,aACA,MACA,MACA,QACA,SACA,SACA,UACA,YACA,eACA,gBACA,sBACA,GAAG,GACD,GAAS,EAAE,CAET,EAAyC,CAAE,GAAI,EAAK,OAAS,EAAE,CAAG,CAElE,GAAc,EAAa,IAAmC,CAC9D,IAAM,IAAA,KACN,OAAO,UAAU,eAAe,KAAK,EAAa,EAAI,GAC1D,EAAY,GAAO,KAIrB,EAAW,OAAQ,GAAQ,OAAO,CAElC,EAAW,OAAQ,EAAK,CACxB,EAAW,QAAS,EAAM,CAC1B,EAAW,cAAe,EAAY,CACtC,EAAW,MAAO,EAAI,CACtB,EAAW,MAAO,EAAI,CACtB,EAAW,OAAQ,EAAK,CACxB,EAAW,YAAa,OAAO,GAAc,SAAW,EAAY,IAAA,GAAU,CAC9E,EAAW,YAAa,OAAO,GAAc,SAAW,EAAY,IAAA,GAAU,CAC9E,EAAW,UAAW,EAAQ,CAC9B,EAAW,OAAQ,OAAO,GAAS,SAAW,EAAO,IAAA,GAAU,CAC/D,EAAW,eAAgB,EAAa,CACxC,EAAW,OAAQ,EAAK,CACxB,EAAW,OAAQ,EAAK,CAExB,EAAW,aAAc,EAAW,CACpC,EAAW,cAAe,EAAY,CACtC,EAAW,aAAc,EAAW,CACpC,EAAW,aAAc,EAAW,CAEpC,EAAW,MAAO,EAAI,CACtB,EAAW,MAAO,EAAI,CACtB,EAAW,QAAS,OAAO,GAAU,SAAW,EAAQ,IAAA,GAAU,CAClE,EAAW,SAAU,OAAO,GAAW,SAAW,EAAS,IAAA,GAAU,CAErE,EAAW,SAAU,EAAO,CAC5B,EAAW,YAAa,EAAU,CAClC,EAAW,eAAgB,EAAa,CAExC,EAAW,gBAAiB,EAAc,CAC1C,EAAW,sBAAuB,EAAoB,CAGlD,IAAa,IAAM,EAAW,WAAY,GAAG,CAC7C,IAAa,IAAM,EAAW,WAAY,GAAG,CAC7C,IAAa,IAAM,EAAW,WAAY,GAAG,CAC7C,IAAa,IAAM,EAAW,WAAY,GAAG,CAC7C,IAAY,IAAM,EAAW,UAAW,GAAG,CAC3C,IAAc,IAAM,EAAW,YAAa,GAAG,CAC/C,IAAmB,IAAM,EAAW,iBAAkB,GAAG,CAEzD,IAAY,IAAM,EAAW,UAAW,GAAG,CAC3C,IAAY,QAAQ,EAAW,UAAW,OAAO,CACjD,IAAY,eAAe,EAAW,UAAW,cAAc,CAEnE,IAAM,EAAsB,CAAE,GAAG,EAAM,MAAO,EAAa,CAErD,EAA+C,EAAE,CAWvD,GAVI,IACE,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,SAG7D,OAAO,KAAK,EAAW,CAAC,OAAS,IACnC,EAAO,KAAO,GAGZ,OAAO,KAAK,EAAY,CAAC,SAAW,EAAG,CACzC,GAAM,CAAE,MAAO,EAAS,GAAG,GAAiB,EAC5C,OAAO,EAGT,OAAO,EA8BT,SAAgB,EAAY,EAAiD,CAC3E,OAAO,EAAA,EAAkB,EAAW,EAAc,EAAM,CAAC,CAa3D,SAAgB,EAAc,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({LABEL_SELECTOR:()=>r,LABEL_TAG:()=>n,createLabel:()=>a,enhanceLabels:()=>o}),n=`label`,r=`label`;function i(e){if(!e)return;let{aria:t,htmlFor:n,...r}=e,i={...r};if(typeof n==`string`&&n.length>0&&(i.attrs={...i.attrs??{},for:n}),!t)return i;let a={};return typeof t.label==`string`&&(a.label=t.label),typeof t.labelledby==`string`&&(a.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(a.hidden=t.hidden),Object.keys(a).length>0?{...i,aria:a}:i}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.LABEL_SELECTOR=r,exports.LABEL_TAG=n,exports.createLabel=a,exports.enhanceLabels=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=label.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.cjs","names":[],"sources":["../../../../../src/elements/form/label/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Label element helpers.\n *\n * @remarks\n * The label element (`<label>`) represents a caption in a user interface and is\n * primarily used to provide an accessible name for a form control.\n *\n * Best-practice guidance:\n * - Always associate labels with their control:\n * - Prefer an explicit association using `for` (pkgn-sol: {@link LabelAttrs.htmlFor})\n * that matches the control's `id`.\n * - Alternatively, wrap the control inside the `<label>` element.\n * - Do not rely on placeholder text as a replacement for a visible label.\n * - Keep label text concise and descriptive.\n *\n * Attributes:\n * - `<label>` supports global attributes.\n * - The only relevant label-specific content attribute is `for`, reflected in\n * JavaScript as `htmlFor`. (The `label` element does not have a `form` content\n * attribute; it has a `form` *IDL attribute* derived from the associated control.)\n *\n * Security:\n * - Global attribute escape hatches are guarded by pkgn-sol's `dom.ts` helpers which\n * block inline event handler attributes (e.g. `onclick`) and raw `style`\n * attribute injection (use the `style` object field instead).\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/label\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/for\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for label.\n *\n * @category Constants\n */\nexport const LABEL_TAG = 'label' as const;\n\n/**\n * A CSS selector targeting label elements.\n *\n * @category Constants\n */\nexport const LABEL_SELECTOR = 'label';\n\n/**\n * Attribute bag for label creation/enhancement.\n *\n * @remarks\n * Labels accept standard HTML global attributes.\n *\n * Label-specific:\n * - {@link LabelAttrs.htmlFor} maps to the `for` attribute, associating the label\n * with the control whose `id` matches.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type LabelAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * Associate the label with a labelable form control by ID.\n *\n * @remarks\n * This maps to the `for` content attribute.\n *\n * The value should match the `id` of a labelable element in the same document\n * tree (e.g. `<input id=\"email\">` pairs with `<label for=\"email\">`).\n */\n htmlFor?: string;\n};\n\n/**\n * Normalize {@link LabelAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The label attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: LabelAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, htmlFor, ...rest } = attrs;\n\n const mapped: GlobalAttrs = { ...rest };\n\n if (typeof htmlFor === 'string' && htmlFor.length > 0) {\n mapped.attrs = {\n ...(mapped.attrs ?? {}),\n for: htmlFor,\n };\n }\n\n if (!aria) return mapped;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n // Only attach `aria` if something was actually defined.\n const hasMappedAria = Object.keys(mappedAria).length > 0;\n\n return hasMappedAria ? { ...mapped, aria: mappedAria } : mapped;\n}\n\n/**\n * Create a label element with optional text content and attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the label.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<label>` element.\n *\n * @example\n * ```ts\n * import { createLabel } from \"@lnpg/pkgn-sol/elements/form/label\";\n *\n * const label = createLabel(\"Email address\", { htmlFor: \"email\" });\n * ```\n *\n * @category DOM\n */\nexport function createLabel(text?: string, attrs?: LabelAttrs): ElementOf<typeof LABEL_TAG> {\n return createElement(LABEL_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance label elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceLabels(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for label.\n void root;\n}\n"],"mappings":"sMAoEa,EAAY,QAOZ,EAAiB,QA2C9B,SAAS,EAAc,EAA6C,CAClE,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,UAAS,GAAG,GAAS,EAE7B,EAAsB,CAAE,GAAG,EAAM,CASvC,GAPI,OAAO,GAAY,UAAY,EAAQ,OAAS,IAClD,EAAO,MAAQ,CACb,GAAI,EAAO,OAAS,EAAE,CACtB,IAAK,EACN,EAGC,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CASvD,OAPI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAGzC,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAQ,KAAM,EAAY,CAAG,EAyB3D,SAAgB,EAAY,EAAe,EAAiD,CAC1F,OAAO,EAAA,EAAc,EAAW,EAAc,EAAM,CAAE,EAAK,CAqB7D,SAAgB,EAAc,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({LEGEND_SELECTOR:()=>r,LEGEND_TAG:()=>n,createLegend:()=>a,enhanceLegends:()=>o}),n=`legend`,r=`legend`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.LEGEND_SELECTOR=r,exports.LEGEND_TAG=n,exports.createLegend=a,exports.enhanceLegends=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=legend.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legend.cjs","names":[],"sources":["../../../../../src/elements/form/legend/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Legend element helpers.\n *\n * @remarks\n * The legend element (`<legend>`) represents a caption for the content of its\n * parent `<fieldset>`. It is commonly used to label groups of related form\n * controls (e.g. radio-button groups), improving clarity and accessibility.\n *\n * Best-practice guidance:\n * - Use `<legend>` as the first child of a `<fieldset>` to label the group.\n * - Keep legend text concise and meaningful (it is typically announced with\n * grouped controls by assistive technologies).\n * - Avoid using `<legend>` purely for layout; use CSS for styling/spacing.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create `<legend>` elements in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend\n * @see https://www.w3.org/WAI/tutorials/forms/grouping/\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs.\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for legend.\n *\n * @category Constants\n */\nexport const LEGEND_TAG = 'legend' as const;\n\n/**\n * A CSS selector targeting legend elements.\n *\n * @category Constants\n */\nexport const LEGEND_SELECTOR = 'legend';\n\n/**\n * Attribute bag for legend creation/enhancement.\n *\n * @remarks\n * Legend elements accept standard HTML global attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type LegendAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link LegendAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The legend attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: LegendAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n // Only attach `aria` if something was actually defined.\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create a legend element with optional text content and global attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the legend.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<legend>` element.\n *\n * @example\n * ```ts\n * import { createLegend } from \"@lnpg/pkgn-sol/elements/form/legend\";\n *\n * const legend = createLegend(\"Delivery address\");\n * ```\n *\n * @category DOM\n */\nexport function createLegend(text?: string, attrs?: LegendAttrs): ElementOf<typeof LEGEND_TAG> {\n return createElement(LEGEND_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance legend elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceLegends(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for legend.\n void root;\n}\n"],"mappings":"0MAgEa,EAAa,SAOb,EAAkB,SA4B/B,SAAS,EAAc,EAA8C,CACnE,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CASvD,OAPI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAG7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EAyBrD,SAAgB,EAAa,EAAe,EAAmD,CAC7F,OAAO,EAAA,EAAc,EAAY,EAAc,EAAM,CAAE,EAAK,CAqB9D,SAAgB,EAAe,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({METER_SELECTOR:()=>r,METER_TAG:()=>n,createMeter:()=>a,enhanceMeters:()=>o}),n=`meter`,r=`meter`;function i(e){let{aria:t,value:n,min:r,max:i,low:a,high:o,optimum:s,form:c,...l}=e??{},u={...l.attrs??{}},d=(e,t)=>{t!==void 0&&(Object.prototype.hasOwnProperty.call(u,e)||(u[e]=t))};d(`min`,typeof r==`number`?r:0),d(`max`,typeof i==`number`?i:1),d(`value`,typeof n==`number`?n:0),d(`low`,typeof a==`number`?a:void 0),d(`high`,typeof o==`number`?o:void 0),d(`optimum`,typeof s==`number`?s:void 0),d(`form`,typeof c==`string`?c:void 0);let f={};t&&(typeof t.label==`string`&&(f.label=t.label),typeof t.labelledby==`string`&&(f.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(f.hidden=t.hidden));let p={...l,attrs:u};return Object.keys(f).length>0&&(p.aria=f),p}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.METER_SELECTOR=r,exports.METER_TAG=n,exports.createMeter=a,exports.enhanceMeters=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=meter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meter.cjs","names":[],"sources":["../../../../../src/elements/form/meter/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Meter element helpers.\n *\n * @remarks\n * The meter element (`<meter>`) represents a scalar measurement within a known range,\n * or a fractional value.\n *\n * Best-practice guidance:\n * - Use `<meter>` for a known-range measurement (e.g. disk usage, score, relevance).\n * - Do NOT use `<meter>` for task progress. Use `<progress>` for progress indication.\n * - Provide fallback text content for user agents that don't render `<meter>`.\n * - Define `min`/`max` if your `value` is not in the default 0..1 range.\n * - Use `low`/`high`/`optimum` only when you actually want \"good/bad\" semantics.\n *\n * pkgn-sol notes:\n * - This module is framework-agnostic and has no side effects.\n * - Global attributes are applied via pkgn-sol's shared DOM helper, which blocks:\n * - inline event handler attributes (e.g. `onclick`)\n * - raw `style` attribute injection (use the `style` object instead)\n * - Text passed to factories is assigned via `textContent` (never `innerHTML`).\n *\n * References:\n * - MDN: `<meter>` element\n * - WHATWG HTML: meter attributes and behavior\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type AttrValue, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs.\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for meter.\n *\n * @category Constants\n */\nexport const METER_TAG = 'meter' as const;\n\n/**\n * A CSS selector targeting meter elements.\n *\n * @category Constants\n */\nexport const METER_SELECTOR = 'meter';\n\n/**\n * Attribute bag for meter creation/enhancement.\n *\n * @remarks\n * Supported element-specific attributes:\n * - `value`, `min`, `max`, `low`, `high`, `optimum`\n * - `form` (associates the meter with a form owner by ID)\n *\n * Defaults (documented platform behavior):\n * - `min` defaults to `0` when omitted\n * - `max` defaults to `1` when omitted\n * - `value` defaults to `0` when omitted or malformed\n *\n * pkgn-sol applies these defaults as explicit attributes to keep output predictable\n * and testable even in node-based DOM shims.\n *\n * @category Attributes\n */\nexport type MeterAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Current numeric value.\n *\n * @remarks\n * Should be within `[min, max]` when those are defined.\n */\n value?: number;\n\n /**\n * Lower numeric bound of the range. Defaults to `0`.\n */\n min?: number;\n\n /**\n * Upper numeric bound of the range. Defaults to `1`.\n */\n max?: number;\n\n /**\n * Upper numeric bound of the low end of the range.\n */\n low?: number;\n\n /**\n * Lower numeric bound of the high end of the range.\n */\n high?: number;\n\n /**\n * The optimal value within the range.\n */\n optimum?: number;\n\n /**\n * Associates the meter with a form element by ID.\n *\n * @remarks\n * Mirrors the HTML `form` attribute used by form-associated elements.\n */\n form?: string;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link MeterAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @remarks\n * - Preserves caller-provided `attrs` escape hatch (still validated by `dom.ts`).\n * - Element-specific attributes are merged into `attrs` without overwriting keys\n * explicitly provided by the caller.\n * - Applies predictable defaults for `min`, `max`, and `value` even if callers\n * omit the `attrs` bag entirely.\n *\n * @param attrs - The meter attributes.\n * @returns A {@link GlobalAttrs} object.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: MeterAttrs): GlobalAttrs {\n const a: MeterAttrs = attrs ?? {};\n\n const { aria, value, min, max, low, high, optimum, form, ...rest } = a;\n\n // Start with any caller-provided attrs escape hatch (it is still validated by dom.ts).\n const mergedAttrs: Record<string, AttrValue> = { ...(rest.attrs ?? {}) };\n\n // Helper: only set if caller didn't already set the raw attribute explicitly.\n const setIfUnset = (key: string, v: AttrValue | undefined): void => {\n if (v === undefined) return;\n if (Object.prototype.hasOwnProperty.call(mergedAttrs, key)) return;\n mergedAttrs[key] = v;\n };\n\n // Defaults: make output deterministic even when attrs is omitted.\n setIfUnset('min', typeof min === 'number' ? min : 0);\n setIfUnset('max', typeof max === 'number' ? max : 1);\n setIfUnset('value', typeof value === 'number' ? value : 0);\n\n // Optional meter semantics.\n setIfUnset('low', typeof low === 'number' ? low : undefined);\n setIfUnset('high', typeof high === 'number' ? high : undefined);\n setIfUnset('optimum', typeof optimum === 'number' ? optimum : undefined);\n\n // Form association.\n setIfUnset('form', typeof form === 'string' ? form : undefined);\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n if (aria) {\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n }\n\n const next: GlobalAttrs = { ...rest, attrs: mergedAttrs };\n\n if (Object.keys(mappedAria).length > 0) {\n next.aria = mappedAria;\n }\n\n return next;\n}\n\n/**\n * Create a meter element with optional fallback text and attributes.\n *\n * @remarks\n * - Fallback text is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional fallback text for user agents that don't render `<meter>`.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<meter>` element.\n *\n * @category DOM\n */\nexport function createMeter(text?: string, attrs?: MeterAttrs): ElementOf<typeof METER_TAG> {\n return createElement(METER_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance meter elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceMeters(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for meter.\n void root;\n}\n"],"mappings":"sMAgEa,EAAY,QAOZ,EAAiB,QAmF9B,SAAS,EAAc,EAAiC,CAGtD,GAAM,CAAE,OAAM,QAAO,MAAK,MAAK,MAAK,OAAM,UAAS,OAAM,GAAG,GAFtC,GAAS,EAAE,CAK3B,EAAyC,CAAE,GAAI,EAAK,OAAS,EAAE,CAAG,CAGlE,GAAc,EAAa,IAAmC,CAC9D,IAAM,IAAA,KACN,OAAO,UAAU,eAAe,KAAK,EAAa,EAAI,GAC1D,EAAY,GAAO,KAIrB,EAAW,MAAO,OAAO,GAAQ,SAAW,EAAM,EAAE,CACpD,EAAW,MAAO,OAAO,GAAQ,SAAW,EAAM,EAAE,CACpD,EAAW,QAAS,OAAO,GAAU,SAAW,EAAQ,EAAE,CAG1D,EAAW,MAAO,OAAO,GAAQ,SAAW,EAAM,IAAA,GAAU,CAC5D,EAAW,OAAQ,OAAO,GAAS,SAAW,EAAO,IAAA,GAAU,CAC/D,EAAW,UAAW,OAAO,GAAY,SAAW,EAAU,IAAA,GAAU,CAGxE,EAAW,OAAQ,OAAO,GAAS,SAAW,EAAO,IAAA,GAAU,CAE/D,IAAM,EAA+C,EAAE,CACnD,IACE,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,SAGjE,IAAM,EAAoB,CAAE,GAAG,EAAM,MAAO,EAAa,CAMzD,OAJI,OAAO,KAAK,EAAW,CAAC,OAAS,IACnC,EAAK,KAAO,GAGP,EAkBT,SAAgB,EAAY,EAAe,EAAiD,CAC1F,OAAO,EAAA,EAAc,EAAW,EAAc,EAAM,CAAE,EAAK,CAa7D,SAAgB,EAAc,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({OPTGROUP_SELECTOR:()=>r,OPTGROUP_TAG:()=>n,createOptgroup:()=>a,enhanceOptgroups:()=>o}),n=`optgroup`,r=`optgroup`;function i(e,t){let{aria:n,disabled:r,...i}=t??{},a={};n&&(typeof n.label==`string`&&(a.label=n.label),typeof n.labelledby==`string`&&(a.labelledby=n.labelledby),typeof n.hidden==`boolean`&&(a.hidden=n.hidden));let o={...i.attrs??{}};Object.prototype.hasOwnProperty.call(o,`label`)||(o.label=e),r===!0&&!Object.prototype.hasOwnProperty.call(o,`disabled`)&&(o.disabled=``);let s={...i};return Object.keys(o).length>0&&(s.attrs=o),Object.keys(a).length>0&&(s.aria=a),s}function a(t,r){return e.n(n,i(t,r))}function o(e=document){}exports.OPTGROUP_SELECTOR=r,exports.OPTGROUP_TAG=n,exports.createOptgroup=a,exports.enhanceOptgroups=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=optgroup.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optgroup.cjs","names":[],"sources":["../../../../../src/elements/form/optgroup/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Optgroup element helpers.\n *\n * @remarks\n * The optgroup element (`<optgroup>`) groups related `<option>` elements within\n * a `<select>`, allowing user agents to present grouped choices with a label.\n * :contentReference[oaicite:3]{index=3}\n *\n * Best-practice guidance:\n * - Always provide a meaningful `label`. MDN notes this attribute is mandatory\n * when the element is used. pkgn-sol enforces this by requiring `label` when\n * creating an optgroup. :contentReference[oaicite:4]{index=4}\n * - Use `disabled` to disable all options within the group when appropriate.\n * :contentReference[oaicite:5]{index=5}\n * - Prefer native semantics; avoid ARIA where native semantics already apply.\n *\n * pkgn-sol-specific conventions:\n * - Requires `label` at creation time to avoid invalid/anonymous optgroups.\n * - Applies global attributes via pkgn-sol's hardened DOM helpers (`dom.ts`), which\n * block inline event handler attributes (e.g. `onclick`) and the raw `style`\n * attribute string.\n * - Supports a small structured ARIA input to reduce typo-based ARIA bugs.\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset mapped into {@link GlobalAttrs.aria}.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference(s) to labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for option groups.\n *\n * @category Constants\n */\nexport const OPTGROUP_TAG = 'optgroup' as const;\n\n/**\n * A CSS selector targeting optgroup elements.\n *\n * @category Constants\n */\nexport const OPTGROUP_SELECTOR = 'optgroup';\n\n/**\n * Attribute bag for optgroup creation/enhancement.\n *\n * @remarks\n * `<optgroup>` accepts global attributes plus:\n * - `disabled` (boolean attribute)\n *\n * The `label` attribute is mandatory for meaningful use. pkgn-sol requires the label\n * as a separate argument in {@link createOptgroup}. :contentReference[oaicite:6]{index=6}\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, mapped into\n * {@link GlobalAttrs.aria}.\n *\n * @category Attributes\n */\nexport type OptgroupAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * Disables the option group when true.\n *\n * @remarks\n * When disabled, none of the options in the group are selectable. :contentReference[oaicite:7]{index=7}\n */\n disabled?: boolean;\n};\n\n/**\n * Normalize {@link OptgroupAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param label - The required optgroup label, mapped to the `label` attribute.\n * @param attrs - The optgroup attributes.\n * @returns A {@link GlobalAttrs} object containing mapped attributes.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(label: string, attrs?: OptgroupAttrs): GlobalAttrs {\n const { aria, disabled, ...rest } = attrs ?? {};\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (aria) {\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n }\n\n const mergedAttrs: NonNullable<GlobalAttrs['attrs']> = { ...(rest.attrs ?? {}) };\n\n // Always set the mandatory label attribute unless explicitly overridden via raw attrs.\n if (!Object.prototype.hasOwnProperty.call(mergedAttrs, 'label')) {\n mergedAttrs.label = label;\n }\n\n // Boolean attribute by presence when true.\n if (disabled === true && !Object.prototype.hasOwnProperty.call(mergedAttrs, 'disabled')) {\n mergedAttrs.disabled = '';\n }\n\n const mapped: GlobalAttrs = { ...rest };\n\n if (Object.keys(mergedAttrs).length > 0) mapped.attrs = mergedAttrs;\n\n if (Object.keys(mappedAria).length > 0) {\n mapped.aria = mappedAria;\n }\n\n return mapped;\n}\n\n/**\n * Create an optgroup element with a required label and optional attributes.\n *\n * @remarks\n * - The label is mapped to the `label` attribute (required for meaningful use). :contentReference[oaicite:8]{index=8}\n * - Global attributes are applied via pkgn-sol's shared DOM helper, including security\n * guards that block inline event handler attributes (e.g. `onclick`) and raw\n * `style` attribute strings.\n *\n * @param label - The optgroup label shown by the user agent.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<optgroup>` element.\n *\n * @example\n * ```ts\n * import { createOptgroup } from \"@lnpg/pkgn-sol/elements/form/optgroup\";\n *\n * const g = createOptgroup(\"Fruits\", { disabled: false });\n * ```\n *\n * @category DOM\n */\nexport function createOptgroup(\n label: string,\n attrs?: OptgroupAttrs,\n): ElementOf<typeof OPTGROUP_TAG> {\n return createElement(OPTGROUP_TAG, toGlobalAttrs(label, attrs));\n}\n\n/**\n * Enhance optgroup elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceOptgroups(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for optgroup.\n void root;\n}\n"],"mappings":"kNA8Da,EAAe,WAOf,EAAoB,WAyCjC,SAAS,EAAc,EAAe,EAAoC,CACxE,GAAM,CAAE,OAAM,WAAU,GAAG,GAAS,GAAS,EAAE,CAEzC,EAA+C,EAAE,CAEnD,IACE,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,SAGjE,IAAM,EAAiD,CAAE,GAAI,EAAK,OAAS,EAAE,CAAG,CAG3E,OAAO,UAAU,eAAe,KAAK,EAAa,QAAQ,GAC7D,EAAY,MAAQ,GAIlB,IAAa,IAAQ,CAAC,OAAO,UAAU,eAAe,KAAK,EAAa,WAAW,GACrF,EAAY,SAAW,IAGzB,IAAM,EAAsB,CAAE,GAAG,EAAM,CAQvC,OANI,OAAO,KAAK,EAAY,CAAC,OAAS,IAAG,EAAO,MAAQ,GAEpD,OAAO,KAAK,EAAW,CAAC,OAAS,IACnC,EAAO,KAAO,GAGT,EAyBT,SAAgB,EACd,EACA,EACgC,CAChC,OAAO,EAAA,EAAc,EAAc,EAAc,EAAO,EAAM,CAAC,CAajE,SAAgB,EAAiB,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({OPTION_SELECTOR:()=>r,OPTION_TAG:()=>n,createOption:()=>a,enhanceOptions:()=>o}),n=`option`,r=`option`;function i(e){if(!e)return;let{aria:t,value:n,label:r,disabled:i,selected:a,...o}=e,s={...o},c={...s.attrs??{}};if(typeof n==`string`&&(c.value=n),typeof r==`string`&&(c.label=r),i===!0&&(c.disabled=!0),a===!0&&(c.selected=!0),Object.keys(c).length>0&&(s.attrs=c),!t)return s;let l={};return typeof t.label==`string`&&(l.label=t.label),typeof t.labelledby==`string`&&(l.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(l.hidden=t.hidden),Object.keys(l).length>0?{...s,aria:l}:s}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.OPTION_SELECTOR=r,exports.OPTION_TAG=n,exports.createOption=a,exports.enhanceOptions=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=option.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option.cjs","names":[],"sources":["../../../../../src/elements/form/option/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Option element helpers.\n *\n * @remarks\n * The option element (`<option>`) defines an item within a `<select>`, `<optgroup>`,\n * or `<datalist>` element.\n *\n * Best-practice guidance:\n * - Prefer providing a `value` for form submission semantics. If `value` is omitted,\n * the option's value typically falls back to its text content.\n * - Use `label` when you need a shorter label for UI display or accessibility hints,\n * but keep the option text clear and readable.\n * - Use `disabled` to prevent selection of an option (or to mark placeholders as\n * unavailable).\n * - Use `selected` to mark the default selection in a `<select>` (usually one\n * option should be selected by default).\n *\n * Attributes:\n * - `value` (string): the value submitted/used when selected.\n * - `label` (string): a label for the option.\n * - `disabled` (boolean): whether the option is unavailable.\n * - `selected` (boolean): whether the option is selected by default.\n *\n * Security:\n * - Global attribute escape hatches are guarded by pkgn-sol's `dom.ts` helpers which\n * block inline event handler attributes (e.g. `onclick`) and raw `style`\n * attribute injection (use the `style` object field instead).\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/option\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for option.\n *\n * @category Constants\n */\nexport const OPTION_TAG = 'option' as const;\n\n/**\n * A CSS selector targeting option elements.\n *\n * @category Constants\n */\nexport const OPTION_SELECTOR = 'option';\n\n/**\n * Attribute bag for option creation/enhancement.\n *\n * @remarks\n * Options accept standard HTML global attributes plus a small set of option-specific\n * content attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type OptionAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * The option value.\n *\n * @remarks\n * If omitted, user agents commonly derive a value from the option's text.\n */\n value?: string;\n\n /**\n * A label for the option.\n *\n * @remarks\n * When present, this may be used by user agents as the option's label instead\n * of the text content in certain contexts.\n */\n label?: string;\n\n /**\n * Whether the option is disabled.\n */\n disabled?: boolean;\n\n /**\n * Whether the option is selected by default.\n *\n * @remarks\n * For `<select>`, `selected` commonly indicates the default selected option on\n * initial load. If multiple options are marked selected, browser behavior varies;\n * prefer a single default selection unless using a multi-select.\n */\n selected?: boolean;\n};\n\n/**\n * Normalize {@link OptionAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The option attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: OptionAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, value, label, disabled, selected, ...rest } = attrs;\n\n const mapped: GlobalAttrs = { ...rest };\n\n const extra: NonNullable<GlobalAttrs['attrs']> = { ...(mapped.attrs ?? {}) };\n\n if (typeof value === 'string') extra.value = value;\n if (typeof label === 'string') extra.label = label;\n\n if (disabled === true) extra.disabled = true;\n if (selected === true) extra.selected = true;\n\n // Only attach `attrs` if something was actually defined/added.\n if (Object.keys(extra).length > 0) {\n mapped.attrs = extra;\n }\n\n if (!aria) return mapped;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n const hasMappedAria = Object.keys(mappedAria).length > 0;\n\n return hasMappedAria ? { ...mapped, aria: mappedAria } : mapped;\n}\n\n/**\n * Create an option element with optional text content and attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes and escape-hatch attributes are applied via pkgn-sol's shared\n * DOM helper, including security guards that block inline event handler\n * attributes (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the option.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<option>` element.\n *\n * @example\n * ```ts\n * import { createOption } from \"@lnpg/pkgn-sol/elements/form/option\";\n *\n * const opt = createOption(\"United Kingdom\", { value: \"UK\" });\n * ```\n *\n * @category DOM\n */\nexport function createOption(text?: string, attrs?: OptionAttrs): ElementOf<typeof OPTION_TAG> {\n return createElement(OPTION_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance option elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceOptions(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for option.\n void root;\n}\n"],"mappings":"0MAqEa,EAAa,SAOb,EAAkB,SA6D/B,SAAS,EAAc,EAA8C,CACnE,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,QAAO,QAAO,WAAU,WAAU,GAAG,GAAS,EAEtD,EAAsB,CAAE,GAAG,EAAM,CAEjC,EAA2C,CAAE,GAAI,EAAO,OAAS,EAAE,CAAG,CAa5E,GAXI,OAAO,GAAU,WAAU,EAAM,MAAQ,GACzC,OAAO,GAAU,WAAU,EAAM,MAAQ,GAEzC,IAAa,KAAM,EAAM,SAAW,IACpC,IAAa,KAAM,EAAM,SAAW,IAGpC,OAAO,KAAK,EAAM,CAAC,OAAS,IAC9B,EAAO,MAAQ,GAGb,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CAQvD,OANI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAEzC,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAQ,KAAM,EAAY,CAAG,EAyB3D,SAAgB,EAAa,EAAe,EAAmD,CAC7F,OAAO,EAAA,EAAc,EAAY,EAAc,EAAM,CAAE,EAAK,CAqB9D,SAAgB,EAAe,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({OUTPUT_SELECTOR:()=>r,OUTPUT_TAG:()=>n,createOutput:()=>a,enhanceOutputs:()=>o}),n=`output`,r=`output`;function i(e){if(!e)return;let{aria:t,for:n,form:r,name:i,...a}=e,o={...a.attrs??{}},s=(e,t)=>{t!==void 0&&(Object.prototype.hasOwnProperty.call(o,e)||(o[e]=t))};s(`for`,n),s(`form`,r),s(`name`,i);let c={};t&&(typeof t.label==`string`&&(c.label=t.label),typeof t.labelledby==`string`&&(c.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(c.hidden=t.hidden));let l=Object.keys(o).length>0,u=Object.keys(c).length>0,d={...a};return l&&(d.attrs=o),u&&(d.aria=c),d}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.OUTPUT_SELECTOR=r,exports.OUTPUT_TAG=n,exports.createOutput=a,exports.enhanceOutputs=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=output.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.cjs","names":[],"sources":["../../../../../src/elements/form/output/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Output element helpers.\n *\n * @remarks\n * The output element (`<output>`) represents the result of a calculation or a\n * user action, commonly used in forms to display derived values without\n * requiring focus changes.\n *\n * Best-practice guidance:\n * - Use `<output>` for computed results derived from form controls.\n * - Use the `for` attribute to associate the output with the control(s) whose\n * values it reflects (space-separated list of element IDs).\n * - Prefer semantic HTML and native behavior over ARIA. Many browsers treat\n * `<output>` as an ARIA live region, so updating its text may be announced by\n * assistive technologies without moving focus.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create outputs in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/for\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/form\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type AttrValue, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs.\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for output.\n *\n * @category Constants\n */\nexport const OUTPUT_TAG = 'output' as const;\n\n/**\n * A CSS selector targeting output elements.\n *\n * @category Constants\n */\nexport const OUTPUT_SELECTOR = 'output';\n\n/**\n * Attribute bag for output creation/enhancement.\n *\n * @remarks\n * Output accepts standard HTML global attributes plus output-specific\n * attributes (`for`, `form`, `name`).\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type OutputAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * Space-separated list of element IDs whose values contributed to the output.\n *\n * @remarks\n * This maps to the `for` attribute (yes, the HTML attribute is literally\n * called `for`).\n */\n for?: string;\n\n /**\n * Associates the output with a form element by ID, even if not a descendant.\n */\n form?: string;\n\n /**\n * Name of the output (useful in form-associated contexts).\n */\n name?: string;\n};\n\n/**\n * Normalize {@link OutputAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The output attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: OutputAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, for: htmlFor, form, name, ...rest } = attrs;\n\n // Start with any caller-provided attrs escape hatch (still validated by dom.ts).\n const mergedAttrs: Record<string, AttrValue> = { ...(rest.attrs ?? {}) };\n\n const setIfUnset = (key: string, value: AttrValue | undefined): void => {\n if (value === undefined) return;\n if (Object.prototype.hasOwnProperty.call(mergedAttrs, key)) return;\n mergedAttrs[key] = value;\n };\n\n setIfUnset('for', htmlFor);\n setIfUnset('form', form);\n setIfUnset('name', name);\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n if (aria) {\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n }\n\n const hasMergedAttrs = Object.keys(mergedAttrs).length > 0;\n const hasMappedAria = Object.keys(mappedAria).length > 0;\n\n const next: GlobalAttrs = { ...rest };\n if (hasMergedAttrs) next.attrs = mergedAttrs;\n if (hasMappedAria) next.aria = mappedAria;\n\n return next;\n}\n\n/**\n * Create an output element with optional text content and attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the output.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<output>` element.\n *\n * @example\n * ```ts\n * import { createOutput } from \"@lnpg/pkgn-sol/elements/form/output\";\n *\n * const out = createOutput(\"0\", { name: \"result\", for: \"a b\" });\n * ```\n *\n * @category DOM\n */\nexport function createOutput(text?: string, attrs?: OutputAttrs): ElementOf<typeof OUTPUT_TAG> {\n return createElement(OUTPUT_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance output elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceOutputs(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for output.\n void root;\n}\n"],"mappings":"0MAmEa,EAAa,SAOb,EAAkB,SAgD/B,SAAS,EAAc,EAA8C,CACnE,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,IAAK,EAAS,OAAM,OAAM,GAAG,GAAS,EAG9C,EAAyC,CAAE,GAAI,EAAK,OAAS,EAAE,CAAG,CAElE,GAAc,EAAa,IAAuC,CAClE,IAAU,IAAA,KACV,OAAO,UAAU,eAAe,KAAK,EAAa,EAAI,GAC1D,EAAY,GAAO,KAGrB,EAAW,MAAO,EAAQ,CAC1B,EAAW,OAAQ,EAAK,CACxB,EAAW,OAAQ,EAAK,CAExB,IAAM,EAA+C,EAAE,CACnD,IACE,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,SAGjE,IAAM,EAAiB,OAAO,KAAK,EAAY,CAAC,OAAS,EACnD,EAAgB,OAAO,KAAK,EAAW,CAAC,OAAS,EAEjD,EAAoB,CAAE,GAAG,EAAM,CAIrC,OAHI,IAAgB,EAAK,MAAQ,GAC7B,IAAe,EAAK,KAAO,GAExB,EAyBT,SAAgB,EAAa,EAAe,EAAmD,CAC7F,OAAO,EAAA,EAAc,EAAY,EAAc,EAAM,CAAE,EAAK,CAqB9D,SAAgB,EAAe,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({PROGRESS_SELECTOR:()=>r,PROGRESS_TAG:()=>n,createProgress:()=>a,enhanceProgresses:()=>o}),n=`progress`,r=`progress`;function i(e){if(!e)return;let{aria:t,value:n,max:r,...i}=e,a={...i.attrs??{}},o=(e,t)=>{t!==void 0&&(Object.prototype.hasOwnProperty.call(a,e)||(a[e]=t))},s=typeof n==`number`;s&&o(`value`,n),s?o(`max`,typeof r==`number`?r:1):o(`max`,typeof r==`number`?r:void 0);let c={};t&&(typeof t.label==`string`&&(c.label=t.label),typeof t.labelledby==`string`&&(c.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(c.hidden=t.hidden));let l=Object.keys(a).length>0,u=Object.keys(c).length>0,d={...i};return l&&(d.attrs=a),u&&(d.aria=c),d}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.PROGRESS_SELECTOR=r,exports.PROGRESS_TAG=n,exports.createProgress=a,exports.enhanceProgresses=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=progress.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.cjs","names":[],"sources":["../../../../../src/elements/form/progress/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Progress element helpers.\n *\n * @remarks\n * The progress element (`<progress>`) represents the completion progress of a task.\n *\n * Best-practice guidance:\n * - Use `<progress>` to represent task completion (downloads, uploads, multi-step flows).\n * - If the amount of work is unknown, omit `value` to produce an indeterminate progress bar.\n * - Provide fallback text content for user agents that don't render `<progress>`.\n * - When using a determinate progress bar, set `value` and (usually) `max`.\n *\n * pkgn-sol notes:\n * - This module is framework-agnostic and has no side effects.\n * - Global attributes are applied via pkgn-sol's shared DOM helper, which blocks:\n * - inline event handler attributes (e.g. `onclick`)\n * - raw `style` attribute injection (use the `style` object instead)\n * - Text passed to factories is assigned via `textContent` (never `innerHTML`).\n *\n * References:\n * - MDN: `<progress>` element\n * - WHATWG HTML: `progress` element IDL and defaults (`max` defaults to 1.0)\n * - MDN: `:indeterminate` and indeterminate `<progress>` when `value` is absent\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type AttrValue, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs.\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for progress.\n *\n * @category Constants\n */\nexport const PROGRESS_TAG = 'progress' as const;\n\n/**\n * A CSS selector targeting progress elements.\n *\n * @category Constants\n */\nexport const PROGRESS_SELECTOR = 'progress';\n\n/**\n * Attribute bag for progress creation/enhancement.\n *\n * @remarks\n * Supported element-specific attributes:\n * - `value` (optional): when omitted, the progress bar is indeterminate\n * - `max` (optional): defaults to 1.0 when omitted (platform default)\n *\n * pkgn-sol behavior:\n * - If `value` is omitted, pkgn-sol does NOT set it, preserving indeterminate semantics.\n * - If `value` is provided and `max` is omitted, pkgn-sol applies `max=1` explicitly\n * for predictable, testable output in node-based environments.\n *\n * @category Attributes\n */\nexport type ProgressAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Current progress value.\n *\n * @remarks\n * If omitted, the progress bar is indeterminate.\n */\n value?: number;\n\n /**\n * Maximum value. Must be greater than 0.\n *\n * @remarks\n * Defaults to 1.0 when omitted (platform default).\n */\n max?: number;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link ProgressAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @remarks\n * - Preserves caller-provided `attrs` escape hatch (still validated by `dom.ts`).\n * - Element-specific attributes are merged into `attrs` without overwriting keys\n * explicitly provided by the caller.\n * - Does NOT default `value` (keeps indeterminate semantics).\n * - Defaults `max` to `1` only when `value` is provided and caller did not supply `max`.\n *\n * @param attrs - The progress attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: ProgressAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, value, max, ...rest } = attrs;\n\n const mergedAttrs: Record<string, AttrValue> = { ...(rest.attrs ?? {}) };\n\n const setIfUnset = (key: string, v: AttrValue | undefined): void => {\n if (v === undefined) return;\n if (Object.prototype.hasOwnProperty.call(mergedAttrs, key)) return;\n mergedAttrs[key] = v;\n };\n\n // Preserve indeterminate semantics: only set `value` if explicitly provided.\n const hasValue = typeof value === 'number';\n if (hasValue) setIfUnset('value', value);\n\n // Only default `max` in determinate mode.\n if (hasValue) {\n setIfUnset('max', typeof max === 'number' ? max : 1);\n } else {\n // If caller explicitly provides max (or via escape hatch), allow it.\n setIfUnset('max', typeof max === 'number' ? max : undefined);\n }\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n if (aria) {\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n }\n\n const hasMergedAttrs = Object.keys(mergedAttrs).length > 0;\n const hasMappedAria = Object.keys(mappedAria).length > 0;\n\n const next: GlobalAttrs = { ...rest };\n if (hasMergedAttrs) next.attrs = mergedAttrs;\n if (hasMappedAria) next.aria = mappedAria;\n\n return next;\n}\n\n/**\n * Create a progress element with optional fallback text and attributes.\n *\n * @remarks\n * - Fallback text is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional fallback text for user agents that don't render `<progress>`.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<progress>` element.\n *\n * @example\n * Indeterminate progress:\n * ```ts\n * createProgress(\"Loading...\");\n * ```\n *\n * @example\n * Determinate progress:\n * ```ts\n * createProgress(undefined, { value: 30, max: 100 });\n * ```\n *\n * @category DOM\n */\nexport function createProgress(\n text?: string,\n attrs?: ProgressAttrs,\n): ElementOf<typeof PROGRESS_TAG> {\n return createElement(PROGRESS_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance progress elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceProgresses(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for progress.\n void root;\n}\n"],"mappings":"mNA+Da,EAAe,WAOf,EAAoB,WAuDjC,SAAS,EAAc,EAAgD,CACrE,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,QAAO,MAAK,GAAG,GAAS,EAEhC,EAAyC,CAAE,GAAI,EAAK,OAAS,EAAE,CAAG,CAElE,GAAc,EAAa,IAAmC,CAC9D,IAAM,IAAA,KACN,OAAO,UAAU,eAAe,KAAK,EAAa,EAAI,GAC1D,EAAY,GAAO,KAIf,EAAW,OAAO,GAAU,SAC9B,GAAU,EAAW,QAAS,EAAM,CAGpC,EACF,EAAW,MAAO,OAAO,GAAQ,SAAW,EAAM,EAAE,CAGpD,EAAW,MAAO,OAAO,GAAQ,SAAW,EAAM,IAAA,GAAU,CAG9D,IAAM,EAA+C,EAAE,CACnD,IACE,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,SAGjE,IAAM,EAAiB,OAAO,KAAK,EAAY,CAAC,OAAS,EACnD,EAAgB,OAAO,KAAK,EAAW,CAAC,OAAS,EAEjD,EAAoB,CAAE,GAAG,EAAM,CAIrC,OAHI,IAAgB,EAAK,MAAQ,GAC7B,IAAe,EAAK,KAAO,GAExB,EA8BT,SAAgB,EACd,EACA,EACgC,CAChC,OAAO,EAAA,EAAc,EAAc,EAAc,EAAM,CAAE,EAAK,CAahE,SAAgB,EAAkB,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({SELECT_SELECTOR:()=>r,SELECT_TAG:()=>n,createSelect:()=>a,enhanceSelects:()=>o}),n=`select`,r=`select`;function i(e){if(!e)return;let{aria:t,name:n,form:r,disabled:i,required:a,multiple:o,size:s,autofocus:c,autoComplete:l,dirName:u,...d}=e,f={...d.attrs??{}},p=(e,t)=>{t!==void 0&&(Object.prototype.hasOwnProperty.call(f,e)||(f[e]=t))};p(`name`,n),p(`form`,r),typeof s==`number`&&p(`size`,s),p(`autocomplete`,l),p(`dirname`,u),i===!0&&p(`disabled`,``),a===!0&&p(`required`,``),o===!0&&p(`multiple`,``),c===!0&&p(`autofocus`,``);let m={...d};if(Object.keys(f).length>0&&(m.attrs=f),t){let e={};typeof t.label==`string`&&(e.label=t.label),typeof t.labelledby==`string`&&(e.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(e.hidden=t.hidden),Object.keys(e).length>0&&(m.aria=e)}return m}function a(t){return e.n(n,i(t))}function o(e=document){}exports.SELECT_SELECTOR=r,exports.SELECT_TAG=n,exports.createSelect=a,exports.enhanceSelects=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=select.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.cjs","names":[],"sources":["../../../../../src/elements/form/select/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Select element helpers.\n *\n * @remarks\n * The select element (`<select>`) is a form control for choosing one or more\n * options from a list, typically expressed via child `<option>` and `<optgroup>`\n * elements. ([developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/select?utm_source=chatgpt.com))\n *\n * Best-practice guidance:\n * - Provide an accessible name via a `<label>` or ARIA labelling.\n * - Prefer native semantics over custom \"fake selects\" unless you have a very\n * good reason (and a lot of time for accessibility testing).\n * - Use `multiple` and/or `size` intentionally; they change presentation and\n * interaction patterns. ([developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/select?utm_source=chatgpt.com))\n * - Use `autocomplete` as a hint to user agents, not a security control. (HTML Standard)\n *\n * pkgn-sol-specific conventions:\n * - Applies global attributes via pkgn-sol's hardened DOM helpers (`dom.ts`), which\n * block inline event handler attributes (e.g. `onclick`) and the raw `style`\n * attribute string.\n * - Supports a small structured ARIA input to reduce typo-based ARIA bugs.\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type AttrValue, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset mapped into {@link GlobalAttrs.aria}.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference(s) to labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for select controls.\n *\n * @category Constants\n */\nexport const SELECT_TAG = 'select' as const;\n\n/**\n * A CSS selector targeting select elements.\n *\n * @category Constants\n */\nexport const SELECT_SELECTOR = 'select';\n\n/**\n * Attribute bag for select creation/enhancement.\n *\n * @remarks\n * `<select>` accepts global attributes plus a small set of form-control and\n * select-specific attributes such as `multiple` and `size`. ([developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/select?utm_source=chatgpt.com))\n *\n * pkgn-sol models the most common attributes explicitly and leaves an escape hatch via\n * {@link GlobalAttrs.attrs} for less common cases (validated by `dom.ts`).\n *\n * @category Attributes\n */\nexport type SelectAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * The form control name (used during submission).\n */\n name?: string;\n\n /**\n * Explicitly associate the control with a form by ID.\n */\n form?: string;\n\n /**\n * Disables the control when true.\n */\n disabled?: boolean;\n\n /**\n * Marks the control required for form submission.\n */\n required?: boolean;\n\n /**\n * Enables selection of multiple options.\n */\n multiple?: boolean;\n\n /**\n * Number of options visible at once. Commonly used with `multiple`.\n */\n size?: number;\n\n /**\n * Autofocus hint.\n */\n autofocus?: boolean;\n\n /**\n * Autofill hint for user agents.\n *\n * @remarks\n * Defined by HTML for form controls.\n */\n autoComplete?: string;\n\n /**\n * Directionality submission control (submits `name.dir`).\n *\n * @remarks\n * Defined by the HTML form-control infrastructure (`dirname`).\n */\n dirName?: string;\n};\n\n/**\n * Normalize {@link SelectAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @remarks\n * Pattern:\n * - Start with any caller-provided raw attrs escape hatch.\n * - Apply typed attributes without overriding explicit raw attributes.\n * - Map structured ARIA into {@link GlobalAttrs.aria}.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: SelectAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const {\n aria,\n name,\n form,\n disabled,\n required,\n multiple,\n size,\n autofocus,\n autoComplete,\n dirName,\n ...rest\n } = attrs;\n\n const mergedAttrs: Record<string, AttrValue> = { ...(rest.attrs ?? {}) };\n\n const setIfUnset = (key: string, v: AttrValue | undefined): void => {\n if (v === undefined) return;\n if (Object.prototype.hasOwnProperty.call(mergedAttrs, key)) return;\n mergedAttrs[key] = v;\n };\n\n setIfUnset('name', name);\n setIfUnset('form', form);\n\n if (typeof size === 'number') setIfUnset('size', size);\n\n setIfUnset('autocomplete', autoComplete);\n setIfUnset('dirname', dirName);\n\n // Boolean attributes: presence (empty string) when true.\n if (disabled === true) setIfUnset('disabled', '');\n if (required === true) setIfUnset('required', '');\n if (multiple === true) setIfUnset('multiple', '');\n if (autofocus === true) setIfUnset('autofocus', '');\n\n const mapped: GlobalAttrs = { ...rest };\n\n if (Object.keys(mergedAttrs).length > 0) {\n mapped.attrs = mergedAttrs;\n }\n\n if (aria) {\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n if (Object.keys(mappedAria).length > 0) {\n mapped.aria = mappedAria;\n }\n }\n\n return mapped;\n}\n\n/**\n * Create a select element with optional attributes.\n *\n * @remarks\n * - `<select>` content is provided via child `<option>`/`<optgroup>` elements,\n * not text content. ([developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/select?utm_source=chatgpt.com))\n * - Global attributes are applied via pkgn-sol's shared DOM helper, including security\n * guards that block inline event handler attributes (e.g. `onclick`) and raw\n * `style` attribute strings.\n *\n * @param attrs - Optional attributes to apply.\n * @returns The created `<select>` element.\n *\n * @example\n * ```ts\n * import { createSelect } from \"@lnpg/pkgn-sol/elements/form/select\";\n *\n * const s = createSelect({ name: \"country\", required: true });\n * ```\n *\n * @category DOM\n */\nexport function createSelect(attrs?: SelectAttrs): ElementOf<typeof SELECT_TAG> {\n return createElement(SELECT_TAG, toGlobalAttrs(attrs));\n}\n\n/**\n * Enhance select elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceSelects(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for select.\n void root;\n}\n"],"mappings":"0MA6Da,EAAa,SAOb,EAAkB,SAmF/B,SAAS,EAAc,EAA8C,CACnE,GAAI,CAAC,EAAO,OAEZ,GAAM,CACJ,OACA,OACA,OACA,WACA,WACA,WACA,OACA,YACA,eACA,UACA,GAAG,GACD,EAEE,EAAyC,CAAE,GAAI,EAAK,OAAS,EAAE,CAAG,CAElE,GAAc,EAAa,IAAmC,CAC9D,IAAM,IAAA,KACN,OAAO,UAAU,eAAe,KAAK,EAAa,EAAI,GAC1D,EAAY,GAAO,KAGrB,EAAW,OAAQ,EAAK,CACxB,EAAW,OAAQ,EAAK,CAEpB,OAAO,GAAS,UAAU,EAAW,OAAQ,EAAK,CAEtD,EAAW,eAAgB,EAAa,CACxC,EAAW,UAAW,EAAQ,CAG1B,IAAa,IAAM,EAAW,WAAY,GAAG,CAC7C,IAAa,IAAM,EAAW,WAAY,GAAG,CAC7C,IAAa,IAAM,EAAW,WAAY,GAAG,CAC7C,IAAc,IAAM,EAAW,YAAa,GAAG,CAEnD,IAAM,EAAsB,CAAE,GAAG,EAAM,CAMvC,GAJI,OAAO,KAAK,EAAY,CAAC,OAAS,IACpC,EAAO,MAAQ,GAGb,EAAM,CACR,IAAM,EAA+C,EAAE,CACnD,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAE3D,OAAO,KAAK,EAAW,CAAC,OAAS,IACnC,EAAO,KAAO,GAIlB,OAAO,EAyBT,SAAgB,EAAa,EAAmD,CAC9E,OAAO,EAAA,EAAc,EAAY,EAAc,EAAM,CAAC,CAaxD,SAAgB,EAAe,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({TEXTAREA_SELECTOR:()=>r,TEXTAREA_TAG:()=>n,createTextarea:()=>a,enhanceTextareas:()=>o}),n=`textarea`,r=`textarea`;function i(e){if(!e)return;let{aria:t,name:n,form:r,disabled:i,required:a,readOnly:o,cols:s,rows:c,minLength:l,maxLength:u,placeholder:d,autoComplete:f,autoFocus:p,autoCapitalize:m,dirName:h,wrap:g,..._}=e,v={..._},y={...v.attrs??{}};if(typeof n==`string`&&(y.name=n),typeof r==`string`&&(y.form=r),i===!0&&(y.disabled=!0),a===!0&&(y.required=!0),o===!0&&(y.readonly=!0),typeof s==`number`&&Number.isFinite(s)&&(y.cols=s),typeof c==`number`&&Number.isFinite(c)&&(y.rows=c),typeof l==`number`&&Number.isFinite(l)&&(y.minlength=l),typeof u==`number`&&Number.isFinite(u)&&(y.maxlength=u),typeof d==`string`&&(y.placeholder=d),typeof f==`string`&&(y.autocomplete=f),p===!0&&(y.autofocus=!0),typeof m==`string`&&(y.autocapitalize=m),typeof h==`string`){let e=h.trim();if(e.length===0)throw Error(`textarea dirName must not be an empty string.`);y.dirname=e}if((g===`soft`||g===`hard`)&&(y.wrap=g,g===`hard`&&y.cols===void 0&&(y.cols=20)),Object.keys(y).length>0&&(v.attrs=y),!t)return v;let b={};return typeof t.label==`string`&&(b.label=t.label),typeof t.labelledby==`string`&&(b.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(b.hidden=t.hidden),Object.keys(b).length>0?{...v,aria:b}:v}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.TEXTAREA_SELECTOR=r,exports.TEXTAREA_TAG=n,exports.createTextarea=a,exports.enhanceTextareas=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=textarea.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.cjs","names":[],"sources":["../../../../../src/elements/form/textarea/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Textarea element helpers.\n *\n * @remarks\n * The textarea element (`<textarea>`) is a multi-line plain-text form control.\n *\n * Best-practice guidance:\n * - Always provide an accessible name (typically via a `<label>`).\n * - Prefer `placeholder` as a hint, not as a substitute for a label.\n * - Use `rows`/`cols` to set a sensible baseline size, then use CSS for layout.\n * - Use `minLength`/`maxLength` for client-side constraints, but validate on the server.\n * - Use `wrap=\"hard\"` only when you intentionally want line breaks inserted for\n * form submission, and ensure `cols` is set.\n * - Use `dirname` only when you actually want directionality included in submission.\n *\n * Attributes (element-specific):\n * - `name`, `form`, `disabled`, `required`, `readOnly`\n * - `cols`, `rows`\n * - `minLength`, `maxLength`\n * - `placeholder`\n * - `autoComplete`, `autoFocus`, `autoCapitalize`\n * - `dirName`\n * - `wrap`\n *\n * Security:\n * - Global attribute escape hatches are guarded by pkgn-sol's `dom.ts` helpers which\n * block inline event handler attributes (e.g. `onclick`) and raw `style`\n * attribute injection (use the `style` object field instead).\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/textarea\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for textarea.\n *\n * @category Constants\n */\nexport const TEXTAREA_TAG = 'textarea' as const;\n\n/**\n * A CSS selector targeting textarea elements.\n *\n * @category Constants\n */\nexport const TEXTAREA_SELECTOR = 'textarea';\n\n/**\n * Textarea wrap modes.\n *\n * @remarks\n * - `soft` (default): the submitted value is not forcibly wrapped.\n * - `hard`: line breaks are inserted for submission based on `cols`.\n *\n * @category Types\n */\nexport type TextareaWrap = 'soft' | 'hard';\n\n/**\n * Autocapitalize values accepted by browsers for form controls.\n *\n * @remarks\n * This is a content attribute commonly supported on form controls.\n *\n * @category Types\n */\nexport type AutoCapitalize = 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters';\n\n/**\n * Attribute bag for textarea creation/enhancement.\n *\n * @remarks\n * Textareas accept standard HTML global attributes plus textarea-specific content\n * attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type TextareaAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * Name used during form submission.\n */\n name?: string;\n\n /**\n * Associate the control with a form by ID.\n */\n form?: string;\n\n /**\n * Whether the textarea is disabled.\n */\n disabled?: boolean;\n\n /**\n * Whether the textarea is required.\n */\n required?: boolean;\n\n /**\n * Whether the textarea is read-only.\n *\n * @remarks\n * Maps to the `readonly` content attribute.\n */\n readOnly?: boolean;\n\n /**\n * The number of visible text columns.\n */\n cols?: number;\n\n /**\n * The number of visible text rows.\n */\n rows?: number;\n\n /**\n * Minimum input length.\n *\n * @remarks\n * Maps to the `minlength` content attribute.\n */\n minLength?: number;\n\n /**\n * Maximum input length.\n *\n * @remarks\n * Maps to the `maxlength` content attribute.\n */\n maxLength?: number;\n\n /**\n * Placeholder hint text.\n */\n placeholder?: string;\n\n /**\n * Autofill hint.\n */\n autoComplete?: string;\n\n /**\n * Whether the control should be focused on page load.\n */\n autoFocus?: boolean;\n\n /**\n * Autocapitalization behavior.\n */\n autoCapitalize?: AutoCapitalize;\n\n /**\n * Submission directionality field name.\n *\n * @remarks\n * When set, the value must not be empty.\n * Maps to the `dirname` content attribute.\n */\n dirName?: string;\n\n /**\n * Wrapping mode for form submission.\n */\n wrap?: TextareaWrap;\n};\n\n/**\n * Normalize {@link TextareaAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The textarea attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @throws Error if `dirName` is provided but empty/whitespace.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: TextareaAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const {\n aria,\n name,\n form,\n disabled,\n required,\n readOnly,\n cols,\n rows,\n minLength,\n maxLength,\n placeholder,\n autoComplete,\n autoFocus,\n autoCapitalize,\n dirName,\n wrap,\n ...rest\n } = attrs;\n\n const mapped: GlobalAttrs = { ...rest };\n\n const extra: NonNullable<GlobalAttrs['attrs']> = { ...(mapped.attrs ?? {}) };\n\n if (typeof name === 'string') extra.name = name;\n if (typeof form === 'string') extra.form = form;\n\n if (disabled === true) extra.disabled = true;\n if (required === true) extra.required = true;\n if (readOnly === true) extra.readonly = true;\n\n if (typeof cols === 'number' && Number.isFinite(cols)) extra.cols = cols;\n if (typeof rows === 'number' && Number.isFinite(rows)) extra.rows = rows;\n\n if (typeof minLength === 'number' && Number.isFinite(minLength)) extra.minlength = minLength;\n if (typeof maxLength === 'number' && Number.isFinite(maxLength)) extra.maxlength = maxLength;\n\n if (typeof placeholder === 'string') extra.placeholder = placeholder;\n\n if (typeof autoComplete === 'string') extra.autocomplete = autoComplete;\n if (autoFocus === true) extra.autofocus = true;\n if (typeof autoCapitalize === 'string') extra.autocapitalize = autoCapitalize;\n\n if (typeof dirName === 'string') {\n const dn = dirName.trim();\n if (dn.length === 0) {\n throw new Error('textarea dirName must not be an empty string.');\n }\n extra.dirname = dn;\n }\n\n if (wrap === 'soft' || wrap === 'hard') {\n extra.wrap = wrap;\n\n // \"hard\" wrap only has an effect when cols is set, so we enforce a safe default.\n if (wrap === 'hard' && typeof extra.cols === 'undefined') {\n extra.cols = 20;\n }\n }\n\n if (Object.keys(extra).length > 0) {\n mapped.attrs = extra;\n }\n\n if (!aria) return mapped;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n const hasMappedAria = Object.keys(mappedAria).length > 0;\n\n return hasMappedAria ? { ...mapped, aria: mappedAria } : mapped;\n}\n\n/**\n * Create a textarea element with optional initial value and attributes.\n *\n * @remarks\n * For `<textarea>`, the initial value is represented by its text content in HTML.\n * pkgn-sol assigns the provided `text` via `textContent` (never `innerHTML`).\n *\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes and escape-hatch attributes are applied via pkgn-sol's shared\n * DOM helper, including security guards that block inline event handler\n * attributes (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional initial value (assigned as `textContent`).\n * @param attrs - Optional attributes to apply.\n * @returns The created `<textarea>` element.\n *\n * @example\n * ```ts\n * import { createTextarea } from \"@lnpg/pkgn-sol/elements/form/textarea\";\n *\n * const t = createTextarea(\"Hello\", { rows: 4, cols: 40, name: \"message\" });\n * ```\n *\n * @category DOM\n */\nexport function createTextarea(\n text?: string,\n attrs?: TextareaAttrs,\n): ElementOf<typeof TEXTAREA_TAG> {\n return createElement(TEXTAREA_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance textarea elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceTextareas(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for textarea.\n void root;\n}\n"],"mappings":"kNAsEa,EAAe,WAOf,EAAoB,WA4IjC,SAAS,EAAc,EAAgD,CACrE,GAAI,CAAC,EAAO,OAEZ,GAAM,CACJ,OACA,OACA,OACA,WACA,WACA,WACA,OACA,OACA,YACA,YACA,cACA,eACA,YACA,iBACA,UACA,OACA,GAAG,GACD,EAEE,EAAsB,CAAE,GAAG,EAAM,CAEjC,EAA2C,CAAE,GAAI,EAAO,OAAS,EAAE,CAAG,CAqB5E,GAnBI,OAAO,GAAS,WAAU,EAAM,KAAO,GACvC,OAAO,GAAS,WAAU,EAAM,KAAO,GAEvC,IAAa,KAAM,EAAM,SAAW,IACpC,IAAa,KAAM,EAAM,SAAW,IACpC,IAAa,KAAM,EAAM,SAAW,IAEpC,OAAO,GAAS,UAAY,OAAO,SAAS,EAAK,GAAE,EAAM,KAAO,GAChE,OAAO,GAAS,UAAY,OAAO,SAAS,EAAK,GAAE,EAAM,KAAO,GAEhE,OAAO,GAAc,UAAY,OAAO,SAAS,EAAU,GAAE,EAAM,UAAY,GAC/E,OAAO,GAAc,UAAY,OAAO,SAAS,EAAU,GAAE,EAAM,UAAY,GAE/E,OAAO,GAAgB,WAAU,EAAM,YAAc,GAErD,OAAO,GAAiB,WAAU,EAAM,aAAe,GACvD,IAAc,KAAM,EAAM,UAAY,IACtC,OAAO,GAAmB,WAAU,EAAM,eAAiB,GAE3D,OAAO,GAAY,SAAU,CAC/B,IAAM,EAAK,EAAQ,MAAM,CACzB,GAAI,EAAG,SAAW,EAChB,MAAU,MAAM,gDAAgD,CAElE,EAAM,QAAU,EAgBlB,IAbI,IAAS,QAAU,IAAS,UAC9B,EAAM,KAAO,EAGT,IAAS,QAAiB,EAAM,OAAS,SAC3C,EAAM,KAAO,KAIb,OAAO,KAAK,EAAM,CAAC,OAAS,IAC9B,EAAO,MAAQ,GAGb,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CAQvD,OANI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAEzC,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAQ,KAAM,EAAY,CAAG,EA4B3D,SAAgB,EACd,EACA,EACgC,CAChC,OAAO,EAAA,EAAc,EAAc,EAAc,EAAM,CAAE,EAAK,CAqBhE,SAAgB,EAAiB,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({H1_SELECTOR:()=>`h1`,H1_TAG:()=>`h1`,createH1:()=>a,enhanceH1s:()=>o}),n=`h1`,r=`h1`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,n){return e.n(`h1`,i(n),t)}function o(e=document){}exports.H1_SELECTOR=r,exports.H1_TAG=n,exports.createH1=a,exports.enhanceH1s=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=h1.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h1.cjs","names":[],"sources":["../../../../../src/elements/heading/h1/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: H1 element helpers.\n *\n * @remarks\n * The h1 element (`<h1>`) represents the highest-rank section heading.\n *\n * Best-practice guidance:\n * - Use headings to convey document structure, not for visual styling.\n * - Keep heading levels ordered (don't jump from `<h1>` to `<h3>` because you\n * like the font size). Use CSS for presentation.\n * - Prefer clear, succinct headings that describe the section that follows.\n * - Many accessibility guides recommend a single `<h1>` as the page/document's\n * primary heading. HTML allows multiple headings, but consistency matters.\n * - Don't rely on default browser heading styles; user-agent styles can change.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create `<h1>` elements in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * References:\n * - MDN: Heading elements: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements\n * - MDN: Headings and paragraphs: https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Structuring_content/Headings_and_paragraphs\n * - W3C WAI: Headings: https://www.w3.org/WAI/tutorials/page-structure/headings/\n * - WHATWG HTML: Sections / heading content: https://html.spec.whatwg.org/multipage/sections.html\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for the primary heading element.\n *\n * @category Constants\n */\nexport const H1_TAG = 'h1' as const;\n\n/**\n * A CSS selector targeting h1 elements.\n *\n * @category Constants\n */\nexport const H1_SELECTOR = 'h1';\n\n/**\n * Attribute bag for h1 creation/enhancement.\n *\n * @remarks\n * H1 elements accept standard HTML global attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type H1Attrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link H1Attrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The h1 attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: H1Attrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n // Only attach `aria` if something was actually defined.\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create an h1 element with optional text content and global attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the heading.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<h1>` element.\n *\n * @example\n * ```ts\n * import { createH1 } from \"@lnpg/pkgn-sol/elements/heading/h1\";\n *\n * document.body.prepend(createH1(\"Page title\", { id: \"title\" }));\n * ```\n *\n * @category DOM\n */\nexport function createH1(text?: string, attrs?: H1Attrs): ElementOf<typeof H1_TAG> {\n return createElement(H1_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance h1 elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceH1s(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for h1.\n void root;\n}\n"],"mappings":"gMAoEa,EAAS,KAOT,EAAc,KA4B3B,SAAS,EAAc,EAA0C,CAC/D,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CASvD,OAPI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAG7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EAyBrD,SAAgB,EAAS,EAAe,EAA2C,CACjF,OAAO,EAAA,EAAA,KAAsB,EAAc,EAAM,CAAE,EAAK,CAqB1D,SAAgB,EAAW,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({H2_SELECTOR:()=>`h2`,H2_TAG:()=>`h2`,createH2:()=>a,enhanceH2s:()=>o}),n=`h2`,r=`h2`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,n){return e.n(`h2`,i(n),t)}function o(e=document){}exports.H2_SELECTOR=r,exports.H2_TAG=n,exports.createH2=a,exports.enhanceH2s=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=h2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h2.cjs","names":[],"sources":["../../../../../src/elements/heading/h2/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: H2 element helpers.\n *\n * @remarks\n * The h2 element (`<h2>`) represents a second-level heading. Headings define the\n * hierarchical structure of a document and provide navigational landmarks for\n * assistive technologies. :contentReference[oaicite:1]{index=1}\n *\n * Best-practice guidance:\n * - Use headings to represent structure, not visual styling.\n * - Prefer a logical hierarchy (e.g. `<h1>` then `<h2>`, then `<h3>`), and avoid\n * skipping levels purely for appearance. :contentReference[oaicite:2]{index=2}\n * - Keep headings concise and descriptive to support scanning and accessibility. :contentReference[oaicite:3]{index=3}\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create `<h2>` elements in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for h2 headings.\n *\n * @category Constants\n */\nexport const H2_TAG = 'h2' as const;\n\n/**\n * A CSS selector targeting h2 elements.\n *\n * @category Constants\n */\nexport const H2_SELECTOR = 'h2';\n\n/**\n * Attribute bag for h2 creation/enhancement.\n *\n * @remarks\n * H2 elements accept standard HTML global attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * Security notes:\n * - Inline event handler attributes (e.g. `onclick`) are blocked by `dom.ts`.\n * - The raw `style` attribute is blocked; use {@link GlobalAttrs.style} instead.\n *\n * @category Attributes\n */\nexport type H2Attrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link H2Attrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The h2 attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: H2Attrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n // Only attach `aria` if something was actually defined.\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create an h2 element with optional text content and global attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the h2.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<h2>` element.\n *\n * @example\n * Create and append a heading:\n * ```ts\n * import { createH2 } from \"@lnpg/pkgn-sol/elements/heading/h2\";\n *\n * document.body.appendChild(createH2(\"Section title\", { className: \"section-title\" }));\n * ```\n *\n * @category DOM\n */\nexport function createH2(text?: string, attrs?: H2Attrs): ElementOf<typeof H2_TAG> {\n return createElement(H2_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance h2 elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceH2s(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for h2.\n void root;\n}\n"],"mappings":"gMA6Da,EAAS,KAOT,EAAc,KAgC3B,SAAS,EAAc,EAA0C,CAC/D,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CASvD,OAPI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAG7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EA0BrD,SAAgB,EAAS,EAAe,EAA2C,CACjF,OAAO,EAAA,EAAA,KAAsB,EAAc,EAAM,CAAE,EAAK,CAqB1D,SAAgB,EAAW,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({H3_SELECTOR:()=>`h3`,H3_TAG:()=>`h3`,createH3:()=>a,enhanceH3s:()=>o}),n=`h3`,r=`h3`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,n){return e.n(`h3`,i(n),t)}function o(e=document){}exports.H3_SELECTOR=r,exports.H3_TAG=n,exports.createH3=a,exports.enhanceH3s=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=h3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h3.cjs","names":[],"sources":["../../../../../src/elements/heading/h3/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: H3 element helpers.\n *\n * @remarks\n * The h3 element (`<h3>`) represents a third-rank section heading.\n *\n * Best-practice guidance:\n * - Use headings to convey document structure, not for visual styling.\n * - Keep heading levels ordered (don't jump from `<h2>` to `<h4>` because you\n * like the font size). Use CSS for presentation.\n * - Ensure headings describe the section content that follows.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create `<h3>` elements in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * References:\n * - MDN: Heading elements: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements\n * - W3C WAI: Headings: https://www.w3.org/WAI/tutorials/page-structure/headings/\n * - WHATWG HTML: Sections / heading content: https://html.spec.whatwg.org/multipage/sections.html\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for third-level headings.\n *\n * @category Constants\n */\nexport const H3_TAG = 'h3' as const;\n\n/**\n * A CSS selector targeting h3 elements.\n *\n * @category Constants\n */\nexport const H3_SELECTOR = 'h3';\n\n/**\n * Attribute bag for h3 creation/enhancement.\n *\n * @remarks\n * H3 elements accept standard HTML global attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type H3Attrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link H3Attrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The h3 attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: H3Attrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n // Only attach `aria` if something was actually defined.\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create an h3 element with optional text content and global attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the heading.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<h3>` element.\n *\n * @example\n * ```ts\n * import { createH3 } from \"@lnpg/pkgn-sol/elements/heading/h3\";\n *\n * const h = createH3(\"Section heading\", { id: \"section\" });\n * ```\n *\n * @category DOM\n */\nexport function createH3(text?: string, attrs?: H3Attrs): ElementOf<typeof H3_TAG> {\n return createElement(H3_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance h3 elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceH3s(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for h3.\n void root;\n}\n"],"mappings":"gMAgEa,EAAS,KAOT,EAAc,KA4B3B,SAAS,EAAc,EAA0C,CAC/D,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CASvD,OAPI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAG7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EAyBrD,SAAgB,EAAS,EAAe,EAA2C,CACjF,OAAO,EAAA,EAAA,KAAsB,EAAc,EAAM,CAAE,EAAK,CAqB1D,SAAgB,EAAW,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({H4_SELECTOR:()=>`h4`,H4_TAG:()=>`h4`,createH4:()=>a,enhanceH4s:()=>o}),n=`h4`,r=`h4`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,n){return e.n(`h4`,i(n),t)}function o(e=document){}exports.H4_SELECTOR=r,exports.H4_TAG=n,exports.createH4=a,exports.enhanceH4s=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=h4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h4.cjs","names":[],"sources":["../../../../../src/elements/heading/h4/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: H4 element helpers.\n *\n * @remarks\n * The `<h4>` element represents a level 4 section heading.\n *\n * Best-practice guidance:\n * - Use headings to communicate structure, not visual styling.\n * - Avoid skipping heading levels in a way that breaks hierarchy (e.g. `h2` → `h4`).\n * - Keep headings descriptive and concise for accessibility.\n * - Prefer CSS for appearance; headings are about semantics.\n *\n * This module:\n * - Creates `<h4>` elements via pkgn-sol's hardened DOM helpers (no direct DOM calls).\n * - Applies a curated subset of global attributes safely.\n * - Supports a small, typed structured ARIA input mapped into `aria-*`.\n * - Exposes a stable enhancement hook (currently a no-op) for API consistency.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is a small, typed subset intended to prevent typo-driven ARIA bugs and\n * keep the API practical. Values are mapped into {@link GlobalAttrs.aria}.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for `<h4>`.\n *\n * @category Constants\n */\nexport const H4_TAG = 'h4' as const;\n\n/**\n * A CSS selector targeting `<h4>` elements.\n *\n * @category Constants\n */\nexport const H4_SELECTOR = 'h4';\n\n/**\n * Attribute bag for `<h4>` creation/enhancement.\n *\n * @remarks\n * `<h4>` supports HTML global attributes only.\n *\n * pkgn-sol additionally supports a typed, structured ARIA input that is mapped into\n * {@link GlobalAttrs.aria} without modifying the shared DOM helpers.\n *\n * @category Attributes\n */\nexport type H4Attrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link H4Attrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The `<h4>` attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: H4Attrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n return Object.keys(mappedAria).length > 0 ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create an `<h4>` element with optional text content and global attributes.\n *\n * @remarks\n * - Text is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper, which enforces:\n * - No inline event handler attributes (e.g. `onclick`)\n * - No raw `style` attribute injection (use the `style` object field)\n * - No empty attribute names\n *\n * @param text - Optional text content for the heading.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<h4>` element.\n *\n * @example\n * ```ts\n * import { createH4 } from \"@lnpg/pkgn-sol/elements/heading/h4\";\n *\n * const h = createH4(\"Details\", { id: \"details-heading\" });\n * ```\n *\n * @category DOM\n */\nexport function createH4(text?: string, attrs?: H4Attrs): ElementOf<typeof H4_TAG> {\n return createElement(H4_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance `<h4>` elements within a given root.\n *\n * @remarks\n * Intentionally a no-op in `0.1.0`. This exists to provide a stable, consistent\n * integration hook across element modules.\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceH4s(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for h4.\n void root;\n}\n"],"mappings":"gMAyDa,EAAS,KAOT,EAAc,KA4B3B,SAAS,EAAc,EAA0C,CAC/D,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CAMvD,OAJI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAExD,OAAO,KAAK,EAAW,CAAC,OAAS,EAAI,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EA0B9E,SAAgB,EAAS,EAAe,EAA2C,CACjF,OAAO,EAAA,EAAA,KAAsB,EAAc,EAAM,CAAE,EAAK,CAc1D,SAAgB,EAAW,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({H5_SELECTOR:()=>`h5`,H5_TAG:()=>`h5`,createH5:()=>a,enhanceH5s:()=>o}),n=`h5`,r=`h5`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,n){return e.n(`h5`,i(n),t)}function o(e=document){}exports.H5_SELECTOR=r,exports.H5_TAG=n,exports.createH5=a,exports.enhanceH5s=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=h5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h5.cjs","names":[],"sources":["../../../../../src/elements/heading/h5/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: H5 element helpers.\n *\n * @remarks\n * The h5 element (`<h5>`) represents a fifth-rank section heading.\n *\n * Best-practice guidance:\n * - Use headings to communicate document structure, not visual styling.\n * - Keep heading levels ordered (don't jump from `<h2>` to `<h5>` because you\n * like the font size). Use CSS for presentation.\n * - Ensure headings accurately describe the section content that follows.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create `<h5>` elements in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * References:\n * - MDN: Heading elements: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements\n * - W3C WAI: Headings: https://www.w3.org/WAI/tutorials/page-structure/headings/\n * - WHATWG HTML: Sections / heading content: https://html.spec.whatwg.org/multipage/sections.html\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for fifth-level headings.\n *\n * @category Constants\n */\nexport const H5_TAG = 'h5' as const;\n\n/**\n * A CSS selector targeting h5 elements.\n *\n * @category Constants\n */\nexport const H5_SELECTOR = 'h5';\n\n/**\n * Attribute bag for h5 creation/enhancement.\n *\n * @remarks\n * H5 elements accept standard HTML global attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type H5Attrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link H5Attrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The h5 attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: H5Attrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n // Only attach `aria` if something was actually defined.\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create an h5 element with optional text content and global attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the heading.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<h5>` element.\n *\n * @example\n * ```ts\n * import { createH5 } from \"@lnpg/pkgn-sol/elements/heading/h5\";\n *\n * const h = createH5(\"Subsection heading\");\n * ```\n *\n * @category DOM\n */\nexport function createH5(text?: string, attrs?: H5Attrs): ElementOf<typeof H5_TAG> {\n return createElement(H5_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance h5 elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceH5s(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for h5.\n void root;\n}\n"],"mappings":"gMAgEa,EAAS,KAOT,EAAc,KA4B3B,SAAS,EAAc,EAA0C,CAC/D,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CASvD,OAPI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAG7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EAyBrD,SAAgB,EAAS,EAAe,EAA2C,CACjF,OAAO,EAAA,EAAA,KAAsB,EAAc,EAAM,CAAE,EAAK,CAqB1D,SAAgB,EAAW,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({H6_SELECTOR:()=>`h6`,H6_TAG:()=>`h6`,createH6:()=>a,enhanceH6s:()=>o}),n=`h6`,r=`h6`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,n){return e.n(`h6`,i(n),t)}function o(e=document){}exports.H6_SELECTOR=r,exports.H6_TAG=n,exports.createH6=a,exports.enhanceH6s=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=h6.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"h6.cjs","names":[],"sources":["../../../../../src/elements/heading/h6/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: H6 element helpers.\n *\n * @remarks\n * The h6 element (`<h6>`) represents the lowest-ranked section heading.\n *\n * Best-practice guidance:\n * - Use headings to convey document structure, not visual styling.\n * - Do not choose heading levels based on appearance; use CSS for styling.\n * - Avoid skipping heading levels (e.g. jumping from `<h2>` to `<h6>`), unless the\n * document structure genuinely calls for it.\n * - Keep headings short and descriptive to support accessibility navigation.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create heading elements in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements\n * @see https://html.spec.whatwg.org/multipage/sections.html\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs.\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for h6 headings.\n *\n * @category Constants\n */\nexport const H6_TAG = 'h6' as const;\n\n/**\n * A CSS selector targeting h6 elements.\n *\n * @category Constants\n */\nexport const H6_SELECTOR = 'h6';\n\n/**\n * Attribute bag for h6 creation/enhancement.\n *\n * @remarks\n * `<h6>` accepts standard HTML global attributes.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type H6Attrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link H6Attrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The h6 attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: H6Attrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create an h6 element with optional text content and global attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the heading.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<h6>` element.\n *\n * @example\n * ```ts\n * import { createH6 } from \"@lnpg/pkgn-sol/elements/heading/h6\";\n *\n * const heading = createH6(\"Minor heading\", { id: \"minor\" });\n * ```\n *\n * @category DOM\n */\nexport function createH6(text?: string, attrs?: H6Attrs): ElementOf<typeof H6_TAG> {\n return createElement(H6_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance h6 elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * It exists to establish a stable enhancement pattern across all elements.\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceH6s(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for h6.\n void root;\n}\n"],"mappings":"gMA+Da,EAAS,KAOT,EAAc,KA4B3B,SAAS,EAAc,EAA0C,CAC/D,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CAQvD,OANI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAE7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EAyBrD,SAAgB,EAAS,EAAe,EAA2C,CACjF,OAAO,EAAA,EAAA,KAAsB,EAAc,EAAM,CAAE,EAAK,CAe1D,SAAgB,EAAW,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../chunks/dom.cjs`),t=require(`./h1/h1.cjs`),n=require(`./h2/h2.cjs`),r=require(`./h3/h3.cjs`),i=require(`./h4/h4.cjs`),a=require(`./h5/h5.cjs`),o=require(`./h6/h6.cjs`);var s=e.i({h1:()=>t.t,h2:()=>n.t,h3:()=>r.t,h4:()=>i.t,h5:()=>a.t,h6:()=>o.t});Object.defineProperty(exports,`h1`,{enumerable:!0,get:function(){return t.t}}),Object.defineProperty(exports,`h2`,{enumerable:!0,get:function(){return n.t}}),Object.defineProperty(exports,`h3`,{enumerable:!0,get:function(){return r.t}}),Object.defineProperty(exports,`h4`,{enumerable:!0,get:function(){return i.t}}),Object.defineProperty(exports,`h5`,{enumerable:!0,get:function(){return a.t}}),Object.defineProperty(exports,`h6`,{enumerable:!0,get:function(){return o.t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
|
|
2
|
+
//# sourceMappingURL=heading.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heading.cjs","names":[],"sources":["../../../../src/elements/heading/index.ts"],"sourcesContent":["/**\n * Heading element factories.\n *\n * Provides framework-agnostic factory functions for semantic HTML heading\n * elements (`<h1>` through `<h6>`).\n *\n * These factories:\n * - Create semantic heading elements using pkgn-sol's hardened DOM helpers.\n * - Forward curated global attributes.\n * - Enforce structured, typed attribute bags.\n * - Preserve correct document outline semantics.\n * - Prevent unsafe attribute injection.\n *\n * Headings define the hierarchical structure of a document and should be used\n * in order where possible to maintain accessibility and navigability.\n *\n * @module elements/heading\n * @since 0.1.0\n */\n\n/**\n * `<h1>` element factory namespace.\n *\n * Represents the top-level heading of a page or section.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements\n */\nexport * as h1 from './h1';\n\n/**\n * `<h2>` element factory namespace.\n *\n * Represents a second-level section heading.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements\n */\nexport * as h2 from './h2';\n\n/**\n * `<h3>` element factory namespace.\n *\n * Represents a third-level section heading.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements\n */\nexport * as h3 from './h3';\n\n/**\n * `<h4>` element factory namespace.\n *\n * Represents a fourth-level section heading.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements\n */\nexport * as h4 from './h4';\n\n/**\n * `<h5>` element factory namespace.\n *\n * Represents a fifth-level section heading.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements\n */\nexport * as h5 from './h5';\n\n/**\n * `<h6>` element factory namespace.\n *\n * Represents a sixth-level section heading.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements\n */\nexport * as h6 from './h6';\n"],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({A_SELECTOR:()=>`a`,A_TAG:()=>`a`,createA:()=>a,enhanceAs:()=>o}),n=`a`,r=`a`;function i(e){if(!e)return;let{aria:t,href:n,target:r,rel:i,download:a,hreflang:o,ping:s,referrerPolicy:c,type:l,...u}=e,d=u,f={...d.attrs??{}};typeof n==`string`&&(f.href=n),typeof r==`string`&&(f.target=r),typeof o==`string`&&(f.hreflang=o),typeof c==`string`&&(f.referrerpolicy=c),typeof l==`string`&&(f.type=l),typeof s==`string`&&(f.ping=s),Array.isArray(s)&&(f.ping=s.join(` `)),typeof a==`string`&&(f.download=a),a===!0&&(f.download=``);let p=typeof f.rel==`string`&&f.rel.trim().length>0?f.rel:void 0;if(typeof i==`string`?f.rel=i:r===`_blank`&&!p&&(f.rel=`noopener noreferrer`),Object.keys(f).length>0&&(d.attrs=f),!t)return d;let m={};return typeof t.label==`string`&&(m.label=t.label),typeof t.labelledby==`string`&&(m.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(m.hidden=t.hidden),Object.keys(m).length>0?{...d,aria:m}:d}function a(t,n){return e.n(`a`,i(n),t)}function o(e=document){}exports.A_SELECTOR=r,exports.A_TAG=n,exports.createA=a,exports.enhanceAs=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=a.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a.cjs","names":[],"sources":["../../../../../src/elements/inline/a/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Anchor (`a`) element helpers.\n *\n * @remarks\n * The anchor element (`<a>`) creates a hyperlink when the `href` attribute is\n * present. It can link to web pages, files, email addresses, locations within\n * the same page, or any URL-addressable resource.\n *\n * Best-practice guidance:\n * - Prefer clear, descriptive link text. Avoid \"click here\".\n * - If using `target=\"_blank\"`, strongly consider `rel=\"noopener noreferrer\"`\n * to prevent opener-based attacks (reverse tabnabbing).\n * - Do not use `<a>` as a button. Use `<button>` for actions and controls.\n * - Validate/sanitize untrusted URLs before assigning them to `href`.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create anchors in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * References:\n * - MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a\n * - WHATWG: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element\n * - MDN rel=noopener: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/noopener\n * - MDN rel=noreferrer: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/noreferrer\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n *\n * @remarks\n * Prefer `labelledby` when a visible labeling element exists.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * Common targets for anchor navigation.\n *\n * @remarks\n * Browsers also accept custom named targets (e.g. `myWindow`).\n *\n * @category Attributes\n */\nexport type AnchorTarget = '_self' | '_blank' | '_parent' | '_top' | (string & {});\n\n/**\n * Allowed values for the `referrerpolicy` attribute.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/referrerpolicy\n *\n * @category Attributes\n */\nexport type ReferrerPolicy =\n | 'no-referrer'\n | 'no-referrer-when-downgrade'\n | 'origin'\n | 'origin-when-cross-origin'\n | 'same-origin'\n | 'strict-origin'\n | 'strict-origin-when-cross-origin'\n | 'unsafe-url';\n\n/**\n * The semantic tag name for anchors.\n *\n * @category Constants\n */\nexport const A_TAG = 'a' as const;\n\n/**\n * A CSS selector targeting anchor elements.\n *\n * @category Constants\n */\nexport const A_SELECTOR = 'a';\n\n/**\n * Attribute bag for anchor creation/enhancement.\n *\n * @remarks\n * Anchor elements accept standard HTML global attributes, plus link-related\n * attributes such as `href`, `target`, and `rel`.\n *\n * Security notes:\n * - pkgn-sol blocks unsafe attribute *names* (e.g. `onclick`, raw `style`).\n * - pkgn-sol does not sanitize attribute *values*. Callers must validate untrusted\n * URLs before passing them as `href`.\n * - When `target=\"_blank\"` is used and `rel` is not provided, pkgn-sol applies a\n * conservative default: `rel=\"noopener noreferrer\"`.\n *\n * @category Attributes\n */\nexport type AnchorAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Destination URL for the hyperlink.\n *\n * @remarks\n * If omitted, the anchor is not a hyperlink.\n */\n href?: string;\n\n /**\n * Where to display the linked URL.\n */\n target?: AnchorTarget;\n\n /**\n * Relationship between the current document and the linked resource.\n *\n * @remarks\n * If `target=\"_blank\"` is used and `rel` is not provided, pkgn-sol applies\n * `noopener noreferrer` by default.\n */\n rel?: string;\n\n /**\n * Indicates the linked resource should be downloaded.\n *\n * @remarks\n * - `true` sets a bare `download` attribute.\n * - A string sets the suggested filename.\n */\n download?: boolean | string;\n\n /**\n * Language of the linked resource.\n */\n hreflang?: string;\n\n /**\n * Space-separated list of URLs to notify (POST \"ping\") when the link is followed.\n *\n * @remarks\n * Limited browser support; use with care.\n */\n ping?: string | string[];\n\n /**\n * Referrer policy for the request initiated by following the hyperlink.\n */\n referrerPolicy?: ReferrerPolicy;\n\n /**\n * MIME type hint for the linked resource.\n */\n type?: string;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link AnchorAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - Anchor attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: AnchorAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, href, target, rel, download, hreflang, ping, referrerPolicy, type, ...rest } =\n attrs;\n\n const out: GlobalAttrs = rest;\n\n // Start with any escape-hatch attrs the caller provided.\n const rawAttrs: NonNullable<GlobalAttrs['attrs']> = { ...(out.attrs ?? {}) };\n\n if (typeof href === 'string') rawAttrs.href = href;\n if (typeof target === 'string') rawAttrs.target = target;\n if (typeof hreflang === 'string') rawAttrs.hreflang = hreflang;\n if (typeof referrerPolicy === 'string') rawAttrs.referrerpolicy = referrerPolicy;\n if (typeof type === 'string') rawAttrs.type = type;\n\n if (typeof ping === 'string') rawAttrs.ping = ping;\n if (Array.isArray(ping)) rawAttrs.ping = ping.join(' ');\n\n if (typeof download === 'string') rawAttrs.download = download;\n if (download === true) rawAttrs.download = '';\n\n // Apply rel (explicit wins). Otherwise provide a conservative default for target=_blank.\n const existingRel =\n typeof rawAttrs.rel === 'string' && rawAttrs.rel.trim().length > 0 ? rawAttrs.rel : undefined;\n\n if (typeof rel === 'string') {\n rawAttrs.rel = rel;\n } else if (target === '_blank' && !existingRel) {\n rawAttrs.rel = 'noopener noreferrer';\n }\n\n // Only attach `attrs` if something was actually defined.\n if (Object.keys(rawAttrs).length > 0) out.attrs = rawAttrs;\n\n if (!aria) return out;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...out, aria: mappedAria } : out;\n}\n\n/**\n * Create an anchor element with optional text content and attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the anchor.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<a>` element.\n *\n * @example\n * ```ts\n * import { createA } from \"@lnpg/pkgn-sol/elements/inline/a\";\n *\n * document.body.appendChild(\n * createA(\"Read more\", { href: \"/docs\", className: \"link\" })\n * );\n * ```\n *\n * @category DOM\n */\nexport function createA(text?: string, attrs?: AnchorAttrs): ElementOf<typeof A_TAG> {\n return createElement(A_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance anchor elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceAs(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for anchors.\n void root;\n}\n"],"mappings":"0LAkGa,EAAQ,IAOR,EAAa,IAuF1B,SAAS,EAAc,EAA8C,CACnE,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,OAAM,SAAQ,MAAK,WAAU,WAAU,OAAM,iBAAgB,OAAM,GAAG,GAClF,EAEI,EAAmB,EAGnB,EAA8C,CAAE,GAAI,EAAI,OAAS,EAAE,CAAG,CAExE,OAAO,GAAS,WAAU,EAAS,KAAO,GAC1C,OAAO,GAAW,WAAU,EAAS,OAAS,GAC9C,OAAO,GAAa,WAAU,EAAS,SAAW,GAClD,OAAO,GAAmB,WAAU,EAAS,eAAiB,GAC9D,OAAO,GAAS,WAAU,EAAS,KAAO,GAE1C,OAAO,GAAS,WAAU,EAAS,KAAO,GAC1C,MAAM,QAAQ,EAAK,GAAE,EAAS,KAAO,EAAK,KAAK,IAAI,EAEnD,OAAO,GAAa,WAAU,EAAS,SAAW,GAClD,IAAa,KAAM,EAAS,SAAW,IAG3C,IAAM,EACJ,OAAO,EAAS,KAAQ,UAAY,EAAS,IAAI,MAAM,CAAC,OAAS,EAAI,EAAS,IAAM,IAAA,GAWtF,GATI,OAAO,GAAQ,SACjB,EAAS,IAAM,EACN,IAAW,UAAY,CAAC,IACjC,EAAS,IAAM,uBAIb,OAAO,KAAK,EAAS,CAAC,OAAS,IAAG,EAAI,MAAQ,GAE9C,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CAQvD,OANI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAE7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAK,KAAM,EAAY,CAAG,EA2BpD,SAAgB,EAAQ,EAAe,EAA8C,CACnF,OAAO,EAAA,EAAA,IAAqB,EAAc,EAAM,CAAE,EAAK,CAqBzD,SAAgB,EAAU,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({ABBR_SELECTOR:()=>r,ABBR_TAG:()=>n,createAbbr:()=>a,enhanceAbbrs:()=>o}),n=`abbr`,r=`abbr`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,r){return e.n(n,i(r),t)}function o(e=document){}exports.ABBR_SELECTOR=r,exports.ABBR_TAG=n,exports.createAbbr=a,exports.enhanceAbbrs=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=abbr.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abbr.cjs","names":[],"sources":["../../../../../src/elements/inline/abbr/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Abbreviation (`abbr`) element helpers.\n *\n * @remarks\n * The abbreviation element (`<abbr>`) represents an abbreviation or acronym.\n *\n * Best-practice guidance:\n * - Provide the expanded form in plain text on first use where possible.\n * - Optionally provide an expansion via the `title` attribute.\n * Spec guidance: if `title` is used on `<abbr>`, it should contain the expansion\n * of the abbreviation and nothing else.\n * - Do not rely solely on `title` tooltips for accessibility; tooltip exposure\n * varies across browsers and assistive technologies.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create abbr elements in vanilla JS/TS without templates\n * - apply consistent global attributes safely\n * - use a stable \"enhancement\" hook if pkgn-sol ever needs runtime behavior\n *\n * This module has no side effects and does not mutate the DOM unless you call\n * its functions.\n *\n * References:\n * - MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr\n * - WHATWG: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-abbr-element\n *\n * @module\n * @category Elements\n */\n\nimport { createElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @remarks\n * This is intentionally a small, typed subset that covers common cases and\n * prevents typo-based ARIA bugs (e.g. `lable`).\n *\n * It is mapped into {@link GlobalAttrs.aria} for application by `dom.ts`.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n /**\n * Accessible label, mapped to `aria-label`.\n */\n label?: string;\n\n /**\n * ID reference to the labelling element(s), mapped to `aria-labelledby`.\n */\n labelledby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for abbreviations.\n *\n * @category Constants\n */\nexport const ABBR_TAG = 'abbr' as const;\n\n/**\n * A CSS selector targeting abbr elements.\n *\n * @category Constants\n */\nexport const ABBR_SELECTOR = 'abbr';\n\n/**\n * Attribute bag for abbr creation/enhancement.\n *\n * @remarks\n * Abbr elements accept standard HTML global attributes.\n *\n * For expansions, prefer:\n * - expanding the term in plain text on first use, and/or\n * - using {@link GlobalAttrs.title} to provide an expansion (advisory text).\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, which is\n * mapped into {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type AbbrAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize {@link AbbrAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The abbr attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: AbbrAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, ...rest } = attrs;\n\n if (!aria) return rest;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n if (typeof aria.label === 'string') mappedAria.label = aria.label;\n if (typeof aria.labelledby === 'string') mappedAria.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n\n // Only attach `aria` if something was actually defined.\n const hasMapped = Object.keys(mappedAria).length > 0;\n\n return hasMapped ? { ...rest, aria: mappedAria } : rest;\n}\n\n/**\n * Create an abbr element with optional text content and attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - Global attributes are applied via pkgn-sol's shared DOM helper,\n * including security guards that block inline event handler attributes\n * (e.g. `onclick`) and raw `style` attribute strings.\n *\n * @param text - Optional text content for the abbreviation (e.g. \"NASA\").\n * @param attrs - Optional attributes to apply (e.g. `title` for expansion).\n * @returns The created `<abbr>` element.\n *\n * @example\n * ```ts\n * import { createAbbr } from \"@lnpg/pkgn-sol/elements/inline/abbr\";\n *\n * const el = createAbbr(\"NASA\", { title: \"National Aeronautics and Space Administration\" });\n * document.body.appendChild(el);\n * ```\n *\n * @category DOM\n */\nexport function createAbbr(text?: string, attrs?: AbbrAttrs): ElementOf<typeof ABBR_TAG> {\n return createElement(ABBR_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance abbr elements within a given root.\n *\n * @remarks\n * This is intentionally a no-op in `0.1.0`.\n *\n * Why does it exist?\n * - It establishes a stable integration pattern for frameworks (Vue/React/etc.)\n * - It allows future progressive enhancements without changing consumer code\n *\n * What it will never do:\n * - It will not inject styles (CSS remains the source of truth)\n * - It will not introduce framework-specific behavior\n *\n * @param root - The node to search within. Defaults to `document`.\n *\n * @category Enhancement\n */\nexport function enhanceAbbrs(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for abbr.\n void root;\n}\n"],"mappings":"kMAiEa,EAAW,OAOX,EAAgB,OAgC7B,SAAS,EAAc,EAA4C,CACjE,GAAI,CAAC,EAAO,OAEZ,GAAM,CAAE,OAAM,GAAG,GAAS,EAE1B,GAAI,CAAC,EAAM,OAAO,EAElB,IAAM,EAA+C,EAAE,CASvD,OAPI,OAAO,EAAK,OAAU,WAAU,EAAW,MAAQ,EAAK,OACxD,OAAO,EAAK,YAAe,WAAU,EAAW,WAAa,EAAK,YAClE,OAAO,EAAK,QAAW,YAAW,EAAW,OAAS,EAAK,QAG7C,OAAO,KAAK,EAAW,CAAC,OAAS,EAEhC,CAAE,GAAG,EAAM,KAAM,EAAY,CAAG,EA0BrD,SAAgB,EAAW,EAAe,EAA+C,CACvF,OAAO,EAAA,EAAc,EAAU,EAAc,EAAM,CAAE,EAAK,CAqB5D,SAAgB,EAAa,EAAmB,SAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../chunks/dom.cjs`);var t=e.i({B_SELECTOR:()=>`b`,B_TAG:()=>`b`,createB:()=>a,enhanceBs:()=>o}),n=`b`,r=`b`;function i(e){if(!e)return;let{aria:t,...n}=e;if(!t)return n;let r={};return typeof t.label==`string`&&(r.label=t.label),typeof t.labelledby==`string`&&(r.labelledby=t.labelledby),typeof t.hidden==`boolean`&&(r.hidden=t.hidden),Object.keys(r).length>0?{...n,aria:r}:n}function a(t,n){return e.n(`b`,i(n),t)}function o(e=document){}exports.B_SELECTOR=r,exports.B_TAG=n,exports.createB=a,exports.enhanceBs=o,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=b.cjs.map
|