@nordhealth/components 3.9.0 → 3.11.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.
Files changed (111) hide show
  1. package/custom-elements.json +4769 -4154
  2. package/lib/Avatar.js +1 -1
  3. package/lib/Avatar.js.map +1 -1
  4. package/lib/Button.js +1 -1
  5. package/lib/Button.js.map +1 -1
  6. package/lib/ButtonGroup.js +1 -1
  7. package/lib/ButtonGroup.js.map +1 -1
  8. package/lib/{Calendar-3170b9d4.js → Calendar-1517347e.js} +2 -2
  9. package/lib/Calendar-1517347e.js.map +1 -0
  10. package/lib/Calendar.js +1 -1
  11. package/lib/Checkbox.js +1 -1
  12. package/lib/Checkbox.js.map +1 -1
  13. package/lib/CommandMenu.js +1 -1
  14. package/lib/CommandMenu.js.map +1 -1
  15. package/lib/DatePicker.js +1 -1
  16. package/lib/DatePicker.js.map +1 -1
  17. package/lib/Dropdown.js +1 -1
  18. package/lib/DropdownGroup.js +1 -1
  19. package/lib/DropdownGroup.js.map +1 -1
  20. package/lib/Fieldset.js +1 -1
  21. package/lib/Fieldset.js.map +1 -1
  22. package/lib/FormAssociatedMixin-3fa55d53.js +2 -0
  23. package/lib/FormAssociatedMixin-3fa55d53.js.map +1 -0
  24. package/lib/FormDataController-592ff3dd.js +2 -0
  25. package/lib/FormDataController-592ff3dd.js.map +1 -0
  26. package/lib/IconManager.js +1 -1
  27. package/lib/Input.js +1 -1
  28. package/lib/Input.js.map +1 -1
  29. package/lib/Layout.js +1 -1
  30. package/lib/Layout.js.map +1 -1
  31. package/lib/LightDismissController-11ae4745.js +2 -0
  32. package/lib/LightDismissController-11ae4745.js.map +1 -0
  33. package/lib/LocalizeController.js +1 -1
  34. package/lib/LocalizeController.js.map +1 -1
  35. package/lib/Message.js +1 -1
  36. package/lib/Message.js.map +1 -1
  37. package/lib/Modal.js +1 -1
  38. package/lib/Modal.js.map +1 -1
  39. package/lib/ModalController.js +1 -1
  40. package/lib/ModalController.js.map +1 -1
  41. package/lib/NavGroup.js +1 -1
  42. package/lib/NavGroup.js.map +1 -1
  43. package/lib/NavItem.js +1 -1
  44. package/lib/NavItem.js.map +1 -1
  45. package/lib/{NavToggle-cb2c3648.js → NavToggle-b54db654.js} +1 -1
  46. package/lib/{NavToggle-cb2c3648.js.map → NavToggle-b54db654.js.map} +1 -1
  47. package/lib/NavToggle.js +1 -1
  48. package/lib/Navigation.js +1 -1
  49. package/lib/Navigation.js.map +1 -1
  50. package/lib/Notification.js +1 -1
  51. package/lib/Notification.js.map +1 -1
  52. package/lib/Popout-2f9d860d.js +2 -0
  53. package/lib/Popout-2f9d860d.js.map +1 -0
  54. package/lib/Popout.js +1 -1
  55. package/lib/Radio.js +1 -1
  56. package/lib/Radio.js.map +1 -1
  57. package/lib/Range.js +1 -1
  58. package/lib/Range.js.map +1 -1
  59. package/lib/Select.js +1 -1
  60. package/lib/Select.js.map +1 -1
  61. package/lib/Tag.js +2 -0
  62. package/lib/Tag.js.map +1 -0
  63. package/lib/Textarea.js +1 -1
  64. package/lib/Textarea.js.map +1 -1
  65. package/lib/Toast.js +1 -1
  66. package/lib/Toast.js.map +1 -1
  67. package/lib/Toggle.js +1 -1
  68. package/lib/Toggle.js.map +1 -1
  69. package/lib/bundle.js +11 -11
  70. package/lib/bundle.js.map +1 -1
  71. package/lib/en-us.js +1 -1
  72. package/lib/en-us.js.map +1 -1
  73. package/lib/fi-fi.js +1 -1
  74. package/lib/fi-fi.js.map +1 -1
  75. package/lib/index.js +1 -1
  76. package/lib/interface-checked-small-07292940.js +2 -0
  77. package/lib/interface-checked-small-07292940.js.map +1 -0
  78. package/lib/localization9.js +2 -0
  79. package/lib/localization9.js.map +1 -0
  80. package/lib/src/avatar/Avatar.d.ts +1 -1
  81. package/lib/src/avatar/Avatar.test.d.ts +1 -0
  82. package/lib/src/button/Button.d.ts +4 -0
  83. package/lib/src/button-group/ButtonGroup.d.ts +12 -2
  84. package/lib/src/calendar/Calendar.d.ts +2 -2
  85. package/lib/src/common/controllers/FocusTrapController.d.ts +2 -8
  86. package/lib/src/common/controllers/LightDismissController.d.ts +3 -1
  87. package/lib/src/common/inert.d.ts +1 -0
  88. package/lib/src/date-picker/DatePicker.d.ts +2 -2
  89. package/lib/src/drawer/Drawer.test.d.ts +1 -0
  90. package/lib/src/footer/Footer.test.d.ts +1 -0
  91. package/lib/src/header/Header.test.d.ts +1 -0
  92. package/lib/src/index.d.ts +1 -0
  93. package/lib/src/localization/en-us.d.ts +3 -0
  94. package/lib/src/localization/translation.d.ts +3 -0
  95. package/lib/src/modal/Modal.d.ts +1 -14
  96. package/lib/src/modal/Modal.test.d.ts +1 -0
  97. package/lib/src/navigation/Navigation.d.ts +4 -0
  98. package/lib/src/navigation/Navigation.test.d.ts +6 -0
  99. package/lib/src/tag/Tag.d.ts +44 -0
  100. package/lib/src/tag/Tag.test.d.ts +6 -0
  101. package/lib/src/tag/localization.d.ts +4 -0
  102. package/lib/translation.js +1 -1
  103. package/lib/translation.js.map +1 -1
  104. package/package.json +3 -3
  105. package/lib/Calendar-3170b9d4.js.map +0 -1
  106. package/lib/FormAssociatedMixin-a278fda4.js +0 -2
  107. package/lib/FormAssociatedMixin-a278fda4.js.map +0 -1
  108. package/lib/LightDismissController-a2645ae6.js +0 -2
  109. package/lib/LightDismissController-a2645ae6.js.map +0 -1
  110. package/lib/Popout-2220e77b.js +0 -2
  111. package/lib/Popout-2220e77b.js.map +0 -1
package/lib/en-us.js CHANGED
@@ -1,2 +1,2 @@
1
- import o from"./localization.js";import a from"./localization2.js";import i from"./localization3.js";import r from"./localization4.js";import n from"./localization5.js";import t from"./localization6.js";import l from"./localization7.js";import m from"./localization8.js";const d={$lang:"en-US",$name:"English",$dir:"ltr","nord-command-menu":o,"nord-calendar":i,"nord-date-picker":a,"nord-modal":r,"nord-nav-toggle":n,"nord-textarea":t,"nord-notification":l,"nord-message":m};export{d as default};
1
+ import o from"./localization.js";import a from"./localization2.js";import i from"./localization3.js";import r from"./localization4.js";import n from"./localization5.js";import t from"./localization6.js";import l from"./localization7.js";import m from"./localization8.js";import d from"./localization9.js";const c={$lang:"en-US",$name:"English",$dir:"ltr","nord-command-menu":o,"nord-calendar":i,"nord-date-picker":a,"nord-modal":r,"nord-nav-toggle":n,"nord-textarea":t,"nord-notification":l,"nord-message":m,"nord-tag":d};export{c as default};
2
2
  //# sourceMappingURL=en-us.js.map
package/lib/en-us.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"en-us.js","sources":["../src/localization/en-us.ts"],"sourcesContent":["import commandMenuLocalization from \"../command-menu/localization.js\"\nimport datePickerLocalization from \"../date-picker/localization.js\"\nimport calendarLocalization from \"../calendar/localization.js\"\nimport modalLocalization from \"../modal/localization.js\"\nimport navToggleLocalization from \"../nav-toggle/localization.js\"\nimport textareaLocalization from \"../textarea/localization.js\"\nimport notificationLocalization from \"../notification/localization.js\"\nimport messageLocalization from \"../message/localization.js\"\n\nconst en = {\n $lang: \"en-US\",\n $name: \"English\",\n $dir: \"ltr\" as \"ltr\" | \"rtl\",\n \"nord-command-menu\": commandMenuLocalization,\n \"nord-calendar\": calendarLocalization,\n \"nord-date-picker\": datePickerLocalization,\n \"nord-modal\": modalLocalization,\n \"nord-nav-toggle\": navToggleLocalization,\n \"nord-textarea\": textareaLocalization,\n \"nord-notification\": notificationLocalization,\n \"nord-message\": messageLocalization,\n}\n\nexport default en\n"],"names":["en","$lang","$name","$dir","commandMenuLocalization","calendarLocalization","datePickerLocalization","modalLocalization","navToggleLocalization","textareaLocalization","notificationLocalization","messageLocalization"],"mappings":"+QASA,MAAMA,EAAK,CACTC,MAAO,QACPC,MAAO,UACPC,KAAM,MACN,oBAAqBC,EACrB,gBAAiBC,EACjB,mBAAoBC,EACpB,aAAcC,EACd,kBAAmBC,EACnB,gBAAiBC,EACjB,oBAAqBC,EACrB,eAAgBC"}
1
+ {"version":3,"file":"en-us.js","sources":["../src/localization/en-us.ts"],"sourcesContent":["import commandMenuLocalization from \"../command-menu/localization.js\"\nimport datePickerLocalization from \"../date-picker/localization.js\"\nimport calendarLocalization from \"../calendar/localization.js\"\nimport modalLocalization from \"../modal/localization.js\"\nimport navToggleLocalization from \"../nav-toggle/localization.js\"\nimport textareaLocalization from \"../textarea/localization.js\"\nimport notificationLocalization from \"../notification/localization.js\"\nimport messageLocalization from \"../message/localization.js\"\nimport tagLocalization from \"../tag/localization.js\"\n\nconst en = {\n $lang: \"en-US\",\n $name: \"English\",\n $dir: \"ltr\" as \"ltr\" | \"rtl\",\n \"nord-command-menu\": commandMenuLocalization,\n \"nord-calendar\": calendarLocalization,\n \"nord-date-picker\": datePickerLocalization,\n \"nord-modal\": modalLocalization,\n \"nord-nav-toggle\": navToggleLocalization,\n \"nord-textarea\": textareaLocalization,\n \"nord-notification\": notificationLocalization,\n \"nord-message\": messageLocalization,\n \"nord-tag\": tagLocalization,\n}\n\nexport default en\n"],"names":["en","$lang","$name","$dir","commandMenuLocalization","calendarLocalization","datePickerLocalization","modalLocalization","navToggleLocalization","textareaLocalization","notificationLocalization","messageLocalization","tagLocalization"],"mappings":"iTAUA,MAAMA,EAAK,CACTC,MAAO,QACPC,MAAO,UACPC,KAAM,MACN,oBAAqBC,EACrB,gBAAiBC,EACjB,mBAAoBC,EACpB,aAAcC,EACd,kBAAmBC,EACnB,gBAAiBC,EACjB,oBAAqBC,EACrB,eAAgBC,EAChB,WAAYC"}
package/lib/fi-fi.js CHANGED
@@ -1,2 +1,2 @@
1
- const a={$lang:"fi",$name:"Suomi",$dir:"ltr","nord-command-menu":{instructions:"Paina 'Enter' vahvistaaksesi valinnan tai 'Escape' peruuttaaksesi",inputLabel:"Kirjoita komento jonka haluat suorittaa.",footerArrowKeys:"Siirry",footerEnterKey:"Valitse",footerEscapeKey:"Esc sulje",footerBackspaceKey:"Siirry takaisin",noResults:a=>`Ei tuloksia haulle "${a}"`,tip:"Vinkki: jotkin haut vaativat tarkan hakutermin. Koita kirjoittaa koko hakutermi kokonaisuudessaan, tai kokeile toista sanaa tai fraasia.",placeholder:"Kirjoita komento tai hakusana…"},"nord-calendar":{prevMonthLabel:"Edellinen kuukausi",nextMonthLabel:"Seuraava kuukausi",monthSelectLabel:"Kuukausi",yearSelectLabel:"Vuosi"},"nord-date-picker":{modalHeading:"Valitse päivämäärä",closeLabel:"Sulje ikkuna",buttonLabel:"Valitse päivämäärä",selectedDateMessage:"Valittu päivämäärä on"},"nord-modal":{closeLabel:"Sulje ikkuna"},"nord-nav-toggle":{label:"Näytä/Piilota valikko"},"nord-textarea":{remainingCharacters:a=>`${a} merkkiä jäljellä`},"nord-notification":{dismissLabel:"Sulje ilmoitus"},"nord-message":{unreadLabel:"Lukematon"}};export{a as default};
1
+ const a={$lang:"fi",$name:"Suomi",$dir:"ltr","nord-command-menu":{instructions:"Paina 'Enter' vahvistaaksesi valinnan tai 'Escape' peruuttaaksesi",inputLabel:"Kirjoita komento jonka haluat suorittaa.",footerArrowKeys:"Siirry",footerEnterKey:"Valitse",footerEscapeKey:"Esc sulje",footerBackspaceKey:"Siirry takaisin",noResults:a=>`Ei tuloksia haulle "${a}"`,tip:"Vinkki: jotkin haut vaativat tarkan hakutermin. Koita kirjoittaa koko hakutermi kokonaisuudessaan, tai kokeile toista sanaa tai fraasia.",placeholder:"Kirjoita komento tai hakusana…"},"nord-calendar":{prevMonthLabel:"Edellinen kuukausi",nextMonthLabel:"Seuraava kuukausi",monthSelectLabel:"Kuukausi",yearSelectLabel:"Vuosi"},"nord-date-picker":{modalHeading:"Valitse päivämäärä",closeLabel:"Sulje ikkuna",buttonLabel:"Valitse päivämäärä",selectedDateMessage:"Valittu päivämäärä on"},"nord-modal":{closeLabel:"Sulje ikkuna"},"nord-nav-toggle":{label:"Näytä/Piilota valikko"},"nord-textarea":{remainingCharacters:a=>`${a} merkkiä jäljellä`},"nord-notification":{dismissLabel:"Sulje ilmoitus"},"nord-message":{unreadLabel:"Lukematon"},"nord-tag":{removeLabel:"Poista"}};export{a as default};
2
2
  //# sourceMappingURL=fi-fi.js.map
package/lib/fi-fi.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fi-fi.js","sources":["../src/localization/fi-fi.ts"],"sourcesContent":["import { Translation } from \"./translation.js\"\n\nconst fi: Translation = {\n $lang: \"fi\",\n $name: \"Suomi\",\n $dir: \"ltr\",\n\n \"nord-command-menu\": {\n instructions: \"Paina 'Enter' vahvistaaksesi valinnan tai 'Escape' peruuttaaksesi\",\n inputLabel: \"Kirjoita komento jonka haluat suorittaa.\",\n footerArrowKeys: \"Siirry\",\n footerEnterKey: \"Valitse\",\n footerEscapeKey: \"Esc sulje\",\n footerBackspaceKey: \"Siirry takaisin\",\n noResults: searchTerm => `Ei tuloksia haulle \"${searchTerm}\"`,\n tip: \"Vinkki: jotkin haut vaativat tarkan hakutermin. Koita kirjoittaa koko hakutermi kokonaisuudessaan, tai kokeile toista sanaa tai fraasia.\",\n placeholder: \"Kirjoita komento tai hakusana…\",\n },\n\n \"nord-calendar\": {\n prevMonthLabel: \"Edellinen kuukausi\",\n nextMonthLabel: \"Seuraava kuukausi\",\n monthSelectLabel: \"Kuukausi\",\n yearSelectLabel: \"Vuosi\",\n },\n\n \"nord-date-picker\": {\n modalHeading: \"Valitse päivämäärä\",\n closeLabel: \"Sulje ikkuna\",\n buttonLabel: \"Valitse päivämäärä\",\n selectedDateMessage: \"Valittu päivämäärä on\",\n },\n\n \"nord-modal\": {\n closeLabel: \"Sulje ikkuna\",\n },\n\n \"nord-nav-toggle\": {\n label: \"Näytä/Piilota valikko\",\n },\n\n \"nord-textarea\": {\n remainingCharacters: (remaining: number) => `${remaining} merkkiä jäljellä`,\n },\n\n \"nord-notification\": {\n dismissLabel: \"Sulje ilmoitus\",\n },\n\n \"nord-message\": {\n unreadLabel: \"Lukematon\",\n },\n}\n\nexport default fi\n"],"names":["fi","$lang","$name","$dir","instructions","inputLabel","footerArrowKeys","footerEnterKey","footerEscapeKey","footerBackspaceKey","noResults","searchTerm","tip","placeholder","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","modalHeading","closeLabel","buttonLabel","selectedDateMessage","label","remainingCharacters","remaining","dismissLabel","unreadLabel"],"mappings":"AAEA,MAAMA,EAAkB,CACtBC,MAAO,KACPC,MAAO,QACPC,KAAM,MAEN,oBAAqB,CACnBC,aAAc,oEACdC,WAAY,2CACZC,gBAAiB,SACjBC,eAAgB,UAChBC,gBAAiB,YACjBC,mBAAoB,kBACpBC,UAAWC,GAAc,uBAAuBA,KAChDC,IAAK,2IACLC,YAAa,kCAGf,gBAAiB,CACfC,eAAgB,qBAChBC,eAAgB,oBAChBC,iBAAkB,WAClBC,gBAAiB,SAGnB,mBAAoB,CAClBC,aAAc,qBACdC,WAAY,eACZC,YAAa,qBACbC,oBAAqB,yBAGvB,aAAc,CACZF,WAAY,gBAGd,kBAAmB,CACjBG,MAAO,yBAGT,gBAAiB,CACfC,oBAAsBC,GAAsB,GAAGA,sBAGjD,oBAAqB,CACnBC,aAAc,kBAGhB,eAAgB,CACdC,YAAa"}
1
+ {"version":3,"file":"fi-fi.js","sources":["../src/localization/fi-fi.ts"],"sourcesContent":["import { Translation } from \"./translation.js\"\n\nconst fi: Translation = {\n $lang: \"fi\",\n $name: \"Suomi\",\n $dir: \"ltr\",\n\n \"nord-command-menu\": {\n instructions: \"Paina 'Enter' vahvistaaksesi valinnan tai 'Escape' peruuttaaksesi\",\n inputLabel: \"Kirjoita komento jonka haluat suorittaa.\",\n footerArrowKeys: \"Siirry\",\n footerEnterKey: \"Valitse\",\n footerEscapeKey: \"Esc sulje\",\n footerBackspaceKey: \"Siirry takaisin\",\n noResults: searchTerm => `Ei tuloksia haulle \"${searchTerm}\"`,\n tip: \"Vinkki: jotkin haut vaativat tarkan hakutermin. Koita kirjoittaa koko hakutermi kokonaisuudessaan, tai kokeile toista sanaa tai fraasia.\",\n placeholder: \"Kirjoita komento tai hakusana…\",\n },\n\n \"nord-calendar\": {\n prevMonthLabel: \"Edellinen kuukausi\",\n nextMonthLabel: \"Seuraava kuukausi\",\n monthSelectLabel: \"Kuukausi\",\n yearSelectLabel: \"Vuosi\",\n },\n\n \"nord-date-picker\": {\n modalHeading: \"Valitse päivämäärä\",\n closeLabel: \"Sulje ikkuna\",\n buttonLabel: \"Valitse päivämäärä\",\n selectedDateMessage: \"Valittu päivämäärä on\",\n },\n\n \"nord-modal\": {\n closeLabel: \"Sulje ikkuna\",\n },\n\n \"nord-nav-toggle\": {\n label: \"Näytä/Piilota valikko\",\n },\n\n \"nord-textarea\": {\n remainingCharacters: (remaining: number) => `${remaining} merkkiä jäljellä`,\n },\n\n \"nord-notification\": {\n dismissLabel: \"Sulje ilmoitus\",\n },\n\n \"nord-message\": {\n unreadLabel: \"Lukematon\",\n },\n\n \"nord-tag\": {\n removeLabel: \"Poista\",\n },\n}\n\nexport default fi\n"],"names":["fi","$lang","$name","$dir","instructions","inputLabel","footerArrowKeys","footerEnterKey","footerEscapeKey","footerBackspaceKey","noResults","searchTerm","tip","placeholder","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","modalHeading","closeLabel","buttonLabel","selectedDateMessage","label","remainingCharacters","remaining","dismissLabel","unreadLabel","removeLabel"],"mappings":"AAEA,MAAMA,EAAkB,CACtBC,MAAO,KACPC,MAAO,QACPC,KAAM,MAEN,oBAAqB,CACnBC,aAAc,oEACdC,WAAY,2CACZC,gBAAiB,SACjBC,eAAgB,UAChBC,gBAAiB,YACjBC,mBAAoB,kBACpBC,UAAWC,GAAc,uBAAuBA,KAChDC,IAAK,2IACLC,YAAa,kCAGf,gBAAiB,CACfC,eAAgB,qBAChBC,eAAgB,oBAChBC,iBAAkB,WAClBC,gBAAiB,SAGnB,mBAAoB,CAClBC,aAAc,qBACdC,WAAY,eACZC,YAAa,qBACbC,oBAAqB,yBAGvB,aAAc,CACZF,WAAY,gBAGd,kBAAmB,CACjBG,MAAO,yBAGT,gBAAiB,CACfC,oBAAsBC,GAAsB,GAAGA,sBAGjD,oBAAqB,CACnBC,aAAc,kBAGhB,eAAgB,CACdC,YAAa,aAGf,WAAY,CACVC,YAAa"}
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{default as Badge}from"./Badge.js";export{default as Button}from"./Button.js";export{default as Card}from"./Card.js";export{default as Input}from"./Input.js";export{default as Icon}from"./Icon.js";export{default as CommandMenu}from"./CommandMenu.js";export{default as CommandMenuAction}from"./CommandMenuAction.js";export{default as Select}from"./Select.js";export{default as Stack}from"./Stack.js";export{default as Spinner}from"./Spinner.js";export{default as Table}from"./Table.js";export{default as VisuallyHidden}from"./VisuallyHidden.js";export{default as Textarea}from"./Textarea.js";export{C as Calendar}from"./Calendar-3170b9d4.js";export{default as DatePicker}from"./DatePicker.js";export{default as Checkbox}from"./Checkbox.js";export{default as Tooltip}from"./Tooltip.js";export{default as Fieldset}from"./Fieldset.js";export{default as Radio}from"./Radio.js";export{default as Header}from"./Header.js";export{default as Message}from"./Message.js";export{default as NavGroup}from"./NavGroup.js";export{default as NavItem}from"./NavItem.js";export{default as Navigation}from"./Navigation.js";export{default as Layout}from"./Layout.js";export{default as EmptyState}from"./EmptyState.js";export{default as Banner}from"./Banner.js";export{default as Avatar}from"./Avatar.js";export{default as ProgressBar}from"./ProgressBar.js";export{P as Popout}from"./Popout-2220e77b.js";export{default as Dropdown}from"./Dropdown.js";export{default as DropdownItem}from"./DropdownItem.js";export{default as DropdownGroup}from"./DropdownGroup.js";export{isTranslationRegistered,registerTranslation}from"./translation.js";export{default as TabGroup}from"./TabGroup.js";export{default as Tab}from"./Tab.js";export{default as TabPanel}from"./TabPanel.js";export{default as Toggle}from"./Toggle.js";export{default as Modal}from"./Modal.js";export{default as Skeleton}from"./Skeleton.js";export{default as Toast}from"./Toast.js";export{default as ToastGroup}from"./ToastGroup.js";export{default as Divider}from"./Divider.js";export{default as Qrcode}from"./Qrcode.js";export{default as Drawer}from"./Drawer.js";export{N as NavToggle}from"./NavToggle-cb2c3648.js";export{default as Range}from"./Range.js";export{default as ButtonGroup}from"./ButtonGroup.js";export{default as Notification}from"./Notification.js";export{default as NotificationGroup}from"./NotificationGroup.js";export{default as TopBar}from"./TopBar.js";export{default as Footer}from"./Footer.js";import"./query-assigned-elements-92ce7494.js";import"./property-c78323b1.js";import"./Component-2253424f.js";import"./ref-99418ab4.js";import"./directive-e9ce14b4.js";import"./EventController-d99ebeef.js";import"./LightDomController-5388d84c.js";import"./cond-bb9ee891.js";import"./FocusableMixin-d30213b4.js";import"./InputMixin-83b5bd46.js";import"./SlotController-d733c575.js";import"./query-36bfe0e4.js";import"./if-defined-cccde88f.js";import"./class-map-512f0bc1.js";import"./style-map-f8a1c8d5.js";import"./FormAssociatedMixin-a278fda4.js";import"./events-d9666e88.js";import"./TextField-2d778949.js";import"./AutocompleteMixin-5a7e10b2.js";import"./SizeMixin-ab074eff.js";import"./FormField-87551be2.js";import"./DirectionController-f35f5476.js";import"./state-d31c6912.js";import"./IconManager.js";import"./observe-a9c6dfb6.js";import"./collection-511dcfac.js";import"./number-c3ab3e95.js";import"./LightDismissController-a2645ae6.js";import"./ShortcutController-87615e31.js";import"./tinykeys.module-84e6cc41.js";import"./KeyboardController.js";import"./SelectEvent.js";import"./LocalizeController.js";import"./en-us.js";import"./localization.js";import"./localization2.js";import"./localization3.js";import"./localization4.js";import"./localization5.js";import"./localization6.js";import"./localization7.js";import"./localization8.js";import"./dates-5b651fbe.js";import"./DateSelectEvent.js";import"./interface-close-small-f26b0299.js";import"./date-adapter.js";import"./positioning-2346bdd6.js";import"./fsm-50373df9.js";import"./DropdownItem-588f5a6b.js";import"./Sticky-c34c9b12.js";import"./ScrollbarController-773c79f4.js";import"./ModalController.js";import"./NotificationMixin-207f1f56.js";
1
+ export{default as Badge}from"./Badge.js";export{default as Button}from"./Button.js";export{default as Card}from"./Card.js";export{default as Input}from"./Input.js";export{default as Icon}from"./Icon.js";export{default as CommandMenu}from"./CommandMenu.js";export{default as CommandMenuAction}from"./CommandMenuAction.js";export{default as Select}from"./Select.js";export{default as Stack}from"./Stack.js";export{default as Spinner}from"./Spinner.js";export{default as Table}from"./Table.js";export{default as VisuallyHidden}from"./VisuallyHidden.js";export{default as Textarea}from"./Textarea.js";export{C as Calendar}from"./Calendar-1517347e.js";export{default as DatePicker}from"./DatePicker.js";export{default as Checkbox}from"./Checkbox.js";export{default as Tooltip}from"./Tooltip.js";export{default as Fieldset}from"./Fieldset.js";export{default as Radio}from"./Radio.js";export{default as Header}from"./Header.js";export{default as Message}from"./Message.js";export{default as NavGroup}from"./NavGroup.js";export{default as NavItem}from"./NavItem.js";export{default as Navigation}from"./Navigation.js";export{default as Layout}from"./Layout.js";export{default as EmptyState}from"./EmptyState.js";export{default as Banner}from"./Banner.js";export{default as Avatar}from"./Avatar.js";export{default as ProgressBar}from"./ProgressBar.js";export{P as Popout}from"./Popout-2f9d860d.js";export{default as Dropdown}from"./Dropdown.js";export{default as DropdownItem}from"./DropdownItem.js";export{default as DropdownGroup}from"./DropdownGroup.js";export{isTranslationRegistered,registerTranslation}from"./translation.js";export{default as TabGroup}from"./TabGroup.js";export{default as Tab}from"./Tab.js";export{default as TabPanel}from"./TabPanel.js";export{default as Toggle}from"./Toggle.js";export{default as Modal}from"./Modal.js";export{default as Skeleton}from"./Skeleton.js";export{default as Toast}from"./Toast.js";export{default as ToastGroup}from"./ToastGroup.js";export{default as Divider}from"./Divider.js";export{default as Qrcode}from"./Qrcode.js";export{default as Drawer}from"./Drawer.js";export{N as NavToggle}from"./NavToggle-b54db654.js";export{default as Range}from"./Range.js";export{default as ButtonGroup}from"./ButtonGroup.js";export{default as Notification}from"./Notification.js";export{default as NotificationGroup}from"./NotificationGroup.js";export{default as TopBar}from"./TopBar.js";export{default as Footer}from"./Footer.js";export{default as Tag}from"./Tag.js";import"./query-assigned-elements-92ce7494.js";import"./property-c78323b1.js";import"./Component-2253424f.js";import"./ref-99418ab4.js";import"./directive-e9ce14b4.js";import"./EventController-d99ebeef.js";import"./LightDomController-5388d84c.js";import"./cond-bb9ee891.js";import"./FocusableMixin-d30213b4.js";import"./InputMixin-83b5bd46.js";import"./SlotController-d733c575.js";import"./query-36bfe0e4.js";import"./if-defined-cccde88f.js";import"./class-map-512f0bc1.js";import"./style-map-f8a1c8d5.js";import"./FormAssociatedMixin-3fa55d53.js";import"./FormDataController-592ff3dd.js";import"./events-d9666e88.js";import"./TextField-2d778949.js";import"./AutocompleteMixin-5a7e10b2.js";import"./SizeMixin-ab074eff.js";import"./FormField-87551be2.js";import"./DirectionController-f35f5476.js";import"./state-d31c6912.js";import"./IconManager.js";import"./observe-a9c6dfb6.js";import"./collection-511dcfac.js";import"./number-c3ab3e95.js";import"./LightDismissController-11ae4745.js";import"./ShortcutController-87615e31.js";import"./tinykeys.module-84e6cc41.js";import"./KeyboardController.js";import"./SelectEvent.js";import"./LocalizeController.js";import"./en-us.js";import"./localization.js";import"./localization2.js";import"./localization3.js";import"./localization4.js";import"./localization5.js";import"./localization6.js";import"./localization7.js";import"./localization8.js";import"./localization9.js";import"./dates-5b651fbe.js";import"./DateSelectEvent.js";import"./interface-close-small-f26b0299.js";import"./date-adapter.js";import"./interface-checked-small-07292940.js";import"./positioning-2346bdd6.js";import"./fsm-50373df9.js";import"./DropdownItem-588f5a6b.js";import"./Sticky-c34c9b12.js";import"./ScrollbarController-773c79f4.js";import"./ModalController.js";import"./NotificationMixin-207f1f56.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,2 @@
1
+ var e=Object.freeze({__proto__:null,default:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m18.9985 5.35769-9.8419 10.83221c-.27855.3095-.68088.4952-1.11417.5107h-.03095c-.41782 0-.80469-.1548-1.0987-.4488l-5.91132-5.9113 2.18193-2.1819 4.76619 4.7662 8.75862-9.62524 2.2903 2.08908z" fill="currentColor"/></svg>',title:"interface-checked-small",tags:"nordicon interface checked small symbol checkmark done ready"});export{e as c};
2
+ //# sourceMappingURL=interface-checked-small-07292940.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface-checked-small-07292940.js","sources":["../../icons/lib/assets/interface-checked-small.js"],"sourcesContent":["export default '<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m18.9985 5.35769-9.8419 10.83221c-.27855.3095-.68088.4952-1.11417.5107h-.03095c-.41782 0-.80469-.1548-1.0987-.4488l-5.91132-5.9113 2.18193-2.1819 4.76619 4.7662 8.75862-9.62524 2.2903 2.08908z\" fill=\"currentColor\"/></svg>'\nexport const title = \"interface-checked-small\"\nexport const tags = \"nordicon interface checked small symbol checkmark done ready\"\n"],"names":[],"mappings":"4CAAe,2SACM,+BACD"}
@@ -0,0 +1,2 @@
1
+ const e={removeLabel:"Remove"};export{e as default};
2
+ //# sourceMappingURL=localization9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization9.js","sources":["../src/tag/localization.ts"],"sourcesContent":["const localization = {\n removeLabel: \"Remove\",\n}\n\nexport default localization\n"],"names":["localization","removeLabel"],"mappings":"AAAA,MAAMA,EAAe,CACnBC,YAAa"}
@@ -31,7 +31,7 @@ export default class Avatar extends LitElement {
31
31
  /**
32
32
  * The fallback icon.
33
33
  */
34
- icon: string;
34
+ icon?: string;
35
35
  /**
36
36
  * The style variant of the avatar.
37
37
  */
@@ -1 +1,2 @@
1
1
  import "../stack/Stack.js";
2
+ import "../divider/Divider.js";
@@ -83,6 +83,10 @@ export default class Button extends Button_base {
83
83
  * Controls whether the button expands to fill the width of its container.
84
84
  */
85
85
  expand: boolean;
86
+ /**
87
+ * When provided, the button is rendered as a square button. Use this for icon only buttons.
88
+ */
89
+ square: boolean;
86
90
  /**
87
91
  * Controls whether the button is in loading state. Please note that the spinner
88
92
  * is hidden from assistive technologies, so you need to make sure to announce
@@ -6,17 +6,27 @@ import { LitElement } from "lit";
6
6
  * @category structure
7
7
  * @slot - The button group content
8
8
  *
9
- * @cssprop [--n-button-group-border-radius=var(--n-border-radius-s)] - Controls the rounded corners of the button, using [border radius tokens](/tokens/#border-radius).
10
- * @cssprop [--n-button-group-box-shadow=var(--n-box-shadow)] - Controls the surrounding shadow, using [box shadow tokens](/tokens/#box-shadow).
9
+ * @cssprop [--n-button-group-border-radius=var(--n-border-radius-s)] - Controls the rounded corners of the button, using [border radius tokens](/tokens/#border-radius). Only relevant for the default variant.
10
+ * @cssprop [--n-button-group-box-shadow=var(--n-box-shadow)] - Controls the surrounding shadow, using [box shadow tokens](/tokens/#box-shadow). Only relevant for the default variant.
11
11
 
12
12
  */
13
13
  export default class ButtonGroup extends LitElement {
14
14
  static styles: import("lit").CSSResult[];
15
+ private defaultSlot;
15
16
  private dirController;
17
+ /**
18
+ * The style variant of the button group.
19
+ */
20
+ variant: "default" | "spaced";
16
21
  /**
17
22
  * The direction of the button group.
18
23
  */
19
24
  direction: "vertical" | "horizontal";
25
+ /**
26
+ * Defines whether the buttons are forced in a single line
27
+ * or can be flowed into multiple lines (only relevant when variant is set to `spaced`).
28
+ */
29
+ wrap: boolean;
20
30
  /**
21
31
  * The appropriate role for the containing element.
22
32
  */
@@ -55,12 +55,12 @@ export default class Calendar extends LitElement {
55
55
  * Minimum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.
56
56
  * This setting can be used alone or together with the max property.
57
57
  */
58
- min: string;
58
+ min?: string;
59
59
  /**
60
60
  * Maximum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.
61
61
  * This setting can be used alone or together with the min property.
62
62
  */
63
- max: string;
63
+ max?: string;
64
64
  /**
65
65
  * Controls whether the calendar expands to fill the width of its container.
66
66
  */
@@ -1,14 +1,8 @@
1
1
  import { ReactiveController, ReactiveControllerHost } from "lit";
2
2
  export declare class FocusTrapController implements ReactiveController {
3
- private boundary;
4
- private lastScrollY;
5
- private lastFocused?;
6
- constructor(host: ReactiveControllerHost & HTMLElement, boundary?: () => HTMLElement);
3
+ private host;
4
+ constructor(host: ReactiveControllerHost & HTMLElement);
7
5
  hostDisconnected(): void;
8
6
  trap(): void;
9
7
  release(): void;
10
- private handleFocusOut;
11
- private handleFocusIn;
12
- private recaptureFocus;
13
- private restoreScroll;
14
8
  }
@@ -9,8 +9,10 @@ export declare class LightDismissController implements ReactiveController {
9
9
  private options;
10
10
  private shortcut;
11
11
  private events;
12
+ private isMouseDownOutside;
12
13
  constructor(host: ReactiveControllerHost & Element, options: LightDismissOptions);
13
14
  hostConnected(): void;
14
15
  private handleEsc;
15
- private handleClickOut;
16
+ private handleMouseDown;
17
+ private handleMouseUp;
16
18
  }
@@ -0,0 +1 @@
1
+ export declare function inertAround(element: Element, enabled: boolean): void;
@@ -62,12 +62,12 @@ export default class DatePicker extends DatePicker_base {
62
62
  * Minimum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.
63
63
  * This setting can be used alone or together with the max property.
64
64
  */
65
- min: string;
65
+ min?: string;
66
66
  /**
67
67
  * Maximum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.
68
68
  * This setting can be used alone or together with the min property.
69
69
  */
70
- max: string;
70
+ max?: string;
71
71
  /**
72
72
  * Which day is considered first day of the week? `0` for Sunday, `1` for Monday, etc.
73
73
  * Default is Monday.
@@ -1,6 +1,7 @@
1
1
  import "../layout/Layout.js";
2
2
  import "../stack/Stack.js";
3
3
  import "../button/Button.js";
4
+ import "../button-group/ButtonGroup.js";
4
5
  import "../icon/Icon.js";
5
6
  import "../tooltip/Tooltip.js";
6
7
  import "../header/Header.js";
@@ -1,3 +1,4 @@
1
1
  import "../button/Button.js";
2
+ import "../button-group/ButtonGroup.js";
2
3
  import "../stack/Stack.js";
3
4
  import "../icon/Icon.js";
@@ -1,3 +1,4 @@
1
1
  import "../button/Button.js";
2
+ import "../button-group/ButtonGroup.js";
2
3
  import "../icon/Icon.js";
3
4
  import "../tooltip/Tooltip.js";
@@ -51,3 +51,4 @@ export { default as Notification } from "./notification/Notification.js";
51
51
  export { default as NotificationGroup } from "./notification-group/NotificationGroup.js";
52
52
  export { default as TopBar } from "./top-bar/TopBar.js";
53
53
  export { default as Footer } from "./footer/Footer.js";
54
+ export { default as Tag } from "./tag/Tag.js";
@@ -40,5 +40,8 @@ declare const en: {
40
40
  "nord-message": {
41
41
  unreadLabel: string;
42
42
  };
43
+ "nord-tag": {
44
+ removeLabel: string;
45
+ };
43
46
  };
44
47
  export default en;
@@ -67,5 +67,8 @@ export declare function resolveTranslation(langCode: string): {
67
67
  "nord-message": {
68
68
  unreadLabel: string;
69
69
  };
70
+ "nord-tag": {
71
+ removeLabel: string;
72
+ };
70
73
  };
71
74
  export { en as fallback };
@@ -21,19 +21,6 @@ import "../footer/Footer.js";
21
21
  */
22
22
  export default class Modal extends LitElement {
23
23
  static styles: import("lit").CSSResult[];
24
- /**
25
- * @internal
26
- * ensures clicking on the backdrop does not move focus to <body>,
27
- * which can causes issues with focus trapping, and returning focus on modal close,
28
- * when there are multiple modals.
29
- */
30
- static shadowRootOptions: {
31
- delegatesFocus: boolean;
32
- mode: ShadowRootMode;
33
- slotAssignment?: SlotAssignmentMode | undefined;
34
- customElements?: CustomElementRegistry | undefined;
35
- registry?: CustomElementRegistry | undefined;
36
- };
37
24
  private modal;
38
25
  private backdrop;
39
26
  private headerSlot;
@@ -48,7 +35,7 @@ export default class Modal extends LitElement {
48
35
  /**
49
36
  * Controls the max-width of the modal when open.
50
37
  */
51
- size: "s" | "m" | "l";
38
+ size: "s" | "m" | "l" | "xl";
52
39
  /**
53
40
  * The reason why the modal was closed. This typically indicates
54
41
  * which button the user pressed to close the modal, though any value
@@ -1,4 +1,5 @@
1
1
  import "../button/Button.js";
2
+ import "../button-group/ButtonGroup.js";
2
3
  import "../input/Input.js";
3
4
  import "../textarea/Textarea.js";
4
5
  import "../select/Select.js";
@@ -17,6 +17,10 @@ export default class Navigation extends LitElement {
17
17
  private headerSlot;
18
18
  private events;
19
19
  private allowItemsToRemainOpen;
20
+ /**
21
+ * Controls whether the navigations's footer has sticky positioning.
22
+ */
23
+ stickyFooter: boolean;
20
24
  connectedCallback(): void;
21
25
  render(): import("lit").TemplateResult<1>;
22
26
  private handleActivate;
@@ -7,4 +7,10 @@ import "../dropdown-group/DropdownGroup.js";
7
7
  import "../popout/Popout.js";
8
8
  import "../avatar/Avatar.js";
9
9
  import "../icon/Icon.js";
10
+ import "../input/Input.js";
10
11
  import "../tooltip/Tooltip.js";
12
+ import "../layout/Layout.js";
13
+ import "../top-bar/TopBar.js";
14
+ import "../header/Header.js";
15
+ import "../card/Card.js";
16
+ import "../banner/Banner.js";
@@ -0,0 +1,44 @@
1
+ import { LitElement } from "lit";
2
+ import { FormDataController } from "../common/controllers/FormDataController.js";
3
+ declare const Tag_base: (new (...args: any[]) => import("../common/mixins/InputMixin.js").InputMixinInterface) & (new (...args: any[]) => import("../common/mixins/FocusableMixin.js").FocusableMixinInterface) & typeof LitElement;
4
+ /**
5
+ * Tags represent a set of keywords that help label, categorize,
6
+ * and organize objects. Commonly used to signify the attributes of an object.
7
+ *
8
+ * @status draft
9
+ * @category text
10
+ * @slot - The tag content.
11
+ *
12
+ * @localization removeLabel - Accessible label for the remove button.
13
+ */
14
+ export default class Tag extends Tag_base {
15
+ static styles: import("lit").CSSResult[];
16
+ private localize;
17
+ protected formData: FormDataController;
18
+ protected get formValue(): string | undefined;
19
+ protected inputId: string;
20
+ /**
21
+ * The behavioral variant of the tag.
22
+ */
23
+ variant: "default" | "removable" | "selectable";
24
+ /**
25
+ * Controls whether the tag is checked or not (only relevant when variant is set to `selectable`).
26
+ */
27
+ checked: boolean;
28
+ /**
29
+ * The size of the tag. This affects the font-size.
30
+ */
31
+ size: "s" | "m";
32
+ protected handleChange(e: Event): void;
33
+ protected handleRemove(): void;
34
+ render(): import("lit").TemplateResult<1>;
35
+ private renderStaticTag;
36
+ private renderRemovableTag;
37
+ private renderSelectableTag;
38
+ }
39
+ declare global {
40
+ interface HTMLElementTagNameMap {
41
+ "nord-tag": Tag;
42
+ }
43
+ }
44
+ export {};
@@ -0,0 +1,6 @@
1
+ import "../stack/Stack.js";
2
+ import "../icon/Icon.js";
3
+ import "../input/Input.js";
4
+ import "../fieldset/Fieldset.js";
5
+ import "../checkbox/Checkbox.js";
6
+ import "../button/Button.js";
@@ -0,0 +1,4 @@
1
+ declare const localization: {
2
+ removeLabel: string;
3
+ };
4
+ export default localization;
@@ -1,2 +1,2 @@
1
- import t from"./en-us.js";export{default as fallback}from"./en-us.js";import"./localization.js";import"./localization2.js";import"./localization3.js";import"./localization4.js";import"./localization5.js";import"./localization6.js";import"./localization7.js";import"./localization8.js";const o=new Set,n=new Map;function i(){for(const t of o)t()}function e(){n.clear()}function a(...t){t.forEach((t=>{const o=t.$lang.toLowerCase();n.set(o,t)})),i()}function r(t){return o.add(t),()=>o.delete(t)}function l(t){return n.has(t)}function s(o){const i=o.toLowerCase(),[e]=i.split("-");return n.get(i)||n.get(e)||t}new MutationObserver(i).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"]});export{e as clearTranslations,l as isTranslationRegistered,a as registerTranslation,s as resolveTranslation,r as subscribe};
1
+ import t from"./en-us.js";export{default as fallback}from"./en-us.js";import"./localization.js";import"./localization2.js";import"./localization3.js";import"./localization4.js";import"./localization5.js";import"./localization6.js";import"./localization7.js";import"./localization8.js";import"./localization9.js";const o=new Set,i=new Map;function n(){for(const t of o)t()}function a(){i.clear()}function e(...t){t.forEach((t=>{const o=t.$lang.toLowerCase();i.set(o,t)})),n()}function r(t){return o.add(t),()=>o.delete(t)}function l(t){return i.has(t)}function s(o){const n=o.toLowerCase(),[a]=n.split("-");return i.get(n)||i.get(a)||t}new MutationObserver(n).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"]});export{a as clearTranslations,l as isTranslationRegistered,e as registerTranslation,s as resolveTranslation,r as subscribe};
2
2
  //# sourceMappingURL=translation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"translation.js","sources":["../src/localization/translation.ts"],"sourcesContent":["import en from \"./en-us.js\"\n\n// gets list of properties beginning prefix\ntype PickStartsWith<T, Prefix extends string> = T extends `${Prefix}${string}` ? T : never\n\nexport type Translation = typeof en\nexport type WellKnownKeys = PickStartsWith<keyof Translation, \"$\">\n\nconst subscribers = new Set<() => void>()\nconst translations = new Map<string, Translation>()\n\nfunction update() {\n for (const subscriber of subscribers) {\n subscriber()\n }\n}\n\n// observe changes to the document's lang\nconst observer = new MutationObserver(update)\nobserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\n})\n\n/**\n * Removes all registered translations\n */\nexport function clearTranslations() {\n translations.clear()\n}\n\n/**\n * Registers one or more translations\n */\nexport function registerTranslation(...translation: Translation[]) {\n translation.forEach(t => {\n const lang = t.$lang.toLowerCase()\n translations.set(lang, t)\n })\n\n update()\n}\n\n/**\n * subscribe to language changes\n * @param onChange callback for when either `lang` attr changes, or a new language is registered.\n * @returns cleanup function\n */\nexport function subscribe(onChange: () => void): () => void {\n subscribers.add(onChange)\n return () => subscribers.delete(onChange)\n}\n\n/**\n * Check whether there is a translation registered for the given lang\n * @param lang the lang code e.g. \"en\" or \"en-GB\"\n */\nexport function isTranslationRegistered(lang: string) {\n return translations.has(lang)\n}\n\n/**\n * Picks the most appropriate translation for the given language, from most specific to least specific.\n * First tries lang + region, then lang only, then fallback.\n */\nexport function resolveTranslation(langCode: string) {\n const lang = langCode.toLowerCase()\n const [langOnly] = lang.split(\"-\")\n\n return translations.get(lang) || translations.get(langOnly) || en\n}\n\nexport { en as fallback }\n"],"names":["subscribers","Set","translations","Map","update","subscriber","clearTranslations","clear","registerTranslation","translation","forEach","t","lang","$lang","toLowerCase","set","subscribe","onChange","add","delete","isTranslationRegistered","has","resolveTranslation","langCode","langOnly","split","get","en","MutationObserver","observe","document","documentElement","attributes","attributeFilter"],"mappings":"6RAQA,MAAMA,EAAc,IAAIC,IAClBC,EAAe,IAAIC,IAEzB,SAASC,IACP,IAAK,MAAMC,KAAcL,EACvBK,GAEJ,UAYgBC,IACdJ,EAAaK,OACf,CAKgB,SAAAC,KAAuBC,GACrCA,EAAYC,SAAQC,IAClB,MAAMC,EAAOD,EAAEE,MAAMC,cACrBZ,EAAaa,IAAIH,EAAMD,EAAE,IAG3BP,GACF,CAOM,SAAUY,EAAUC,GAExB,OADAjB,EAAYkB,IAAID,GACT,IAAMjB,EAAYmB,OAAOF,EAClC,CAMM,SAAUG,EAAwBR,GACtC,OAAOV,EAAamB,IAAIT,EAC1B,CAMM,SAAUU,EAAmBC,GACjC,MAAMX,EAAOW,EAAST,eACfU,GAAYZ,EAAKa,MAAM,KAE9B,OAAOvB,EAAawB,IAAId,IAASV,EAAawB,IAAIF,IAAaG,CACjE,CApDiB,IAAIC,iBAAiBxB,GAC7ByB,QAAQC,SAASC,gBAAiB,CACzCC,YAAY,EACZC,gBAAiB,CAAC"}
1
+ {"version":3,"file":"translation.js","sources":["../src/localization/translation.ts"],"sourcesContent":["import en from \"./en-us.js\"\n\n// gets list of properties beginning prefix\ntype PickStartsWith<T, Prefix extends string> = T extends `${Prefix}${string}` ? T : never\n\nexport type Translation = typeof en\nexport type WellKnownKeys = PickStartsWith<keyof Translation, \"$\">\n\nconst subscribers = new Set<() => void>()\nconst translations = new Map<string, Translation>()\n\nfunction update() {\n for (const subscriber of subscribers) {\n subscriber()\n }\n}\n\n// observe changes to the document's lang\nconst observer = new MutationObserver(update)\nobserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\n})\n\n/**\n * Removes all registered translations\n */\nexport function clearTranslations() {\n translations.clear()\n}\n\n/**\n * Registers one or more translations\n */\nexport function registerTranslation(...translation: Translation[]) {\n translation.forEach(t => {\n const lang = t.$lang.toLowerCase()\n translations.set(lang, t)\n })\n\n update()\n}\n\n/**\n * subscribe to language changes\n * @param onChange callback for when either `lang` attr changes, or a new language is registered.\n * @returns cleanup function\n */\nexport function subscribe(onChange: () => void): () => void {\n subscribers.add(onChange)\n return () => subscribers.delete(onChange)\n}\n\n/**\n * Check whether there is a translation registered for the given lang\n * @param lang the lang code e.g. \"en\" or \"en-GB\"\n */\nexport function isTranslationRegistered(lang: string) {\n return translations.has(lang)\n}\n\n/**\n * Picks the most appropriate translation for the given language, from most specific to least specific.\n * First tries lang + region, then lang only, then fallback.\n */\nexport function resolveTranslation(langCode: string) {\n const lang = langCode.toLowerCase()\n const [langOnly] = lang.split(\"-\")\n\n return translations.get(lang) || translations.get(langOnly) || en\n}\n\nexport { en as fallback }\n"],"names":["subscribers","Set","translations","Map","update","subscriber","clearTranslations","clear","registerTranslation","translation","forEach","t","lang","$lang","toLowerCase","set","subscribe","onChange","add","delete","isTranslationRegistered","has","resolveTranslation","langCode","langOnly","split","get","en","MutationObserver","observe","document","documentElement","attributes","attributeFilter"],"mappings":"wTAQA,MAAMA,EAAc,IAAIC,IAClBC,EAAe,IAAIC,IAEzB,SAASC,IACP,IAAK,MAAMC,KAAcL,EACvBK,GAEJ,UAYgBC,IACdJ,EAAaK,OACf,CAKgB,SAAAC,KAAuBC,GACrCA,EAAYC,SAAQC,IAClB,MAAMC,EAAOD,EAAEE,MAAMC,cACrBZ,EAAaa,IAAIH,EAAMD,EAAE,IAG3BP,GACF,CAOM,SAAUY,EAAUC,GAExB,OADAjB,EAAYkB,IAAID,GACT,IAAMjB,EAAYmB,OAAOF,EAClC,CAMM,SAAUG,EAAwBR,GACtC,OAAOV,EAAamB,IAAIT,EAC1B,CAMM,SAAUU,EAAmBC,GACjC,MAAMX,EAAOW,EAAST,eACfU,GAAYZ,EAAKa,MAAM,KAE9B,OAAOvB,EAAawB,IAAId,IAASV,EAAawB,IAAIF,IAAaG,CACjE,CApDiB,IAAIC,iBAAiBxB,GAC7ByB,QAAQC,SAASC,gBAAiB,CACzCC,YAAY,EACZC,gBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nordhealth/components",
3
- "version": "3.9.0",
3
+ "version": "3.11.0",
4
4
  "description": "This package includes Nord Design System Web Components",
5
5
  "author": "Nordhealth <support@nordhealth.design>",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@floating-ui/dom": "1.2.7",
39
- "@nordhealth/icons": "^3.3.0",
39
+ "@nordhealth/icons": "^3.4.0",
40
40
  "lit": "2.7.4",
41
41
  "qr-creator": "1.0.0",
42
42
  "tinykeys": "1.4.0"
@@ -184,5 +184,5 @@
184
184
  }
185
185
  ]
186
186
  },
187
- "gitHead": "f01f00992d6e3935fa7eb879dbf217a51638d397"
187
+ "gitHead": "af6a027358fdd5f6cf7745bfbd3ae8a858a78578"
188
188
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"Calendar-3170b9d4.js","sources":["../../icons/lib/assets/arrow-right-small.js","../../icons/lib/assets/arrow-left-small.js","../../icons/lib/assets/arrow-down-small.js","../src/common/controllers/SwipeController.ts","../src/calendar/Calendar.ts"],"sourcesContent":["export default '<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m6.92903.100342-2.12132 2.121318 7.77819 7.77818-7.77828 7.77826 2.12132 2.1213 8.48536-8.4853c.7811-.7811.7811-2.04743 0-2.82848z\" fill=\"currentColor\"/></svg>'\nexport const title = \"arrow-right-small\"\nexport const tags = \"nordicon arrow right small caret pointing triangle chevron\"\n","export default '<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m13.0712.105225 2.1213 2.121315-7.77816 7.77816 7.77826 7.7783-2.1213 2.1213-8.48539-8.4854c-.78105-.781-.78105-2.04735 0-2.82839z\" fill=\"currentColor\"/></svg>'\nexport const title = \"arrow-left-small\"\nexport const tags = \"nordicon arrow left small caret pointing triangle chevron\"\n","export default '<svg viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m.100342 6.92903 2.121318-2.12132 7.77818 7.77819 7.77826-7.77828 2.1213 2.12132-8.4853 8.48536c-.7811.7811-2.04743.7811-2.82848 0z\" fill=\"currentColor\"/></svg>'\nexport const title = \"arrow-down-small\"\nexport const tags = \"nordicon arrow down small caret pointing triangle chevron\"\n","import { ReactiveController, ReactiveElement } from \"lit\"\nimport { EventController } from \"./EventController.js\"\n\nexport type SwipeDetails = {\n initialX: number\n initialY: number\n pageX: number\n pageY: number\n distX: number\n distY: number\n}\n\nconst preventDefault = (e: Event) => e.preventDefault()\n\ntype SetRequired<T, K extends keyof T> = T & { [Property in K]-?: T[K] }\ntype SwipeControllerOptions = {\n target?: () => HTMLElement\n matchesGesture: (details: SwipeDetails) => boolean\n onSwipeEnd: (details: SwipeDetails) => void\n}\n\nexport class SwipeController implements ReactiveController {\n private events: EventController\n private hadFirstUpdate = false\n\n private initialTouchX: number = 0\n private initialTouchY: number = 0\n private options: SetRequired<SwipeControllerOptions, \"target\">\n\n constructor(host: ReactiveElement, options: SwipeControllerOptions) {\n host.addController(this)\n this.events = new EventController(host)\n\n this.options = {\n target: () => host,\n ...options,\n }\n }\n\n hostUpdated() {\n if (!this.hadFirstUpdate) {\n this.hadFirstUpdate = true\n\n const target = this.options.target()\n this.events.listen(target, \"touchstart\", this.handleTouchStart)\n this.events.listen(target, \"touchmove\", preventDefault)\n this.events.listen(target, \"touchend\", this.handleTouchEnd)\n }\n }\n\n hostDisconnected() {\n this.hadFirstUpdate = false\n }\n\n private handleTouchStart = (event: TouchEvent) => {\n const [{ pageX, pageY }] = event.changedTouches\n this.initialTouchX = pageX\n this.initialTouchY = pageY\n }\n\n private handleTouchEnd = (event: TouchEvent) => {\n const [{ pageX, pageY }] = event.changedTouches\n const { matchesGesture, onSwipeEnd } = this.options\n\n const distX = pageX - this.initialTouchX\n const distY = pageY - this.initialTouchY\n const details = { initialX: this.initialTouchX, initialY: this.initialTouchY, pageX, pageY, distX, distY }\n\n if (matchesGesture(details)) {\n event.preventDefault()\n onSwipeEnd(details)\n }\n }\n}\n\nconst THRESHOLD = 70\n\nexport const isHorizontalSwipe = ({ distX, distY }: SwipeDetails) =>\n Math.abs(distX) >= THRESHOLD && Math.abs(distY) <= THRESHOLD\n\nexport const isDownwardsSwipe = ({ distX, distY }: SwipeDetails) =>\n Math.abs(distY) >= THRESHOLD && Math.abs(distX) <= THRESHOLD && distY > 0\n","import { html, LitElement } from \"lit\"\nimport { customElement, property, query, state } from \"lit/decorators.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { repeat } from \"lit/directives/repeat.js\"\nimport { createKeybindingsHandler } from \"tinykeys\"\nimport * as arrowRightIcon from \"@nordhealth/icons/lib/assets/arrow-right-small.js\"\nimport * as arrowLeftIcon from \"@nordhealth/icons/lib/assets/arrow-left-small.js\"\nimport * as arrowDownIcon from \"@nordhealth/icons/lib/assets/arrow-down-small.js\"\n\nimport \"../button/Button.js\"\nimport \"../visually-hidden/VisuallyHidden.js\"\nimport Icon from \"../icon/Icon.js\"\n\nimport { isHorizontalSwipe, SwipeController } from \"../common/controllers/SwipeController.js\"\nimport { DirectionController } from \"../common/controllers/DirectionController.js\"\nimport { LocalizeController } from \"../localization/LocalizeController.js\"\nimport { chunk, mapWithOffset } from \"../common/collection.js\"\nimport { cond } from \"../common/directives/cond.js\"\nimport { range } from \"../common/number.js\"\nimport {\n addDays,\n clamp,\n DaysOfWeek,\n endOfMonth,\n endOfWeek,\n getDayNames,\n getMonthNames,\n getViewOfMonth,\n inRange,\n isEqual,\n isEqualMonth,\n parseISODate,\n printISODate,\n setMonth,\n setYear,\n startOfMonth,\n startOfWeek,\n} from \"../common/dates.js\"\nimport { observe } from \"../common/decorators/observe.js\"\n\nimport { DateSelectEvent } from \"./DateSelectEvent.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Calendar.css\"\n\nexport type DatePredicate = (date: Date) => boolean\n\nIcon.registerIcon(arrowRightIcon)\nIcon.registerIcon(arrowLeftIcon)\nIcon.registerIcon(arrowDownIcon)\n\nconst preventDefault = (fn: EventListener) => (e: Event) => {\n e.preventDefault()\n fn(e)\n}\n\nconst isDateDisabled: DatePredicate = () => false\nconst isDateHighlighted = () => false\n\nconst dialogLabelId = \"dialog-header\"\n\n/**\n * Calendar allows user to pick a date. It comes with built-in\n * functionality that allows you to set a minimum and a maximum allowed date.\n * Please note that the date must be passed in ISO-8601 format.\n *\n * @status ready\n * @category list\n * @fires {DateSelectEvent} change - Dispatched when a date is selected and the value changes.\n * @fires {DateSelectEvent} nord-focus-date - Dispatched when the calendar's focused date changes.\n *\n * @cssprop [--n-calendar-border-radius=var(--n-border-radius)] - Controls how rounded the corners are, using [border radius tokens](/tokens/#border-radius).\n * @cssprop [--n-calendar-box-shadow=var(--n-box-shadow-popout)] - Controls the surrounding shadow, using [box shadow tokens](/tokens/#box-shadow).\n *\n * @localization prevMonthLabel - Accessible label for the previous month button.\n * @localization nextMonthLabel - Accessible label for the next month button.\n * @localization monthSelectLabel - Accessible label for the month select.\n * @localization yearSelectLabel - Accessible label for the year select.\n */\n@customElement(\"nord-calendar\")\nexport default class Calendar extends LitElement {\n static styles = [componentStyle, style]\n\n @query(\".n-calendar-select-month\", true) private monthSelectNode!: HTMLElement\n @query(`button[tabindex=\"0\"]`) private focusedDayNode!: HTMLButtonElement\n\n private direction = new DirectionController(this)\n private swipe = new SwipeController(this, {\n matchesGesture: isHorizontalSwipe,\n onSwipeEnd: ({ distX }) => this.addMonths(distX < 0 ? 1 : -1),\n })\n\n private shortcuts = createKeybindingsHandler({\n ArrowRight: preventDefault(() => this.addDays(this.direction.isLTR ? 1 : -1)),\n ArrowLeft: preventDefault(() => this.addDays(this.direction.isLTR ? -1 : 1)),\n ArrowDown: preventDefault(() => this.addDays(7)),\n ArrowUp: preventDefault(() => this.addDays(-7)),\n Home: preventDefault(() => this.startOfWeek()),\n End: preventDefault(() => this.endOfWeek()),\n PageUp: preventDefault(() => this.addMonths(-1)),\n PageDown: preventDefault(() => this.addMonths(1)),\n \"Shift+PageUp\": preventDefault(() => this.addYears(-1)),\n \"Shift+PageDown\": preventDefault(() => this.addYears(1)),\n })\n\n private localize = new LocalizeController<\"nord-calendar\">(this, {\n onLangChange: () => this.handleLangChange(),\n })\n\n /**\n * Whilst dateAdapter is used for handling the formatting/parsing dates in the input,\n * these are used to format dates exclusively for the benefit of screen readers.\n *\n * We prefer DateTimeFormat over date.toLocaleDateString, as the former has\n * better performance when formatting large number of dates. See:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString#Performance\n */\n private dateFormatShort!: Intl.DateTimeFormat\n private monthNames!: string[]\n private monthNamesShort!: string[]\n private dayNames!: string[]\n private dayNamesShort!: string[]\n\n /**\n * The selected date on the calendar. Must be in IS0-8601 format: YYYY-MM-DD.\n */\n @property() value: string = \"\"\n\n /**\n * Which day is considered first day of the week? `0` for Sunday, `1` for Monday, etc.\n * Default is Monday.\n */\n @property({ type: Number }) firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n\n /**\n * Minimum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.\n * This setting can be used alone or together with the max property.\n */\n @property() min: string = \"\"\n\n /**\n * Maximum date allowed to be picked. Must be in IS0-8601 format: YYYY-MM-DD.\n * This setting can be used alone or together with the min property.\n */\n @property() max: string = \"\"\n\n /**\n * Controls whether the calendar expands to fill the width of its container.\n */\n @property({ reflect: true, type: Boolean }) expand = false\n\n /**\n * Controls which days are disabled and therefore disallowed.\n * For example, this can be used to disallow selection of weekends.\n */\n @property({ attribute: false }) isDateDisabled: DatePredicate = isDateDisabled\n\n /**\n * Controls which days are highlighted with a small indicator.\n * Returning a \"falsy\" value will not show an indicator.\n * Returning \"truthy\" value will show the indicator, but without an accessible label.\n * Returning a string will show the indicator, and use the string as accessible label.\n * It is recommended to return a string rather than a truthy value whenever possible.\n */\n @property({ attribute: false }) isDateHighlighted: (date: Date) => string | boolean = isDateHighlighted\n\n @state() private activeFocus = false\n @state() private focusedDay = new Date()\n\n /**\n * Programmatically move focus to the calendar.\n * @param options An object which controls aspects of the focusing process.\n */\n focus(options?: FocusOptions & { target: \"day\" | \"month\" }) {\n const target = options?.target ?? \"day\"\n\n if (target === \"day\") {\n this.focusedDayNode.focus()\n } else if (target === \"month\") {\n this.monthSelectNode.focus()\n }\n }\n\n render() {\n const today = new Date()\n const valueAsDate = parseISODate(this.value)\n const focusedMonth = this.focusedDay.getMonth()\n const focusedYear = this.focusedDay.getFullYear()\n\n const minDate = parseISODate(this.min)\n const maxDate = parseISODate(this.max)\n const minDateStartOfMonth = minDate ? startOfMonth(minDate) : undefined\n const maxDateEndOfMonth = maxDate ? endOfMonth(maxDate) : undefined\n\n const selectedYear = (valueAsDate || this.focusedDay).getFullYear()\n const minYear = minDate ? minDate.getFullYear() : selectedYear - 10\n const maxYear = maxDate ? maxDate.getFullYear() : selectedYear + 10\n\n return html`\n <div class=\"n-calendar\">\n <div class=\"n-calendar-header\">\n <div>\n <nord-visually-hidden>\n <h2 id=${dialogLabelId} aria-live=\"polite\" aria-atomic=\"true\">\n ${this.monthNames[focusedMonth]}, ${this.focusedDay.getFullYear()}\n </h2>\n </nord-visually-hidden>\n\n <div class=\"n-calendar-select\">\n <select\n aria-label=${this.localize.term(\"monthSelectLabel\")}\n class=\"n-calendar-select-month\"\n @input=${this.handleMonthSelect}\n >\n ${this.monthNames.map(\n (month, i) =>\n html`\n <option\n value=${i}\n ?selected=${i === focusedMonth}\n ?disabled=${!inRange(new Date(focusedYear, i, 1), minDateStartOfMonth, maxDateEndOfMonth)}\n >\n ${month}\n </option>\n `\n )}\n </select>\n <div class=\"n-calendar-select-label\" aria-hidden=\"true\">\n <span>${this.monthNamesShort[focusedMonth]}</span>\n <nord-icon color=\"var(--n-color-icon)\" name=\"arrow-down-small\" size=\"xxs\"></nord-icon>\n </div>\n </div>\n\n <div class=\"n-calendar-select\">\n <select\n aria-label=${this.localize.term(\"yearSelectLabel\")}\n class=\"n-calendar-select-year\"\n @input=${this.handleYearSelect}\n >\n ${repeat(\n range(minYear, maxYear),\n year => year,\n year => html`<option ?selected=${year === focusedYear}>${year}</option>`\n )}\n </select>\n <div class=\"n-calendar-select-label\" aria-hidden=\"true\">\n <span>${this.focusedDay.getFullYear()}</span>\n <nord-icon color=\"var(--n-color-icon)\" name=\"arrow-down-small\" size=\"xxs\"></nord-icon>\n </div>\n </div>\n </div>\n\n <div class=\"n-calendar-nav\">\n <nord-button\n class=\"n-calendar-prev\"\n @click=${this.handlePreviousMonthClick}\n ?disabled=${isEqualMonth(minDate, this.focusedDay)}\n type=\"button\"\n >\n <nord-visually-hidden>${this.localize.term(\"prevMonthLabel\")}</nord-visually-hidden>\n <nord-icon name=${this.direction.isLTR ? \"arrow-left-small\" : \"arrow-right-small\"} size=\"s\"></nord-icon>\n </nord-button>\n\n <nord-button\n class=\"n-calendar-next\"\n @click=${this.handleNextMonthClick}\n ?disabled=${isEqualMonth(maxDate, this.focusedDay)}\n type=\"button\"\n >\n <nord-visually-hidden>${this.localize.term(\"nextMonthLabel\")}</nord-visually-hidden>\n <nord-icon name=${this.direction.isLTR ? \"arrow-right-small\" : \"arrow-left-small\"} size=\"s\"></nord-icon>\n </nord-button>\n </div>\n </div>\n\n <table\n class=\"n-calendar-table\"\n aria-labelledby=${dialogLabelId}\n @focusin=${this.enableActiveFocus}\n @focusout=${this.disableActiveFocus}\n >\n <thead>\n <tr>\n ${mapWithOffset(\n this.dayNames,\n this.firstDayOfWeek,\n (dayName, i) =>\n html`\n <th class=\"n-calendar-table-header\" scope=\"col\">\n <span aria-hidden=\"true\">${this.dayNamesShort[i]}</span>\n <nord-visually-hidden>${dayName}</nord-visually-hidden>\n </th>\n `\n )}\n </tr>\n </thead>\n <tbody>\n ${chunk(getViewOfMonth(this.focusedDay, this.firstDayOfWeek), 7).map(\n week =>\n html`\n <tr class=\"n-calendar-row\">\n ${week.map(day => {\n const outsideRange = !inRange(day, minDate, maxDate)\n const isToday = isEqual(day, today)\n const isDisabled = this.isDateDisabled(day)\n const isSelected = isEqual(day, valueAsDate)\n const isInMonth = isEqualMonth(day, this.focusedDay)\n const isHighlighted = this.isDateHighlighted(day)\n const formattedDate = this.dateFormatShort.format(day)\n\n const accessibleLabel =\n isHighlighted && typeof isHighlighted === \"string\"\n ? `${formattedDate}, ${isHighlighted}`\n : formattedDate\n\n return html`\n <td class=\"n-calendar-cell\">\n <button\n type=\"button\"\n tabindex=${isEqual(day, this.focusedDay) ? 0 : -1}\n class=${classMap({\n \"n-calendar-day\": true,\n \"is-outside\": outsideRange,\n \"is-month\": isInMonth,\n \"is-highlighted\": isHighlighted,\n })}\n @click=${() => this.handleDaySelect(day)}\n @keydown=${this.shortcuts}\n ?disabled=${outsideRange}\n aria-disabled=${cond(isDisabled, \"true\")}\n aria-pressed=${isSelected ? \"true\" : \"false\"}\n aria-current=${cond(isToday, \"date\")}\n aria-label=${accessibleLabel}\n >\n <span aria-hidden=\"true\">${day.getDate()}</span>\n </button>\n </td>\n `\n })}\n </tr>\n `\n )}\n </tbody>\n </table>\n </div>\n `\n }\n\n @observe(\"value\")\n protected handleValueChange() {\n this.setFocusedDay(parseISODate(this.value) || new Date())\n }\n\n @observe(\"focusedDay\", \"updated\")\n protected handleFocusedDayChange() {\n if (this.activeFocus) {\n this.focusedDayNode.focus()\n }\n }\n\n private handleLangChange() {\n const lang = this.localize.resolvedLang\n this.dateFormatShort = new Intl.DateTimeFormat(lang, { timeZone: \"UTC\", day: \"numeric\", month: \"long\" })\n this.monthNames = getMonthNames(lang, \"long\")\n this.monthNamesShort = getMonthNames(lang, \"short\")\n this.dayNames = getDayNames(lang, \"long\")\n this.dayNamesShort = getDayNames(lang, \"narrow\")\n }\n\n private handleDaySelect = (day: Date) => {\n const isInRange = inRange(day, parseISODate(this.min), parseISODate(this.max))\n const isAllowed = !this.isDateDisabled(day)\n\n if (isInRange && isAllowed) {\n this.value = printISODate(day)\n this.dispatchEvent(new DateSelectEvent(\"change\", day))\n }\n }\n\n private addDays(days: number) {\n this.setFocusedDay(addDays(this.focusedDay, days))\n }\n\n private addMonths(months: number) {\n this.setMonth(this.focusedDay.getMonth() + months)\n }\n\n private addYears(years: number) {\n this.setYear(this.focusedDay.getFullYear() + years)\n }\n\n private startOfWeek() {\n this.setFocusedDay(startOfWeek(this.focusedDay, this.firstDayOfWeek))\n }\n\n private endOfWeek() {\n this.setFocusedDay(endOfWeek(this.focusedDay, this.firstDayOfWeek))\n }\n\n private setMonth(month: number) {\n const min = setMonth(startOfMonth(this.focusedDay), month)\n const max = endOfMonth(min)\n const date = setMonth(this.focusedDay, month)\n\n this.setFocusedDay(clamp(date, min, max))\n }\n\n private setYear(year: number) {\n const min = setYear(startOfMonth(this.focusedDay), year)\n const max = endOfMonth(min)\n const date = setYear(this.focusedDay, year)\n\n this.setFocusedDay(clamp(date, min, max))\n }\n\n private setFocusedDay(day: Date) {\n this.focusedDay = clamp(day, parseISODate(this.min), parseISODate(this.max))\n this.dispatchEvent(new DateSelectEvent(\"nord-focus-date\", this.focusedDay))\n }\n\n private handleMonthSelect = (e: Event) => {\n this.setMonth(parseInt((e.target as HTMLSelectElement).value, 10))\n }\n\n private handleYearSelect = (e: Event) => {\n this.setYear(parseInt((e.target as HTMLSelectElement).value, 10))\n }\n\n private handleNextMonthClick = (event: MouseEvent) => {\n event.preventDefault()\n this.addMonths(1)\n }\n\n private handlePreviousMonthClick = (event: MouseEvent) => {\n event.preventDefault()\n this.addMonths(-1)\n }\n\n private enableActiveFocus = () => {\n this.activeFocus = true\n }\n\n private disableActiveFocus = (e: FocusEvent) => {\n const table = e.currentTarget as Node\n const relatedTarget = e.relatedTarget as Node\n\n if (relatedTarget && !table.contains(relatedTarget)) {\n this.activeFocus = false\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-calendar\": Calendar\n }\n}\n"],"names":["preventDefault","e","SwipeController","constructor","host","options","this","hadFirstUpdate","initialTouchX","initialTouchY","handleTouchStart","event","pageX","pageY","changedTouches","handleTouchEnd","matchesGesture","onSwipeEnd","distX","distY","details","initialX","initialY","addController","events","EventController","target","hostUpdated","listen","hostDisconnected","isHorizontalSwipe","Math","abs","isDownwardsSwipe","Icon","registerIcon","arrowRightIcon","arrowLeftIcon","arrowDownIcon","fn","isDateDisabled","isDateHighlighted","dialogLabelId","Calendar","LitElement","direction","DirectionController","swipe","addMonths","shortcuts","createKeybindingsHandler","ArrowRight","addDays","isLTR","ArrowLeft","ArrowDown","ArrowUp","Home","startOfWeek","End","endOfWeek","PageUp","PageDown","addYears","localize","LocalizeController","onLangChange","handleLangChange","value","firstDayOfWeek","min","max","expand","activeFocus","focusedDay","Date","handleDaySelect","day","isInRange","inRange","parseISODate","isAllowed","printISODate","dispatchEvent","DateSelectEvent","handleMonthSelect","setMonth","parseInt","handleYearSelect","setYear","handleNextMonthClick","handlePreviousMonthClick","enableActiveFocus","disableActiveFocus","table","currentTarget","relatedTarget","contains","focus","_a","focusedDayNode","monthSelectNode","render","today","valueAsDate","focusedMonth","getMonth","focusedYear","getFullYear","minDate","maxDate","minDateStartOfMonth","startOfMonth","undefined","maxDateEndOfMonth","endOfMonth","selectedYear","minYear","maxYear","html","monthNames","term","map","month","i","monthNamesShort","repeat","range","year","isEqualMonth","mapWithOffset","dayNames","dayName","dayNamesShort","chunk","getViewOfMonth","week","outsideRange","isToday","isEqual","isDisabled","isSelected","isInMonth","isHighlighted","formattedDate","dateFormatShort","format","accessibleLabel","classMap","cond","getDate","handleValueChange","setFocusedDay","handleFocusedDayChange","lang","resolvedLang","Intl","DateTimeFormat","timeZone","getMonthNames","getDayNames","days","months","years","date","clamp","styles","componentStyle","style","__decorate","query","prototype","property","type","Number","reflect","Boolean","attribute","state","observe","customElement"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{_ as t,x as e}from"./query-assigned-elements-92ce7494.js";import{n as r}from"./property-c78323b1.js";import{S as i}from"./SlotController-d733c575.js";import{N as o}from"./events-d9666e88.js";import"./VisuallyHidden.js";class s{constructor(t,e){this.host=t,this.options=e,this._form=null,this.handleFormData=t=>{const{disabled:e,name:r}=this.host;if(e)return;if(!r)return;const i=this.options.value();null!=i&&t.formData.append(r,i)},t.addController(this)}hostConnected(){this.listen(this.host.form)}hostUpdated(){this.listen(this.host.form)}hostDisconnected(){this.cleanup()}listen(t){var e;this._form!==t&&(this.cleanup(),this._form=t,null===(e=this._form)||void 0===e||e.addEventListener("formdata",this.handleFormData))}cleanup(){var t;null===(t=this._form)||void 0===t||t.removeEventListener("formdata",this.handleFormData),this._form=null}}function n(n){class h extends n{constructor(){super(...arguments),this.labelSlot=new i(this,"label"),this.errorSlot=new i(this,"error"),this.hintSlot=new i(this,"hint"),this.formData=new s(this,{value:()=>this.formValue}),this.inputId="input",this.errorId="error",this.hintId="hint",this.label="",this.hideLabel=!1,this.required=!1,this.hideRequired=!1}get formValue(){return this.value}handleInput(t){t.stopPropagation();const e=t.target;this.value=e.value,this.dispatchEvent(new o("input"))}handleChange(t){t.stopPropagation(),this.dispatchEvent(new o("change"))}renderLabel(t){const r=e`<label for="${this.inputId}"><slot name="label">${this.label}</slot><span ?hidden="${!this.required||this.hideRequired}" aria-hidden="true" class="n-required">*</span> ${t}</label><div class="n-caption n-hint" id="${this.hintId}" ?hidden="${!this.hasHint}"><slot name="hint">${this.hint}</slot></div>`;return this.hideLabel?e`<nord-visually-hidden>${r}</nord-visually-hidden>`:e`<div class="n-label-container">${r}</div>`}renderError(){return e`<div class="n-caption n-error" id="${this.errorId}" role="alert" ?hidden="${!this.hasError}"><slot name="error">${this.error}</slot></div>`}getDescribedBy(){const{hasHint:t,hasError:e}=this;return t&&e?`${this.hintId} ${this.errorId}`:t?this.hintId:e?this.errorId:void 0}getInvalid(){return this.hasError?"true":void 0}get hasHint(){return Boolean(this.hint)||this.hintSlot.hasContent}get hasError(){return Boolean(this.error)||this.errorSlot.hasContent}}return t([r()],h.prototype,"label",void 0),t([r()],h.prototype,"hint",void 0),t([r({type:Boolean,attribute:"hide-label"})],h.prototype,"hideLabel",void 0),t([r()],h.prototype,"placeholder",void 0),t([r()],h.prototype,"error",void 0),t([r({type:Boolean})],h.prototype,"required",void 0),t([r({type:Boolean,attribute:"hide-required"})],h.prototype,"hideRequired",void 0),h}export{n as F};
2
- //# sourceMappingURL=FormAssociatedMixin-a278fda4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormAssociatedMixin-a278fda4.js","sources":["../src/common/controllers/FormDataController.ts","../src/common/mixins/FormAssociatedMixin.ts"],"sourcesContent":["import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { InputMixinInterface } from \"../mixins/InputMixin.js\"\n\ntype FormDataOptions = {\n value: () => string | undefined\n}\n\nexport class FormDataController implements ReactiveController {\n private _form: HTMLFormElement | null = null\n\n constructor(private host: ReactiveControllerHost & InputMixinInterface, private options: FormDataOptions) {\n host.addController(this)\n }\n\n hostConnected() {\n this.listen(this.host.form)\n }\n\n hostUpdated() {\n this.listen(this.host.form)\n }\n\n hostDisconnected() {\n this.cleanup()\n }\n\n private listen(form: HTMLFormElement | null) {\n if (this._form !== form) {\n this.cleanup()\n this._form = form\n this._form?.addEventListener(\"formdata\", this.handleFormData)\n }\n }\n\n private cleanup() {\n this._form?.removeEventListener(\"formdata\", this.handleFormData)\n this._form = null\n }\n\n private handleFormData = (e: FormDataEvent) => {\n const { disabled, name } = this.host\n\n if (disabled) {\n return\n }\n if (!name) {\n return\n }\n\n const value = this.options.value()\n if (value != null) {\n e.formData.append(name, value)\n }\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { html, LitElement, TemplateResult } from \"lit\"\nimport { property } from \"lit/decorators.js\"\nimport { FormDataController } from \"../controllers/FormDataController.js\"\nimport { SlotController } from \"../controllers/SlotController.js\"\nimport { NordEvent } from \"../events.js\"\nimport { InputMixinInterface } from \"./InputMixin.js\"\nimport \"../../visually-hidden/VisuallyHidden.js\"\n\ntype Constructor<T = Record<string, unknown>> = new (...args: any[]) => T\ntype NativeInputElement = HTMLSelectElement | HTMLInputElement | HTMLTextAreaElement\n\nexport declare class FormAssociatedMixinInterface {\n label: string\n required: boolean\n hideRequired: boolean\n hint?: string\n hideLabel: boolean\n placeholder?: string\n error?: string\n\n protected inputId: string\n protected errorId: string\n protected hintId: string\n protected labelSlot: SlotController\n protected hintSlot: SlotController\n protected errorSlot: SlotController\n protected formData: FormDataController\n\n protected get formValue(): string | undefined\n protected get hasError(): boolean\n protected get hasHint(): boolean\n\n protected handleChange(e: Event): void\n protected handleInput(e: Event): void\n protected renderLabel(additionalContent?: TemplateResult): TemplateResult\n protected renderError(): TemplateResult\n protected getDescribedBy(): string | undefined\n protected getInvalid(): \"true\" | undefined\n}\n\nexport function FormAssociatedMixin<T extends Constructor<InputMixinInterface & LitElement>>(superClass: T) {\n // TODO: would be nice if custom elements analyzer could pick up the slot docs from the mixin\n\n /**\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Use when a hint requires more than plain text.\n * @slot error - Optional slot that holds error text for the input.\n */\n class FormAssociatedElement extends superClass {\n protected labelSlot = new SlotController(this, \"label\")\n protected errorSlot = new SlotController(this, \"error\")\n protected hintSlot = new SlotController(this, \"hint\")\n protected formData = new FormDataController(this, { value: () => this.formValue })\n\n protected get formValue() {\n return this.value\n }\n\n protected inputId = \"input\"\n protected errorId = \"error\"\n protected hintId = \"hint\"\n\n /**\n * Label for the input.\n */\n @property() label: string = \"\"\n\n /**\n * Optional hint text to be displayed with the input. Alternatively use the hint slot.\n */\n @property() hint?: string\n\n /**\n * Visually hide the label, but still show it to assistive technologies like screen readers.\n */\n @property({ type: Boolean, attribute: \"hide-label\" }) hideLabel = false\n\n /**\n * Placeholder text to display within the input.\n */\n @property() placeholder?: string\n\n /**\n * Optional error to be shown with the input. Alternatively use the error slot.\n */\n @property() error?: string\n\n /**\n * Determines whether the input is required or not.\n * An input marked as required will be announced as such to users of assistive technology.\n * When using this property you need to also set “novalidate” attribute on a form element to prevent browser from displaying its own validation errors.\n */\n @property({ type: Boolean }) required = false\n\n /**\n * Visually hide the required indicator, but still show\n * required attribute to assistive technologies like screen readers.\n */\n @property({ type: Boolean, attribute: \"hide-required\" }) hideRequired = false\n\n protected handleInput(e: Event) {\n e.stopPropagation()\n const target = e.target as NativeInputElement\n this.value = target.value\n\n /**\n * Fired as the user types into the input.\n */\n this.dispatchEvent(new NordEvent(\"input\"))\n }\n\n protected handleChange(e: Event) {\n e.stopPropagation()\n\n /**\n * Fired whenever the input's value is changed via user interaction.\n */\n this.dispatchEvent(new NordEvent(\"change\"))\n }\n\n protected renderLabel(additionalContent?: TemplateResult) {\n const label = html`\n <label for=${this.inputId}>\n <slot name=\"label\">${this.label}</slot\n ><span ?hidden=${!this.required || this.hideRequired} aria-hidden=\"true\" class=\"n-required\">*</span>\n ${additionalContent}\n </label>\n\n <div class=\"n-caption n-hint\" id=${this.hintId} ?hidden=${!this.hasHint}>\n <slot name=\"hint\">${this.hint}</slot>\n </div>\n `\n\n return this.hideLabel\n ? html`<nord-visually-hidden>${label}</nord-visually-hidden>`\n : html`<div class=\"n-label-container\">${label}</div>`\n }\n\n protected renderError() {\n return html`\n <div class=\"n-caption n-error\" id=${this.errorId} role=\"alert\" ?hidden=${!this.hasError}>\n <slot name=\"error\">${this.error}</slot>\n </div>\n `\n }\n\n protected getDescribedBy() {\n const { hasHint, hasError } = this\n\n if (hasHint && hasError) {\n return `${this.hintId} ${this.errorId}`\n }\n if (hasHint) {\n return this.hintId\n }\n if (hasError) {\n return this.errorId\n }\n\n return undefined\n }\n\n protected getInvalid() {\n return this.hasError ? \"true\" : undefined\n }\n\n protected get hasHint() {\n return Boolean(this.hint) || this.hintSlot.hasContent\n }\n\n protected get hasError() {\n return Boolean(this.error) || this.errorSlot.hasContent\n }\n }\n\n return FormAssociatedElement as unknown as Constructor<FormAssociatedMixinInterface> & T\n}\n"],"names":["FormDataController","constructor","host","options","this","_form","handleFormData","e","disabled","name","value","formData","append","addController","hostConnected","listen","form","hostUpdated","hostDisconnected","cleanup","_a","addEventListener","removeEventListener","FormAssociatedMixin","superClass","FormAssociatedElement","labelSlot","SlotController","errorSlot","hintSlot","formValue","inputId","errorId","hintId","label","hideLabel","required","hideRequired","handleInput","stopPropagation","target","dispatchEvent","NordEvent","handleChange","renderLabel","additionalContent","html","hasHint","hint","renderError","hasError","error","getDescribedBy","getInvalid","undefined","Boolean","hasContent","__decorate","property","prototype","type","attribute"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{E as s}from"./EventController-d99ebeef.js";import{S as t}from"./ShortcutController-87615e31.js";class i{constructor(i,o){this.host=i,this.options=o,this.handleEsc=s=>{this.options.isOpen()&&this.options.onDismiss(s)},this.handleClickOut=s=>{var t;if(!this.options.isOpen())return;const i=null!==(t=this.options.isDismissible)&&void 0!==t?t:s=>s!==this.host;s.composedPath().every(i)&&this.options.onDismiss(s)},i.addController(this),this.shortcut=new t(i,{Escape:this.handleEsc}),this.events=new s(i)}hostConnected(){this.events.listen(document,"click",this.handleClickOut,!0)}}export{i as L};
2
- //# sourceMappingURL=LightDismissController-a2645ae6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LightDismissController-a2645ae6.js","sources":["../src/common/controllers/LightDismissController.ts"],"sourcesContent":["import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { EventController } from \"./EventController.js\"\nimport { ShortcutController } from \"./ShortcutController.js\"\n\nexport type LightDismissOptions = {\n isOpen: () => boolean\n onDismiss: EventListener\n isDismissible?: (node: EventTarget) => boolean\n}\n\nexport class LightDismissController implements ReactiveController {\n private shortcut: ShortcutController\n private events: EventController\n\n constructor(private host: ReactiveControllerHost & Element, private options: LightDismissOptions) {\n host.addController(this)\n this.shortcut = new ShortcutController(host, { Escape: this.handleEsc })\n this.events = new EventController(host)\n }\n\n hostConnected() {\n this.events.listen(document, \"click\", this.handleClickOut, true)\n }\n\n private handleEsc = (e: KeyboardEvent) => {\n if (!this.options.isOpen()) {\n return\n }\n\n this.options.onDismiss(e)\n }\n\n private handleClickOut = (e: MouseEvent) => {\n if (!this.options.isOpen()) {\n return\n }\n\n const predicate: LightDismissOptions[\"isDismissible\"] = this.options.isDismissible ?? (node => node !== this.host)\n const isClickOutside = e.composedPath().every(predicate)\n\n if (isClickOutside) {\n this.options.onDismiss(e)\n }\n }\n}\n"],"names":["LightDismissController","constructor","host","options","this","handleEsc","e","isOpen","onDismiss","handleClickOut","predicate","_a","isDismissible","node","composedPath","every","addController","shortcut","ShortcutController","Escape","events","EventController","hostConnected","listen","document"],"mappings":"6GAUaA,EAIX,WAAAC,CAAoBC,EAAgDC,GAAhDC,KAAIF,KAAJA,EAAgDE,KAAOD,QAAPA,EAU5DC,KAAAC,UAAaC,IACdF,KAAKD,QAAQI,UAIlBH,KAAKD,QAAQK,UAAUF,EAAE,EAGnBF,KAAAK,eAAkBH,UACxB,IAAKF,KAAKD,QAAQI,SAChB,OAGF,MAAMG,EAAgF,QAA9BC,EAAAP,KAAKD,QAAQS,qBAAiB,IAAAD,EAAAA,EAACE,GAAQA,IAAST,KAAKF,KACtFI,EAAEQ,eAAeC,MAAML,IAG5CN,KAAKD,QAAQK,UAAUF,EACxB,EA3BDJ,EAAKc,cAAcZ,MACnBA,KAAKa,SAAW,IAAIC,EAAmBhB,EAAM,CAAEiB,OAAQf,KAAKC,YAC5DD,KAAKgB,OAAS,IAAIC,EAAgBnB,EACnC,CAED,aAAAoB,GACElB,KAAKgB,OAAOG,OAAOC,SAAU,QAASpB,KAAKK,gBAAgB,EAC5D"}
@@ -1,2 +0,0 @@
1
- import{_ as t,i as e,x as o,e as i,s}from"./query-assigned-elements-92ce7494.js";import{n}from"./property-c78323b1.js";import{t as r}from"./state-d31c6912.js";import{i as a}from"./query-36bfe0e4.js";import{c as l,l as p,o as h,f as d,s as c,h as m,a as u}from"./positioning-2346bdd6.js";import{L as v}from"./LightDismissController-a2645ae6.js";import{S as f}from"./ScrollbarController-773c79f4.js";import{N as g,t as y}from"./events-d9666e88.js";import{s as b}from"./Component-2253424f.js";import{D as w}from"./DirectionController-f35f5476.js";import{o as E}from"./observe-a9c6dfb6.js";import{E as x}from"./EventController-d99ebeef.js";function C(e){class o extends e{constructor(){super(...arguments),this.open=!1,this.align="start",this.position="block-end"}}return t([n({type:Boolean,reflect:!0})],o.prototype,"open",void 0),t([n({reflect:!0})],o.prototype,"align",void 0),t([n({reflect:!0})],o.prototype,"position",void 0),o}const k=e`:host{position:fixed;pointer-events:none;z-index:var(--n-index-popout);left:var(--_n-popout-position-x);top:var(--_n-popout-position-y);color:var(--n-color-text);opacity:0;transition:opacity var(--n-transition-slowly)}.n-popout{pointer-events:none;transform:translateY(-10px) scale(.97);visibility:hidden;transition:transform var(--n-transition-slowly),visibility var(--n-transition-slowly);transform-origin:top left;will-change:transform,opacity,visibility;background:var(--n-color-surface);box-shadow:var(--n-box-shadow-popout);border-radius:var(--n-border-radius-s)}:host([open]){opacity:1}:host([open]) .n-popout{transition-property:transform;visibility:visible;pointer-events:auto;transform:translateY(0) translateX(0) scale(1)}@media (max-width:35.9375em){:host{position:fixed;inset:0;overflow-y:auto;opacity:1;background:0 0;transition:background var(--n-transition-mobile)}:host([open]){pointer-events:auto;background:var(--n-color-overlay)}:host .n-popout{position:fixed;inset:0;inset-block-start:auto;transform:translateY(100%);transition:transform var(--n-transition-mobile),visibility var(--n-transition-mobile);transform-origin:bottom center;border-radius:0}}.top-end,.top-start{transform:translateY(10px) scale(.97)}.left-end,.left-start{transform:translateX(10px) scale(.97)}.right-end,.right-start{transform:translateX(-10px) scale(.97)}.bottom-start.is-rtl,.left-end,.top-end{transform-origin:bottom right}.bottom-end,.left-start,.top-start.is-rtl{transform-origin:top right}.bottom-end.is-rtl,.right-end,.right-start{transform-origin:bottom left}.right-start,.top-end.is-rtl{transform-origin:top left}`,A=matchMedia("(max-width: 35.9375em)");let P=class extends(C(s)){constructor(){super(...arguments),this.scrollBar=new f(this),this.dismiss=new v(this,{isOpen:()=>this.open,onDismiss:t=>this.hide("click"!==t.type),isDismissible:t=>t!==this.popout&&t!==this.targetElement}),this.events=new x(this),this.direction=new w(this),this.smallViewport=A.matches,this.id="",this.enableScroll=()=>{this.open||this.scrollBar.unlockScroll()},this.updatePosition=async()=>{var t;if(!this.anchorElement)return;const{x:e,y:o,placement:i,middlewareData:s}=await l(this.anchorElement,this,{strategy:"fixed",placement:p(this.position,this.align,this.direction.dir),middleware:[h(8),d(),c({padding:8}),m()]});this.computedPosition=i,this.style.setProperty("--_n-popout-position-x",`${e}px`),this.style.setProperty("--_n-popout-position-y",`${o}px`),(null===(t=s.hide)||void 0===t?void 0:t.referenceHidden)&&this.hide()},this.toggleOpen=t=>{t.preventDefault(),this.open?this.hide(!1):this.smallViewport?this.show():this.updatePosition().then((()=>this.show()))},this.handleMediaQueryChange=()=>{var t;this.smallViewport=A.matches,null===(t=this.cleanupAutoUpdate)||void 0===t||t.call(this),!this.smallViewport&&this.open&&this.anchorElement?(this.cleanupAutoUpdate=u(this.anchorElement,this,this.updatePosition),this.scrollBar.unlockScroll()):this.open&&this.scrollBar.lockScroll()}}async show(){return this.open?Promise.resolve():(this.open=!0,await this.updateComplete,this.dispatchEvent(new g("open")),y(this.popout))}async hide(t=!0){var e,o;return this.open?(this.open=!1,null===(e=this.cleanupAutoUpdate)||void 0===e||e.call(this),this.dispatchEvent(new g("close")),t&&(null===(o=this.targetElement)||void 0===o||o.focus({preventScroll:!0})),y(this.popout)):Promise.resolve()}firstUpdated(){this.smallViewport||this.updatePosition()}connectedCallback(){super.connectedCallback(),this.events.listen(A,"change",this.handleMediaQueryChange)}disconnectedCallback(){var t,e;super.disconnectedCallback(),null===(t=this.cleanupAutoUpdate)||void 0===t||t.call(this),null===(e=this.targetElement)||void 0===e||e.removeAttribute("aria-expanded")}render(){return o`<div class="n-popout ${this.computedPosition} is-${this.direction.dir}" aria-hidden="${this.open?"false":"true"}" @transitionend="${this.enableScroll}"><slot></slot></div>`}handleIdChange(){var t;null===(t=this.targetElement)||void 0===t||t.removeEventListener("click",this.toggleOpen),this.id?(this.targetElement=this.getToggle(),this.anchorElement=this.getAnchor(),this.events.listen(this.targetElement,"click",this.toggleOpen)):console.warn("NORD: popout requires an id attribute and value")}handleOpenChange(){var t,e;null===(t=this.targetElement)||void 0===t||t.setAttribute("aria-expanded",`${this.open}`),this.open?this.smallViewport?this.scrollBar.lockScroll():this.anchorElement&&(this.cleanupAutoUpdate=u(this.anchorElement,this,this.updatePosition)):null===(e=this.cleanupAutoUpdate)||void 0===e||e.call(this)}handleAnchorChange(){var t;null===(t=this.cleanupAutoUpdate)||void 0===t||t.call(this),this.anchorElement=this.getAnchor(),this.open&&!this.smallViewport&&this.anchorElement&&(this.cleanupAutoUpdate=u(this.anchorElement,this,this.updatePosition))}getToggle(){const t=this.getRootNode().querySelector(`[aria-controls='${this.id}']`);return t instanceof HTMLSlotElement?t.assignedElements()[0]:t}getAnchor(){if(!this.anchor)return this.targetElement;const t=this.getRootNode().querySelector(`#${this.anchor}`);return t instanceof HTMLSlotElement?t.assignedElements()[0]:t}};P.styles=[b,k],t([a(".n-popout",!0)],P.prototype,"popout",void 0),t([r()],P.prototype,"computedPosition",void 0),t([r()],P.prototype,"smallViewport",void 0),t([n({reflect:!0})],P.prototype,"id",void 0),t([n({reflect:!0})],P.prototype,"anchor",void 0),t([E("id")],P.prototype,"handleIdChange",null),t([E("open")],P.prototype,"handleOpenChange",null),t([E("anchor")],P.prototype,"handleAnchorChange",null),P=t([i("nord-popout")],P);var S=P;export{C as F,S as P};
2
- //# sourceMappingURL=Popout-2220e77b.js.map