@mattilsynet/design 0.1.0 → 0.2.1
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/mtds/alert/alert.stories.d.ts +3 -1
- package/mtds/badge/badge.stories.d.ts +7 -0
- package/mtds/breadcrumbs/breadcrumbs.stories.d.ts +1 -1
- package/mtds/button/button.stories.d.ts +6 -6
- package/mtds/field/field.stories.d.ts +3 -3
- package/mtds/fieldset/fieldset.stories.d.ts +1 -1
- package/mtds/illustrations/illustrations.json +59 -0
- package/mtds/index.iife.js +2 -2
- package/mtds/index.iife.js.map +1 -1
- package/mtds/input/input.stories.d.ts +4 -0
- package/mtds/logo/logo.stories.d.ts +1 -0
- package/mtds/modal/modal.stories.d.ts +1 -1
- package/mtds/nanopop.d.ts +49 -0
- package/mtds/nanopop.js +65 -0
- package/mtds/nanopop.js.map +1 -0
- package/mtds/pagination/pagination.stories.d.ts +3 -3
- package/mtds/popover/popover.js +31 -23
- package/mtds/popover/popover.js.map +1 -1
- package/mtds/popover/popover.stories.d.ts +3 -2
- package/mtds/styles.css +1 -2528
- package/mtds/styles.json +30 -30
- package/mtds/styles.module.css.js +38 -38
- package/mtds/table/table.stories.d.ts +1 -1
- package/mtds/tag/tag.stories.d.ts +3 -0
- package/package.json +7 -10
- package/mtds/external/nanopop/dist/nanopop.js +0 -67
- package/mtds/external/nanopop/dist/nanopop.js.map +0 -1
- package/mtds/illustrations/plants/seaweed.svg +0 -3
- /package/mtds/illustrations/{food/apple-cup.svg → apple-cup.svg} +0 -0
- /package/mtds/illustrations/{food/apple.svg → apple.svg} +0 -0
- /package/mtds/illustrations/{food/banana-apple-cup.svg → banana-apple-cup.svg} +0 -0
- /package/mtds/illustrations/{food/banana.svg → banana.svg} +0 -0
- /package/mtds/illustrations/{animals/bird.svg → bird.svg} +0 -0
- /package/mtds/illustrations/{water/drop.svg → drop.svg} +0 -0
- /package/mtds/illustrations/{humans/farmer-inviting.svg → farmer-inviting.svg} +0 -0
- /package/mtds/illustrations/{humans/farmer-pig-plant.svg → farmer-pig-plant.svg} +0 -0
- /package/mtds/illustrations/{humans/farmer-pitchfork.svg → farmer-pitchfork.svg} +0 -0
- /package/mtds/illustrations/{food/farmer-turnip-plant.svg → farmer-turnip-plant.svg} +0 -0
- /package/mtds/illustrations/{water/faucet.svg → faucet.svg} +0 -0
- /package/mtds/illustrations/{aqua/fish.svg → fish.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/flask-perfume.svg → flask-perfume.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/flask-pipette.svg → flask-pipette.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/flask-pump.svg → flask-pump.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/flasks.svg → flasks.svg} +0 -0
- /package/mtds/illustrations/{aqua/flounder.svg → flounder.svg} +0 -0
- /package/mtds/illustrations/{plants/flower-seeds.svg → flower-seeds.svg} +0 -0
- /package/mtds/illustrations/{plants/flower.svg → flower.svg} +0 -0
- /package/mtds/illustrations/{plants/grass-bush.svg → grass-bush.svg} +0 -0
- /package/mtds/illustrations/{humans/inspector.svg → inspector.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/jar.svg → jar.svg} +0 -0
- /package/mtds/illustrations/{humans/meeting-plant.svg → meeting-plant.svg} +0 -0
- /package/mtds/illustrations/{aqua/mussel-1.svg → mussel-1.svg} +0 -0
- /package/mtds/illustrations/{aqua/mussel-2.svg → mussel-2.svg} +0 -0
- /package/mtds/illustrations/{aqua/mussel-3.svg → mussel-3.svg} +0 -0
- /package/mtds/illustrations/{aqua/mussels.svg → mussels.svg} +0 -0
- /package/mtds/illustrations/{plants/oak-leaf.svg → oak-leaf.svg} +0 -0
- /package/mtds/illustrations/{food/pear.svg → pear.svg} +0 -0
- /package/mtds/illustrations/{vision/person-animal-nature-1.svg → person-animal-nature-1.svg} +0 -0
- /package/mtds/illustrations/{vision/person-animal-nature-2.svg → person-animal-nature-2.svg} +0 -0
- /package/mtds/illustrations/{humans/person-apron-bush.svg → person-apron-bush.svg} +0 -0
- /package/mtds/illustrations/{humans/person-apron.svg → person-apron.svg} +0 -0
- /package/mtds/illustrations/{humans/person-arm.svg → person-arm.svg} +0 -0
- /package/mtds/illustrations/{water/person-drop.svg → person-drop.svg} +0 -0
- /package/mtds/illustrations/{water/person-faucet-drop.svg → person-faucet-drop.svg} +0 -0
- /package/mtds/illustrations/{aqua/person-fish-seaweed.svg → person-fish-seaweed.svg} +0 -0
- /package/mtds/illustrations/{aqua/person-fish.svg → person-fish.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/person-flasks.svg → person-flasks.svg} +0 -0
- /package/mtds/illustrations/{humans/person-flower.svg → person-flower.svg} +0 -0
- /package/mtds/illustrations/{food/person-fork-bush.svg → person-fork-bush.svg} +0 -0
- /package/mtds/illustrations/{food/person-ham.svg → person-ham.svg} +0 -0
- /package/mtds/illustrations/{food/person-meat.svg → person-meat.svg} +0 -0
- /package/mtds/illustrations/{humans/person-mobile.svg → person-mobile.svg} +0 -0
- /package/mtds/illustrations/{aqua/person-mussels.svg → person-mussels.svg} +0 -0
- /package/mtds/illustrations/{food/person-pear.svg → person-pear.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/person-tubes.svg → person-tubes.svg} +0 -0
- /package/mtds/illustrations/{animals/pig.svg → pig.svg} +0 -0
- /package/mtds/illustrations/{plants/plant-round-leaves.svg → plant-round-leaves.svg} +0 -0
- /package/mtds/illustrations/{plants/plant.svg → plant.svg} +0 -0
- /package/mtds/illustrations/{aqua/seaweed.svg → seaweed.svg} +0 -0
- /package/mtds/illustrations/{aqua/shrimp.svg → shrimp.svg} +0 -0
- /package/mtds/illustrations/{humans/team.svg → team.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/tube-1.svg → tube-1.svg} +0 -0
- /package/mtds/illustrations/{cosmetics/tube-2.svg → tube-2.svg} +0 -0
- /package/mtds/illustrations/{food/turnip.svg → turnip.svg} +0 -0
- /package/mtds/illustrations/{aqua/water-plant.svg → water-plant.svg} +0 -0
|
@@ -7,4 +7,6 @@ type Story = StoryObj<typeof meta>;
|
|
|
7
7
|
export declare const Default: Story;
|
|
8
8
|
export declare const Variants: Story;
|
|
9
9
|
export declare const Sizes: Story;
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const WithTitle: Story;
|
|
11
|
+
export declare const WithClose: Story;
|
|
12
|
+
export declare const WithButtons: Story;
|
|
@@ -5,11 +5,11 @@ declare const meta: {
|
|
|
5
5
|
export default meta;
|
|
6
6
|
type Story = StoryObj<typeof meta>;
|
|
7
7
|
export declare const Default: Story;
|
|
8
|
-
export declare const Variants: Story;
|
|
9
8
|
export declare const Sizes: Story;
|
|
10
|
-
export declare const Arrows: Story;
|
|
11
|
-
export declare const Icons: Story;
|
|
12
|
-
export declare const Loading: Story;
|
|
13
|
-
export declare const Contextmenu: Story;
|
|
14
9
|
export declare const Pressed: Story;
|
|
15
|
-
export declare const
|
|
10
|
+
export declare const WithArrows: Story;
|
|
11
|
+
export declare const WithIcons: Story;
|
|
12
|
+
export declare const WithLoading: Story;
|
|
13
|
+
export declare const WithMenu: Story;
|
|
14
|
+
export declare const WithTooltip: Story;
|
|
15
|
+
export declare const InMenu: Story;
|
|
@@ -6,6 +6,6 @@ export default meta;
|
|
|
6
6
|
type Story = StoryObj<typeof meta>;
|
|
7
7
|
export declare const Default: Story;
|
|
8
8
|
export declare const Toggles: Story;
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const
|
|
11
|
-
export declare const
|
|
9
|
+
export declare const WithValidation: Story;
|
|
10
|
+
export declare const WithAffixes: Story;
|
|
11
|
+
export declare const WithCount: Story;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bird.svg": ["Landdyr"],
|
|
3
|
+
"pig.svg": ["Landdyr"],
|
|
4
|
+
"fish.svg": ["Akvakultur"],
|
|
5
|
+
"flounder.svg": ["Akvakultur"],
|
|
6
|
+
"mussel-1.svg": ["Akvakultur"],
|
|
7
|
+
"mussel-2.svg": ["Akvakultur"],
|
|
8
|
+
"mussel-3.svg": ["Akvakultur"],
|
|
9
|
+
"mussels.svg": ["Akvakultur"],
|
|
10
|
+
"person-fish-seaweed.svg": ["Mennesker", "Akvakultur"],
|
|
11
|
+
"person-fish.svg": ["Mennesker", "Akvakultur"],
|
|
12
|
+
"person-mussels.svg": ["Mennesker", "Akvakultur"],
|
|
13
|
+
"seaweed.svg": ["Planter", "Akvakultur"],
|
|
14
|
+
"shrimp.svg": ["Akvakultur"],
|
|
15
|
+
"water-plant.svg": ["Akvakultur"],
|
|
16
|
+
"flask-perfume.svg": ["Kosmetikk"],
|
|
17
|
+
"flask-pipette.svg": ["Kosmetikk"],
|
|
18
|
+
"flask-pump.svg": ["Kosmetikk"],
|
|
19
|
+
"flasks.svg": ["Kosmetikk"],
|
|
20
|
+
"jar.svg": ["Kosmetikk"],
|
|
21
|
+
"person-flasks.svg": ["Mennesker", "Kosmetikk"],
|
|
22
|
+
"person-tubes.svg": ["Mennesker", "Kosmetikk"],
|
|
23
|
+
"tube-1.svg": ["Kosmetikk"],
|
|
24
|
+
"tube-2.svg": ["Kosmetikk"],
|
|
25
|
+
"apple-cup.svg": ["Mat"],
|
|
26
|
+
"apple.svg": ["Mat"],
|
|
27
|
+
"banana-apple-cup.svg": ["Mat"],
|
|
28
|
+
"banana.svg": ["Mat"],
|
|
29
|
+
"farmer-turnip-plant.svg": ["Mat"],
|
|
30
|
+
"pear.svg": ["Mat"],
|
|
31
|
+
"person-fork-bush.svg": ["Mennesker", "Mat"],
|
|
32
|
+
"person-ham.svg": ["Mennesker", "Mat"],
|
|
33
|
+
"person-meat.svg": ["Mennesker", "Mat"],
|
|
34
|
+
"person-pear.svg": ["Mennesker", "Mat"],
|
|
35
|
+
"turnip.svg": ["Mat"],
|
|
36
|
+
"farmer-inviting.svg": ["Mennesker"],
|
|
37
|
+
"farmer-pig-plant.svg": ["Mennesker"],
|
|
38
|
+
"farmer-pitchfork.svg": ["Mennesker"],
|
|
39
|
+
"inspector.svg": ["Mennesker"],
|
|
40
|
+
"meeting-plant.svg": ["Mennesker"],
|
|
41
|
+
"person-apron-bush.svg": ["Mennesker"],
|
|
42
|
+
"person-apron.svg": ["Mennesker"],
|
|
43
|
+
"person-arm.svg": ["Mennesker"],
|
|
44
|
+
"person-flower.svg": ["Mennesker"],
|
|
45
|
+
"person-mobile.svg": ["Mennesker"],
|
|
46
|
+
"team.svg": ["Mennesker"],
|
|
47
|
+
"flower-seeds.svg": ["Planter"],
|
|
48
|
+
"flower.svg": ["Planter"],
|
|
49
|
+
"grass-bush.svg": ["Planter"],
|
|
50
|
+
"oak-leaf.svg": ["Planter"],
|
|
51
|
+
"plant-round-leaves.svg": ["Planter"],
|
|
52
|
+
"plant.svg": ["Planter"],
|
|
53
|
+
"person-animal-nature-1.svg": ["Mennesker", "Visjon"],
|
|
54
|
+
"person-animal-nature-2.svg": ["Mennesker", "Visjon"],
|
|
55
|
+
"drop.svg": ["Drikkevann"],
|
|
56
|
+
"faucet.svg": ["Drikkevann"],
|
|
57
|
+
"person-drop.svg": ["Mennesker", "Drikkevann"],
|
|
58
|
+
"person-faucet-drop.svg": ["Mennesker", "Drikkevann"]
|
|
59
|
+
}
|
package/mtds/index.iife.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var mtds=function(
|
|
1
|
+
var mtds=function(u){"use strict";const z="_alert_zkihy_1 _ds-alert_14y6r_1",w="_avatar_zkihy_1 _ds-avatar_14y6r_1",C="_breadcrumbs_zkihy_1 _ds-breadcrumbs_14y6r_1",E="_button_zkihy_1 _ds-button_14y6r_1",$="_card_zkihy_1 _ds-card_14y6r_1",M="_chip_zkihy_1 _ds-chip_14y6r_1",I="_details_zkihy_1 _ds-details_14y6r_1",T="_errorsummary_zkihy_1 _ds-error-summary_14y6r_1",L="_field_zkihy_1 _ds-field_14y6r_1",O="_fieldChildAdded_zkihy_1",N="_affixes_zkihy_1 _ds-field-affixes_14y6r_1",B="_count_zkihy_1",x="_fieldset_zkihy_1 _ds-fieldset_14y6r_1",D="_fieldsetValidationAdded_zkihy_1",F="_input_zkihy_1 _ds-input_14y6r_1",P="_grid_zkihy_1",R="_flex_zkihy_1",V="_box_zkihy_1",H="_link_zkihy_1",W="_logo_zkihy_1 _ds-focus_14y6r_1",U="_modal_zkihy_1 _ds-modal_14y6r_1",j="_pagination_zkihy_1 _ds-pagination_14y6r_1",K="_popover_zkihy_1",q="_table_zkihy_1 _ds-table_14y6r_1",J="_scrollShadow_zkihy_1",Q="_tableChildAdded_zkihy_1",X="_tabs_zkihy_1",Y="_tag_zkihy_1 _ds-tag_14y6r_1",G="_validation_zkihy_1 _ds-validation-message_14y6r_1",Z="_body_zkihy_73",l={alert:z,avatar:w,breadcrumbs:C,button:E,card:$,chip:M,details:I,errorsummary:T,field:L,fieldChildAdded:O,affixes:N,count:B,fieldset:x,fieldsetValidationAdded:D,input:F,grid:P,flex:R,box:V,link:H,logo:W,modal:U,pagination:j,popover:K,table:q,scrollShadow:J,tableChildAdded:Q,tabs:X,tag:Y,validation:G,body:Z},vt=Object.freeze(Object.defineProperty({__proto__:null,affixes:N,alert:z,avatar:w,body:Z,box:V,breadcrumbs:C,button:E,card:$,chip:M,count:B,default:l,details:I,errorsummary:T,field:L,fieldChildAdded:O,fieldset:x,fieldsetValidationAdded:D,flex:R,grid:P,input:F,link:H,logo:W,modal:U,pagination:j,popover:K,scrollShadow:J,table:q,tableChildAdded:Q,tabs:X,tag:Y,validation:G},Symbol.toStringTag,{value:"Module"})),g=typeof window<"u"&&typeof document<"u",r={capture:!0,passive:!0};let kt=0;const At=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function y(t){return t.id||(t.id=`${At}${++kt}`),t.id}const tt=(t,o,e)=>{for(const i of e[0].split(","))e[0]=i,Element.prototype[`${t}EventListener`].apply(o,e)},f=(t,...o)=>tt("add",t,o),_=(t,...o)=>tt("remove",t,o),k=(t,o)=>{let e=0;const i=n=>{n.animationName===t&&(cancelAnimationFrame(e),e=requestAnimationFrame(o))};return{observe:n=>f(n,"animationend",i,r),disconnect:n=>_(n,"animationstart",i,r)}},A=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),St=l.field.split(" ")[0],ot=l.validation.split(" "),zt=ot[0],et=new WeakMap;function wt(t){for(const o of t){const e=[],i=[];let n=null,a=!0;for(const s of o.getElementsByTagName("*"))s instanceof HTMLLabelElement?e.push(s):A(s)?n=s:s.classList.contains(zt)?(a=s.getAttribute("data-color")==="success",i.unshift(y(s))):s instanceof HTMLParagraphElement&&i.push(y(s));if(n)for(const s of e)s.htmlFor=y(n);n&&it(n),n==null||n.setAttribute("aria-describedby",i.join(" ")),n==null||n.setAttribute("aria-invalid",`${!a}`)}}function nt({target:t}){A(t)&&it(t)}function it(t){const o=t==null?void 0:t.nextElementSibling,e=o==null?void 0:o.getAttribute("data-count");if(o&&e){const i=Number(e)-t.value.length,n=i<0;if(o.getAttribute("aria-live")==="polite"!==n){o.setAttribute("aria-live",n?"polite":"off");for(const s of ot)o.classList.toggle(s,n)}o.textContent=`${Math.abs(i)} tegn ${n?"for mye":"igjen"}`}}g&&st(document);function st(t){const o=t.getElementsByClassName(St),e=k(l.fieldChildAdded,()=>wt(o));et.set(t,e),e.observe(t),f(t,"input",nt,r)}function Ct(t){var o;(o=et.get(t))==null||o.disconnect(t),_(t,"input",nt,r)}const Et=l.fieldset.split(" ")[0],$t=l.validation.split(" ")[0],at=new WeakMap;function Mt(t){for(const o of t){const e=[];let i="";for(const n of o.getElementsByTagName("*"))n.classList.contains($t)?i=y(n):A(n)&&e.push(n);if(i)for(const n of e)n.setAttribute("aria-describedby",i),n.setAttribute("aria-invalid","true")}}g&&dt(document);function dt(t){const o=t.getElementsByClassName(Et),e=k(l.fieldsetValidationAdded,()=>Mt(o));at.set(t,e),e.observe(t)}function It(t){var o;(o=at.get(t))==null||o.disconnect(t)}const Tt={variantFlipOrder:{start:"sme",middle:"mse",end:"ems"},positionFlipOrder:{top:"tbrl",right:"rltb",bottom:"btrl",left:"lrbt"},position:"bottom",margin:8,padding:0},Lt=t=>{let o=t;const e={bottom:0,height:(o==null?void 0:o.offsetHeight)||0,left:-window.scrollX,right:0,top:-window.scrollY,width:(o==null?void 0:o.offsetWidth)||0};do e.left+=(o==null?void 0:o.offsetLeft)||0,e.top+=(o==null?void 0:o.offsetTop)||0,o=(o==null?void 0:o.offsetParent)||null;while(o);return e.bottom=e.top+e.height,e.right=e.left+e.width,e},Ot=(t,o,e)=>{const{container:i,margin:n,padding:a,position:s,variantFlipOrder:h,positionFlipOrder:S}={container:document.documentElement.getBoundingClientRect(),...Tt,...e},{left:Kt,top:qt}=o.style;o.style.left="0",o.style.top="0";const d=Lt(t),c=o.getBoundingClientRect(),Jt={t:d.top-c.height-n,b:d.bottom+n,r:d.right+n,l:d.left-c.width-n},Qt={vs:d.left,vm:d.left+d.width/2-c.width/2,ve:d.left+d.width-c.width,hs:d.top,hm:d.bottom-d.height/2-c.height/2,he:d.bottom-c.height},[Xt,Yt="middle"]=s.split("-"),Gt=S[Xt],Zt=h[Yt],{top:ut,left:ht,bottom:mt,right:gt}=i;for(const b of Gt){const m=b==="t"||b==="b";let p=Jt[b];const[yt,bt]=m?["top","left"]:["left","top"],[to,oo]=m?[c.height,c.width]:[c.width,c.height],[eo,no]=m?[mt,gt]:[gt,mt],[io,so]=m?[ut,ht]:[ht,ut];if(!(p<io||p+to+a>eo))for(const pt of Zt){let v=Qt[(m?"v":"h")+pt];if(!(v<so||v+oo+a>no))return v-=c[bt],p-=c[yt],o.style[bt]=`${v}px`,o.style[yt]=`${p}px`,b+pt}}return o.style.left=Kt,o.style.top=qt,null},Nt=l.popover.split(" ")[0],Bt={toJSON:()=>"",bottom:0,height:0,left:0,right:0,top:0,width:0,x:0,y:0},xt=/(top|right|bottom|left)-(start|middle|end)/;g&<(document);function Dt(t,o){const e=o.getAttribute("data-position")||"bottom-start";if(!xt.test(e))return console.error(`Found invalid data-position="${e}"
|
|
2
2
|
- It must be [top|right|bottom|left]-[start|middle|end]
|
|
3
|
-
- Found on element:`,
|
|
3
|
+
- Found on element:`,o);const i=()=>Ot(t,o,{container:{...Bt,bottom:window.innerHeight,right:window.innerWidth},margin:4,padding:16,position:e}),n=({newState:a})=>{a!=="open"&&(_(document,"DOMContentReady",i,r),_(o,"toggle",n,r),_(window,"load,resize,scroll",i,r))};document.fonts.ready.then(i),f(document,"DOMContentReady",i,r),f(o,"toggle",n,r),f(window,"load,resize,scroll",i,r)}function rt({target:t,newState:o}){var n;const i=o==="open"&&t instanceof HTMLElement&&t.classList.contains(Nt)&&((n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`));i&&Dt(i,t)}function ct({target:t}){var e;const o=t instanceof Element&&t.closest("a[popovertarget]");if(o){const i=o.getRootNode(),n=(e=i.getElementById)==null?void 0:e.call(i,o.getAttribute("popovertarget")||""),a=o.getAttribute("popovertargetaction")||"toggle";n==null||n.togglePopover(a==="show"||(a==="hide"?!1:void 0))}}function lt(t){f(t,"click",ct),f(t,"toggle",rt,r)}function Ft(t){_(t,"click",ct),_(t,"toggle",rt,r)}const Pt=l.table.split(" ")[0],ft=new WeakMap;function Rt(t){var o,e;for(const i of t)if(i instanceof HTMLTableElement){const n=Array.from(((e=(o=i.tHead)==null?void 0:o.rows[0])==null?void 0:e.cells)||[],a=>{var s;return(s=a.innerText)==null?void 0:s.trim()});for(const a of i.tBodies)for(const s of a.rows)for(const h of s.cells)h.setAttribute("data-th",n[h.cellIndex]||"")}}g&&_t(document);function _t(t){const o=t.getElementsByClassName(Pt),e=k(l.tableChildAdded,()=>Rt(o));ft.set(t,e),e.observe(t)}function Vt(t){var o;(o=ft.get(t))==null||o.disconnect(t)}const Ht=(t,o,e)=>{const i=(e-1)/2,n=Math.min(Math.max(t-Math.floor(i),1),o-e+1),a=Math.min(Math.max(t+Math.ceil(i),e),o),s=Array.from({length:a+1-n},(h,S)=>S+n);return e>4&&n>1&&s.splice(0,2,1,0),e>3&&a<o&&s.splice(-2,2,0,o),s},Wt=({current:t=1,total:o=10,show:e=7})=>({prev:t>1?t-1:0,next:t<o?t+1:0,pages:Ht(t,o,e).map((i,n)=>({current:i===t&&"page",key:`key-${i}-${n}`,page:i}))});function Ut(t){st(t),dt(t),lt(t),_t(t)}function jt(t){Ct(t),It(t),Ft(t),Vt(t)}return u.observe=Ut,u.pagination=Wt,u.styles=vt,u.unobserve=jt,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"}),u}({});
|
|
4
4
|
//# sourceMappingURL=index.iife.js.map
|
package/mtds/index.iife.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.iife.js","sources":["../designsystem/utils.ts","../designsystem/field/field.ts","../designsystem/fieldset/fieldset.ts","../node_modules/nanopop/dist/nanopop.mjs","../designsystem/popover/popover.ts","../designsystem/table/table.ts","../designsystem/pagination/pagination.ts","../designsystem/index.ts"],"sourcesContent":["export const IS_BROWSER = typeof window !== 'undefined' && typeof document !== 'undefined';\nexport const QUICK_EVENT = { capture: true, passive: true };\n\n/**\n * useId\n * @return A generated unique ID\n */\nlet id = 0;\nconst UUID = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 5)}`;\nexport function useId (el: Element) {\n if (!el.id) el.id = `${UUID}${++id}`;\n\treturn el.id;\n};\n\n/**\n * Speed up MutationObserver by debouncing and only running when page is visible\n * @return new MutaionObserver\n */\nexport function createOptimizedMutationObserver(callback: MutationCallback) {\n const queue: MutationRecord[] = [];\n const observer = new MutationObserver((mutations) => {\n if (!queue[0]) requestAnimationFrame(process);\n queue.push(...mutations);\n });\n\n const process = () => {\n callback(queue, observer);\n queue.length = 0; // Reset queue\n };\n\n return observer;\n}\n\n// Internal helper for on / off\nconst events = (\n\taction: \"add\" | \"remove\",\n\telement: Node | Window,\n\trest: Parameters<typeof Element.prototype.addEventListener>,\n): void => {\n\tfor (const type of rest[0].split(\",\")) {\n\t\trest[0] = type;\n\t\tElement.prototype[`${action}EventListener`].apply(element, rest);\n\t}\n};\n\n/**\n * on\n * @param element The Element to use as EventTarget\n * @param types A comma separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const on = (\n\telement: Node | Window,\n\t...rest: Parameters<typeof Element.prototype.addEventListener>\n): void => events(\"add\", element, rest);\n\n/**\n * off\n * @param element The Element to use as EventTarget\n * @param types A comma separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const off = (\n\telement: Node | Window,\n\t...rest: Parameters<typeof Element.prototype.removeEventListener>\n): void => events(\"remove\", element, rest);\n\n/**\n * Child added event inspired by:\n * https://davidwalsh.name/detect-node-insertion\n */\nexport const onAdd = (animationName: string, callback: () => void) => {\n let timer: ReturnType<typeof requestAnimationFrame> | number = 0;\n const onAnimation = (event: Event & { animationName?: string }) => {\n if (event.animationName === animationName) {\n cancelAnimationFrame(timer);\n timer = requestAnimationFrame(callback);\n }\n };\n\n\treturn {\n\t\tobserve: (el: Element | Document, ) => on(el, 'animationend', onAnimation, QUICK_EVENT),\n\t\tdisconnect: (el: Element | Document, ) => off(el, 'animationstart', onAnimation, QUICK_EVENT)\n\t};\n}\n\nexport const isInputLike = (el: unknown): el is HTMLInputElement =>\n\tel instanceof HTMLElement && 'validity' in el && !(el instanceof HTMLButtonElement);\n\n// Make React support popover=\"\"target attribute\n// https://github.com/facebook/react/issues/27479\ndeclare global {\n\tnamespace React.JSX {\n\t\tinterface IntrinsicAttributes {\n\t\t\tpopovertargetaction?: string;\n\t\t\tpopovertarget?: string;\n\t\t\tpopover?: string | boolean;\n\t\t}\n\t}\n\tnamespace React {\n\t\tinterface HTMLAttributes<T> {\n\t\t\tpopovertargetaction?: string;\n\t\t\tpopovertarget?: string;\n\t\t\tpopover?: string | boolean;\n\t\t}\n\t}\n}","import styles from '../styles.module.css';\nimport { IS_BROWSER, QUICK_EVENT, isInputLike, off, on, onAdd, useId } from '../utils';\n\nconst CSS_FIELD = styles.field.split(' ')[0];\nconst CSS_VALIDATIONS = styles.validation.split(' ');\nconst CSS_VALIDATION = CSS_VALIDATIONS[0];\nconst BOUND = new WeakMap<Element | Document, ReturnType<typeof onAdd>>();\n\nfunction renderAria(fields: HTMLCollectionOf<Element>) {\n for(const field of fields) {\n const labels: HTMLLabelElement[] = [];\n const descs: string[] = [];\n let input: HTMLInputElement | null = null;\n let valid = true;\n\n for (const el of field.getElementsByTagName('*')) {\n if (el instanceof HTMLLabelElement) labels.push(el);\n else if (isInputLike(el)) input = el;\n else if (el.classList.contains(CSS_VALIDATION)) { // Must be before instanceof HTMLParagraphElement since validation can also be a <p>\n valid = el.getAttribute('data-color') === 'success';\n descs.unshift(useId(el));\n } else if (el instanceof HTMLParagraphElement) descs.push(useId(el));\n }\n\n if (input) for (const label of labels) label.htmlFor = useId(input);\n if (input) renderCounter(input);\n\n input?.setAttribute('aria-describedby', descs.join(' '));\n input?.setAttribute('aria-invalid', `${!valid}`);\n }\n}\nfunction handleInput({ target }: Event) {\n if (isInputLike(target)) renderCounter(target);\n}\n\nfunction renderCounter(input: HTMLInputElement) {\n const el = input?.nextElementSibling;\n const limit = el?.getAttribute('data-count');\n\n if (el && limit) {\n const remainder = Number(limit) - input.value.length;\n const nextInvalid = remainder < 0;\n const prevInvalid = el.getAttribute('aria-live') === 'polite';\n\n if (prevInvalid !== nextInvalid) {\n el.setAttribute('aria-live', nextInvalid ? 'polite' : 'off');\n for (const css of CSS_VALIDATIONS) el.classList.toggle(css, nextInvalid);\n }\n el.textContent = `${Math.abs(remainder)} tegn ${nextInvalid ? 'for mye' : 'igjen'}`;\n }\n}\n\nif (IS_BROWSER) observe(document);\n\nexport function observe (el: Element | Document) {\n const fields = el.getElementsByClassName(CSS_FIELD);\n const add = onAdd(styles.fieldChildAdded, () => renderAria(fields));\n BOUND.set(el, add);\n add.observe(el);\n on(el, 'input', handleInput, QUICK_EVENT);\n}\n\nexport function unobserve (el: Element | Document) {\n BOUND.get(el)?.disconnect(el);\n off(el, 'input', handleInput, QUICK_EVENT);\n}\n","import styles from '../styles.module.css';\nimport { IS_BROWSER, isInputLike, onAdd, useId } from '../utils';\nconst CSS_FIELDSET = styles.fieldset.split(' ')[0];\nconst CSS_VALIDATION = styles.validation.split(' ')[0];\nconst BOUND = new WeakMap<Element | Document, ReturnType<typeof onAdd>>();\n\nfunction process(fieldsets: HTMLCollectionOf<Element>) {\n for(const fieldset of fieldsets) {\n const inputs: HTMLInputElement[] = [];\n let validationId = '';\n\n for (const el of fieldset.getElementsByTagName('*')) {\n if (el.classList.contains(CSS_VALIDATION)) validationId = useId(el);\n else if (isInputLike(el)) inputs.push(el);\n }\n\n if (validationId) \n for(const input of inputs) {\n input.setAttribute('aria-describedby', validationId);\n input.setAttribute('aria-invalid', 'true');\n }\n }\n}\n\nif (IS_BROWSER) observe(document);\n\nexport function observe (el: Element | Document) {\n const fields = el.getElementsByClassName(CSS_FIELDSET);\n const add = onAdd(styles.fieldsetValidationAdded, () => process(fields));\n BOUND.set(el, add);\n add.observe(el);\n}\n\nexport function unobserve (el: Element | Document) {\n BOUND.get(el)?.disconnect(el);\n}\n","/*! NanoPop 2.4.2 MIT | https://github.com/Simonwep/nanopop */\nconst N = \"2.4.2\", I = {\n variantFlipOrder: { start: \"sme\", middle: \"mse\", end: \"ems\" },\n positionFlipOrder: { top: \"tbrl\", right: \"rltb\", bottom: \"btrl\", left: \"lrbt\" },\n position: \"bottom\",\n margin: 8,\n padding: 0\n}, J = (n, i, m) => {\n const {\n container: r,\n arrow: a,\n margin: e,\n padding: l,\n position: V,\n variantFlipOrder: C,\n positionFlipOrder: M\n } = {\n container: document.documentElement.getBoundingClientRect(),\n ...I,\n ...m\n }, { left: F, top: K } = i.style;\n i.style.left = \"0\", i.style.top = \"0\";\n const t = n.getBoundingClientRect(), o = i.getBoundingClientRect(), P = {\n t: t.top - o.height - e,\n b: t.bottom + e,\n r: t.right + e,\n l: t.left - o.width - e\n }, R = {\n vs: t.left,\n vm: t.left + t.width / 2 - o.width / 2,\n ve: t.left + t.width - o.width,\n hs: t.top,\n hm: t.bottom - t.height / 2 - o.height / 2,\n he: t.bottom - o.height\n }, [$, E = \"middle\"] = V.split(\"-\"), L = M[$], j = C[E], { top: y, left: x, bottom: B, right: O } = r;\n for (const c of L) {\n const s = c === \"t\" || c === \"b\";\n let p = P[c];\n const [d, g] = s ? [\"top\", \"left\"] : [\"left\", \"top\"], [u, v] = s ? [o.height, o.width] : [o.width, o.height], [z, T] = s ? [B, O] : [O, B], [H, k] = s ? [y, x] : [x, y];\n if (!(p < H || p + u + l > z))\n for (const b of j) {\n let f = R[(s ? \"v\" : \"h\") + b];\n if (!(f < k || f + v + l > T)) {\n if (f -= o[g], p -= o[d], i.style[g] = `${f}px`, i.style[d] = `${p}px`, a) {\n const w = s ? t.width / 2 : t.height / 2, h = v / 2, S = w > h, q = {\n s: S ? h : w,\n m: h,\n e: S ? h : v - w\n }, A = {\n t: u,\n b: 0,\n r: 0,\n l: u\n }, D = f + q[b], G = p + A[c];\n a.style[g] = `${D}px`, a.style[d] = `${G}px`;\n }\n return c + b;\n }\n }\n }\n return i.style.left = F, i.style.top = K, null;\n}, Q = (n, i, m) => {\n const r = typeof n == \"object\" && !(n instanceof HTMLElement) ? n : { reference: n, popper: i, ...m };\n return {\n /**\n * Repositions the current popper.\n * @param options Optional options which get merged with the current ones.\n */\n update(a = r) {\n const { reference: e, popper: l } = Object.assign(r, a);\n if (!l || !e)\n throw new Error(\"Popper- or reference-element missing.\");\n return J(e, l, r);\n }\n };\n};\nexport {\n Q as createPopper,\n I as defaults,\n J as reposition,\n N as version\n};\n//# sourceMappingURL=nanopop.mjs.map\n","import { type NanoPopPosition, reposition } from 'nanopop';\nimport styles from '../styles.module.css';\nimport { IS_BROWSER, QUICK_EVENT, off, on } from '../utils';\n\nconst CSS_POPOVER = styles.popover.split(' ')[0];\nconst CONTAINER = { toJSON: () => '', bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 };\nconst POSITIONS = /(top|right|bottom|left)-(start|middle|end)/;\ntype Toggle = Event & { newState?: string };\n\nif (IS_BROWSER) observe(document);\n\n// Not exposed as a hook, as it is nice to allow consuming components to use it as a callback\nexport function anchorPosition(anchor: HTMLElement, popover: HTMLElement) {\n const position = (popover.getAttribute('data-position') || 'bottom-start') as NanoPopPosition;\n if (!POSITIONS.test(position)) return console.error(`Found invalid data-position=\"${position}\"\\n- It must be [top|right|bottom|left]-[start|middle|end]\\n- Found on element:`, popover);\n\n const update = () =>\n reposition(anchor, popover, {\n container: { ...CONTAINER, bottom: window.innerHeight, right: window.innerWidth },\n margin: 4, // Margin between the popper element and the reference\n padding: 16, // Minimum space between the popper and the container\n position // [top|right|bottom|left]-[start|middle|end]\n });\n\n const removeEvent = ({ newState }: Toggle) => {\n if (newState === 'open') return;\n off(document, 'DOMContentReady', update, QUICK_EVENT);\n off(popover, 'toggle', removeEvent, QUICK_EVENT);\n off(window, 'load,resize,scroll', update, QUICK_EVENT);\n }\n \n\n document.fonts.ready.then(update); // Inital render and when fonts load\n on(document, 'DOMContentReady', update, QUICK_EVENT);\n on(popover, 'toggle', removeEvent, QUICK_EVENT);\n on(window, 'load,resize,scroll', update, QUICK_EVENT);\n}\n\nfunction handleToggle ({ target: el, newState }: Toggle){\n const isPopping = newState === 'open' && el instanceof HTMLElement && el.classList.contains(CSS_POPOVER);\n const anchor = isPopping && (el.getRootNode() as ShadowRoot)?.querySelector<HTMLElement>(`[popovertarget=\"${el.id}\"]`);\n\n if (anchor) anchorPosition(anchor, el);\n}\n\nexport function observe(el: Node) {\n on(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}\nexport function unobserve(el: Node) {\n off(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}","import styles from '../styles.module.css';\nimport { IS_BROWSER, onAdd } from '../utils';\nconst CSS_TABLE = styles.table.split(' ')[0];\nconst BOUND = new WeakMap<Element | Document, ReturnType<typeof onAdd>>();\n\nfunction process(tables: HTMLCollectionOf<Element>) {\n for(const table of tables) if (table instanceof HTMLTableElement) {\n const ths = Array.from(table.tHead?.rows[0]?.cells || [], (el) => el.innerText?.trim()); // Using innerText to only include visible text\n for (const tbody of table.tBodies) {\n for (const row of tbody.rows) {\n for (const cell of row.cells) {\n cell.setAttribute('data-th', ths[cell.cellIndex] || '');\n }\n }\n }\n }\n}\n\nif (IS_BROWSER) observe(document);\n\nexport function observe (el: Element | Document) {\n const tables = el.getElementsByClassName(CSS_TABLE);\n const add = onAdd(styles.tableChildAdded, () => process(tables));\n BOUND.set(el, add);\n add.observe(el);\n}\n\nexport function unobserve (el: Element | Document) {\n BOUND.get(el)?.disconnect(el);\n}\n","const getSteps = (now: number, max: number, show: number) => {\n const offset = (show - 1) / 2;\n const start = Math.min(Math.max(now - Math.floor(offset), 1), max - show + 1);\n const end = Math.min(Math.max(now + Math.ceil(offset), show), max);\n const pages = Array.from({ length: end + 1 - start }, (_, i) => i + start);\n\n if (show > 4 && start > 1) pages.splice(0, 2, 1, 0);\n if (show > 3 && end < max) pages.splice(-2, 2, 0, max);\n return pages;\n};\n\nexport const pagination = ({\n current = 1,\n total = 10,\n show = 7,\n}) => ({\n prev: current > 1 ? current - 1 : 0,\n next: current < total ? current + 1 : 0,\n pages: getSteps(current, total, show).map((page, index) => ({\n current: page === current && 'page' as const,\n key: `key-${page}-${index}`,\n page,\n })),\n});\n","import * as field from './field/field';\nimport * as fieldset from './fieldset/fieldset';\nimport * as popover from './popover/popover';\nimport * as table from './table/table';\nexport { pagination } from './pagination/pagination';\nexport * as styles from './styles.module.css';\n\nexport function observe(el: Element) {\n field.observe(el);\n fieldset.observe(el);\n popover.observe(el);\n table.observe(el);\n}\n\nexport function unobserve(el: Element) {\n field.unobserve(el);\n fieldset.unobserve(el);\n popover.unobserve(el);\n table.unobserve(el);\n}"],"names":["IS_BROWSER","QUICK_EVENT","id","UUID","useId","el","events","action","element","rest","type","on","off","onAdd","animationName","callback","timer","onAnimation","event","isInputLike","CSS_FIELD","styles","CSS_VALIDATIONS","CSS_VALIDATION","BOUND","renderAria","fields","field","labels","descs","input","valid","label","handleInput","target","renderCounter","limit","remainder","nextInvalid","css","observe","add","unobserve","CSS_FIELDSET","process","fieldsets","fieldset","inputs","validationId","I","J","n","i","m","r","a","e","l","V","C","M","F","K","t","o","P","R","$","E","L","j","y","x","B","O","c","s","p","d","g","u","v","z","T","H","k","b","f","w","h","S","q","A","D","G","CSS_POPOVER","CONTAINER","POSITIONS","anchorPosition","anchor","popover","position","update","reposition","removeEvent","newState","handleToggle","_a","CSS_TABLE","tables","table","ths","_b","tbody","row","cell","getSteps","now","max","show","offset","start","end","pages","_","pagination","current","total","page","index","field.observe","fieldset.observe","popover.observe","table.observe","field.unobserve","fieldset.unobserve","popover.unobserve","table.unobserve"],"mappings":"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","x_google_ignoreList":[3]}
|
|
1
|
+
{"version":3,"file":"index.iife.js","sources":["../designsystem/utils.ts","../designsystem/field/field.ts","../designsystem/fieldset/fieldset.ts","../designsystem/nanopop.ts","../designsystem/popover/popover.ts","../designsystem/table/table.ts","../designsystem/pagination/pagination.ts","../designsystem/index.ts"],"sourcesContent":["export const IS_BROWSER = typeof window !== 'undefined' && typeof document !== 'undefined';\nexport const QUICK_EVENT = { capture: true, passive: true };\n\n/**\n * useId\n * @return A generated unique ID\n */\nlet id = 0;\nconst UUID = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 5)}`;\nexport function useId (el: Element) {\n if (!el.id) el.id = `${UUID}${++id}`;\n\treturn el.id;\n};\n\n/**\n * Speed up MutationObserver by debouncing and only running when page is visible\n * @return new MutaionObserver\n */\nexport function createOptimizedMutationObserver(callback: MutationCallback) {\n const queue: MutationRecord[] = [];\n const observer = new MutationObserver((mutations) => {\n if (!queue[0]) requestAnimationFrame(process);\n queue.push(...mutations);\n });\n\n const process = () => {\n callback(queue, observer);\n queue.length = 0; // Reset queue\n };\n\n return observer;\n}\n\n// Internal helper for on / off\nconst events = (\n\taction: \"add\" | \"remove\",\n\telement: Node | Window,\n\trest: Parameters<typeof Element.prototype.addEventListener>,\n): void => {\n\tfor (const type of rest[0].split(\",\")) {\n\t\trest[0] = type;\n\t\tElement.prototype[`${action}EventListener`].apply(element, rest);\n\t}\n};\n\n/**\n * on\n * @param element The Element to use as EventTarget\n * @param types A comma separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const on = (\n\telement: Node | Window,\n\t...rest: Parameters<typeof Element.prototype.addEventListener>\n): void => events(\"add\", element, rest);\n\n/**\n * off\n * @param element The Element to use as EventTarget\n * @param types A comma separated string of event types\n * @param listener An event listener function or listener object\n */\nexport const off = (\n\telement: Node | Window,\n\t...rest: Parameters<typeof Element.prototype.removeEventListener>\n): void => events(\"remove\", element, rest);\n\n/**\n * Child added event inspired by:\n * https://davidwalsh.name/detect-node-insertion\n */\nexport const onAdd = (animationName: string, callback: () => void) => {\n let timer: ReturnType<typeof requestAnimationFrame> | number = 0;\n const onAnimation = (event: Event & { animationName?: string }) => {\n if (event.animationName === animationName) {\n cancelAnimationFrame(timer);\n timer = requestAnimationFrame(callback);\n }\n };\n\n\treturn {\n\t\tobserve: (el: Element | Document, ) => on(el, 'animationend', onAnimation, QUICK_EVENT),\n\t\tdisconnect: (el: Element | Document, ) => off(el, 'animationstart', onAnimation, QUICK_EVENT)\n\t};\n}\n\nexport const isInputLike = (el: unknown): el is HTMLInputElement =>\n\tel instanceof HTMLElement && 'validity' in el && !(el instanceof HTMLButtonElement);\n\n// Make React support popover=\"\"target attribute\n// https://github.com/facebook/react/issues/27479\ndeclare global {\n\tnamespace React.JSX {\n\t\tinterface IntrinsicAttributes {\n\t\t\tpopovertargetaction?: string;\n\t\t\tpopovertarget?: string;\n\t\t\tpopover?: string | boolean;\n\t\t}\n\t}\n\tnamespace React {\n\t\tinterface HTMLAttributes<T> {\n\t\t\tpopovertargetaction?: string;\n\t\t\tpopovertarget?: string;\n\t\t\tpopover?: string | boolean;\n\t\t}\n\t}\n}","import styles from '../styles.module.css';\nimport { IS_BROWSER, QUICK_EVENT, isInputLike, off, on, onAdd, useId } from '../utils';\n\nconst CSS_FIELD = styles.field.split(' ')[0];\nconst CSS_VALIDATIONS = styles.validation.split(' ');\nconst CSS_VALIDATION = CSS_VALIDATIONS[0];\nconst BOUND = new WeakMap<Element | Document, ReturnType<typeof onAdd>>();\n\nfunction renderAria(fields: HTMLCollectionOf<Element>) {\n for(const field of fields) {\n const labels: HTMLLabelElement[] = [];\n const descs: string[] = [];\n let input: HTMLInputElement | null = null;\n let valid = true;\n\n for (const el of field.getElementsByTagName('*')) {\n if (el instanceof HTMLLabelElement) labels.push(el);\n else if (isInputLike(el)) input = el;\n else if (el.classList.contains(CSS_VALIDATION)) { // Must be before instanceof HTMLParagraphElement since validation can also be a <p>\n valid = el.getAttribute('data-color') === 'success';\n descs.unshift(useId(el));\n } else if (el instanceof HTMLParagraphElement) descs.push(useId(el));\n }\n\n if (input) for (const label of labels) label.htmlFor = useId(input);\n if (input) renderCounter(input);\n\n input?.setAttribute('aria-describedby', descs.join(' '));\n input?.setAttribute('aria-invalid', `${!valid}`);\n }\n}\nfunction handleInput({ target }: Event) {\n if (isInputLike(target)) renderCounter(target);\n}\n\nfunction renderCounter(input: HTMLInputElement) {\n const el = input?.nextElementSibling;\n const limit = el?.getAttribute('data-count');\n\n if (el && limit) {\n const remainder = Number(limit) - input.value.length;\n const nextInvalid = remainder < 0;\n const prevInvalid = el.getAttribute('aria-live') === 'polite';\n\n if (prevInvalid !== nextInvalid) {\n el.setAttribute('aria-live', nextInvalid ? 'polite' : 'off');\n for (const css of CSS_VALIDATIONS) el.classList.toggle(css, nextInvalid);\n }\n el.textContent = `${Math.abs(remainder)} tegn ${nextInvalid ? 'for mye' : 'igjen'}`;\n }\n}\n\nif (IS_BROWSER) observe(document);\n\nexport function observe (el: Element | Document) {\n const fields = el.getElementsByClassName(CSS_FIELD);\n const add = onAdd(styles.fieldChildAdded, () => renderAria(fields));\n BOUND.set(el, add);\n add.observe(el);\n on(el, 'input', handleInput, QUICK_EVENT);\n}\n\nexport function unobserve (el: Element | Document) {\n BOUND.get(el)?.disconnect(el);\n off(el, 'input', handleInput, QUICK_EVENT);\n}\n","import styles from '../styles.module.css';\nimport { IS_BROWSER, isInputLike, onAdd, useId } from '../utils';\nconst CSS_FIELDSET = styles.fieldset.split(' ')[0];\nconst CSS_VALIDATION = styles.validation.split(' ')[0];\nconst BOUND = new WeakMap<Element | Document, ReturnType<typeof onAdd>>();\n\nfunction process(fieldsets: HTMLCollectionOf<Element>) {\n for(const fieldset of fieldsets) {\n const inputs: HTMLInputElement[] = [];\n let validationId = '';\n\n for (const el of fieldset.getElementsByTagName('*')) {\n if (el.classList.contains(CSS_VALIDATION)) validationId = useId(el);\n else if (isInputLike(el)) inputs.push(el);\n }\n\n if (validationId) \n for(const input of inputs) {\n input.setAttribute('aria-describedby', validationId);\n input.setAttribute('aria-invalid', 'true');\n }\n }\n}\n\nif (IS_BROWSER) observe(document);\n\nexport function observe (el: Element | Document) {\n const fields = el.getElementsByClassName(CSS_FIELDSET);\n const add = onAdd(styles.fieldsetValidationAdded, () => process(fields));\n BOUND.set(el, add);\n add.observe(el);\n}\n\nexport function unobserve (el: Element | Document) {\n BOUND.get(el)?.disconnect(el);\n}\n","// Inspired by https://github.com/simonwep/nanopop/\n\ntype Direction = 'top' | 'left' | 'bottom' | 'right';\ntype Alignment = 'start' | 'middle' | 'end';\n\nexport type VariantFlipOrder = {\n start: string;\n middle: string;\n end: string;\n};\n\nexport type PositionFlipOrder = {\n top: string;\n right: string;\n bottom: string;\n left: string;\n};\n\nexport type NanoPopPosition = `${Direction}-${Alignment}` | Direction;\n\nexport type NanoPopOptions = {\n container: DOMRect;\n position: NanoPopPosition;\n variantFlipOrder: VariantFlipOrder;\n positionFlipOrder: PositionFlipOrder;\n margin: number;\n reference?: HTMLElement;\n popper?: HTMLElement;\n padding?: number;\n};\n\ntype AvailablePositions = {\n t: number;\n b: number;\n l: number;\n r: number;\n};\n\ntype AvailableVariants = {\n vs: number;\n vm: number;\n ve: number;\n hs: number;\n hm: number;\n he: number;\n};\n\ntype PositionPairs = [Direction, Direction];\n\nexport type PositionMatch = 'ts' | 'tm' | 'te' | 'bs' | 'bm' | 'be' | 'ls' | 'lm' | 'le' | 'rs' | 'rm' | 're';\n\n// Export default\nexport const defaults = {\n variantFlipOrder: {start: 'sme', middle: 'mse', end: 'ems'},\n positionFlipOrder: {top: 'tbrl', right: 'rltb', bottom: 'btrl', left: 'lrbt'},\n position: 'bottom',\n margin: 8,\n padding: 0\n};\n\nconst getBoundingClientRectWithoutTransform = (element: HTMLElement | null) => {\n let el = element;\n const rect = { \n bottom: 0,\n height: el?.offsetHeight || 0,\n left: -window.scrollX,\n right: 0,\n top: -window.scrollY,\n width: el?.offsetWidth || 0\n };\n\n do {\n rect.left += el?.offsetLeft || 0;\n rect.top += el?.offsetTop || 0;\n el = (el?.offsetParent || null) as HTMLElement | null;\n } while (el);\n\n rect.bottom = rect.top + rect.height;\n rect.right = rect.left + rect.width;\n\n return rect;\n}\n\n/**\n * Repositions an element once using the provided options and elements.\n * @param reference Reference element\n * @param popper Popper element\n * @param opt Optional, additional options\n */\nexport const reposition = (\n reference: HTMLElement,\n popper: HTMLElement,\n opt?: Partial<NanoPopOptions>\n): PositionMatch | null => {\n const {\n container,\n margin,\n padding,\n position,\n variantFlipOrder,\n positionFlipOrder\n } = {\n container: document.documentElement.getBoundingClientRect(),\n ...defaults,\n ...opt\n };\n\n /**\n * Reset position to resolve viewport\n * See https://developer.mozilla.org/en-US/docs/Web/CSS/position#fixed\n */\n const {left: originalLeft, top: originalTop} = popper.style;\n popper.style.left = '0';\n popper.style.top = '0';\n\n const refBox = getBoundingClientRectWithoutTransform(reference);\n const popBox = popper.getBoundingClientRect();\n\n /**\n * Holds coordinates of top, left, bottom and right alignment\n */\n const positionStore: AvailablePositions = {\n t: refBox.top - popBox.height - margin,\n b: refBox.bottom + margin,\n r: refBox.right + margin,\n l: refBox.left - popBox.width - margin\n };\n\n /**\n * Holds corresponding variants (start, middle, end).\n * The values depend on horizontal / vertical orientation\n */\n const variantStore: AvailableVariants = {\n vs: refBox.left,\n vm: refBox.left + refBox.width / 2 - popBox.width / 2,\n ve: refBox.left + refBox.width - popBox.width,\n hs: refBox.top,\n hm: refBox.bottom - refBox.height / 2 - popBox.height / 2,\n he: refBox.bottom - popBox.height\n };\n\n // Extract position and variant\n // Top-start -> top is \"position\" and \"start\" is the variant\n const [posKey, varKey = 'middle'] = position.split('-');\n const positions = positionFlipOrder[posKey as keyof PositionFlipOrder];\n const variants = variantFlipOrder[varKey as keyof VariantFlipOrder];\n\n // Try out all possible combinations, starting with the preferred one.\n const {top, left, bottom, right} = container;\n\n for (const p of positions) {\n const vertical = (p === 't' || p === 'b');\n\n // The position-value\n let positionVal = positionStore[p as keyof AvailablePositions];\n\n // Which property has to be changes.\n const [positionKey, variantKey] = (vertical ? ['top', 'left'] : ['left', 'top']) as PositionPairs;\n\n /**\n * box refers to the size of the popper element. Depending on the orientation this is width or height.\n * The limit is the corresponding, maximum value for this position.\n */\n const [positionSize, variantSize] = vertical ? [popBox.height, popBox.width] : [popBox.width, popBox.height];\n const [positionMaximum, variantMaximum] = vertical ? [bottom, right] : [right, bottom];\n const [positionMinimum, variantMinimum] = vertical ? [top, left] : [left, top];\n\n // Skip pre-clipped values\n if (positionVal < positionMinimum || (positionVal + positionSize + padding) > positionMaximum) continue;\n\n for (const v of variants) {\n // The position-value, the related size value of the popper and the limit\n let variantVal = variantStore[((vertical ? 'v' : 'h') + v) as keyof AvailableVariants];\n if (variantVal < variantMinimum || (variantVal + variantSize + padding) > variantMaximum) continue;\n\n // Subtract popBox's initial position\n variantVal -= popBox[variantKey];\n positionVal -= popBox[positionKey];\n\n // Apply styles and normalize viewport\n popper.style[variantKey] = `${variantVal}px`;\n popper.style[positionKey] = `${positionVal}px`;\n\n return (p + v) as PositionMatch;\n }\n }\n\n // Revert style values (won't work with styled-elements or similar systems)\n // \"Fix\" for https://github.com/Simonwep/nanopop/issues/7\n popper.style.left = originalLeft;\n popper.style.top = originalTop;\n\n return null;\n};\n","import { type NanoPopPosition, reposition } from '../nanopop';\nimport styles from '../styles.module.css';\nimport { IS_BROWSER, QUICK_EVENT, off, on } from '../utils';\n\nconst CSS_POPOVER = styles.popover.split(' ')[0];\nconst CONTAINER = { toJSON: () => '', bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 };\nconst POSITIONS = /(top|right|bottom|left)-(start|middle|end)/;\ntype Toggle = Event & { newState?: string };\n\nif (IS_BROWSER) observe(document);\n\n// Not exposed as a hook, as it is nice to allow consuming components to use it as a callback\nexport function anchorPosition(anchor: HTMLElement, popover: HTMLElement) {\n const position = (popover.getAttribute('data-position') || 'bottom-start') as NanoPopPosition;\n if (!POSITIONS.test(position)) return console.error(`Found invalid data-position=\"${position}\"\\n- It must be [top|right|bottom|left]-[start|middle|end]\\n- Found on element:`, popover);\n\n const update = () =>\n reposition(anchor, popover, {\n container: { ...CONTAINER, bottom: window.innerHeight, right: window.innerWidth },\n margin: 4, // Margin between the popper element and the reference\n padding: 16, // Minimum space between the popper and the container\n position // [top|right|bottom|left]-[start|middle|end]\n });\n\n const removeEvent = ({ newState }: Toggle) => {\n if (newState === 'open') return;\n off(document, 'DOMContentReady', update, QUICK_EVENT);\n off(popover, 'toggle', removeEvent, QUICK_EVENT);\n off(window, 'load,resize,scroll', update, QUICK_EVENT);\n }\n \n\n document.fonts.ready.then(update); // Inital render and when fonts load\n on(document, 'DOMContentReady', update, QUICK_EVENT);\n on(popover, 'toggle', removeEvent, QUICK_EVENT);\n on(window, 'load,resize,scroll', update, QUICK_EVENT);\n}\n\nfunction handleToggle ({ target: el, newState }: Toggle){\n const isPopping = newState === 'open' && el instanceof HTMLElement && el.classList.contains(CSS_POPOVER);\n const anchor = isPopping && (el.getRootNode() as ShadowRoot)?.querySelector<HTMLElement>(`[popovertarget=\"${el.id}\"]`);\n\n if (anchor) anchorPosition(anchor, el);\n}\n\n// Polyfill popovertarget for <a> (not supported by native)\nfunction handleLinkClick ({ target }: Event){\n const el = target instanceof Element && target.closest('a[popovertarget]');\n\n if (el) {\n const root = el.getRootNode() as ShadowRoot;\n const target = root.getElementById?.(el.getAttribute('popovertarget') || '');\n const action = el.getAttribute('popovertargetaction') || 'toggle';\n\n target?.togglePopover(action === 'show' || (action === 'hide' ? false : undefined));\n }\n}\n\n\nexport function observe(el: Node) {\n on(el, 'click', handleLinkClick); // Allow `<a>` to use `popovertarget` as well\n on(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}\nexport function unobserve(el: Node) {\n off(el, 'click', handleLinkClick);\n off(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}","import styles from '../styles.module.css';\nimport { IS_BROWSER, onAdd } from '../utils';\nconst CSS_TABLE = styles.table.split(' ')[0];\nconst BOUND = new WeakMap<Element | Document, ReturnType<typeof onAdd>>();\n\nfunction process(tables: HTMLCollectionOf<Element>) {\n for(const table of tables) if (table instanceof HTMLTableElement) {\n const ths = Array.from(table.tHead?.rows[0]?.cells || [], (el) => el.innerText?.trim()); // Using innerText to only include visible text\n for (const tbody of table.tBodies) {\n for (const row of tbody.rows) {\n for (const cell of row.cells) {\n cell.setAttribute('data-th', ths[cell.cellIndex] || '');\n }\n }\n }\n }\n}\n\nif (IS_BROWSER) observe(document);\n\nexport function observe (el: Element | Document) {\n const tables = el.getElementsByClassName(CSS_TABLE);\n const add = onAdd(styles.tableChildAdded, () => process(tables));\n BOUND.set(el, add);\n add.observe(el);\n}\n\nexport function unobserve (el: Element | Document) {\n BOUND.get(el)?.disconnect(el);\n}\n","const getSteps = (now: number, max: number, show: number) => {\n const offset = (show - 1) / 2;\n const start = Math.min(Math.max(now - Math.floor(offset), 1), max - show + 1);\n const end = Math.min(Math.max(now + Math.ceil(offset), show), max);\n const pages = Array.from({ length: end + 1 - start }, (_, i) => i + start);\n\n if (show > 4 && start > 1) pages.splice(0, 2, 1, 0);\n if (show > 3 && end < max) pages.splice(-2, 2, 0, max);\n return pages;\n};\n\nexport const pagination = ({\n current = 1,\n total = 10,\n show = 7,\n}) => ({\n prev: current > 1 ? current - 1 : 0,\n next: current < total ? current + 1 : 0,\n pages: getSteps(current, total, show).map((page, index) => ({\n current: page === current && 'page' as const,\n key: `key-${page}-${index}`,\n page,\n })),\n});\n","import * as field from './field/field';\nimport * as fieldset from './fieldset/fieldset';\nimport * as popover from './popover/popover';\nimport * as table from './table/table';\nexport { pagination } from './pagination/pagination';\nexport * as styles from './styles.module.css';\n\nexport function observe(el: Element) {\n field.observe(el);\n fieldset.observe(el);\n popover.observe(el);\n table.observe(el);\n}\n\nexport function unobserve(el: Element) {\n field.unobserve(el);\n fieldset.unobserve(el);\n popover.unobserve(el);\n table.unobserve(el);\n}"],"names":["IS_BROWSER","QUICK_EVENT","id","UUID","useId","el","events","action","element","rest","type","on","off","onAdd","animationName","callback","timer","onAnimation","event","isInputLike","CSS_FIELD","styles","CSS_VALIDATIONS","CSS_VALIDATION","BOUND","renderAria","fields","field","labels","descs","input","valid","label","handleInput","target","renderCounter","limit","remainder","nextInvalid","css","observe","add","unobserve","CSS_FIELDSET","process","fieldsets","fieldset","inputs","validationId","defaults","getBoundingClientRectWithoutTransform","rect","reposition","reference","popper","opt","container","margin","padding","position","variantFlipOrder","positionFlipOrder","originalLeft","originalTop","refBox","popBox","positionStore","variantStore","posKey","varKey","positions","variants","top","left","bottom","right","p","vertical","positionVal","positionKey","variantKey","positionSize","variantSize","positionMaximum","variantMaximum","positionMinimum","variantMinimum","v","variantVal","CSS_POPOVER","CONTAINER","POSITIONS","anchorPosition","anchor","popover","update","removeEvent","newState","handleToggle","_a","handleLinkClick","root","CSS_TABLE","tables","table","ths","_b","tbody","row","cell","getSteps","now","max","show","offset","start","end","pages","_","i","pagination","current","total","page","index","field.observe","fieldset.observe","popover.observe","table.observe","field.unobserve","fieldset.unobserve","popover.unobserve","table.unobserve"],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@ export default meta;
|
|
|
6
6
|
type Story = StoryObj<typeof meta>;
|
|
7
7
|
export declare const Default: Story;
|
|
8
8
|
export declare const Variants: Story;
|
|
9
|
+
export declare const Select: Story;
|
|
10
|
+
export declare const Checkbox: Story;
|
|
11
|
+
export declare const Radio: Story;
|
|
12
|
+
export declare const Switch: Story;
|
|
9
13
|
export declare const Sizes: Story;
|
|
10
14
|
export declare const ReadOnly: Story;
|
|
11
15
|
export declare const Disabled: Story;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
type Direction = 'top' | 'left' | 'bottom' | 'right';
|
|
2
|
+
type Alignment = 'start' | 'middle' | 'end';
|
|
3
|
+
export type VariantFlipOrder = {
|
|
4
|
+
start: string;
|
|
5
|
+
middle: string;
|
|
6
|
+
end: string;
|
|
7
|
+
};
|
|
8
|
+
export type PositionFlipOrder = {
|
|
9
|
+
top: string;
|
|
10
|
+
right: string;
|
|
11
|
+
bottom: string;
|
|
12
|
+
left: string;
|
|
13
|
+
};
|
|
14
|
+
export type NanoPopPosition = `${Direction}-${Alignment}` | Direction;
|
|
15
|
+
export type NanoPopOptions = {
|
|
16
|
+
container: DOMRect;
|
|
17
|
+
position: NanoPopPosition;
|
|
18
|
+
variantFlipOrder: VariantFlipOrder;
|
|
19
|
+
positionFlipOrder: PositionFlipOrder;
|
|
20
|
+
margin: number;
|
|
21
|
+
reference?: HTMLElement;
|
|
22
|
+
popper?: HTMLElement;
|
|
23
|
+
padding?: number;
|
|
24
|
+
};
|
|
25
|
+
export type PositionMatch = 'ts' | 'tm' | 'te' | 'bs' | 'bm' | 'be' | 'ls' | 'lm' | 'le' | 'rs' | 'rm' | 're';
|
|
26
|
+
export declare const defaults: {
|
|
27
|
+
variantFlipOrder: {
|
|
28
|
+
start: string;
|
|
29
|
+
middle: string;
|
|
30
|
+
end: string;
|
|
31
|
+
};
|
|
32
|
+
positionFlipOrder: {
|
|
33
|
+
top: string;
|
|
34
|
+
right: string;
|
|
35
|
+
bottom: string;
|
|
36
|
+
left: string;
|
|
37
|
+
};
|
|
38
|
+
position: string;
|
|
39
|
+
margin: number;
|
|
40
|
+
padding: number;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Repositions an element once using the provided options and elements.
|
|
44
|
+
* @param reference Reference element
|
|
45
|
+
* @param popper Popper element
|
|
46
|
+
* @param opt Optional, additional options
|
|
47
|
+
*/
|
|
48
|
+
export declare const reposition: (reference: HTMLElement, popper: HTMLElement, opt?: Partial<NanoPopOptions>) => PositionMatch | null;
|
|
49
|
+
export {};
|
package/mtds/nanopop.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const E = {
|
|
2
|
+
variantFlipOrder: { start: "sme", middle: "mse", end: "ems" },
|
|
3
|
+
positionFlipOrder: { top: "tbrl", right: "rltb", bottom: "btrl", left: "lrbt" },
|
|
4
|
+
position: "bottom",
|
|
5
|
+
margin: 8,
|
|
6
|
+
padding: 0
|
|
7
|
+
}, H = (a) => {
|
|
8
|
+
let t = a;
|
|
9
|
+
const n = {
|
|
10
|
+
bottom: 0,
|
|
11
|
+
height: (t == null ? void 0 : t.offsetHeight) || 0,
|
|
12
|
+
left: -window.scrollX,
|
|
13
|
+
right: 0,
|
|
14
|
+
top: -window.scrollY,
|
|
15
|
+
width: (t == null ? void 0 : t.offsetWidth) || 0
|
|
16
|
+
};
|
|
17
|
+
do
|
|
18
|
+
n.left += (t == null ? void 0 : t.offsetLeft) || 0, n.top += (t == null ? void 0 : t.offsetTop) || 0, t = (t == null ? void 0 : t.offsetParent) || null;
|
|
19
|
+
while (t);
|
|
20
|
+
return n.bottom = n.top + n.height, n.right = n.left + n.width, n;
|
|
21
|
+
}, P = (a, t, n) => {
|
|
22
|
+
const {
|
|
23
|
+
container: b,
|
|
24
|
+
margin: s,
|
|
25
|
+
padding: f,
|
|
26
|
+
position: w,
|
|
27
|
+
variantFlipOrder: y,
|
|
28
|
+
positionFlipOrder: x
|
|
29
|
+
} = {
|
|
30
|
+
container: document.documentElement.getBoundingClientRect(),
|
|
31
|
+
...E,
|
|
32
|
+
...n
|
|
33
|
+
}, { left: B, top: F } = t.style;
|
|
34
|
+
t.style.left = "0", t.style.top = "0";
|
|
35
|
+
const o = H(a), i = t.getBoundingClientRect(), K = {
|
|
36
|
+
t: o.top - i.height - s,
|
|
37
|
+
b: o.bottom + s,
|
|
38
|
+
r: o.right + s,
|
|
39
|
+
l: o.left - i.width - s
|
|
40
|
+
}, M = {
|
|
41
|
+
vs: o.left,
|
|
42
|
+
vm: o.left + o.width / 2 - i.width / 2,
|
|
43
|
+
ve: o.left + o.width - i.width,
|
|
44
|
+
hs: o.top,
|
|
45
|
+
hm: o.bottom - o.height / 2 - i.height / 2,
|
|
46
|
+
he: o.bottom - i.height
|
|
47
|
+
}, [O, S = "middle"] = w.split("-"), C = x[O], R = y[S], { top: c, left: d, bottom: m, right: g } = b;
|
|
48
|
+
for (const r of C) {
|
|
49
|
+
const e = r === "t" || r === "b";
|
|
50
|
+
let l = K[r];
|
|
51
|
+
const [p, u] = e ? ["top", "left"] : ["left", "top"], [T, z] = e ? [i.height, i.width] : [i.width, i.height], [L, V] = e ? [m, g] : [g, m], [W, $] = e ? [c, d] : [d, c];
|
|
52
|
+
if (!(l < W || l + T + f > L))
|
|
53
|
+
for (const v of R) {
|
|
54
|
+
let h = M[(e ? "v" : "h") + v];
|
|
55
|
+
if (!(h < $ || h + z + f > V))
|
|
56
|
+
return h -= i[u], l -= i[p], t.style[u] = `${h}px`, t.style[p] = `${l}px`, r + v;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return t.style.left = B, t.style.top = F, null;
|
|
60
|
+
};
|
|
61
|
+
export {
|
|
62
|
+
E as defaults,
|
|
63
|
+
P as reposition
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=nanopop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nanopop.js","sources":["../designsystem/nanopop.ts"],"sourcesContent":["// Inspired by https://github.com/simonwep/nanopop/\n\ntype Direction = 'top' | 'left' | 'bottom' | 'right';\ntype Alignment = 'start' | 'middle' | 'end';\n\nexport type VariantFlipOrder = {\n start: string;\n middle: string;\n end: string;\n};\n\nexport type PositionFlipOrder = {\n top: string;\n right: string;\n bottom: string;\n left: string;\n};\n\nexport type NanoPopPosition = `${Direction}-${Alignment}` | Direction;\n\nexport type NanoPopOptions = {\n container: DOMRect;\n position: NanoPopPosition;\n variantFlipOrder: VariantFlipOrder;\n positionFlipOrder: PositionFlipOrder;\n margin: number;\n reference?: HTMLElement;\n popper?: HTMLElement;\n padding?: number;\n};\n\ntype AvailablePositions = {\n t: number;\n b: number;\n l: number;\n r: number;\n};\n\ntype AvailableVariants = {\n vs: number;\n vm: number;\n ve: number;\n hs: number;\n hm: number;\n he: number;\n};\n\ntype PositionPairs = [Direction, Direction];\n\nexport type PositionMatch = 'ts' | 'tm' | 'te' | 'bs' | 'bm' | 'be' | 'ls' | 'lm' | 'le' | 'rs' | 'rm' | 're';\n\n// Export default\nexport const defaults = {\n variantFlipOrder: {start: 'sme', middle: 'mse', end: 'ems'},\n positionFlipOrder: {top: 'tbrl', right: 'rltb', bottom: 'btrl', left: 'lrbt'},\n position: 'bottom',\n margin: 8,\n padding: 0\n};\n\nconst getBoundingClientRectWithoutTransform = (element: HTMLElement | null) => {\n let el = element;\n const rect = { \n bottom: 0,\n height: el?.offsetHeight || 0,\n left: -window.scrollX,\n right: 0,\n top: -window.scrollY,\n width: el?.offsetWidth || 0\n };\n\n do {\n rect.left += el?.offsetLeft || 0;\n rect.top += el?.offsetTop || 0;\n el = (el?.offsetParent || null) as HTMLElement | null;\n } while (el);\n\n rect.bottom = rect.top + rect.height;\n rect.right = rect.left + rect.width;\n\n return rect;\n}\n\n/**\n * Repositions an element once using the provided options and elements.\n * @param reference Reference element\n * @param popper Popper element\n * @param opt Optional, additional options\n */\nexport const reposition = (\n reference: HTMLElement,\n popper: HTMLElement,\n opt?: Partial<NanoPopOptions>\n): PositionMatch | null => {\n const {\n container,\n margin,\n padding,\n position,\n variantFlipOrder,\n positionFlipOrder\n } = {\n container: document.documentElement.getBoundingClientRect(),\n ...defaults,\n ...opt\n };\n\n /**\n * Reset position to resolve viewport\n * See https://developer.mozilla.org/en-US/docs/Web/CSS/position#fixed\n */\n const {left: originalLeft, top: originalTop} = popper.style;\n popper.style.left = '0';\n popper.style.top = '0';\n\n const refBox = getBoundingClientRectWithoutTransform(reference);\n const popBox = popper.getBoundingClientRect();\n\n /**\n * Holds coordinates of top, left, bottom and right alignment\n */\n const positionStore: AvailablePositions = {\n t: refBox.top - popBox.height - margin,\n b: refBox.bottom + margin,\n r: refBox.right + margin,\n l: refBox.left - popBox.width - margin\n };\n\n /**\n * Holds corresponding variants (start, middle, end).\n * The values depend on horizontal / vertical orientation\n */\n const variantStore: AvailableVariants = {\n vs: refBox.left,\n vm: refBox.left + refBox.width / 2 - popBox.width / 2,\n ve: refBox.left + refBox.width - popBox.width,\n hs: refBox.top,\n hm: refBox.bottom - refBox.height / 2 - popBox.height / 2,\n he: refBox.bottom - popBox.height\n };\n\n // Extract position and variant\n // Top-start -> top is \"position\" and \"start\" is the variant\n const [posKey, varKey = 'middle'] = position.split('-');\n const positions = positionFlipOrder[posKey as keyof PositionFlipOrder];\n const variants = variantFlipOrder[varKey as keyof VariantFlipOrder];\n\n // Try out all possible combinations, starting with the preferred one.\n const {top, left, bottom, right} = container;\n\n for (const p of positions) {\n const vertical = (p === 't' || p === 'b');\n\n // The position-value\n let positionVal = positionStore[p as keyof AvailablePositions];\n\n // Which property has to be changes.\n const [positionKey, variantKey] = (vertical ? ['top', 'left'] : ['left', 'top']) as PositionPairs;\n\n /**\n * box refers to the size of the popper element. Depending on the orientation this is width or height.\n * The limit is the corresponding, maximum value for this position.\n */\n const [positionSize, variantSize] = vertical ? [popBox.height, popBox.width] : [popBox.width, popBox.height];\n const [positionMaximum, variantMaximum] = vertical ? [bottom, right] : [right, bottom];\n const [positionMinimum, variantMinimum] = vertical ? [top, left] : [left, top];\n\n // Skip pre-clipped values\n if (positionVal < positionMinimum || (positionVal + positionSize + padding) > positionMaximum) continue;\n\n for (const v of variants) {\n // The position-value, the related size value of the popper and the limit\n let variantVal = variantStore[((vertical ? 'v' : 'h') + v) as keyof AvailableVariants];\n if (variantVal < variantMinimum || (variantVal + variantSize + padding) > variantMaximum) continue;\n\n // Subtract popBox's initial position\n variantVal -= popBox[variantKey];\n positionVal -= popBox[positionKey];\n\n // Apply styles and normalize viewport\n popper.style[variantKey] = `${variantVal}px`;\n popper.style[positionKey] = `${positionVal}px`;\n\n return (p + v) as PositionMatch;\n }\n }\n\n // Revert style values (won't work with styled-elements or similar systems)\n // \"Fix\" for https://github.com/Simonwep/nanopop/issues/7\n popper.style.left = originalLeft;\n popper.style.top = originalTop;\n\n return null;\n};\n"],"names":["defaults","getBoundingClientRectWithoutTransform","element","el","rect","reposition","reference","popper","opt","container","margin","padding","position","variantFlipOrder","positionFlipOrder","originalLeft","originalTop","refBox","popBox","positionStore","variantStore","posKey","varKey","positions","variants","top","left","bottom","right","p","vertical","positionVal","positionKey","variantKey","positionSize","variantSize","positionMaximum","variantMaximum","positionMinimum","variantMinimum","variantVal"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ declare const meta: {
|
|
|
4
4
|
};
|
|
5
5
|
export default meta;
|
|
6
6
|
type Story = StoryObj<typeof meta>;
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const
|
|
7
|
+
export declare const WithLinks: Story;
|
|
8
|
+
export declare const WithButtons: Story;
|
|
9
9
|
export declare const Sizes: Story;
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const WithHelper: Story;
|
package/mtds/popover/popover.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { reposition as
|
|
1
|
+
import { reposition as l } from "../nanopop.js";
|
|
2
2
|
import m from "../styles.module.css.js";
|
|
3
|
-
import { IS_BROWSER as
|
|
4
|
-
const f = m.popover.split(" ")[0], u = { toJSON: () => "", bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 },
|
|
5
|
-
|
|
6
|
-
function
|
|
7
|
-
const r =
|
|
8
|
-
if (!
|
|
3
|
+
import { IS_BROWSER as p, on as s, QUICK_EVENT as i, off as c } from "../utils.js";
|
|
4
|
+
const f = m.popover.split(" ")[0], u = { toJSON: () => "", bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 }, h = /(top|right|bottom|left)-(start|middle|end)/;
|
|
5
|
+
p && w(document);
|
|
6
|
+
function b(t, o) {
|
|
7
|
+
const r = o.getAttribute("data-position") || "bottom-start";
|
|
8
|
+
if (!h.test(r)) return console.error(`Found invalid data-position="${r}"
|
|
9
9
|
- It must be [top|right|bottom|left]-[start|middle|end]
|
|
10
|
-
- Found on element:`,
|
|
11
|
-
const
|
|
10
|
+
- Found on element:`, o);
|
|
11
|
+
const e = () => l(t, o, {
|
|
12
12
|
container: { ...u, bottom: window.innerHeight, right: window.innerWidth },
|
|
13
13
|
margin: 4,
|
|
14
14
|
// Margin between the popper element and the reference
|
|
@@ -16,25 +16,33 @@ function h(t, e) {
|
|
|
16
16
|
// Minimum space between the popper and the container
|
|
17
17
|
position: r
|
|
18
18
|
// [top|right|bottom|left]-[start|middle|end]
|
|
19
|
-
}),
|
|
20
|
-
|
|
19
|
+
}), n = ({ newState: d }) => {
|
|
20
|
+
d !== "open" && (c(document, "DOMContentReady", e, i), c(o, "toggle", n, i), c(window, "load,resize,scroll", e, i));
|
|
21
21
|
};
|
|
22
|
-
document.fonts.ready.then(
|
|
22
|
+
document.fonts.ready.then(e), s(document, "DOMContentReady", e, i), s(o, "toggle", n, i), s(window, "load,resize,scroll", e, i);
|
|
23
23
|
}
|
|
24
|
-
function
|
|
25
|
-
var
|
|
26
|
-
const
|
|
27
|
-
|
|
24
|
+
function g({ target: t, newState: o }) {
|
|
25
|
+
var n;
|
|
26
|
+
const e = o === "open" && t instanceof HTMLElement && t.classList.contains(f) && ((n = t.getRootNode()) == null ? void 0 : n.querySelector(`[popovertarget="${t.id}"]`));
|
|
27
|
+
e && b(e, t);
|
|
28
28
|
}
|
|
29
|
-
function
|
|
30
|
-
|
|
29
|
+
function a({ target: t }) {
|
|
30
|
+
var r;
|
|
31
|
+
const o = t instanceof Element && t.closest("a[popovertarget]");
|
|
32
|
+
if (o) {
|
|
33
|
+
const e = o.getRootNode(), n = (r = e.getElementById) == null ? void 0 : r.call(e, o.getAttribute("popovertarget") || ""), d = o.getAttribute("popovertargetaction") || "toggle";
|
|
34
|
+
n == null || n.togglePopover(d === "show" || (d === "hide" ? !1 : void 0));
|
|
35
|
+
}
|
|
31
36
|
}
|
|
32
|
-
function
|
|
33
|
-
|
|
37
|
+
function w(t) {
|
|
38
|
+
s(t, "click", a), s(t, "toggle", g, i);
|
|
39
|
+
}
|
|
40
|
+
function R(t) {
|
|
41
|
+
c(t, "click", a), c(t, "toggle", g, i);
|
|
34
42
|
}
|
|
35
43
|
export {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
b as anchorPosition,
|
|
45
|
+
w as observe,
|
|
46
|
+
R as unobserve
|
|
39
47
|
};
|
|
40
48
|
//# sourceMappingURL=popover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.js","sources":["../../designsystem/popover/popover.ts"],"sourcesContent":["import { type NanoPopPosition, reposition } from 'nanopop';\nimport styles from '../styles.module.css';\nimport { IS_BROWSER, QUICK_EVENT, off, on } from '../utils';\n\nconst CSS_POPOVER = styles.popover.split(' ')[0];\nconst CONTAINER = { toJSON: () => '', bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 };\nconst POSITIONS = /(top|right|bottom|left)-(start|middle|end)/;\ntype Toggle = Event & { newState?: string };\n\nif (IS_BROWSER) observe(document);\n\n// Not exposed as a hook, as it is nice to allow consuming components to use it as a callback\nexport function anchorPosition(anchor: HTMLElement, popover: HTMLElement) {\n const position = (popover.getAttribute('data-position') || 'bottom-start') as NanoPopPosition;\n if (!POSITIONS.test(position)) return console.error(`Found invalid data-position=\"${position}\"\\n- It must be [top|right|bottom|left]-[start|middle|end]\\n- Found on element:`, popover);\n\n const update = () =>\n reposition(anchor, popover, {\n container: { ...CONTAINER, bottom: window.innerHeight, right: window.innerWidth },\n margin: 4, // Margin between the popper element and the reference\n padding: 16, // Minimum space between the popper and the container\n position // [top|right|bottom|left]-[start|middle|end]\n });\n\n const removeEvent = ({ newState }: Toggle) => {\n if (newState === 'open') return;\n off(document, 'DOMContentReady', update, QUICK_EVENT);\n off(popover, 'toggle', removeEvent, QUICK_EVENT);\n off(window, 'load,resize,scroll', update, QUICK_EVENT);\n }\n \n\n document.fonts.ready.then(update); // Inital render and when fonts load\n on(document, 'DOMContentReady', update, QUICK_EVENT);\n on(popover, 'toggle', removeEvent, QUICK_EVENT);\n on(window, 'load,resize,scroll', update, QUICK_EVENT);\n}\n\nfunction handleToggle ({ target: el, newState }: Toggle){\n const isPopping = newState === 'open' && el instanceof HTMLElement && el.classList.contains(CSS_POPOVER);\n const anchor = isPopping && (el.getRootNode() as ShadowRoot)?.querySelector<HTMLElement>(`[popovertarget=\"${el.id}\"]`);\n\n if (anchor) anchorPosition(anchor, el);\n}\n\nexport function observe(el: Node) {\n on(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}\nexport function unobserve(el: Node) {\n off(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}"],"names":["CSS_POPOVER","styles","CONTAINER","POSITIONS","IS_BROWSER","anchorPosition","anchor","popover","position","update","reposition","removeEvent","newState","off","QUICK_EVENT","on","handleToggle","el","_a","observe","unobserve"],"mappings":";;;AAIA,MAAMA,IAAcC,EAAO,QAAQ,MAAM,GAAG,EAAE,CAAC,GACzCC,IAAY,EAAE,QAAQ,MAAM,IAAI,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,EAAE,GACtGC,IAAY;AAGdC,OAAoB,QAAQ;AAGhB,SAAAC,EAAeC,GAAqBC,GAAsB;AACxE,QAAMC,IAAYD,EAAQ,aAAa,eAAe,KAAK;AACvD,MAAA,CAACJ,EAAU,KAAKK,CAAQ,EAAU,QAAA,QAAQ,MAAM,gCAAgCA,CAAQ;AAAA;AAAA,sBAAmFD,CAAO;AAEtL,QAAME,IAAS,MACbC,EAAWJ,GAAQC,GAAS;AAAA,IAC1B,WAAW,EAAE,GAAGL,GAAW,QAAQ,OAAO,aAAa,OAAO,OAAO,WAAW;AAAA,IAChF,QAAQ;AAAA;AAAA,IACR,SAAS;AAAA;AAAA,IACT,UAAAM;AAAA;AAAA,EAAA,CACD,GAEGG,IAAc,CAAC,EAAE,UAAAC,QAAuB;AAC5C,IAAIA,MAAa,WACbC,EAAA,UAAU,mBAAmBJ,GAAQK,CAAW,GAChDD,EAAAN,GAAS,UAAUI,GAAaG,CAAW,GAC3CD,EAAA,QAAQ,sBAAsBJ,GAAQK,CAAW;AAAA,EACvD;AAGS,WAAA,MAAM,MAAM,KAAKL,CAAM,GAC7BM,EAAA,UAAU,mBAAmBN,GAAQK,CAAW,GAChDC,EAAAR,GAAS,UAAUI,GAAaG,CAAW,GAC3CC,EAAA,QAAQ,sBAAsBN,GAAQK,CAAW;AACtD;AAEA,SAASE,EAAc,EAAE,QAAQC,GAAI,UAAAL,KAAmB;;AAEhD,QAAAN,IADYM,MAAa,UAAUK,aAAc,eAAeA,EAAG,UAAU,SAASjB,CAAW,OAC1EkB,IAAAD,EAAG,kBAAH,gBAAAC,EAAiC,cAA2B,mBAAmBD,EAAG,EAAE;AAE7G,EAAAX,KAAuBD,EAAAC,GAAQW,CAAE;AACvC;
|
|
1
|
+
{"version":3,"file":"popover.js","sources":["../../designsystem/popover/popover.ts"],"sourcesContent":["import { type NanoPopPosition, reposition } from '../nanopop';\nimport styles from '../styles.module.css';\nimport { IS_BROWSER, QUICK_EVENT, off, on } from '../utils';\n\nconst CSS_POPOVER = styles.popover.split(' ')[0];\nconst CONTAINER = { toJSON: () => '', bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 };\nconst POSITIONS = /(top|right|bottom|left)-(start|middle|end)/;\ntype Toggle = Event & { newState?: string };\n\nif (IS_BROWSER) observe(document);\n\n// Not exposed as a hook, as it is nice to allow consuming components to use it as a callback\nexport function anchorPosition(anchor: HTMLElement, popover: HTMLElement) {\n const position = (popover.getAttribute('data-position') || 'bottom-start') as NanoPopPosition;\n if (!POSITIONS.test(position)) return console.error(`Found invalid data-position=\"${position}\"\\n- It must be [top|right|bottom|left]-[start|middle|end]\\n- Found on element:`, popover);\n\n const update = () =>\n reposition(anchor, popover, {\n container: { ...CONTAINER, bottom: window.innerHeight, right: window.innerWidth },\n margin: 4, // Margin between the popper element and the reference\n padding: 16, // Minimum space between the popper and the container\n position // [top|right|bottom|left]-[start|middle|end]\n });\n\n const removeEvent = ({ newState }: Toggle) => {\n if (newState === 'open') return;\n off(document, 'DOMContentReady', update, QUICK_EVENT);\n off(popover, 'toggle', removeEvent, QUICK_EVENT);\n off(window, 'load,resize,scroll', update, QUICK_EVENT);\n }\n \n\n document.fonts.ready.then(update); // Inital render and when fonts load\n on(document, 'DOMContentReady', update, QUICK_EVENT);\n on(popover, 'toggle', removeEvent, QUICK_EVENT);\n on(window, 'load,resize,scroll', update, QUICK_EVENT);\n}\n\nfunction handleToggle ({ target: el, newState }: Toggle){\n const isPopping = newState === 'open' && el instanceof HTMLElement && el.classList.contains(CSS_POPOVER);\n const anchor = isPopping && (el.getRootNode() as ShadowRoot)?.querySelector<HTMLElement>(`[popovertarget=\"${el.id}\"]`);\n\n if (anchor) anchorPosition(anchor, el);\n}\n\n// Polyfill popovertarget for <a> (not supported by native)\nfunction handleLinkClick ({ target }: Event){\n const el = target instanceof Element && target.closest('a[popovertarget]');\n\n if (el) {\n const root = el.getRootNode() as ShadowRoot;\n const target = root.getElementById?.(el.getAttribute('popovertarget') || '');\n const action = el.getAttribute('popovertargetaction') || 'toggle';\n\n target?.togglePopover(action === 'show' || (action === 'hide' ? false : undefined));\n }\n}\n\n\nexport function observe(el: Node) {\n on(el, 'click', handleLinkClick); // Allow `<a>` to use `popovertarget` as well\n on(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}\nexport function unobserve(el: Node) {\n off(el, 'click', handleLinkClick);\n off(el, 'toggle', handleToggle, QUICK_EVENT); // Use capture since toggle does not bubble\n}"],"names":["CSS_POPOVER","styles","CONTAINER","POSITIONS","IS_BROWSER","anchorPosition","anchor","popover","position","update","reposition","removeEvent","newState","off","QUICK_EVENT","on","handleToggle","el","_a","handleLinkClick","target","root","action","observe","unobserve"],"mappings":";;;AAIA,MAAMA,IAAcC,EAAO,QAAQ,MAAM,GAAG,EAAE,CAAC,GACzCC,IAAY,EAAE,QAAQ,MAAM,IAAI,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,EAAE,GACtGC,IAAY;AAGdC,OAAoB,QAAQ;AAGhB,SAAAC,EAAeC,GAAqBC,GAAsB;AACxE,QAAMC,IAAYD,EAAQ,aAAa,eAAe,KAAK;AACvD,MAAA,CAACJ,EAAU,KAAKK,CAAQ,EAAU,QAAA,QAAQ,MAAM,gCAAgCA,CAAQ;AAAA;AAAA,sBAAmFD,CAAO;AAEtL,QAAME,IAAS,MACbC,EAAWJ,GAAQC,GAAS;AAAA,IAC1B,WAAW,EAAE,GAAGL,GAAW,QAAQ,OAAO,aAAa,OAAO,OAAO,WAAW;AAAA,IAChF,QAAQ;AAAA;AAAA,IACR,SAAS;AAAA;AAAA,IACT,UAAAM;AAAA;AAAA,EAAA,CACD,GAEGG,IAAc,CAAC,EAAE,UAAAC,QAAuB;AAC5C,IAAIA,MAAa,WACbC,EAAA,UAAU,mBAAmBJ,GAAQK,CAAW,GAChDD,EAAAN,GAAS,UAAUI,GAAaG,CAAW,GAC3CD,EAAA,QAAQ,sBAAsBJ,GAAQK,CAAW;AAAA,EACvD;AAGS,WAAA,MAAM,MAAM,KAAKL,CAAM,GAC7BM,EAAA,UAAU,mBAAmBN,GAAQK,CAAW,GAChDC,EAAAR,GAAS,UAAUI,GAAaG,CAAW,GAC3CC,EAAA,QAAQ,sBAAsBN,GAAQK,CAAW;AACtD;AAEA,SAASE,EAAc,EAAE,QAAQC,GAAI,UAAAL,KAAmB;;AAEhD,QAAAN,IADYM,MAAa,UAAUK,aAAc,eAAeA,EAAG,UAAU,SAASjB,CAAW,OAC1EkB,IAAAD,EAAG,kBAAH,gBAAAC,EAAiC,cAA2B,mBAAmBD,EAAG,EAAE;AAE7G,EAAAX,KAAuBD,EAAAC,GAAQW,CAAE;AACvC;AAGA,SAASE,EAAiB,EAAE,QAAAC,KAAgB;;AAC1C,QAAMH,IAAKG,aAAkB,WAAWA,EAAO,QAAQ,kBAAkB;AAEzE,MAAIH,GAAI;AACA,UAAAI,IAAOJ,EAAG,YAAY,GACtBG,KAASF,IAAAG,EAAK,mBAAL,gBAAAH,EAAA,KAAAG,GAAsBJ,EAAG,aAAa,eAAe,KAAK,KACnEK,IAASL,EAAG,aAAa,qBAAqB,KAAK;AAEzDG,IAAAA,KAAAA,QAAAA,EAAQ,cAAcE,MAAW,WAAWA,MAAW,SAAS,KAAQ;AAAA,EAAU;AAEtF;AAGO,SAASC,EAAQN,GAAU;AAC7B,EAAAF,EAAAE,GAAI,SAASE,CAAe,GAC5BJ,EAAAE,GAAI,UAAUD,GAAcF,CAAW;AAC5C;AACO,SAASU,EAAUP,GAAU;AAC9B,EAAAJ,EAAAI,GAAI,SAASE,CAAe,GAC5BN,EAAAI,GAAI,UAAUD,GAAcF,CAAW;AAC7C;"}
|