@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":"audio.js","names":[],"sources":["../../../../../src/elements/media/audio/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Audio element helpers.\n *\n * @remarks\n * The audio element (`<audio>`) embeds sound content in documents.\n * It can load audio via `src` or nested `<source>` elements, and it can\n * also be a destination for streamed media via MediaStream.\n *\n * Best-practice guidance (MDN + platform norms):\n * - Avoid autoplaying audio unless the user explicitly opts in.\n * - Prefer showing controls (`controls`) when audio playback is user-facing.\n * - Use `preload=\"metadata\"` as a sensible hint if you want duration, etc.\n * - Use CORS (`crossOrigin`) when audio might be reused by `<canvas>` without tainting.\n * - Prefer multiple `<source>` elements for format fallbacks where needed.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create audio 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.\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 * Allowed `preload` values for media elements.\n *\n * @remarks\n * Per MDN, browsers treat this as a hint and may ignore it; `metadata` is a\n * common best-practice default in specs/guidance.\n *\n * @category Attributes\n */\nexport type AudioPreload = 'none' | 'metadata' | 'auto';\n\n/**\n * Allowed values for the `crossorigin` attribute for media fetches.\n *\n * @category Attributes\n */\nexport type AudioCrossOrigin = 'anonymous' | 'use-credentials';\n\n/**\n * Allowed tokens for the `controlslist` attribute (when `controls` is enabled).\n *\n * @remarks\n * MDN lists allowed values including `nodownload`, `nofullscreen`, `noremoteplayback`.\n * (`nofullscreen` is effectively video-oriented but is still a valid token in the attribute.)\n *\n * @category Attributes\n */\nexport type AudioControlsList = 'nodownload' | 'nofullscreen' | 'noremoteplayback';\n\n/**\n * The semantic tag name for audio elements.\n *\n * @category Constants\n */\nexport const AUDIO_TAG = 'audio' as const;\n\n/**\n * A CSS selector targeting audio elements.\n *\n * @category Constants\n */\nexport const AUDIO_SELECTOR = 'audio';\n\n/**\n * Attribute bag for audio creation/enhancement.\n *\n * @remarks\n * Audio elements accept HTML global attributes plus a media-specific subset.\n * pkgn-sol also supports structured ARIA input for common ARIA fields.\n *\n * @category Attributes\n */\nexport type AudioAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * The URL of the audio resource to embed.\n *\n * @remarks\n * Optional if you instead provide nested `<source>` elements.\n */\n src?: string;\n\n /**\n * Whether browser playback controls should be shown.\n */\n controls?: boolean;\n\n /**\n * Whether playback should begin automatically.\n *\n * @remarks\n * Autoplaying audio is often blocked unless user-initiated. If `autoplay`\n * is enabled and `muted` is not specified, pkgn-sol defaults `muted` to `true`\n * as a pragmatic alignment with autoplay policies.\n */\n autoplay?: boolean;\n\n /**\n * Whether the audio should loop back to the start after ending.\n */\n loop?: boolean;\n\n /**\n * Whether the audio should start out muted.\n */\n muted?: boolean;\n\n /**\n * Hint about how much to preload.\n */\n preload?: AudioPreload;\n\n /**\n * CORS mode for fetching the audio resource.\n */\n crossOrigin?: AudioCrossOrigin;\n\n /**\n * Restrict which built-in controls the user agent exposes (when `controls` is set).\n *\n * @example\n * controlsList: ['nodownload', 'noremoteplayback']\n */\n controlsList?: AudioControlsList[];\n\n /**\n * Disable remote playback (Chromecast/AirPlay/etc).\n */\n disableRemotePlayback?: boolean;\n};\n\n/**\n * Normalize {@link AudioAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The audio attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: AudioAttrs): 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 audio element with optional attributes.\n *\n * @remarks\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 through escape hatches.\n *\n * Media-specific attributes are applied directly to the element.\n *\n * @param attrs - Optional attributes to apply.\n * @returns The created `<audio>` element.\n *\n * @example\n * ```ts\n * import { createAudio } from \"@lnpg/pkgn-sol/elements/media/audio\";\n *\n * document.body.appendChild(\n * createAudio({ controls: true, src: \"/audio/intro.mp3\", preload: \"metadata\" })\n * );\n * ```\n *\n * @category DOM\n */\nexport function createAudio(attrs?: AudioAttrs): ElementOf<typeof AUDIO_TAG> {\n const el = createElement(AUDIO_TAG, toGlobalAttrs(attrs));\n\n if (!attrs) return el;\n\n if (typeof attrs.src === 'string') el.src = attrs.src;\n\n if (typeof attrs.controls === 'boolean') el.controls = attrs.controls;\n\n if (typeof attrs.autoplay === 'boolean') el.autoplay = attrs.autoplay;\n if (typeof attrs.loop === 'boolean') el.loop = attrs.loop;\n\n // Pragmatic autoplay alignment: if autoplay is enabled and muted is not provided,\n // default to muted to reduce the chance of autoplay being blocked.\n if (typeof attrs.muted === 'boolean') {\n el.muted = attrs.muted;\n } else if (attrs.autoplay === true) {\n el.muted = true;\n }\n\n if (typeof attrs.preload === 'string') el.preload = attrs.preload;\n\n if (typeof attrs.crossOrigin === 'string') el.crossOrigin = attrs.crossOrigin;\n\n if (Array.isArray(attrs.controlsList) && attrs.controlsList.length > 0) {\n // `controlslist` is a token list attribute; set as a space-separated list.\n el.setAttribute('controlslist', attrs.controlsList.join(' '));\n }\n\n if (typeof attrs.disableRemotePlayback === 'boolean') {\n if (attrs.disableRemotePlayback) el.setAttribute('disableremoteplayback', '');\n else el.removeAttribute('disableremoteplayback');\n }\n\n return el;\n}\n\n/**\n * Enhance audio 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 enhanceAudios(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for audio.\n void root;\n}\n"],"mappings":";;;;;;;IA2Fa,IAAY,SAOZ,IAAiB;AAkF9B,SAAS,EAAc,GAA6C;CAClE,IAAI,CAAC,GAAO;CAEZ,IAAM,EAAE,SAAM,GAAG,MAAS;CAE1B,IAAI,CAAC,GAAM,OAAO;CAElB,IAAM,IAA+C,EAAE;CAQvD,OANI,OAAO,EAAK,SAAU,aAAU,EAAW,QAAQ,EAAK,QACxD,OAAO,EAAK,cAAe,aAAU,EAAW,aAAa,EAAK,aAClE,OAAO,EAAK,UAAW,cAAW,EAAW,SAAS,EAAK,SAE7C,OAAO,KAAK,EAAW,CAAC,SAAS,IAEhC;EAAE,GAAG;EAAM,MAAM;EAAY,GAAG;;AA2BrD,SAAgB,EAAY,GAAiD;CAC3E,IAAM,IAAK,EAAc,GAAW,EAAc,EAAM,CAAC;CAiCzD,OA/BK,KAED,OAAO,EAAM,OAAQ,aAAU,EAAG,MAAM,EAAM,MAE9C,OAAO,EAAM,YAAa,cAAW,EAAG,WAAW,EAAM,WAEzD,OAAO,EAAM,YAAa,cAAW,EAAG,WAAW,EAAM,WACzD,OAAO,EAAM,QAAS,cAAW,EAAG,OAAO,EAAM,OAIjD,OAAO,EAAM,SAAU,YACzB,EAAG,QAAQ,EAAM,QACR,EAAM,aAAa,OAC5B,EAAG,QAAQ,KAGT,OAAO,EAAM,WAAY,aAAU,EAAG,UAAU,EAAM,UAEtD,OAAO,EAAM,eAAgB,aAAU,EAAG,cAAc,EAAM,cAE9D,MAAM,QAAQ,EAAM,aAAa,IAAI,EAAM,aAAa,SAAS,KAEnE,EAAG,aAAa,gBAAgB,EAAM,aAAa,KAAK,IAAI,CAAC,EAG3D,OAAO,EAAM,yBAA0B,cACrC,EAAM,wBAAuB,EAAG,aAAa,yBAAyB,GAAG,GACxE,EAAG,gBAAgB,wBAAwB,GAG3C,KA/BY;;AAoDrB,SAAgB,EAAc,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { i as e, n as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/canvas/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
CANVAS_SELECTOR: () => i,
|
|
5
|
+
CANVAS_TAG: () => r,
|
|
6
|
+
createCanvas: () => o,
|
|
7
|
+
enhanceCanvases: () => s
|
|
8
|
+
}), r = "canvas", i = "canvas";
|
|
9
|
+
function a(e) {
|
|
10
|
+
if (!e) return;
|
|
11
|
+
let { aria: t, width: n, height: r, ...i } = e, a = { ...i }, o = {};
|
|
12
|
+
return typeof t?.label == "string" && (o.label = t.label), typeof t?.labelledby == "string" && (o.labelledby = t.labelledby), typeof t?.hidden == "boolean" && (o.hidden = t.hidden), Object.keys(o).length > 0 && (a.aria = o), (typeof n == "number" || typeof r == "number") && (a.attrs = { ...a.attrs ?? {} }, typeof n == "number" && (a.attrs.width = n), typeof r == "number" && (a.attrs.height = r)), a;
|
|
13
|
+
}
|
|
14
|
+
function o(e, n) {
|
|
15
|
+
return t(r, a(n), e);
|
|
16
|
+
}
|
|
17
|
+
function s(e = document) {}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { i as CANVAS_SELECTOR, r as CANVAS_TAG, o as createCanvas, s as enhanceCanvases, n as t };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.js","names":[],"sources":["../../../../../src/elements/media/canvas/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Canvas element helpers.\n *\n * @remarks\n * The canvas element (`<canvas>`) provides a scriptable drawing surface.\n *\n * Best-practice guidance:\n * - Prefer setting `width` and `height` attributes (not only CSS sizing) to avoid\n * rendering distortion from bitmap scaling.\n * - Provide meaningful fallback content where appropriate (e.g. a short text\n * alternative) as the canvas element can represent its fallback content in\n * non-visual/unsupported contexts.\n * - If the canvas conveys information, ensure it is labeled accessibly (e.g.\n * via `aria-label` / `aria-labelledby`) and that equivalent information is\n * available outside the canvas where needed.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create canvas 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 canvas.\n *\n * @category Constants\n */\nexport const CANVAS_TAG = 'canvas' as const;\n\n/**\n * A CSS selector targeting canvas elements.\n *\n * @category Constants\n */\nexport const CANVAS_SELECTOR = 'canvas';\n\n/**\n * Attribute bag for canvas creation/enhancement.\n *\n * @remarks\n * Canvas supports:\n * - standard HTML global attributes\n * - `width` and `height` attributes for bitmap sizing\n * - structured ARIA input mapped into `aria-*`\n *\n * @category Attributes\n */\nexport type CanvasAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * Bitmap width (in CSS pixels) for the canvas drawing surface.\n *\n * @remarks\n * Prefer this over CSS-only sizing to avoid scaling distortion.\n */\n width?: number;\n\n /**\n * Bitmap height (in CSS pixels) for the canvas drawing surface.\n *\n * @remarks\n * Prefer this over CSS-only sizing to avoid scaling distortion.\n */\n height?: number;\n};\n\n/**\n * Normalize {@link CanvasAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The canvas attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: CanvasAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, width, height, ...rest } = attrs;\n\n const mapped: GlobalAttrs = { ...rest };\n\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) mapped.aria = mappedAria;\n\n // Canvas-specific attributes are routed via the safe attrs escape hatch.\n if (typeof width === 'number' || typeof height === 'number') {\n mapped.attrs = { ...(mapped.attrs ?? {}) };\n\n if (typeof width === 'number') mapped.attrs.width = width;\n if (typeof height === 'number') mapped.attrs.height = height;\n }\n\n return mapped;\n}\n\n/**\n * Create a canvas element with optional fallback text content and attributes.\n *\n * @remarks\n * - Text content is assigned via `textContent` (never `innerHTML`).\n * - `width` and `height` (if provided) are applied as attributes via the safe\n * attribute path in `dom.ts`.\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 content for the canvas.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<canvas>` element.\n *\n * @example\n * Create a 300x150 canvas with a label:\n * ```ts\n * import { createCanvas } from \"@lnpg/pkgn-sol/elements/media/canvas\";\n *\n * const el = createCanvas(undefined, {\n * width: 300,\n * height: 150,\n * aria: { label: \"Sparkline chart\" },\n * });\n * ```\n *\n * @category DOM\n */\nexport function createCanvas(text?: string, attrs?: CanvasAttrs): ElementOf<typeof CANVAS_TAG> {\n return createElement(CANVAS_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance canvas 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 enhanceCanvases(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for canvas.\n void root;\n}\n"],"mappings":";;;;;;;IA+Da,IAAa,UAOb,IAAkB;AA4C/B,SAAS,EAAc,GAA8C;CACnE,IAAI,CAAC,GAAO;CAEZ,IAAM,EAAE,SAAM,UAAO,WAAQ,GAAG,MAAS,GAEnC,IAAsB,EAAE,GAAG,GAAM,EAEjC,IAA+C,EAAE;CAevD,OAdI,OAAO,GAAM,SAAU,aAAU,EAAW,QAAQ,EAAK,QACzD,OAAO,GAAM,cAAe,aAAU,EAAW,aAAa,EAAK,aACnE,OAAO,GAAM,UAAW,cAAW,EAAW,SAAS,EAAK,SAE5D,OAAO,KAAK,EAAW,CAAC,SAAS,MAAG,EAAO,OAAO,KAGlD,OAAO,KAAU,YAAY,OAAO,KAAW,cACjD,EAAO,QAAQ,EAAE,GAAI,EAAO,SAAS,EAAE,EAAG,EAEtC,OAAO,KAAU,aAAU,EAAO,MAAM,QAAQ,IAChD,OAAO,KAAW,aAAU,EAAO,MAAM,SAAS,KAGjD;;AAgCT,SAAgB,EAAa,GAAe,GAAmD;CAC7F,OAAO,EAAc,GAAY,EAAc,EAAM,EAAE,EAAK;;AAqB9D,SAAgB,EAAgB,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { i as e, r as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/embed/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
EMBED_SELECTOR: () => i,
|
|
5
|
+
EMBED_TAG: () => r,
|
|
6
|
+
createEmbed: () => s,
|
|
7
|
+
enhanceEmbeds: () => c
|
|
8
|
+
}), r = "embed", i = "embed";
|
|
9
|
+
function a(e, t) {
|
|
10
|
+
if (e == null) return;
|
|
11
|
+
if (typeof e == "number") {
|
|
12
|
+
if (!Number.isFinite(e) || e < 0) throw Error(`Invalid ${t}: must be a finite, non-negative number.`);
|
|
13
|
+
return String(Math.floor(e));
|
|
14
|
+
}
|
|
15
|
+
let n = String(e).trim();
|
|
16
|
+
if (n.length !== 0) {
|
|
17
|
+
if (n.includes("%")) throw Error(`Invalid ${t}: percentages are not allowed for <embed> ${t}.`);
|
|
18
|
+
if (!/^\d+$/.test(n)) throw Error(`Invalid ${t}: must be a non-negative integer (CSS pixels).`);
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function o(e) {
|
|
23
|
+
if (!e) return;
|
|
24
|
+
let { aria: t, src: n, type: r, width: i, height: o, attrs: s, ...c } = e, l = t ? (() => {
|
|
25
|
+
let e = {};
|
|
26
|
+
return 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 ? e : void 0;
|
|
27
|
+
})() : void 0, u = a(i, "width"), d = a(o, "height"), f = (() => {
|
|
28
|
+
let e = { ...s ?? {} };
|
|
29
|
+
return typeof n == "string" && n.length > 0 && (e.src = n), typeof r == "string" && r.length > 0 && (e.type = r), typeof u == "string" && (e.width = u), typeof d == "string" && (e.height = d), Object.keys(e).length > 0 ? e : void 0;
|
|
30
|
+
})();
|
|
31
|
+
return {
|
|
32
|
+
...c,
|
|
33
|
+
...l ? { aria: l } : null,
|
|
34
|
+
...f ? { attrs: f } : null
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function s(e) {
|
|
38
|
+
return t(r, o(e));
|
|
39
|
+
}
|
|
40
|
+
function c(e = document) {}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { i as EMBED_SELECTOR, r as EMBED_TAG, s as createEmbed, c as enhanceEmbeds, n as t };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=embed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.js","names":[],"sources":["../../../../../src/elements/media/embed/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Embed element helpers.\n *\n * @remarks\n * The embed element (`<embed>`) embeds external content at a point in the\n * document. Historically this was often browser plug-ins; modern browsers have\n * largely removed plug-in support, so relying on `<embed>` is frequently a poor\n * choice for general-purpose sites. Prefer purpose-built elements when possible\n * (e.g. `<img>`, `<video>`, `<audio>`, `<iframe>`, or `<object>` depending on the use case).\n *\n * Best-practice guidance:\n * - Prefer native elements over `<embed>` when there is a semantic alternative.\n * - Use the `title` attribute to label embedded content for assistive technology.\n * - `width`/`height` should be absolute pixel values (no percentages).\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create embed nodes 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 {\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 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 embed.\n *\n * @category Constants\n */\nexport const EMBED_TAG = 'embed' as const;\n\n/**\n * A CSS selector targeting embed elements.\n *\n * @category Constants\n */\nexport const EMBED_SELECTOR = 'embed';\n\n/**\n * Attribute bag for embed creation/enhancement.\n *\n * @remarks\n * `<embed>` supports global attributes plus:\n * - `src` (URL)\n * - `type` (MIME type)\n * - `width` / `height` (absolute pixel values; percentages are invalid)\n *\n * Accessibility:\n * - Provide a `title` (global attribute) to label the embedded content.\n *\n * pkgn-sol also supports a structured ARIA input for common ARIA fields, mapped into\n * `aria-*` attributes.\n *\n * @category Attributes\n */\nexport type EmbedAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * URL of the resource being embedded.\n */\n src?: string;\n\n /**\n * MIME type used to select the appropriate handler.\n */\n type?: string;\n\n /**\n * Displayed width in CSS pixels (absolute; percentages are not allowed).\n */\n width?: number | string;\n\n /**\n * Displayed height in CSS pixels (absolute; percentages are not allowed).\n */\n height?: number | string;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Normalize an HTML dimension attribute value.\n *\n * @remarks\n * MDN notes `width`/`height` must be absolute values (percentages are invalid).\n * HTML attribute values for these are effectively numeric pixel counts.\n *\n * @param v - The provided dimension.\n * @param name - Attribute name for error messages.\n * @returns A stringified non-negative integer, or `undefined` if not provided.\n *\n * @category Internal\n */\nfunction normalizeDim(v: EmbedAttrs['width'], name: 'width' | 'height'): string | undefined {\n if (v === undefined || v === null) return undefined;\n\n if (typeof v === 'number') {\n if (!Number.isFinite(v) || v < 0) {\n throw new Error(`Invalid ${name}: must be a finite, non-negative number.`);\n }\n // HTML width/height attributes are integer-like; normalize safely.\n return String(Math.floor(v));\n }\n\n const s = String(v).trim();\n\n if (s.length === 0) return undefined;\n\n if (s.includes('%')) {\n throw new Error(`Invalid ${name}: percentages are not allowed for <embed> ${name}.`);\n }\n\n if (!/^\\d+$/.test(s)) {\n throw new Error(`Invalid ${name}: must be a non-negative integer (CSS pixels).`);\n }\n\n return s;\n}\n\n/**\n * Normalize {@link EmbedAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The embed attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: EmbedAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const { aria, src, type, width, height, attrs: extraAttrs, ...rest } = attrs;\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> | undefined = aria\n ? (() => {\n const a: NonNullable<GlobalAttrs['aria']> = {};\n if (typeof aria.label === 'string') a.label = aria.label;\n if (typeof aria.labelledby === 'string') a.labelledby = aria.labelledby;\n if (typeof aria.hidden === 'boolean') a.hidden = aria.hidden;\n return Object.keys(a).length > 0 ? a : undefined;\n })()\n : undefined;\n\n const w = normalizeDim(width, 'width');\n const h = normalizeDim(height, 'height');\n\n const mergedAttrs: Record<string, AttrValue> | undefined = (() => {\n const a: Record<string, AttrValue> = { ...(extraAttrs ?? {}) };\n\n if (typeof src === 'string' && src.length > 0) a.src = src;\n if (typeof type === 'string' && type.length > 0) a.type = type;\n\n if (typeof w === 'string') a.width = w;\n if (typeof h === 'string') a.height = h;\n\n return Object.keys(a).length > 0 ? a : undefined;\n })();\n\n const mapped: GlobalAttrs = {\n ...rest,\n ...(mappedAria ? { aria: mappedAria } : null),\n ...(mergedAttrs ? { attrs: mergedAttrs } : null),\n };\n\n return mapped;\n}\n\n/**\n * Create an embed element and apply attributes.\n *\n * @remarks\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 `<embed>` element.\n *\n * @example\n * ```ts\n * import { createEmbed } from \"@lnpg/pkgn-sol/elements/media/embed\";\n *\n * document.body.appendChild(\n * createEmbed({ src: \"/files/manual.pdf\", type: \"application/pdf\", title: \"User manual\" })\n * );\n * ```\n *\n * @category DOM\n */\nexport function createEmbed(attrs?: EmbedAttrs): ElementOf<typeof EMBED_TAG> {\n return createVoidElement(EMBED_TAG, toGlobalAttrs(attrs));\n}\n\n/**\n * Enhance embed 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 enhanceEmbeds(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for embed.\n void root;\n}\n"],"mappings":";;;;;;;IAmEa,IAAY,SAOZ,IAAiB;AA2D9B,SAAS,EAAa,GAAwB,GAA8C;CAC1F,IAAI,KAAyB,MAAM;CAEnC,IAAI,OAAO,KAAM,UAAU;EACzB,IAAI,CAAC,OAAO,SAAS,EAAE,IAAI,IAAI,GAC7B,MAAU,MAAM,WAAW,EAAK,0CAA0C;EAG5E,OAAO,OAAO,KAAK,MAAM,EAAE,CAAC;;CAG9B,IAAM,IAAI,OAAO,EAAE,CAAC,MAAM;CAEtB,MAAE,WAAW,GAEjB;MAAI,EAAE,SAAS,IAAI,EACjB,MAAU,MAAM,WAAW,EAAK,4CAA4C,EAAK,GAAG;EAGtF,IAAI,CAAC,QAAQ,KAAK,EAAE,EAClB,MAAU,MAAM,WAAW,EAAK,gDAAgD;EAGlF,OAAO;;;AAWT,SAAS,EAAc,GAA6C;CAClE,IAAI,CAAC,GAAO;CAEZ,IAAM,EAAE,SAAM,QAAK,SAAM,UAAO,WAAQ,OAAO,GAAY,GAAG,MAAS,GAEjE,IAA2D,WACtD;EACL,IAAM,IAAsC,EAAE;EAI9C,OAHI,OAAO,EAAK,SAAU,aAAU,EAAE,QAAQ,EAAK,QAC/C,OAAO,EAAK,cAAe,aAAU,EAAE,aAAa,EAAK,aACzD,OAAO,EAAK,UAAW,cAAW,EAAE,SAAS,EAAK,SAC/C,OAAO,KAAK,EAAE,CAAC,SAAS,IAAI,IAAI,KAAA;KACrC,GACJ,KAAA,GAEE,IAAI,EAAa,GAAO,QAAQ,EAChC,IAAI,EAAa,GAAQ,SAAS,EAElC,WAA4D;EAChE,IAAM,IAA+B,EAAE,GAAI,KAAc,EAAE,EAAG;EAQ9D,OANI,OAAO,KAAQ,YAAY,EAAI,SAAS,MAAG,EAAE,MAAM,IACnD,OAAO,KAAS,YAAY,EAAK,SAAS,MAAG,EAAE,OAAO,IAEtD,OAAO,KAAM,aAAU,EAAE,QAAQ,IACjC,OAAO,KAAM,aAAU,EAAE,SAAS,IAE/B,OAAO,KAAK,EAAE,CAAC,SAAS,IAAI,IAAI,KAAA;KACrC;CAQJ,OAAO;EALL,GAAG;EACH,GAAI,IAAa,EAAE,MAAM,GAAY,GAAG;EACxC,GAAI,IAAc,EAAE,OAAO,GAAa,GAAG;EAGtC;;AAyBT,SAAgB,EAAY,GAAiD;CAC3E,OAAO,EAAkB,GAAW,EAAc,EAAM,CAAC;;AAa3D,SAAgB,EAAc,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { i as e, n as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/iframe/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
IFRAME_SELECTOR: () => i,
|
|
5
|
+
IFRAME_TAG: () => r,
|
|
6
|
+
createIFrame: () => o,
|
|
7
|
+
enhanceIFrames: () => s
|
|
8
|
+
}), r = "iframe", i = "iframe";
|
|
9
|
+
function a(e) {
|
|
10
|
+
if (!e) return;
|
|
11
|
+
let { aria: t, src: n, srcdoc: r, name: i, sandbox: a, allow: o, allowFullScreen: s, loading: c, referrerPolicy: l, width: u, height: d, fetchPriority: f, csp: p, credentialless: m, ...h } = e, g = { ...h.attrs ?? {} }, _ = (e, t) => {
|
|
12
|
+
t !== void 0 && (Object.prototype.hasOwnProperty.call(g, e) || (g[e] = t));
|
|
13
|
+
};
|
|
14
|
+
_("src", n), _("srcdoc", r), _("name", i), _("sandbox", a), _("allow", o), _("loading", c), _("referrerpolicy", l), _("width", u), _("height", d), _("fetchpriority", f), _("csp", p), s === !0 && _("allowfullscreen", ""), m === !0 && _("credentialless", "");
|
|
15
|
+
let v = {};
|
|
16
|
+
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));
|
|
17
|
+
let y = Object.keys(v).length > 0, b = Object.keys(g).length > 0, x = { ...h };
|
|
18
|
+
return b && (x.attrs = g), y && (x.aria = v), x;
|
|
19
|
+
}
|
|
20
|
+
function o(e, n) {
|
|
21
|
+
return t(r, a(n), e);
|
|
22
|
+
}
|
|
23
|
+
function s(e = document) {}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { i as IFRAME_SELECTOR, r as IFRAME_TAG, o as createIFrame, s as enhanceIFrames, n as t };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=iframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iframe.js","names":[],"sources":["../../../../../src/elements/media/iframe/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: IFrame element helpers.\n *\n * @remarks\n * The iframe element (`<iframe>`) embeds another HTML page into the current page.\n *\n * Best-practice guidance:\n * - Prefer `<iframe>` only when you truly need third-party or isolated documents.\n * - Consider `loading=\"lazy\"` for non-critical iframes to reduce initial load cost.\n * - Use `sandbox` with the least permissions possible when embedding untrusted content.\n * - Prefer restrictive `referrerpolicy` when embedding third-party content.\n * - Provide a meaningful `title` for accessibility (screen readers use it to identify the frame).\n * - Avoid obsolete attributes like `frameborder`; use CSS instead.\n *\n * Security notes:\n * - `srcdoc` embeds HTML directly. pkgn-sol does not sanitize or validate it.\n * If you build `srcdoc` from untrusted input, that is on you (and your incident report).\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create iframes 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, type AttrValue } 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 iframe embeds.\n *\n * @category Constants\n */\nexport const IFRAME_TAG = 'iframe' as const;\n\n/**\n * A CSS selector targeting iframe elements.\n *\n * @category Constants\n */\nexport const IFRAME_SELECTOR = 'iframe';\n\n/**\n * Allowed values for the iframe `loading` attribute.\n *\n * @category Types\n */\nexport type IFrameLoading = 'eager' | 'lazy';\n\n/**\n * Allowed values for the iframe `referrerpolicy` attribute.\n *\n * @category Types\n */\nexport type IFrameReferrerPolicy =\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 * Allowed values for the `fetchpriority` attribute.\n *\n * @category Types\n */\nexport type FetchPriority = 'high' | 'low' | 'auto';\n\n/**\n * Attribute bag for iframe creation/enhancement.\n *\n * @remarks\n * Iframes accept standard HTML global attributes plus iframe-specific 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 IFrameAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * Address of the document to embed.\n */\n src?: string;\n\n /**\n * Inline HTML to render within the iframe.\n *\n * @remarks\n * pkgn-sol does not sanitize `srcdoc`.\n */\n srcdoc?: string;\n\n /**\n * A name for the browsing context.\n */\n name?: string;\n\n /**\n * A space-separated list of sandbox tokens.\n *\n * @remarks\n * Use the least permissive sandbox you can.\n */\n sandbox?: string;\n\n /**\n * Permissions policy for the iframe (previously \"feature policy\").\n *\n * @remarks\n * Example: `allow=\"fullscreen; geolocation 'none'\"`.\n */\n allow?: string;\n\n /**\n * Whether fullscreen is allowed.\n *\n * @remarks\n * Mirrors the `allowfullscreen` boolean attribute.\n */\n allowFullScreen?: boolean;\n\n /**\n * Whether the iframe should be loaded lazily or eagerly.\n */\n loading?: IFrameLoading;\n\n /**\n * Referrer policy for requests made by the iframe.\n */\n referrerPolicy?: IFrameReferrerPolicy;\n\n /**\n * Display width, in CSS pixels.\n */\n width?: number | string;\n\n /**\n * Display height, in CSS pixels.\n */\n height?: number | string;\n\n /**\n * Fetch priority hint.\n */\n fetchPriority?: FetchPriority;\n\n /**\n * Content Security Policy to apply to the embedded document.\n *\n * @remarks\n * Support varies by browser and context.\n */\n csp?: string;\n\n /**\n * Whether to use a credentialless iframe (privacy-oriented isolation).\n *\n * @remarks\n * Mirrors the `credentialless` boolean attribute where supported.\n */\n credentialless?: boolean;\n};\n\n/**\n * Normalize {@link IFrameAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The iframe attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: IFrameAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const {\n aria,\n src,\n srcdoc,\n name,\n sandbox,\n allow,\n allowFullScreen,\n loading,\n referrerPolicy,\n width,\n height,\n fetchPriority,\n csp,\n credentialless,\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('src', src);\n setIfUnset('srcdoc', srcdoc);\n setIfUnset('name', name);\n setIfUnset('sandbox', sandbox);\n setIfUnset('allow', allow);\n setIfUnset('loading', loading);\n setIfUnset('referrerpolicy', referrerPolicy);\n setIfUnset('width', width);\n setIfUnset('height', height);\n setIfUnset('fetchpriority', fetchPriority);\n setIfUnset('csp', csp);\n\n // Boolean attributes are represented by presence. We set empty-string when true.\n if (allowFullScreen === true) setIfUnset('allowfullscreen', '');\n if (credentialless === true) setIfUnset('credentialless', '');\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 an iframe 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 content for the iframe (rarely used, but valid).\n * @param attrs - Optional attributes to apply.\n * @returns The created `<iframe>` element.\n *\n * @example\n * ```ts\n * import { createIFrame } from \"@lnpg/pkgn-sol/elements/media/iframe\";\n *\n * document.body.appendChild(\n * createIFrame(undefined, {\n * title: \"Embedded map\",\n * src: \"https://example.com/map\",\n * loading: \"lazy\",\n * sandbox: \"allow-scripts allow-same-origin\"\n * })\n * );\n * ```\n *\n * @category DOM\n */\nexport function createIFrame(text?: string, attrs?: IFrameAttrs): ElementOf<typeof IFRAME_TAG> {\n return createElement(IFRAME_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance iframe 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 enhanceIFrames(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for iframe.\n void root;\n}\n"],"mappings":";;;;;;;IAiEa,IAAa,UAOb,IAAkB;AA4I/B,SAAS,EAAc,GAA8C;CACnE,IAAI,CAAC,GAAO;CAEZ,IAAM,EACJ,SACA,QACA,WACA,SACA,YACA,UACA,oBACA,YACA,mBACA,UACA,WACA,kBACA,QACA,mBACA,GAAG,MACD,GAGE,IAAyC,EAAE,GAAI,EAAK,SAAS,EAAE,EAAG,EAGlE,KAAc,GAAa,MAAuC;EAClE,MAAU,KAAA,MACV,OAAO,UAAU,eAAe,KAAK,GAAa,EAAI,KAC1D,EAAY,KAAO;;CAiBrB,AAdA,EAAW,OAAO,EAAI,EACtB,EAAW,UAAU,EAAO,EAC5B,EAAW,QAAQ,EAAK,EACxB,EAAW,WAAW,EAAQ,EAC9B,EAAW,SAAS,EAAM,EAC1B,EAAW,WAAW,EAAQ,EAC9B,EAAW,kBAAkB,EAAe,EAC5C,EAAW,SAAS,EAAM,EAC1B,EAAW,UAAU,EAAO,EAC5B,EAAW,iBAAiB,EAAc,EAC1C,EAAW,OAAO,EAAI,EAGlB,MAAoB,MAAM,EAAW,mBAAmB,GAAG,EAC3D,MAAmB,MAAM,EAAW,kBAAkB,GAAG;CAE7D,IAAM,IAA+C,EAAE;CACvD,AAAI,MACE,OAAO,EAAK,SAAU,aAAU,EAAW,QAAQ,EAAK,QACxD,OAAO,EAAK,cAAe,aAAU,EAAW,aAAa,EAAK,aAClE,OAAO,EAAK,UAAW,cAAW,EAAW,SAAS,EAAK;CAGjE,IAAM,IAAgB,OAAO,KAAK,EAAW,CAAC,SAAS,GACjD,IAAiB,OAAO,KAAK,EAAY,CAAC,SAAS,GAEnD,IAAoB,EAAE,GAAG,GAAM;CAIrC,OAHI,MAAgB,EAAK,QAAQ,IAC7B,MAAe,EAAK,OAAO,IAExB;;AAgCT,SAAgB,EAAa,GAAe,GAAmD;CAC7F,OAAO,EAAc,GAAY,EAAc,EAAM,EAAE,EAAK;;AAqB9D,SAAgB,EAAe,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { i as e, r as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/img/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
IMG_SELECTOR: () => "img",
|
|
5
|
+
IMG_TAG: () => "img",
|
|
6
|
+
createImg: () => o,
|
|
7
|
+
enhanceImgs: () => s
|
|
8
|
+
}), r = "img", i = "img";
|
|
9
|
+
function a(e) {
|
|
10
|
+
let { aria: t, alt: n, src: r, srcset: i, sizes: a, width: o, height: s, loading: c, decoding: l, referrerPolicy: u, ...d } = e ?? {}, f = { ...d }, p = {};
|
|
11
|
+
t && (typeof t.label == "string" && (p.label = t.label), typeof t.labelledby == "string" && (p.labelledby = t.labelledby), typeof t.hidden == "boolean" && (p.hidden = t.hidden)), Object.keys(p).length > 0 && (f.aria = p), f.attrs = {
|
|
12
|
+
...f.attrs ?? {},
|
|
13
|
+
alt: typeof n == "string" ? n : ""
|
|
14
|
+
};
|
|
15
|
+
let m = typeof r == "string" && r.length > 0, h = typeof i == "string" && i.length > 0;
|
|
16
|
+
return m && (f.attrs.src = r), h && (f.attrs.srcset = i), a && (f.attrs.sizes = a), typeof o == "number" && (f.attrs.width = o), typeof s == "number" && (f.attrs.height = s), c && (f.attrs.loading = c), l && (f.attrs.decoding = l), u && (f.attrs.referrerpolicy = u), !m && !h && (f.attrs.src = "data:,"), f;
|
|
17
|
+
}
|
|
18
|
+
function o(e) {
|
|
19
|
+
return t("img", a(e));
|
|
20
|
+
}
|
|
21
|
+
function s(e = document) {}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { i as IMG_SELECTOR, r as IMG_TAG, o as createImg, s as enhanceImgs, n as t };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=img.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"img.js","names":[],"sources":["../../../../../src/elements/media/img/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Img element helpers.\n *\n * @remarks\n * The img element (`<img>`) embeds an image into the document.\n *\n * Best-practice guidance:\n * - The `alt` attribute must always be present.\n * - Use `alt=\"\"` for purely decorative images.\n * - Provide meaningful alternative text for informative images.\n * - Do not rely on images alone to convey critical information.\n *\n * This module enforces:\n * - `alt` always exists (defaults to empty string if not provided)\n * - If neither `src` nor `srcset` is provided, a safe fallback\n * `src=\"data:,\"` is applied to avoid broken network requests\n * - All global attributes are applied via pkgn-sol's hardened DOM helpers\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 { createVoidElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\n *\n * @category Attributes\n */\nexport type StructuredAria = {\n label?: string;\n labelledby?: string;\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for images.\n *\n * @category Constants\n */\nexport const IMG_TAG = 'img' as const;\n\n/**\n * A CSS selector targeting img elements.\n *\n * @category Constants\n */\nexport const IMG_SELECTOR = 'img';\n\n/**\n * Img-specific attributes.\n *\n * @remarks\n * `alt` is mandatory per HTML specification.\n *\n * @category Attributes\n */\nexport type ImgAttrs = Omit<GlobalAttrs, 'aria'> & {\n alt?: string;\n src?: string;\n srcset?: string;\n sizes?: string;\n width?: number;\n height?: number;\n loading?: 'lazy' | 'eager';\n decoding?: 'sync' | 'async' | 'auto';\n referrerPolicy?: string;\n aria?: StructuredAria;\n};\n\nfunction toGlobalAttrs(attrs?: ImgAttrs): GlobalAttrs {\n const {\n aria,\n alt,\n src,\n srcset,\n sizes,\n width,\n height,\n loading,\n decoding,\n referrerPolicy,\n ...rest\n } = attrs ?? {};\n\n const mapped: GlobalAttrs = { ...rest };\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 if (Object.keys(mappedAria).length > 0) {\n mapped.aria = mappedAria;\n }\n\n mapped.attrs = {\n ...(mapped.attrs ?? {}),\n alt: typeof alt === 'string' ? alt : '',\n };\n\n const hasSrc = typeof src === 'string' && src.length > 0;\n const hasSrcset = typeof srcset === 'string' && srcset.length > 0;\n\n if (hasSrc) mapped.attrs.src = src;\n if (hasSrcset) mapped.attrs.srcset = srcset;\n if (sizes) mapped.attrs.sizes = sizes;\n if (typeof width === 'number') mapped.attrs.width = width;\n if (typeof height === 'number') mapped.attrs.height = height;\n if (loading) mapped.attrs.loading = loading;\n if (decoding) mapped.attrs.decoding = decoding;\n if (referrerPolicy) mapped.attrs.referrerpolicy = referrerPolicy;\n\n if (!hasSrc && !hasSrcset) {\n mapped.attrs.src = 'data:,';\n }\n\n return mapped;\n}\n\n/**\n * Create an img element with enforced accessibility safeguards.\n *\n * @category DOM\n */\nexport function createImg(attrs?: ImgAttrs): ElementOf<typeof IMG_TAG> {\n return createVoidElement(IMG_TAG, toGlobalAttrs(attrs));\n}\n\n/**\n * Enhance img elements within a given root.\n *\n * @remarks\n * No runtime behaviour in v0.1.0.\n *\n * @category Enhancement\n */\nexport function enhanceImgs(root: ParentNode = document): void {\n void root;\n}\n"],"mappings":";;;;;;;IA2Ca,IAAU,OAOV,IAAe;AAuB5B,SAAS,EAAc,GAA+B;CACpD,IAAM,EACJ,SACA,QACA,QACA,WACA,UACA,UACA,WACA,YACA,aACA,mBACA,GAAG,MACD,KAAS,EAAE,EAET,IAAsB,EAAE,GAAG,GAAM,EAEjC,IAA+C,EAAE;CAYvD,AAVI,MACE,OAAO,EAAK,SAAU,aAAU,EAAW,QAAQ,EAAK,QACxD,OAAO,EAAK,cAAe,aAAU,EAAW,aAAa,EAAK,aAClE,OAAO,EAAK,UAAW,cAAW,EAAW,SAAS,EAAK,UAG7D,OAAO,KAAK,EAAW,CAAC,SAAS,MACnC,EAAO,OAAO,IAGhB,EAAO,QAAQ;EACb,GAAI,EAAO,SAAS,EAAE;EACtB,KAAK,OAAO,KAAQ,WAAW,IAAM;EACtC;CAED,IAAM,IAAS,OAAO,KAAQ,YAAY,EAAI,SAAS,GACjD,IAAY,OAAO,KAAW,YAAY,EAAO,SAAS;CAehE,OAbI,MAAQ,EAAO,MAAM,MAAM,IAC3B,MAAW,EAAO,MAAM,SAAS,IACjC,MAAO,EAAO,MAAM,QAAQ,IAC5B,OAAO,KAAU,aAAU,EAAO,MAAM,QAAQ,IAChD,OAAO,KAAW,aAAU,EAAO,MAAM,SAAS,IAClD,MAAS,EAAO,MAAM,UAAU,IAChC,MAAU,EAAO,MAAM,WAAW,IAClC,MAAgB,EAAO,MAAM,iBAAiB,IAE9C,CAAC,KAAU,CAAC,MACd,EAAO,MAAM,MAAM,WAGd;;AAQT,SAAgB,EAAU,GAA6C;CACrE,OAAO,EAAA,OAA2B,EAAc,EAAM,CAAC;;AAWzD,SAAgB,EAAY,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { i as e, t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/math/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
MATH_SELECTOR: () => i,
|
|
5
|
+
MATH_TAG: () => r,
|
|
6
|
+
createMath: () => o,
|
|
7
|
+
enhanceMath: () => s
|
|
8
|
+
}), r = "math", i = "math";
|
|
9
|
+
function a(e) {
|
|
10
|
+
let { aria: t, display: n, attrs: r, tabIndex: i, ...a } = e ?? {}, o = { ...a }, s = {};
|
|
11
|
+
typeof t?.label == "string" && (s.label = t.label), typeof t?.labelledby == "string" && (s.labelledby = t.labelledby), typeof t?.hidden == "boolean" ? s.hidden = t.hidden : s.hidden = !0, Object.keys(s).length > 0 && (o.aria = s), typeof i == "number" ? o.tabIndex = i : o.tabIndex = -1;
|
|
12
|
+
let c = { ...r ?? {} };
|
|
13
|
+
return n && (c.display = n), Object.keys(c).length > 0 && (o.attrs = c), o;
|
|
14
|
+
}
|
|
15
|
+
function o(e, n) {
|
|
16
|
+
let i = document.createElement(r);
|
|
17
|
+
return t(i, a(n)), typeof e == "string" && (i.textContent = e), i;
|
|
18
|
+
}
|
|
19
|
+
function s(e = document) {}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { i as MATH_SELECTOR, r as MATH_TAG, o as createMath, s as enhanceMath, n as t };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","names":[],"sources":["../../../../../src/elements/media/math/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Math element helpers.\n *\n * @remarks\n * The MathML math element (`<math>`) represents mathematical notation.\n *\n * Best-practice guidance:\n * - Prefer real MathML over images for math content when possible.\n * - Use `display=\"block\"` for standalone equations; inline math remains the default.\n * - Do not rely on raw attribute injection for behavior; keep markup semantic.\n *\n * Accessibility defaults for pkgn-sol v0.1.0:\n * - `<math>` is treated as decorative by default:\n * - `aria-hidden=\"true\"`\n * - `tabIndex = -1`\n * - If consumers provide explicit overrides (e.g. `aria.hidden`, `tabIndex`), pkgn-sol\n * respects them.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create MathML roots 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 { applyGlobalAttrs, 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 MathML roots.\n *\n * @category Constants\n */\nexport const MATH_TAG = 'math' as const;\n\n/**\n * A CSS selector targeting math elements.\n *\n * @category Constants\n */\nexport const MATH_SELECTOR = 'math';\n\n/**\n * Attribute bag for math creation/enhancement.\n *\n * @remarks\n * MathML `<math>` supports the `display` attribute:\n * - `inline` (default)\n * - `block`\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 MathAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * MathML display mode.\n *\n * @remarks\n * `block` renders as a block-level equation, `inline` renders inline.\n */\n display?: 'block' | 'inline';\n};\n\n/**\n * Normalize {@link MathAttrs} into {@link GlobalAttrs} for `dom.ts`,\n * applying pkgn-sol's MathML accessibility defaults.\n *\n * @param attrs - The math attributes.\n * @returns A {@link GlobalAttrs} object (always returned to support defaults).\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: MathAttrs): GlobalAttrs {\n const { aria, display, attrs: rawAttrs, tabIndex, ...rest } = attrs ?? {};\n\n const mapped: GlobalAttrs = { ...rest };\n\n // Decorative by default, unless explicitly overridden.\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\n const explicitAriaHidden = typeof aria?.hidden === 'boolean';\n if (explicitAriaHidden) {\n mappedAria.hidden = aria.hidden!;\n } else {\n mappedAria.hidden = true;\n }\n\n if (Object.keys(mappedAria).length > 0) {\n mapped.aria = mappedAria;\n }\n\n if (typeof tabIndex === 'number') {\n mapped.tabIndex = tabIndex;\n } else {\n mapped.tabIndex = -1;\n }\n\n const mergedAttrs: NonNullable<GlobalAttrs['attrs']> = { ...(rawAttrs ?? {}) };\n\n if (display) mergedAttrs.display = display;\n\n if (Object.keys(mergedAttrs).length > 0) {\n mapped.attrs = mergedAttrs;\n }\n\n return mapped;\n}\n\n/**\n * Create a MathML `<math>` 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 * Note: `<math>` is not part of {@link HTMLElementTagNameMap}, so pkgn-sol creates it\n * via `document.createElement(\"math\")` and narrows the type to {@link MathMLElement}.\n *\n * @param text - Optional text content for the math element.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<math>` element.\n *\n * @category DOM\n */\nexport function createMath(text?: string, attrs?: MathAttrs): MathMLElement {\n const el = document.createElement(MATH_TAG) as unknown as MathMLElement;\n\n applyGlobalAttrs(el as unknown as HTMLElement, toGlobalAttrs(attrs));\n\n if (typeof text === 'string') (el as unknown as Node).textContent = text;\n\n return el;\n}\n\n/**\n * Enhance math 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 enhanceMath(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for math.\n void root;\n}\n"],"mappings":";;;;;;;IAiEa,IAAW,QAOX,IAAgB;AAuC7B,SAAS,EAAc,GAAgC;CACrD,IAAM,EAAE,SAAM,YAAS,OAAO,GAAU,aAAU,GAAG,MAAS,KAAS,EAAE,EAEnE,IAAsB,EAAE,GAAG,GAAM,EAGjC,IAA+C,EAAE;CAgBvD,AAdI,OAAO,GAAM,SAAU,aAAU,EAAW,QAAQ,EAAK,QACzD,OAAO,GAAM,cAAe,aAAU,EAAW,aAAa,EAAK,aAE5C,OAAO,GAAM,UAAW,YAEjD,EAAW,SAAS,EAAK,SAEzB,EAAW,SAAS,IAGlB,OAAO,KAAK,EAAW,CAAC,SAAS,MACnC,EAAO,OAAO,IAGZ,OAAO,KAAa,WACtB,EAAO,WAAW,IAElB,EAAO,WAAW;CAGpB,IAAM,IAAiD,EAAE,GAAI,KAAY,EAAE,EAAG;CAQ9E,OANI,MAAS,EAAY,UAAU,IAE/B,OAAO,KAAK,EAAY,CAAC,SAAS,MACpC,EAAO,QAAQ,IAGV;;AAqBT,SAAgB,EAAW,GAAe,GAAkC;CAC1E,IAAM,IAAK,SAAS,cAAc,EAAS;CAM3C,OAJA,EAAiB,GAA8B,EAAc,EAAM,CAAC,EAEhE,OAAO,KAAS,aAAU,EAAwB,cAAc,IAE7D;;AAqBT,SAAgB,EAAY,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { i as e } from "../../chunks/dom.js";
|
|
2
|
+
import { t } from "./img/img.js";
|
|
3
|
+
import { t as n } from "./svg/svg.js";
|
|
4
|
+
import { t as r } from "./math/math.js";
|
|
5
|
+
import { t as i } from "./canvas/canvas.js";
|
|
6
|
+
import { t as a } from "./iframe/iframe.js";
|
|
7
|
+
import { t as o } from "./embed/embed.js";
|
|
8
|
+
import { t as s } from "./object/object.js";
|
|
9
|
+
import { t as c } from "./video/video.js";
|
|
10
|
+
import { t as l } from "./audio/audio.js";
|
|
11
|
+
//#region src/elements/media/index.ts
|
|
12
|
+
var u = /* @__PURE__ */ e({
|
|
13
|
+
audio: () => l,
|
|
14
|
+
canvas: () => i,
|
|
15
|
+
embed: () => o,
|
|
16
|
+
iframe: () => a,
|
|
17
|
+
img: () => t,
|
|
18
|
+
math: () => r,
|
|
19
|
+
object: () => s,
|
|
20
|
+
svg: () => n,
|
|
21
|
+
video: () => c
|
|
22
|
+
});
|
|
23
|
+
//#endregion
|
|
24
|
+
export { l as audio, i as canvas, o as embed, a as iframe, t as img, r as math, s as object, n as svg, u as t, c as video };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","names":[],"sources":["../../../../src/elements/media/index.ts"],"sourcesContent":["/**\n * Media element factories.\n *\n * Provides framework-agnostic factory functions for embedded, graphical,\n * and time-based media elements.\n *\n * These factories:\n * - Create semantic HTML media elements using pkgn-sol's hardened DOM helpers.\n * - Forward curated global attributes.\n * - Enforce structured, typed attribute bags.\n * - Apply sensible fallbacks where required by the HTML specification.\n * - Prevent unsafe attribute injection.\n *\n * @module elements/media\n * @since 0.1.0\n */\n\n/**\n * `<img>` element factory namespace.\n *\n * Embeds raster images into the document.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img\n */\nexport * as img from './img';\n\n/**\n * `<svg>` element factory namespace.\n *\n * Embeds scalable vector graphics content.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/svg\n */\nexport * as svg from './svg';\n\n/**\n * `<math>` element factory namespace.\n *\n * Embeds MathML content for mathematical notation.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/math\n */\nexport * as math from './math';\n\n/**\n * `<canvas>` element factory namespace.\n *\n * Provides a bitmap rendering surface for scripted drawing.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas\n */\nexport * as canvas from './canvas';\n\n/**\n * `<iframe>` element factory namespace.\n *\n * Embeds another HTML page within the current document.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe\n */\nexport * as iframe from './iframe';\n\n/**\n * `<embed>` element factory namespace.\n *\n * Embeds external content such as plugins or media resources.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed\n */\nexport * as embed from './embed';\n\n/**\n * `<object>` element factory namespace.\n *\n * Embeds external resources such as images, PDFs, or interactive content.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object\n */\nexport * as object from './object';\n\n/**\n * `<video>` element factory namespace.\n *\n * Embeds time-based video media.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video\n */\nexport * as video from './video';\n\n/**\n * `<audio>` element factory namespace.\n *\n * Embeds time-based audio media.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio\n */\nexport * as audio from './audio';\n"],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { i as e, n as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/object/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
OBJECT_SELECTOR: () => i,
|
|
5
|
+
OBJECT_TAG: () => r,
|
|
6
|
+
createObject: () => s,
|
|
7
|
+
enhanceObjects: () => c
|
|
8
|
+
}), r = "object", i = "object";
|
|
9
|
+
function a(e, t) {
|
|
10
|
+
if (typeof t == "number") {
|
|
11
|
+
if (!Number.isFinite(t) || t < 0 || !Number.isInteger(t)) throw Error(`Invalid ${e}: expected a non-negative integer.`);
|
|
12
|
+
return String(t);
|
|
13
|
+
}
|
|
14
|
+
if (!/^\d+$/.test(t)) throw Error(`Invalid ${e}: expected a numeric string.`);
|
|
15
|
+
return t;
|
|
16
|
+
}
|
|
17
|
+
function o(e) {
|
|
18
|
+
if (!e) return { attrs: { data: "about:blank" } };
|
|
19
|
+
let { aria: t, data: n, type: r, name: i, form: o, width: s, height: c, attrs: l, ...u } = e, d = {};
|
|
20
|
+
t && (typeof t.label == "string" && (d.label = t.label), typeof t.labelledby == "string" && (d.labelledby = t.labelledby), typeof t.describedby == "string" && (d.describedby = t.describedby), typeof t.hidden == "boolean" && (d.hidden = t.hidden));
|
|
21
|
+
let f = { ...l ?? {} };
|
|
22
|
+
typeof n == "string" && n.length > 0 && (f.data = n), typeof r == "string" && r.length > 0 && (f.type = r), f.data === void 0 && f.type === void 0 && (f.data = "about:blank"), typeof i == "string" && i.length > 0 && (f.name = i), typeof o == "string" && o.length > 0 && (f.form = o), s !== void 0 && (f.width = a("width", s)), c !== void 0 && (f.height = a("height", c));
|
|
23
|
+
let p = Object.keys(d).length > 0, m = Object.keys(f).length > 0;
|
|
24
|
+
return {
|
|
25
|
+
...u,
|
|
26
|
+
...p ? { aria: d } : null,
|
|
27
|
+
...m ? { attrs: f } : null
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function s(e, n) {
|
|
31
|
+
return t(r, o(n), e);
|
|
32
|
+
}
|
|
33
|
+
function c(e = document) {}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { i as OBJECT_SELECTOR, r as OBJECT_TAG, s as createObject, c as enhanceObjects, n as t };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.js","names":[],"sources":["../../../../../src/elements/media/object/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Object element helpers.\n *\n * @remarks\n * The object element (`<object>`) embeds external resources (HTML, images, PDFs,\n * SVG, etc.) into the document.\n *\n * Best-practice guidance:\n * - Prefer purpose-built elements when available:\n * - `<img>` for images\n * - `<video>` / `<audio>` for media\n * - `<iframe>` for embedded documents/interactive content (with sandboxing)\n * - Always provide a meaningful fallback inside `<object>` for unsupported content.\n * - Avoid obsolete attributes (e.g. `codebase`, `classid`, `declare`, etc.).\n * - For layout, prefer CSS. If using `width`/`height` attributes, keep them numeric.\n *\n * Attribute guidance:\n * - At least one of `data` or `type` should be provided.\n * - If neither is provided, pkgn-sol falls back to `data=\"about:blank\"` to avoid an\n * \"empty\" embed configuration while staying inert.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create object 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 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 * ID reference to the describing element(s), mapped to `aria-describedby`.\n */\n describedby?: string;\n\n /**\n * Decorative/hidden hint, mapped to `aria-hidden`.\n */\n hidden?: boolean;\n};\n\n/**\n * The semantic tag name for object embeds.\n *\n * @category Constants\n */\nexport const OBJECT_TAG = 'object' as const;\n\n/**\n * A CSS selector targeting object elements.\n *\n * @category Constants\n */\nexport const OBJECT_SELECTOR = 'object';\n\n/**\n * Dimension values allowed for width/height attributes.\n *\n * @remarks\n * Per best practice, keep these numeric (pixels). Prefer CSS for layout.\n *\n * @category Types\n */\nexport type ObjectDimension = number | `${number}`;\n\n/**\n * Attribute bag for object creation/enhancement.\n *\n * @remarks\n * - `data` and `type` are the primary configuration attributes.\n * - Provide fallback content via `text` or by appending children after creation.\n * - Global attributes are supported, including a structured ARIA input.\n *\n * @category Attributes\n */\nexport type ObjectAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Address of the resource to embed (maps to `data`).\n */\n data?: string;\n\n /**\n * MIME type of the embedded resource (maps to `type`).\n *\n * @example\n * \"text/html\", \"image/svg+xml\", \"application/pdf\"\n */\n type?: string;\n\n /**\n * Name of the object (maps to `name`).\n */\n name?: string;\n\n /**\n * Associate the object with a form (maps to `form`).\n */\n form?: string;\n\n /**\n * Width in CSS pixels (maps to `width`).\n *\n * @remarks\n * Prefer CSS for layout.\n */\n width?: ObjectDimension;\n\n /**\n * Height in CSS pixels (maps to `height`).\n *\n * @remarks\n * Prefer CSS for layout.\n */\n height?: ObjectDimension;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Validate and normalize a width/height value.\n *\n * @param name - Attribute name for error messages.\n * @param v - The provided dimension.\n * @returns A normalized string suitable for attributes.\n *\n * @category Internal\n */\nfunction normalizeDimension(name: 'width' | 'height', v: ObjectDimension): string {\n if (typeof v === 'number') {\n if (!Number.isFinite(v) || v < 0 || !Number.isInteger(v)) {\n throw new Error(`Invalid ${name}: expected a non-negative integer.`);\n }\n return String(v);\n }\n\n // String numeric (template literal), but validate anyway.\n if (!/^\\d+$/.test(v)) {\n throw new Error(`Invalid ${name}: expected a numeric string.`);\n }\n\n return v;\n}\n\n/**\n * Normalize {@link ObjectAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The object attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: ObjectAttrs): GlobalAttrs | undefined {\n if (!attrs) {\n // Best-practice: an object should have at least data or type.\n // We still allow `createObject()` with no args, but keep it inert.\n return { attrs: { data: 'about:blank' } };\n }\n\n const { aria, data, type, name, form, width, height, attrs: extraAttrs, ...rest } = attrs;\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.describedby === 'string') mappedAria.describedby = aria.describedby;\n if (typeof aria.hidden === 'boolean') mappedAria.hidden = aria.hidden;\n }\n\n const mappedAttrs: Record<string, AttrValue> = { ...(extraAttrs ?? {}) };\n\n // Primary embed configuration.\n if (typeof data === 'string' && data.length > 0) mappedAttrs.data = data;\n if (typeof type === 'string' && type.length > 0) mappedAttrs.type = type;\n\n // Per guidance/spec: at least one of data/type should exist.\n // If neither is provided, keep it inert rather than \"empty\".\n if (mappedAttrs.data === undefined && mappedAttrs.type === undefined) {\n mappedAttrs.data = 'about:blank';\n }\n\n if (typeof name === 'string' && name.length > 0) mappedAttrs.name = name;\n if (typeof form === 'string' && form.length > 0) mappedAttrs.form = form;\n\n if (width !== undefined) mappedAttrs.width = normalizeDimension('width', width);\n if (height !== undefined) mappedAttrs.height = normalizeDimension('height', height);\n\n const hasMappedAria = Object.keys(mappedAria).length > 0;\n const hasMappedAttrs = Object.keys(mappedAttrs).length > 0;\n\n return {\n ...rest,\n ...(hasMappedAria ? { aria: mappedAria } : null),\n ...(hasMappedAttrs ? { attrs: mappedAttrs } : null),\n };\n}\n\n/**\n * Create an object element with optional fallback text and attributes.\n *\n * @remarks\n * - Fallback text is assigned via `textContent` (never `innerHTML`).\n * - For richer fallback, append children after creation.\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 content for the object.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<object>` element.\n *\n * @example\n * ```ts\n * import { createObject } from \"@lnpg/pkgn-sol/elements/media/object\";\n *\n * const obj = createObject(\"Your browser can't display this content.\", {\n * data: \"/docs/guide.pdf\",\n * type: \"application/pdf\",\n * width: 640,\n * height: 480,\n * });\n *\n * document.body.appendChild(obj);\n * ```\n *\n * @category DOM\n */\nexport function createObject(text?: string, attrs?: ObjectAttrs): ElementOf<typeof OBJECT_TAG> {\n return createElement(OBJECT_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance object 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 enhanceObjects(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for object.\n void root;\n}\n"],"mappings":";;;;;;;IAyEa,IAAa,UAOb,IAAkB;AA6E/B,SAAS,EAAmB,GAA0B,GAA4B;CAChF,IAAI,OAAO,KAAM,UAAU;EACzB,IAAI,CAAC,OAAO,SAAS,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,UAAU,EAAE,EACtD,MAAU,MAAM,WAAW,EAAK,oCAAoC;EAEtE,OAAO,OAAO,EAAE;;CAIlB,IAAI,CAAC,QAAQ,KAAK,EAAE,EAClB,MAAU,MAAM,WAAW,EAAK,8BAA8B;CAGhE,OAAO;;AAWT,SAAS,EAAc,GAA8C;CACnE,IAAI,CAAC,GAGH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,EAAE;CAG3C,IAAM,EAAE,SAAM,SAAM,SAAM,SAAM,SAAM,UAAO,WAAQ,OAAO,GAAY,GAAG,MAAS,GAE9E,IAA+C,EAAE;CACvD,AAAI,MACE,OAAO,EAAK,SAAU,aAAU,EAAW,QAAQ,EAAK,QACxD,OAAO,EAAK,cAAe,aAAU,EAAW,aAAa,EAAK,aAClE,OAAO,EAAK,eAAgB,aAAU,EAAW,cAAc,EAAK,cACpE,OAAO,EAAK,UAAW,cAAW,EAAW,SAAS,EAAK;CAGjE,IAAM,IAAyC,EAAE,GAAI,KAAc,EAAE,EAAG;CAgBxE,AAbI,OAAO,KAAS,YAAY,EAAK,SAAS,MAAG,EAAY,OAAO,IAChE,OAAO,KAAS,YAAY,EAAK,SAAS,MAAG,EAAY,OAAO,IAIhE,EAAY,SAAS,KAAA,KAAa,EAAY,SAAS,KAAA,MACzD,EAAY,OAAO,gBAGjB,OAAO,KAAS,YAAY,EAAK,SAAS,MAAG,EAAY,OAAO,IAChE,OAAO,KAAS,YAAY,EAAK,SAAS,MAAG,EAAY,OAAO,IAEhE,MAAU,KAAA,MAAW,EAAY,QAAQ,EAAmB,SAAS,EAAM,GAC3E,MAAW,KAAA,MAAW,EAAY,SAAS,EAAmB,UAAU,EAAO;CAEnF,IAAM,IAAgB,OAAO,KAAK,EAAW,CAAC,SAAS,GACjD,IAAiB,OAAO,KAAK,EAAY,CAAC,SAAS;CAEzD,OAAO;EACL,GAAG;EACH,GAAI,IAAgB,EAAE,MAAM,GAAY,GAAG;EAC3C,GAAI,IAAiB,EAAE,OAAO,GAAa,GAAG;EAC/C;;AAiCH,SAAgB,EAAa,GAAe,GAAmD;CAC7F,OAAO,EAAc,GAAY,EAAc,EAAM,EAAE,EAAK;;AAqB9D,SAAgB,EAAe,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { i as e, t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/svg/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
SVG_SELECTOR: () => "svg",
|
|
5
|
+
SVG_TAG: () => "svg",
|
|
6
|
+
createSvg: () => o,
|
|
7
|
+
enhanceSvgs: () => s
|
|
8
|
+
}), r = "svg", i = "svg";
|
|
9
|
+
function a(e) {
|
|
10
|
+
let { aria: t, viewBox: n, width: r, height: i, role: a, tabIndex: o, attrs: s, ...c } = e ?? {}, l = { ...c };
|
|
11
|
+
a && (l.role = a);
|
|
12
|
+
let u = {}, d = typeof t?.label == "string", f = typeof t?.labelledby == "string", p = typeof t?.hidden == "boolean";
|
|
13
|
+
d && (u.label = t.label), f && (u.labelledby = t.labelledby), p && (u.hidden = t.hidden);
|
|
14
|
+
let m = !d && !f;
|
|
15
|
+
m && !p && (u.hidden = !0), Object.keys(u).length > 0 && (l.aria = u), !m && !a && (l.role = "img"), typeof o == "number" ? l.tabIndex = o : m && (l.tabIndex = -1);
|
|
16
|
+
let h = { ...s ?? {} };
|
|
17
|
+
return m && (h.focusable = "false"), n && (h.viewBox = n), r !== void 0 && (h.width = r), i !== void 0 && (h.height = i), Object.keys(h).length > 0 && (l.attrs = h), l;
|
|
18
|
+
}
|
|
19
|
+
function o(e, n) {
|
|
20
|
+
let r = document.createElement("svg");
|
|
21
|
+
return t(r, a(n)), typeof e == "string" && (r.textContent = e), r;
|
|
22
|
+
}
|
|
23
|
+
function s(e = document) {}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { i as SVG_SELECTOR, r as SVG_TAG, o as createSvg, s as enhanceSvgs, n as t };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg.js","names":[],"sources":["../../../../../src/elements/media/svg/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Svg element helpers.\n *\n * @remarks\n * The svg element (`<svg>`) defines scalable vector graphics.\n *\n * pkgn-sol enforces:\n * - Default decorative behaviour:\n * - aria-hidden=\"true\"\n * - tabIndex = -1\n * - focusable=\"false\"\n * - If aria.label or aria.labelledby is provided:\n * - role=\"img\" is added (unless explicitly set)\n * - Explicit overrides for role, aria-hidden and tabIndex are respected.\n *\n * @module\n * @category Elements\n */\n\nimport { applyGlobalAttrs, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input.\n */\nexport type StructuredAria = {\n label?: string;\n labelledby?: string;\n hidden?: boolean;\n};\n\nexport const SVG_TAG = 'svg';\nexport const SVG_SELECTOR = 'svg';\n\nexport type SvgAttrs = Omit<GlobalAttrs, 'aria'> & {\n viewBox?: string;\n width?: number | string;\n height?: number | string;\n aria?: StructuredAria;\n};\n\nfunction toGlobalAttrs(attrs?: SvgAttrs): GlobalAttrs {\n const { aria, viewBox, width, height, role, tabIndex, attrs: rawAttrs, ...rest } = attrs ?? {};\n\n const mapped: GlobalAttrs = { ...rest };\n\n // Preserve explicit role\n if (role) {\n mapped.role = role;\n }\n\n const mappedAria: NonNullable<GlobalAttrs['aria']> = {};\n\n const hasLabel = typeof aria?.label === 'string';\n const hasLabelledby = typeof aria?.labelledby === 'string';\n const explicitAriaHidden = typeof aria?.hidden === 'boolean';\n\n if (hasLabel) mappedAria.label = aria.label!;\n if (hasLabelledby) mappedAria.labelledby = aria.labelledby!;\n if (explicitAriaHidden) mappedAria.hidden = aria.hidden!;\n\n const isDecorative = !hasLabel && !hasLabelledby;\n\n if (isDecorative && !explicitAriaHidden) {\n mappedAria.hidden = true;\n }\n\n if (Object.keys(mappedAria).length > 0) {\n mapped.aria = mappedAria;\n }\n\n // Only auto-assign role if user did not provide one\n if (!isDecorative && !role) {\n mapped.role = 'img';\n }\n\n if (typeof tabIndex === 'number') {\n mapped.tabIndex = tabIndex;\n } else if (isDecorative) {\n mapped.tabIndex = -1;\n }\n\n // Merge user attrs with internal attrs\n const mergedAttrs: NonNullable<GlobalAttrs['attrs']> = {\n ...(rawAttrs ?? {}),\n };\n\n if (isDecorative) {\n mergedAttrs.focusable = 'false';\n }\n\n if (viewBox) mergedAttrs.viewBox = viewBox;\n if (width !== undefined) mergedAttrs.width = width;\n if (height !== undefined) mergedAttrs.height = height;\n\n if (Object.keys(mergedAttrs).length > 0) {\n mapped.attrs = mergedAttrs;\n }\n\n return mapped;\n}\n\n/**\n * Create an SVG element with accessibility defaults.\n */\nexport function createSvg(text?: string, attrs?: SvgAttrs): SVGSVGElement {\n const el = document.createElement('svg') as unknown as SVGSVGElement;\n\n applyGlobalAttrs(el as unknown as HTMLElement, toGlobalAttrs(attrs));\n\n if (typeof text === 'string') {\n el.textContent = text;\n }\n\n return el;\n}\n\n/**\n * No-op enhancement hook.\n */\nexport function enhanceSvgs(root: ParentNode = document): void {\n void root;\n}\n"],"mappings":";;;;;;;IA8Ba,IAAU,OACV,IAAe;AAS5B,SAAS,EAAc,GAA+B;CACpD,IAAM,EAAE,SAAM,YAAS,UAAO,WAAQ,SAAM,aAAU,OAAO,GAAU,GAAG,MAAS,KAAS,EAAE,EAExF,IAAsB,EAAE,GAAG,GAAM;CAGvC,AAAI,MACF,EAAO,OAAO;CAGhB,IAAM,IAA+C,EAAE,EAEjD,IAAW,OAAO,GAAM,SAAU,UAClC,IAAgB,OAAO,GAAM,cAAe,UAC5C,IAAqB,OAAO,GAAM,UAAW;CAInD,AAFI,MAAU,EAAW,QAAQ,EAAK,QAClC,MAAe,EAAW,aAAa,EAAK,aAC5C,MAAoB,EAAW,SAAS,EAAK;CAEjD,IAAM,IAAe,CAAC,KAAY,CAAC;CAenC,AAbI,KAAgB,CAAC,MACnB,EAAW,SAAS,KAGlB,OAAO,KAAK,EAAW,CAAC,SAAS,MACnC,EAAO,OAAO,IAIZ,CAAC,KAAgB,CAAC,MACpB,EAAO,OAAO,QAGZ,OAAO,KAAa,WACtB,EAAO,WAAW,IACT,MACT,EAAO,WAAW;CAIpB,IAAM,IAAiD,EACrD,GAAI,KAAY,EAAE,EACnB;CAcD,OAZI,MACF,EAAY,YAAY,UAGtB,MAAS,EAAY,UAAU,IAC/B,MAAU,KAAA,MAAW,EAAY,QAAQ,IACzC,MAAW,KAAA,MAAW,EAAY,SAAS,IAE3C,OAAO,KAAK,EAAY,CAAC,SAAS,MACpC,EAAO,QAAQ,IAGV;;AAMT,SAAgB,EAAU,GAAe,GAAiC;CACxE,IAAM,IAAK,SAAS,cAAc,MAAM;CAQxC,OANA,EAAiB,GAA8B,EAAc,EAAM,CAAC,EAEhE,OAAO,KAAS,aAClB,EAAG,cAAc,IAGZ;;AAMT,SAAgB,EAAY,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { i as e, n as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/media/video/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
VIDEO_SELECTOR: () => i,
|
|
5
|
+
VIDEO_TAG: () => r,
|
|
6
|
+
createVideo: () => o,
|
|
7
|
+
enhanceVideos: () => s
|
|
8
|
+
}), r = "video", i = "video";
|
|
9
|
+
function a(e) {
|
|
10
|
+
if (!e) return;
|
|
11
|
+
let { aria: t, src: n, controls: r, autoplay: i, loop: a, muted: o, playsInline: s, preload: c, poster: l, width: u, height: d, crossOrigin: f, controlsList: p, disablePictureInPicture: m, disableRemotePlayback: h, referrerPolicy: g, fetchPriority: _, ...v } = e, y = { ...v };
|
|
12
|
+
if (t) {
|
|
13
|
+
let e = {};
|
|
14
|
+
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 && (y.aria = e);
|
|
15
|
+
}
|
|
16
|
+
let b = {};
|
|
17
|
+
return typeof p == "string" && (b.controlslist = p), Array.isArray(p) && (b.controlslist = p.join(" ")), typeof g == "string" && (b.referrerpolicy = g), typeof _ == "string" && (b.fetchpriority = _), typeof m == "boolean" && (b.disablepictureinpicture = m), typeof h == "boolean" && (b.disableremoteplayback = h), Object.keys(b).length > 0 && (y.attrs = b), y;
|
|
18
|
+
}
|
|
19
|
+
function o(e, n) {
|
|
20
|
+
let i = t(r, a(n), e);
|
|
21
|
+
return n ? (typeof n.src == "string" && (i.src = n.src), typeof n.controls == "boolean" && (i.controls = n.controls), typeof n.autoplay == "boolean" && (i.autoplay = n.autoplay), typeof n.loop == "boolean" && (i.loop = n.loop), n.autoplay === !0 && typeof n.muted != "boolean" ? i.muted = !0 : typeof n.muted == "boolean" && (i.muted = n.muted), typeof n.playsInline == "boolean" && (i.playsInline = n.playsInline), typeof n.preload == "string" && (i.preload = n.preload), typeof n.poster == "string" && (i.poster = n.poster), typeof n.width == "number" && (i.width = n.width), typeof n.height == "number" && (i.height = n.height), typeof n.crossOrigin == "string" && (i.crossOrigin = n.crossOrigin), i) : i;
|
|
22
|
+
}
|
|
23
|
+
function s(e = document) {}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { i as VIDEO_SELECTOR, r as VIDEO_TAG, o as createVideo, s as enhanceVideos, n as t };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.js","names":[],"sources":["../../../../../src/elements/media/video/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Video element helpers.\n *\n * @remarks\n * The video element (`<video>`) embeds media playback.\n *\n * Best-practice guidance:\n * - Provide user controls (`controls`) unless you have a very strong reason not to.\n * - Autoplay is often blocked when audio is present; if `autoplay` is enabled,\n * videos commonly need to be `muted` to actually autoplay in modern browsers.\n * - Prefer captions/subtitles via `<track>` for accessibility when relevant.\n * - Avoid obsolete attributes; use modern properties/attributes and CSS instead.\n *\n * This module provides small, framework-agnostic helpers so consumers can:\n * - create video 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 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 * Token values for the `preload` attribute.\n *\n * @category Attributes\n */\nexport type VideoPreload = 'none' | 'metadata' | 'auto';\n\n/**\n * Token values for the `crossorigin` attribute.\n *\n * @category Attributes\n */\nexport type VideoCrossOrigin = 'anonymous' | 'use-credentials';\n\n/**\n * Token values for the `referrerpolicy` attribute.\n *\n * @category Attributes\n */\nexport type VideoReferrerPolicy =\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 * Token values for the `fetchpriority` attribute (where supported).\n *\n * @category Attributes\n */\nexport type VideoFetchPriority = 'high' | 'low' | 'auto';\n\n/**\n * The semantic tag name for video.\n *\n * @category Constants\n */\nexport const VIDEO_TAG = 'video' as const;\n\n/**\n * A CSS selector targeting video elements.\n *\n * @category Constants\n */\nexport const VIDEO_SELECTOR = 'video';\n\n/**\n * Attribute bag for video creation/enhancement.\n *\n * @remarks\n * Video elements accept standard HTML global attributes, plus media-specific\n * attributes and properties.\n *\n * pkgn-sol supports a structured ARIA input for common ARIA fields, mapped into\n * {@link GlobalAttrs.aria} without changing pkgn-sol's core DOM helpers.\n *\n * @category Attributes\n */\nexport type VideoAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n\n /**\n * Source URL for the video.\n */\n src?: string;\n\n /**\n * Whether the browser should offer playback controls to the user.\n */\n controls?: boolean;\n\n /**\n * Whether the video should start playing automatically.\n *\n * @remarks\n * Autoplay is frequently blocked unless the video is muted.\n */\n autoplay?: boolean;\n\n /**\n * Whether the video should loop after ending.\n */\n loop?: boolean;\n\n /**\n * Whether the audio should be muted.\n */\n muted?: boolean;\n\n /**\n * Hint that playback should happen inline on mobile browsers (not fullscreen).\n */\n playsInline?: boolean;\n\n /**\n * Preload behavior hint.\n */\n preload?: VideoPreload;\n\n /**\n * Poster image URL shown before playback starts.\n */\n poster?: string;\n\n /**\n * Display width in CSS pixels (attribute-reflected).\n */\n width?: number;\n\n /**\n * Display height in CSS pixels (attribute-reflected).\n */\n height?: number;\n\n /**\n * CORS setting for fetching the media.\n */\n crossOrigin?: VideoCrossOrigin;\n\n /**\n * Feature-control tokens for the video UI.\n *\n * @remarks\n * Maps to the `controlslist` attribute (space-separated tokens).\n */\n controlsList?: string[] | string;\n\n /**\n * Disable Picture-in-Picture where supported.\n */\n disablePictureInPicture?: boolean;\n\n /**\n * Disable remote playback where supported.\n */\n disableRemotePlayback?: boolean;\n\n /**\n * Referrer policy for fetching the media.\n */\n referrerPolicy?: VideoReferrerPolicy;\n\n /**\n * Fetch priority hint (where supported).\n */\n fetchPriority?: VideoFetchPriority;\n};\n\n/**\n * Normalize {@link VideoAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @param attrs - The video attributes.\n * @returns A {@link GlobalAttrs} object, or `undefined` if no attrs were provided.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: VideoAttrs): GlobalAttrs | undefined {\n if (!attrs) return undefined;\n\n const {\n aria,\n src,\n controls,\n autoplay,\n loop,\n muted,\n playsInline,\n preload,\n poster,\n width,\n height,\n crossOrigin,\n controlsList,\n disablePictureInPicture,\n disableRemotePlayback,\n referrerPolicy,\n fetchPriority,\n ...rest\n } = attrs;\n\n const mapped: GlobalAttrs = { ...rest };\n\n if (aria) {\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 if (Object.keys(mappedAria).length > 0) mapped.aria = mappedAria;\n }\n\n // Only attach attrs if we actually have any element-specific attributes to set\n // via dom.ts (keeps output stable and avoids needless objects).\n const elementAttrs: NonNullable<GlobalAttrs['attrs']> = {};\n\n if (typeof controlsList === 'string') elementAttrs.controlslist = controlsList;\n if (Array.isArray(controlsList)) elementAttrs.controlslist = controlsList.join(' ');\n\n if (typeof referrerPolicy === 'string') elementAttrs.referrerpolicy = referrerPolicy;\n if (typeof fetchPriority === 'string') elementAttrs.fetchpriority = fetchPriority;\n\n // Boolean-ish feature flags that don't have reliable reflected properties everywhere.\n if (typeof disablePictureInPicture === 'boolean') {\n elementAttrs.disablepictureinpicture = disablePictureInPicture;\n }\n if (typeof disableRemotePlayback === 'boolean') {\n elementAttrs.disableremoteplayback = disableRemotePlayback;\n }\n\n if (Object.keys(elementAttrs).length > 0) mapped.attrs = elementAttrs;\n\n // The rest are applied as properties after createElement to preserve proper boolean semantics.\n void src;\n void controls;\n void autoplay;\n void loop;\n void muted;\n void playsInline;\n void preload;\n void poster;\n void width;\n void height;\n void crossOrigin;\n\n return mapped;\n}\n\n/**\n * Create a video 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 * - If `autoplay` is enabled and `muted` is not explicitly provided, pkgn-sol will\n * default `muted` to `true` to align with common browser autoplay policies.\n *\n * @param text - Optional fallback text shown if video is unsupported.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<video>` element.\n *\n * @example\n * ```ts\n * import { createVideo } from \"@lnpg/pkgn-sol/elements/media/video\";\n *\n * document.body.appendChild(\n * createVideo(\"Your browser does not support video.\", {\n * src: \"/media/intro.mp4\",\n * controls: true,\n * preload: \"metadata\",\n * })\n * );\n * ```\n *\n * @category DOM\n */\nexport function createVideo(text?: string, attrs?: VideoAttrs): HTMLVideoElement {\n const el = createElement(VIDEO_TAG, toGlobalAttrs(attrs), text) as unknown as HTMLVideoElement;\n\n if (!attrs) return el;\n\n if (typeof attrs.src === 'string') el.src = attrs.src;\n\n if (typeof attrs.controls === 'boolean') el.controls = attrs.controls;\n\n if (typeof attrs.autoplay === 'boolean') el.autoplay = attrs.autoplay;\n if (typeof attrs.loop === 'boolean') el.loop = attrs.loop;\n\n // Practical default: autoplay usually requires muted.\n if (attrs.autoplay === true && typeof attrs.muted !== 'boolean') {\n el.muted = true;\n } else if (typeof attrs.muted === 'boolean') {\n el.muted = attrs.muted;\n }\n\n if (typeof attrs.playsInline === 'boolean')\n (el as unknown as { playsInline?: boolean }).playsInline = attrs.playsInline;\n\n if (typeof attrs.preload === 'string') el.preload = attrs.preload;\n\n if (typeof attrs.poster === 'string') el.poster = attrs.poster;\n\n if (typeof attrs.width === 'number') el.width = attrs.width;\n if (typeof attrs.height === 'number') el.height = attrs.height;\n\n if (typeof attrs.crossOrigin === 'string') el.crossOrigin = attrs.crossOrigin;\n\n return el;\n}\n\n/**\n * Enhance video 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 enhanceVideos(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for video.\n void root;\n}\n"],"mappings":";;;;;;;IAgGa,IAAY,SAOZ,IAAiB;AAmH9B,SAAS,EAAc,GAA6C;CAClE,IAAI,CAAC,GAAO;CAEZ,IAAM,EACJ,SACA,QACA,aACA,aACA,SACA,UACA,gBACA,YACA,WACA,UACA,WACA,gBACA,iBACA,4BACA,0BACA,mBACA,kBACA,GAAG,MACD,GAEE,IAAsB,EAAE,GAAG,GAAM;CAEvC,IAAI,GAAM;EACR,IAAM,IAA+C,EAAE;EAMvD,AAJI,OAAO,EAAK,SAAU,aAAU,EAAW,QAAQ,EAAK,QACxD,OAAO,EAAK,cAAe,aAAU,EAAW,aAAa,EAAK,aAClE,OAAO,EAAK,UAAW,cAAW,EAAW,SAAS,EAAK,SAE3D,OAAO,KAAK,EAAW,CAAC,SAAS,MAAG,EAAO,OAAO;;CAKxD,IAAM,IAAkD,EAAE;CA+B1D,OA7BI,OAAO,KAAiB,aAAU,EAAa,eAAe,IAC9D,MAAM,QAAQ,EAAa,KAAE,EAAa,eAAe,EAAa,KAAK,IAAI,GAE/E,OAAO,KAAmB,aAAU,EAAa,iBAAiB,IAClE,OAAO,KAAkB,aAAU,EAAa,gBAAgB,IAGhE,OAAO,KAA4B,cACrC,EAAa,0BAA0B,IAErC,OAAO,KAA0B,cACnC,EAAa,wBAAwB,IAGnC,OAAO,KAAK,EAAa,CAAC,SAAS,MAAG,EAAO,QAAQ,IAelD;;AAiCT,SAAgB,EAAY,GAAe,GAAsC;CAC/E,IAAM,IAAK,EAAc,GAAW,EAAc,EAAM,EAAE,EAAK;CA8B/D,OA5BK,KAED,OAAO,EAAM,OAAQ,aAAU,EAAG,MAAM,EAAM,MAE9C,OAAO,EAAM,YAAa,cAAW,EAAG,WAAW,EAAM,WAEzD,OAAO,EAAM,YAAa,cAAW,EAAG,WAAW,EAAM,WACzD,OAAO,EAAM,QAAS,cAAW,EAAG,OAAO,EAAM,OAGjD,EAAM,aAAa,MAAQ,OAAO,EAAM,SAAU,YACpD,EAAG,QAAQ,KACF,OAAO,EAAM,SAAU,cAChC,EAAG,QAAQ,EAAM,QAGf,OAAO,EAAM,eAAgB,cAC/B,EAA6C,cAAc,EAAM,cAE/D,OAAO,EAAM,WAAY,aAAU,EAAG,UAAU,EAAM,UAEtD,OAAO,EAAM,UAAW,aAAU,EAAG,SAAS,EAAM,SAEpD,OAAO,EAAM,SAAU,aAAU,EAAG,QAAQ,EAAM,QAClD,OAAO,EAAM,UAAW,aAAU,EAAG,SAAS,EAAM,SAEpD,OAAO,EAAM,eAAgB,aAAU,EAAG,cAAc,EAAM,cAE3D,KA5BY;;AAiDrB,SAAgB,EAAc,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { i as e, r as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/responsive/area/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
AREA_SELECTOR: () => i,
|
|
5
|
+
AREA_TAG: () => r,
|
|
6
|
+
createArea: () => o,
|
|
7
|
+
enhanceAreas: () => s
|
|
8
|
+
}), r = "area", i = "area";
|
|
9
|
+
function a(e) {
|
|
10
|
+
let { aria: t, alt: n, href: r, shape: i, coords: a, target: o, download: s, ping: c, rel: l, referrerPolicy: u, hreflang: d, type: f, ...p } = e ?? {}, m = { ...p }, h = {};
|
|
11
|
+
return t && (typeof t.label == "string" && (h.label = t.label), typeof t.labelledby == "string" && (h.labelledby = t.labelledby), typeof t.hidden == "boolean" && (h.hidden = t.hidden)), Object.keys(h).length > 0 && (m.aria = h), m.attrs = { ...m.attrs ?? {} }, typeof r == "string" && r.length > 0 && (m.attrs.href = r, m.attrs.alt = typeof n == "string" ? n : ""), i && (m.attrs.shape = i), a && (m.attrs.coords = a), o && (m.attrs.target = o), typeof s == "boolean" && (m.attrs.download = s), typeof s == "string" && (m.attrs.download = s), c && (m.attrs.ping = c), l && (m.attrs.rel = l), u && (m.attrs.referrerpolicy = u), d && (m.attrs.hreflang = d), f && (m.attrs.type = f), m;
|
|
12
|
+
}
|
|
13
|
+
function o(e) {
|
|
14
|
+
return t(r, a(e));
|
|
15
|
+
}
|
|
16
|
+
function s(e = document) {}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { i as AREA_SELECTOR, r as AREA_TAG, o as createArea, s as enhanceAreas, n as t };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=area.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area.js","names":[],"sources":["../../../../../src/elements/responsive/area/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Area element helpers.\n *\n * @remarks\n * The area element (`<area>`) defines a hyperlink or dead region within an image map.\n * It is used inside a `<map>` element to define clickable (or non-clickable) areas.\n *\n * Best-practice guidance:\n * - Use `<area>` only within `<map>` and pair with an `<img usemap=\"...\">`.\n * - Prefer meaningful alternative text for clickable regions (screen readers rely on it).\n * - Keep shapes and coordinates accurate; imprecise maps are a usability disaster.\n *\n * Spec-aware pkgn-sol behavior:\n * - If `href` is provided: `alt` is required, and pkgn-sol will ensure an `alt` attribute\n * exists (defaults to empty string if not provided).\n * - If `href` is not provided: `alt` must be omitted, and pkgn-sol will omit it.\n *\n * Global attributes are applied via pkgn-sol's hardened DOM helpers (`dom.ts`), which block:\n * - inline event handler attributes (e.g. `onclick`)\n * - the raw `style` attribute string (use `style` object instead)\n *\n * This module has no side effects and does not mutate the DOM unless you call its functions.\n *\n * @module\n * @category Elements\n */\n\nimport { createVoidElement, type ElementOf, type GlobalAttrs } from '../../../ts/dom';\n\n/**\n * Structured ARIA input supported by pkgn-sol element factories.\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 area elements.\n *\n * @category Constants\n */\nexport const AREA_TAG = 'area' as const;\n\n/**\n * A CSS selector targeting area elements.\n *\n * @category Constants\n */\nexport const AREA_SELECTOR = 'area';\n\n/**\n * Enumerated shape values for `<area>`.\n *\n * @remarks\n * The default (when omitted) is effectively `rect` in HTML's image map processing model,\n * but pkgn-sol does not force a default; it passes through what you provide.\n *\n * @category Types\n */\nexport type AreaShape = 'rect' | 'circle' | 'poly' | 'default';\n\n/**\n * Area-specific attributes.\n *\n * @remarks\n * `<area>` largely mirrors hyperlink-related attributes when `href` is present.\n * pkgn-sol enforces the spec rule around `alt`:\n * - `href` present => `alt` must be present (pkgn-sol ensures it exists)\n * - `href` absent => `alt` must be omitted (pkgn-sol omits it)\n *\n * @category Attributes\n */\nexport type AreaAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Alternative text for the area.\n *\n * @remarks\n * Only applied when `href` is present. If `href` is present and `alt` is not\n * provided, pkgn-sol defaults it to `\"\"`. If `href` is absent, pkgn-sol omits `alt`\n * entirely.\n */\n alt?: string;\n\n /**\n * Link target URL. When present, the area represents a hyperlink.\n */\n href?: string;\n\n /**\n * The shape of the area. Common values: `rect`, `circle`, `poly`, `default`.\n */\n shape?: AreaShape;\n\n /**\n * Coordinates defining the area geometry. Interpretation depends on `shape`.\n */\n coords?: string;\n\n /**\n * Where to display the linked URL (e.g. `_blank`).\n */\n target?: string;\n\n /**\n * Whether to download the linked resource instead of navigating.\n *\n * @remarks\n * May be a boolean (attribute presence) or a suggested filename.\n */\n download?: boolean | string;\n\n /**\n * A space-separated list of URLs to ping when the link is followed.\n */\n ping?: string;\n\n /**\n * Relationship of the target object to the linking object.\n */\n rel?: string;\n\n /**\n * Referrer policy for the link.\n */\n referrerPolicy?: string;\n\n /**\n * Language of the linked resource (BCP 47 tag).\n */\n hreflang?: string;\n\n /**\n * MIME type of the linked resource (advisory).\n */\n type?: string;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\nfunction toGlobalAttrs(attrs?: AreaAttrs): GlobalAttrs {\n const {\n aria,\n alt,\n href,\n shape,\n coords,\n target,\n download,\n ping,\n rel,\n referrerPolicy,\n hreflang,\n type,\n ...rest\n } = attrs ?? {};\n\n const mapped: GlobalAttrs = { ...rest };\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 if (Object.keys(mappedAria).length > 0) {\n mapped.aria = mappedAria;\n }\n\n // Apply element-specific attributes via the safe attrs escape hatch.\n mapped.attrs = { ...(mapped.attrs ?? {}) };\n\n const hasHref = typeof href === 'string' && href.length > 0;\n\n if (hasHref) {\n mapped.attrs.href = href;\n\n // Spec: if href is present, alt must be present.\n mapped.attrs.alt = typeof alt === 'string' ? alt : '';\n } else {\n // Spec: if href is absent, alt must be omitted.\n // We intentionally do not set `alt` here even if provided.\n }\n\n if (shape) mapped.attrs.shape = shape;\n if (coords) mapped.attrs.coords = coords;\n if (target) mapped.attrs.target = target;\n\n if (typeof download === 'boolean') mapped.attrs.download = download;\n if (typeof download === 'string') mapped.attrs.download = download;\n\n if (ping) mapped.attrs.ping = ping;\n if (rel) mapped.attrs.rel = rel;\n if (referrerPolicy) mapped.attrs.referrerpolicy = referrerPolicy;\n if (hreflang) mapped.attrs.hreflang = hreflang;\n if (type) mapped.attrs.type = type;\n\n return mapped;\n}\n\n/**\n * Create an area element with spec-aware `alt` handling.\n *\n * @remarks\n * - `<area>` is a void element (no text content).\n * - If `href` is present, pkgn-sol ensures `alt` is present (defaults to `\"\"`).\n * - If `href` is absent, pkgn-sol omits `alt`.\n *\n * @category DOM\n */\nexport function createArea(attrs?: AreaAttrs): ElementOf<typeof AREA_TAG> {\n return createVoidElement(AREA_TAG, toGlobalAttrs(attrs));\n}\n\n/**\n * Enhance area elements within a given root.\n *\n * @remarks\n * No runtime behaviour in v0.1.0.\n *\n * @category Enhancement\n */\nexport function enhanceAreas(root: ParentNode = document): void {\n void root;\n}\n"],"mappings":";;;;;;;IAwDa,IAAW,QAOX,IAAgB;AA8F7B,SAAS,EAAc,GAAgC;CACrD,IAAM,EACJ,SACA,QACA,SACA,UACA,WACA,WACA,aACA,SACA,QACA,mBACA,aACA,SACA,GAAG,MACD,KAAS,EAAE,EAET,IAAsB,EAAE,GAAG,GAAM,EAEjC,IAA+C,EAAE;CAwCvD,OAtCI,MACE,OAAO,EAAK,SAAU,aAAU,EAAW,QAAQ,EAAK,QACxD,OAAO,EAAK,cAAe,aAAU,EAAW,aAAa,EAAK,aAClE,OAAO,EAAK,UAAW,cAAW,EAAW,SAAS,EAAK,UAG7D,OAAO,KAAK,EAAW,CAAC,SAAS,MACnC,EAAO,OAAO,IAIhB,EAAO,QAAQ,EAAE,GAAI,EAAO,SAAS,EAAE,EAAG,EAE1B,OAAO,KAAS,YAAY,EAAK,SAAS,MAGxD,EAAO,MAAM,OAAO,GAGpB,EAAO,MAAM,MAAM,OAAO,KAAQ,WAAW,IAAM,KAMjD,MAAO,EAAO,MAAM,QAAQ,IAC5B,MAAQ,EAAO,MAAM,SAAS,IAC9B,MAAQ,EAAO,MAAM,SAAS,IAE9B,OAAO,KAAa,cAAW,EAAO,MAAM,WAAW,IACvD,OAAO,KAAa,aAAU,EAAO,MAAM,WAAW,IAEtD,MAAM,EAAO,MAAM,OAAO,IAC1B,MAAK,EAAO,MAAM,MAAM,IACxB,MAAgB,EAAO,MAAM,iBAAiB,IAC9C,MAAU,EAAO,MAAM,WAAW,IAClC,MAAM,EAAO,MAAM,OAAO,IAEvB;;AAaT,SAAgB,EAAW,GAA+C;CACxE,OAAO,EAAkB,GAAU,EAAc,EAAM,CAAC;;AAW1D,SAAgB,EAAa,IAAmB,UAAgB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { i as e, n as t } from "../../../chunks/dom.js";
|
|
2
|
+
//#region src/elements/responsive/map/index.ts
|
|
3
|
+
var n = /* @__PURE__ */ e({
|
|
4
|
+
MAP_SELECTOR: () => "map",
|
|
5
|
+
MAP_TAG: () => "map",
|
|
6
|
+
createMap: () => s,
|
|
7
|
+
enhanceMaps: () => c
|
|
8
|
+
}), r = "map", i = "map";
|
|
9
|
+
function a(e) {
|
|
10
|
+
let t = String(e).trim();
|
|
11
|
+
if (t.length === 0) throw Error("Map \"name\" must be a non-empty string.");
|
|
12
|
+
if (/\s/.test(t)) throw Error("Map \"name\" must not contain whitespace.");
|
|
13
|
+
}
|
|
14
|
+
function o(e) {
|
|
15
|
+
let { aria: t, name: n, ...r } = e ?? {}, i = { ...r.attrs ?? {} }, o = (e, t) => {
|
|
16
|
+
t !== void 0 && (Object.prototype.hasOwnProperty.call(i, e) || (i[e] = t));
|
|
17
|
+
}, s = typeof n == "string" ? n : typeof r.id == "string" ? r.id : "map";
|
|
18
|
+
if (a(s), typeof n == "string" && typeof r.id == "string" && n !== r.id) throw Error("Map \"id\" must match \"name\" when both are provided.");
|
|
19
|
+
o("name", s);
|
|
20
|
+
let c = {};
|
|
21
|
+
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));
|
|
22
|
+
let l = {
|
|
23
|
+
...r,
|
|
24
|
+
attrs: i
|
|
25
|
+
};
|
|
26
|
+
return Object.keys(c).length > 0 && (l.aria = c), l;
|
|
27
|
+
}
|
|
28
|
+
function s(e, n) {
|
|
29
|
+
return t("map", o(n), e);
|
|
30
|
+
}
|
|
31
|
+
function c(e = document) {}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { i as MAP_SELECTOR, r as MAP_TAG, s as createMap, c as enhanceMaps, n as t };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.js","names":[],"sources":["../../../../../src/elements/responsive/map/index.ts"],"sourcesContent":["/**\n * pkgn-sol Design Foundation: Map element helpers.\n *\n * @remarks\n * The map element (`<map>`) defines an image map: a set of clickable regions\n * (typically via descendant `<area>` elements) that can be referenced from an\n * `<img>` (or other image-like element) using the `usemap` attribute.\n *\n * Best-practice guidance:\n * - Always provide a meaningful, unique `name` for the map.\n * - Use `<area>` children to define interactive regions.\n * - Keep `name` free of whitespace and ensure it is unique within the document/tree.\n * - If you also set `id`, it should match `name` (spec requirement).\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: `<map>` element\n * - WHATWG HTML: map element and `name` requirements\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 map.\n *\n * @category Constants\n */\nexport const MAP_TAG = 'map' as const;\n\n/**\n * A CSS selector targeting map elements.\n *\n * @category Constants\n */\nexport const MAP_SELECTOR = 'map';\n\n/**\n * Attribute bag for map creation/enhancement.\n *\n * @remarks\n * Element-specific attributes:\n * - `name` (required by spec for referencing via `usemap`)\n *\n * Spec notes:\n * - `name` must be present, non-empty, and contain no ASCII whitespace.\n * - If `id` is also specified, it must match `name`.\n *\n * pkgn-sol behavior:\n * - If `name` is omitted, pkgn-sol provides a deterministic fallback:\n * - uses `id` if provided\n * - otherwise defaults to `\"map\"`\n * Callers should set a unique name in real documents.\n *\n * @category Attributes\n */\nexport type MapAttrs = Omit<GlobalAttrs, 'aria'> & {\n /**\n * Name of the image map.\n *\n * @remarks\n * Used by `<img usemap=\"#NAME\">` to reference this `<map>`.\n */\n name?: string;\n\n /**\n * Structured ARIA fields mapped into `aria-*` attributes.\n */\n aria?: StructuredAria;\n};\n\n/**\n * Validate a map `name` value according to spec constraints.\n *\n * @param name - The name to validate.\n * @throws Error if the name is empty or contains whitespace.\n *\n * @category Internal\n */\nfunction assertValidMapName(name: string): void {\n const raw = String(name);\n const trimmed = raw.trim();\n\n if (trimmed.length === 0) {\n throw new Error('Map \"name\" must be a non-empty string.');\n }\n\n // Spec: no ASCII whitespace. We conservatively reject any whitespace.\n if (/\\s/.test(trimmed)) {\n throw new Error('Map \"name\" must not contain whitespace.');\n }\n}\n\n/**\n * Normalize {@link MapAttrs} into {@link GlobalAttrs} for `dom.ts`.\n *\n * @remarks\n * - Preserves caller-provided `attrs` escape hatch (still validated by `dom.ts`).\n * - Applies/validates the required `name` attribute deterministically.\n * - Enforces the spec rule that `id` and `name` must match if both are provided.\n *\n * @param attrs - The map attributes.\n * @returns A {@link GlobalAttrs} object.\n *\n * @category Internal\n */\nfunction toGlobalAttrs(attrs?: MapAttrs): GlobalAttrs {\n const a: MapAttrs = attrs ?? {};\n\n const { aria, name, ...rest } = a;\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 // Determine name:\n // - explicit `name`\n // - else use `id` if present (and ensure spec match if both were provided)\n // - else deterministic fallback \"map\"\n const resolvedName =\n typeof name === 'string' ? name : typeof rest.id === 'string' ? rest.id : 'map';\n\n assertValidMapName(resolvedName);\n\n if (typeof name === 'string' && typeof rest.id === 'string' && name !== rest.id) {\n throw new Error('Map \"id\" must match \"name\" when both are provided.');\n }\n\n setIfUnset('name', resolvedName);\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 map element with optional text content and attributes.\n *\n * @remarks\n * While `<map>` typically contains `<area>` elements (not text), pkgn-sol still\n * supports optional `text` for:\n * - fallback content\n * - simple labelling in environments that inspect textContent\n *\n * - 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.\n * @param attrs - Optional attributes to apply.\n * @returns The created `<map>` element.\n *\n * @example\n * ```ts\n * import { createMap } from \"@lnpg/pkgn-sol/elements/responsive/map\";\n *\n * const m = createMap(undefined, { name: \"product-map\" });\n * ```\n *\n * @category DOM\n */\nexport function createMap(text?: string, attrs?: MapAttrs): ElementOf<typeof MAP_TAG> {\n return createElement(MAP_TAG, toGlobalAttrs(attrs), text);\n}\n\n/**\n * Enhance map 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 enhanceMaps(root: ParentNode = document): void {\n // v0.1.0: no runtime behavior for map.\n void root;\n}\n"],"mappings":";;;;;;;IAgEa,IAAU,OAOV,IAAe;AA4C5B,SAAS,EAAmB,GAAoB;CAE9C,IAAM,IADM,OAAO,EACH,CAAI,MAAM;CAE1B,IAAI,EAAQ,WAAW,GACrB,MAAU,MAAM,2CAAyC;CAI3D,IAAI,KAAK,KAAK,EAAQ,EACpB,MAAU,MAAM,4CAA0C;;AAiB9D,SAAS,EAAc,GAA+B;CAGpD,IAAM,EAAE,SAAM,SAAM,GAAG,MAFH,KAAS,EAAE,EAIzB,IAAyC,EAAE,GAAI,EAAK,SAAS,EAAE,EAAG,EAElE,KAAc,GAAa,MAAmC;EAC9D,MAAM,KAAA,MACN,OAAO,UAAU,eAAe,KAAK,GAAa,EAAI,KAC1D,EAAY,KAAO;IAOf,IACJ,OAAO,KAAS,WAAW,IAAO,OAAO,EAAK,MAAO,WAAW,EAAK,KAAK;CAI5E,IAFA,EAAmB,EAAa,EAE5B,OAAO,KAAS,YAAY,OAAO,EAAK,MAAO,YAAY,MAAS,EAAK,IAC3E,MAAU,MAAM,yDAAqD;CAGvE,EAAW,QAAQ,EAAa;CAEhC,IAAM,IAA+C,EAAE;CACvD,AAAI,MACE,OAAO,EAAK,SAAU,aAAU,EAAW,QAAQ,EAAK,QACxD,OAAO,EAAK,cAAe,aAAU,EAAW,aAAa,EAAK,aAClE,OAAO,EAAK,UAAW,cAAW,EAAW,SAAS,EAAK;CAGjE,IAAM,IAAoB;EAAE,GAAG;EAAM,OAAO;EAAa;CAMzD,OAJI,OAAO,KAAK,EAAW,CAAC,SAAS,MACnC,EAAK,OAAO,IAGP;;AA8BT,SAAgB,EAAU,GAAe,GAA6C;CACpF,OAAO,EAAA,OAAuB,EAAc,EAAM,EAAE,EAAK;;AAa3D,SAAgB,EAAY,IAAmB,UAAgB"}
|