@nordhealth/components 1.0.0 → 1.0.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/custom-elements.json +360 -139
- package/lib/Avatar.js +1 -1
- package/lib/Avatar.js.map +1 -1
- package/lib/Badge.js +1 -1
- package/lib/Badge.js.map +1 -1
- package/lib/Banner.js +1 -1
- package/lib/Banner.js.map +1 -1
- package/lib/Button.js +1 -1
- package/lib/Button.js.map +1 -1
- package/lib/Calendar-52774c03.js +2 -0
- package/lib/Calendar-52774c03.js.map +1 -0
- package/lib/Calendar.js +1 -1
- package/lib/Card.js +1 -1
- package/lib/Card.js.map +1 -1
- package/lib/Checkbox.js +1 -1
- package/lib/Checkbox.js.map +1 -1
- package/lib/CommandMenu.js +1 -1
- package/lib/CommandMenu.js.map +1 -1
- package/lib/CommandMenuAction.js +1 -1
- package/lib/CommandMenuAction.js.map +1 -1
- package/lib/{Component-9d373ef3.js → Component-6bf383d6.js} +2 -2
- package/lib/Component-6bf383d6.js.map +1 -0
- package/lib/DatePicker.js +1 -1
- package/lib/DatePicker.js.map +1 -1
- package/lib/DateSelectEvent.js.map +1 -1
- package/lib/DirectionController-8b298382.js +2 -0
- package/lib/DirectionController-8b298382.js.map +1 -0
- package/lib/DraftComponentMixin-9e4b7b34.js.map +1 -1
- package/lib/Dropdown.js +1 -1
- package/lib/Dropdown.js.map +1 -1
- package/lib/DropdownGroup.js +1 -1
- package/lib/DropdownGroup.js.map +1 -1
- package/lib/DropdownItem.js +1 -1
- package/lib/DropdownItem.js.map +1 -1
- package/lib/EmptyState.js +1 -1
- package/lib/EmptyState.js.map +1 -1
- package/lib/EventController-d99ebeef.js.map +1 -1
- package/lib/Fieldset.js +1 -1
- package/lib/Fieldset.js.map +1 -1
- package/lib/{FocusableMixin-ebb67709.js → FocusableMixin-c010d3b3.js} +2 -2
- package/lib/{FocusableMixin-ebb67709.js.map → FocusableMixin-c010d3b3.js.map} +1 -1
- package/lib/FormAssociatedMixin-f69a60dd.js +2 -0
- package/lib/FormAssociatedMixin-f69a60dd.js.map +1 -0
- package/lib/{FormField-50bd73d5.js → FormField-900069ed.js} +2 -2
- package/lib/FormField-900069ed.js.map +1 -0
- package/lib/Header.js +1 -1
- package/lib/Header.js.map +1 -1
- package/lib/Icon.js +1 -1
- package/lib/Icon.js.map +1 -1
- package/lib/Input.js +1 -1
- package/lib/Input.js.map +1 -1
- package/lib/{InputMixin-94d15730.js → InputMixin-84ca72ae.js} +2 -2
- package/lib/InputMixin-84ca72ae.js.map +1 -0
- package/lib/KeyboardController.js +1 -1
- package/lib/KeyboardController.js.map +1 -1
- package/lib/Layout.js +1 -1
- package/lib/Layout.js.map +1 -1
- package/lib/LightDismissController-a2645ae6.js +2 -0
- package/lib/LightDismissController-a2645ae6.js.map +1 -0
- package/lib/LightDomController-f21f0a7c.js +2 -0
- package/lib/LightDomController-f21f0a7c.js.map +1 -0
- package/lib/LocalizeController.js +1 -1
- package/lib/LocalizeController.js.map +1 -1
- package/lib/NavGroup.js +1 -1
- package/lib/NavGroup.js.map +1 -1
- package/lib/NavItem.js +1 -1
- package/lib/NavItem.js.map +1 -1
- package/lib/Navigation.js +1 -1
- package/lib/Navigation.js.map +1 -1
- package/lib/Popout.js +1 -1
- package/lib/Popout.js.map +1 -1
- package/lib/ProgressBar.js +1 -1
- package/lib/ProgressBar.js.map +1 -1
- package/lib/Radio.js +1 -1
- package/lib/Radio.js.map +1 -1
- package/lib/Select.js +1 -1
- package/lib/Select.js.map +1 -1
- package/lib/SelectEvent.js.map +1 -1
- package/lib/ShortcutController-87615e31.js +2 -0
- package/lib/ShortcutController-87615e31.js.map +1 -0
- package/lib/SlotController-ea6eff46.js +2 -0
- package/lib/SlotController-ea6eff46.js.map +1 -0
- package/lib/Spinner.js +1 -1
- package/lib/Spinner.js.map +1 -1
- package/lib/Stack.js +1 -1
- package/lib/Stack.js.map +1 -1
- package/lib/Table.js +1 -1
- package/lib/Table.js.map +1 -1
- package/lib/{TextField-9bee8388.js → TextField-0ba775e0.js} +2 -2
- package/lib/TextField-0ba775e0.js.map +1 -0
- package/lib/Textarea.js +1 -1
- package/lib/Textarea.js.map +1 -1
- package/lib/Tooltip.js +1 -1
- package/lib/Tooltip.js.map +1 -1
- package/lib/VisuallyHidden.js +1 -1
- package/lib/VisuallyHidden.js.map +1 -1
- package/lib/bundle.js +16 -25
- package/lib/bundle.js.map +1 -1
- package/lib/{class-map-87423405.js → class-map-f93f9ba8.js} +2 -2
- package/lib/{class-map-87423405.js.map → class-map-f93f9ba8.js.map} +1 -1
- package/lib/collection-800f5002.js.map +1 -1
- package/lib/cond-a3e00141.js +2 -0
- package/lib/cond-a3e00141.js.map +1 -0
- package/lib/date-adapter.js +1 -1
- package/lib/date-adapter.js.map +1 -1
- package/lib/dates-56f73760.js +2 -0
- package/lib/dates-56f73760.js.map +1 -0
- package/lib/directive-de55b00a.js.map +1 -1
- package/lib/en-us.js.map +1 -1
- package/lib/events-731d0007.js.map +1 -1
- package/lib/fi-fi.js.map +1 -1
- package/lib/fsm-50373df9.js.map +1 -1
- package/lib/if-defined-ee2efb2f.js +7 -0
- package/lib/{if-defined-fe657a02.js.map → if-defined-ee2efb2f.js.map} +1 -1
- package/lib/index.js +1 -1
- package/lib/{lit-element-74b6bb4b.js → lit-element-99bdfe5a.js} +3 -3
- package/lib/{lit-element-74b6bb4b.js.map → lit-element-99bdfe5a.js.map} +1 -1
- package/lib/localization.js.map +1 -1
- package/lib/localization2.js.map +1 -1
- package/lib/localization3.js.map +1 -1
- package/lib/month-view.js +1 -1
- package/lib/month-view.js.map +1 -1
- package/lib/number-ff1c5d88.js +7 -0
- package/lib/{number-3a8ef88a.js.map → number-ff1c5d88.js.map} +1 -1
- package/lib/observe-a9c6dfb6.js +2 -0
- package/lib/observe-a9c6dfb6.js.map +1 -0
- package/lib/positioning-763efb3a.js +2 -0
- package/lib/positioning-763efb3a.js.map +1 -0
- package/lib/query-assigned-elements-ef860822.js +12 -0
- package/lib/query-assigned-elements-ef860822.js.map +1 -0
- package/lib/{ref-7d028e3a.js → ref-7e1d4d24.js} +3 -3
- package/lib/ref-7e1d4d24.js.map +1 -0
- package/lib/src/avatar/Avatar.d.ts +2 -2
- package/lib/src/calendar/Calendar.d.ts +3 -3
- package/lib/src/command-menu/CommandMenu.d.ts +4 -3
- package/lib/src/command-menu/CommandMenuAction.d.ts +3 -4
- package/lib/src/command-menu/SelectEvent.d.ts +1 -1
- package/lib/src/common/decorators/observe.d.ts +3 -0
- package/lib/src/common/directives/cond.d.ts +29 -7
- package/lib/src/common/fsm.d.ts +5 -3
- package/lib/src/common/mixins/InputMixin.d.ts +1 -1
- package/lib/src/icon/Icon.d.ts +3 -4
- package/lib/src/popout/Popout.d.ts +3 -5
- package/lib/src/radio/Radio.d.ts +1 -1
- package/lib/src/textarea/Textarea.d.ts +2 -3
- package/lib/src/tooltip/Tooltip.d.ts +3 -6
- package/lib/translation.js.map +1 -1
- package/lib/unsafe-html-feceb926.js +7 -0
- package/lib/{unsafe-html-989a642b.js.map → unsafe-html-feceb926.js.map} +1 -1
- package/package.json +12 -12
- package/lib/Calendar-d1632bb6.js +0 -2
- package/lib/Calendar-d1632bb6.js.map +0 -1
- package/lib/Component-9d373ef3.js.map +0 -1
- package/lib/DirectionController-b267af23.js +0 -2
- package/lib/DirectionController-b267af23.js.map +0 -1
- package/lib/FormAssociatedMixin-1f97ed66.js +0 -2
- package/lib/FormAssociatedMixin-1f97ed66.js.map +0 -1
- package/lib/FormField-50bd73d5.js.map +0 -1
- package/lib/InputMixin-94d15730.js.map +0 -1
- package/lib/LightDismissController-a35d0f66.js +0 -2
- package/lib/LightDismissController-a35d0f66.js.map +0 -1
- package/lib/LightDomController-011334da.js +0 -2
- package/lib/LightDomController-011334da.js.map +0 -1
- package/lib/ShortcutController-93173ff4.js +0 -2
- package/lib/ShortcutController-93173ff4.js.map +0 -1
- package/lib/SlotController-683d0e7c.js +0 -2
- package/lib/SlotController-683d0e7c.js.map +0 -1
- package/lib/TextField-9bee8388.js.map +0 -1
- package/lib/dates-9272b910.js +0 -2
- package/lib/dates-9272b910.js.map +0 -1
- package/lib/if-defined-fe657a02.js +0 -7
- package/lib/number-3a8ef88a.js +0 -7
- package/lib/positioning-72899e14.js +0 -2
- package/lib/positioning-72899e14.js.map +0 -1
- package/lib/query-assigned-elements-37b095c4.js +0 -26
- package/lib/query-assigned-elements-37b095c4.js.map +0 -1
- package/lib/ref-7d028e3a.js.map +0 -1
- package/lib/unsafe-html-989a642b.js +0 -7
package/lib/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../src/badge/Badge.ts","../node_modules/lit-html/directives/if-defined.js","../node_modules/lit-html/directive-helpers.js","../node_modules/lit-html/directive.js","../node_modules/lit-html/async-directive.js","../node_modules/lit-html/directives/ref.js","../src/common/controllers/EventController.ts","../src/common/controllers/LightDomController.ts","../src/common/mixins/FocusableMixin.ts","../src/common/mixins/InputMixin.ts","../src/button/Button.ts","../src/common/controllers/SlotController.ts","../src/card/Card.ts","../node_modules/lit-html/directives/unsafe-html.js","../src/common/controllers/FormDataController.ts","../src/common/events.ts","../src/visually-hidden/VisuallyHidden.ts","../src/common/mixins/FormAssociatedMixin.ts","../src/input/Input.ts","../../icons/lib/assets/navigation-search.js","../src/icon/Icon.ts","../node_modules/lit-html/directives/repeat.js","../node_modules/lit-html/directives/class-map.js","../../icons/lib/assets/keyboard-arrow-up-down.js","../../icons/lib/assets/keyboard-return.js","../../icons/lib/assets/keyboard-backspace.js","../src/common/number.ts","../src/common/focus.ts","../node_modules/tinykeys/dist/tinykeys.module.js","../src/common/controllers/ShortcutController.ts","../src/common/controllers/LightDismissController.ts","../src/command-menu/KeyboardController.ts","../../icons/lib/assets/arrow-right.js","../../icons/lib/assets/arrow-left.js","../../icons/lib/assets/keyboard-option.js","../src/common/controllers/DirectionController.ts","../src/command-menu/CommandMenuAction.ts","../src/command-menu/SelectEvent.ts","../src/localization/en-us.ts","../src/command-menu/localization.ts","../src/calendar/localization.ts","../src/date-picker/localization.ts","../src/localization/translation.ts","../src/localization/LocalizeController.ts","../src/command-menu/CommandMenu.ts","../src/common/collection.ts","../src/select/Select.ts","../../icons/lib/assets/interface-dropdown-small.js","../src/stack/Stack.ts","../src/spinner/Spinner.ts","../src/table/Table.ts","../src/textarea/Textarea.ts","../../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/common/dates.ts","../src/calendar/month-view.ts","../src/calendar/DateSelectEvent.ts","../src/calendar/Calendar.ts","../../icons/lib/assets/interface-calendar.js","../../icons/lib/assets/interface-close-small.js","../src/date-picker/date-adapter.ts","../src/date-picker/DatePicker.ts","../src/common/input.ts","../../icons/lib/assets/interface-checked-small.js","../src/checkbox/Checkbox.ts","../node_modules/@floating-ui/core/dist/floating-ui.core.esm.js","../node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js","../src/common/attribute.ts","../src/common/fsm.ts","../src/common/positioning.ts","../src/tooltip/Tooltip.ts","../src/fieldset/Fieldset.ts","../src/common/controllers/LightSlotController.ts","../src/radio/Radio.ts","../src/common/directives/wrapIf.ts","../src/header/Header.ts","../src/common/mixins/DraftComponentMixin.ts","../src/nav-group/NavGroup.ts","../src/nav-item/NavItem.ts","../src/navigation/Navigation.ts","../src/layout/Layout.ts","../src/empty-state/EmptyState.ts","../../icons/lib/assets/interface-help-2.js","../../icons/lib/assets/interface-warning.js","../../icons/lib/assets/interface-info.js","../../icons/lib/assets/interface-checked-circle.js","../src/banner/Banner.ts","../src/avatar/Avatar.ts","../src/progress-bar/ProgressBar.ts","../src/popout/Popout.ts","../src/dropdown/Dropdown.ts","../src/dropdown-item/DropdownItem.ts","../src/dropdown-group/DropdownGroup.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,e=Symbol(),n=new Map;class s{constructor(t,n){if(this._$cssResult$=!0,n!==e)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t}get styleSheet(){let e=n.get(this.cssText);return t&&void 0===e&&(n.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const o=t=>new s(\"string\"==typeof t?t:t+\"\",e),r=(t,...n)=>{const o=1===t.length?t[0]:n.reduce(((e,n,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(n)+t[s+1]),t[0]);return new s(o,e)},i=(e,n)=>{t?e.adoptedStyleSheets=n.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):n.forEach((t=>{const n=document.createElement(\"style\"),s=window.litNonce;void 0!==s&&n.setAttribute(\"nonce\",s),n.textContent=t.cssText,e.appendChild(n)}))},S=t?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const n of t.cssRules)e+=n.cssText;return o(e)})(t):t;export{s as CSSResult,i as adoptStyles,r as css,S as getCompatibleStyle,t as supportsAdoptingStyleSheets,o as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as i}from\"./css-tag.js\";export{CSSResult,adoptStyles,css,getCompatibleStyle,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var s;const e=window.trustedTypes,r=e?e.emptyScript:\"\",h=window.reactiveElementPolyfillSupport,o={toAttribute(t,i){switch(i){case Boolean:t=t?r:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t)}catch(t){s=null}}return s}},n=(t,i)=>i!==t&&(i==i||t==t),l={attribute:!0,type:String,converter:o,reflect:!1,hasChanged:n};class a extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var i;null!==(i=this.l)&&void 0!==i||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this._$Eh(s,i);void 0!==e&&(this._$Eu.set(e,s),t.push(e))})),t}static createProperty(t,i=l){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s=\"symbol\"==typeof t?Symbol():\"__\"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e)}}static getPropertyDescriptor(t,i,s){return{get(){return this[i]},set(e){const r=this[t];this[i]=e,this.requestUpdate(t,r,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||l}static finalize(){if(this.hasOwnProperty(\"finalized\"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty(\"properties\")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(t(i))}else void 0!==i&&s.push(t(i));return s}static _$Eh(t,i){const s=i.attribute;return!1===s?void 0:\"string\"==typeof s?s:\"string\"==typeof t?t.toLowerCase():void 0}o(){var t;this._$Ep=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var i,s;(null!==(i=this._$Eg)&&void 0!==i?i:this._$Eg=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t))}removeController(t){var i;null===(i=this._$Eg)||void 0===i||i.splice(this._$Eg.indexOf(t)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this._$Et.set(i,this[i]),delete this[i])}))}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return i(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)}))}attributeChangedCallback(t,i,s){this._$AK(t,s)}_$ES(t,i,s=l){var e,r;const h=this.constructor._$Eh(t,s);if(void 0!==h&&!0===s.reflect){const n=(null!==(r=null===(e=s.converter)||void 0===e?void 0:e.toAttribute)&&void 0!==r?r:o.toAttribute)(i,s.type);this._$Ei=t,null==n?this.removeAttribute(h):this.setAttribute(h,n),this._$Ei=null}}_$AK(t,i){var s,e,r;const h=this.constructor,n=h._$Eu.get(t);if(void 0!==n&&this._$Ei!==n){const t=h.getPropertyOptions(n),l=t.converter,a=null!==(r=null!==(e=null===(s=l)||void 0===s?void 0:s.fromAttribute)&&void 0!==e?e:\"function\"==typeof l?l:null)&&void 0!==r?r:o.fromAttribute;this._$Ei=n,this[n]=a(i,t.type),this._$Ei=null}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||n)(this[t],i)?(this._$AL.has(t)||this._$AL.set(t,i),!0===s.reflect&&this._$Ei!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this._$Ep=this._$E_())}async _$E_(){this.isUpdatePending=!0;try{await this._$Ep}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,i)=>this[i]=t)),this._$Et=void 0);let i=!1;const s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this._$EU()}catch(t){throw i=!1,this._$EU(),t}i&&this._$AE(s)}willUpdate(t){}_$AE(t){var i;null===(i=this._$Eg)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,i)=>this._$ES(i,this[i],t))),this._$EC=void 0),this._$EU()}updated(t){}firstUpdated(t){}}a.finalized=!0,a.elementProperties=new Map,a.elementStyles=[],a.shadowRootOptions={mode:\"open\"},null==h||h({ReactiveElement:a}),(null!==(s=globalThis.reactiveElementVersions)&&void 0!==s?s:globalThis.reactiveElementVersions=[]).push(\"1.3.1\");export{a as ReactiveElement,o as defaultConverter,n as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nvar t;const i=globalThis.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=`lit$${(Math.random()+\"\").slice(9)}$`,o=\"?\"+e,n=`<${o}>`,l=document,h=(t=\"\")=>l.createComment(t),r=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,d=Array.isArray,u=t=>{var i;return d(t)||\"function\"==typeof(null===(i=t)||void 0===i?void 0:i[Symbol.iterator])},c=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,a=/>/g,f=/>|[ \t\\n\f\\r](?:([^\\s\"'>=/]+)([ \t\\n\f\\r]*=[ \t\\n\f\\r]*(?:[^ \t\\n\f\\r\"'`<>=]|(\"|')|))|$)/g,_=/'/g,m=/\"/g,g=/^(?:script|style|textarea|title)$/i,p=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),$=p(1),y=p(2),b=Symbol.for(\"lit-noChange\"),w=Symbol.for(\"lit-nothing\"),T=new WeakMap,x=(t,i,s)=>{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new N(i.insertBefore(h(),t),t,void 0,null!=s?s:{})}return l._$AI(t),l},A=l.createTreeWalker(l,129,null,!1),C=(t,i)=>{const o=t.length-1,l=[];let h,r=2===i?\"<svg>\":\"\",d=c;for(let i=0;i<o;i++){const s=t[i];let o,u,p=-1,$=0;for(;$<s.length&&(d.lastIndex=$,u=d.exec(s),null!==u);)$=d.lastIndex,d===c?\"!--\"===u[1]?d=v:void 0!==u[1]?d=a:void 0!==u[2]?(g.test(u[2])&&(h=RegExp(\"</\"+u[2],\"g\")),d=f):void 0!==u[3]&&(d=f):d===f?\">\"===u[0]?(d=null!=h?h:c,p=-1):void 0===u[1]?p=-2:(p=d.lastIndex-u[2].length,o=u[1],d=void 0===u[3]?f:'\"'===u[3]?m:_):d===m||d===_?d=f:d===v||d===a?d=c:(d=f,h=void 0);const y=d===f&&t[i+1].startsWith(\"/>\")?\" \":\"\";r+=d===c?s+n:p>=0?(l.push(o),s.slice(0,p)+\"$lit$\"+s.slice(p)+e+y):s+e+(-2===p?(l.push(void 0),i):y)}const u=r+(t[o]||\"<?>\")+(2===i?\"</svg>\":\"\");if(!Array.isArray(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return[void 0!==s?s.createHTML(u):u,l]};class E{constructor({strings:t,_$litType$:s},n){let l;this.parts=[];let r=0,d=0;const u=t.length-1,c=this.parts,[v,a]=C(t,s);if(this.el=E.createElement(v,n),A.currentNode=this.el.content,2===s){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes)}for(;null!==(l=A.nextNode())&&c.length<u;){if(1===l.nodeType){if(l.hasAttributes()){const t=[];for(const i of l.getAttributeNames())if(i.endsWith(\"$lit$\")||i.startsWith(e)){const s=a[d++];if(t.push(i),void 0!==s){const t=l.getAttribute(s.toLowerCase()+\"$lit$\").split(e),i=/([.?@])?(.*)/.exec(s);c.push({type:1,index:r,name:i[2],strings:t,ctor:\".\"===i[1]?M:\"?\"===i[1]?H:\"@\"===i[1]?I:S})}else c.push({type:6,index:r})}for(const i of t)l.removeAttribute(i)}if(g.test(l.tagName)){const t=l.textContent.split(e),s=t.length-1;if(s>0){l.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)l.append(t[i],h()),A.nextNode(),c.push({type:2,index:++r});l.append(t[s],h())}}}else if(8===l.nodeType)if(l.data===o)c.push({type:2,index:r});else{let t=-1;for(;-1!==(t=l.data.indexOf(e,t+1));)c.push({type:7,index:r}),t+=e.length-1}r++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function P(t,i,s=t,e){var o,n,l,h;if(i===b)return i;let d=void 0!==e?null===(o=s._$Cl)||void 0===o?void 0:o[e]:s._$Cu;const u=r(i)?void 0:i._$litDirective$;return(null==d?void 0:d.constructor)!==u&&(null===(n=null==d?void 0:d._$AO)||void 0===n||n.call(d,!1),void 0===u?d=void 0:(d=new u(t),d._$AT(t,s,e)),void 0!==e?(null!==(l=(h=s)._$Cl)&&void 0!==l?l:h._$Cl=[])[e]=d:s._$Cu=d),void 0!==d&&(i=P(t,d._$AS(t,i.values),d,e)),i}class V{constructor(t,i){this.v=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(t){var i;const{el:{content:s},parts:e}=this._$AD,o=(null!==(i=null==t?void 0:t.creationScope)&&void 0!==i?i:l).importNode(s,!0);A.currentNode=o;let n=A.nextNode(),h=0,r=0,d=e[0];for(;void 0!==d;){if(h===d.index){let i;2===d.type?i=new N(n,n.nextSibling,this,t):1===d.type?i=new d.ctor(n,d.name,d.strings,this,t):6===d.type&&(i=new L(n,this,t)),this.v.push(i),d=e[++r]}h!==(null==d?void 0:d.index)&&(n=A.nextNode(),h++)}return o}m(t){let i=0;for(const s of this.v)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class N{constructor(t,i,s,e){var o;this.type=2,this._$AH=w,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cg=null===(o=null==e?void 0:e.isConnected)||void 0===o||o}get _$AU(){var t,i;return null!==(i=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==i?i:this._$Cg}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=P(this,t,i),r(t)?t===w||null==t||\"\"===t?(this._$AH!==w&&this._$AR(),this._$AH=w):t!==this._$AH&&t!==b&&this.$(t):void 0!==t._$litType$?this.T(t):void 0!==t.nodeType?this.k(t):u(t)?this.S(t):this.$(t)}A(t,i=this._$AB){return this._$AA.parentNode.insertBefore(t,i)}k(t){this._$AH!==t&&(this._$AR(),this._$AH=this.A(t))}$(t){this._$AH!==w&&r(this._$AH)?this._$AA.nextSibling.data=t:this.k(l.createTextNode(t)),this._$AH=t}T(t){var i;const{values:s,_$litType$:e}=t,o=\"number\"==typeof e?this._$AC(t):(void 0===e.el&&(e.el=E.createElement(e.h,this.options)),e);if((null===(i=this._$AH)||void 0===i?void 0:i._$AD)===o)this._$AH.m(s);else{const t=new V(o,this),i=t.p(this.options);t.m(s),this.k(i),this._$AH=t}}_$AC(t){let i=T.get(t.strings);return void 0===i&&T.set(t.strings,i=new E(t)),i}S(t){d(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const o of t)e===i.length?i.push(s=new N(this.A(h()),this.A(h()),this,this.options)):s=i[e],s._$AI(o),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){var s;for(null===(s=this._$AP)||void 0===s||s.call(this,!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){var i;void 0===this._$AM&&(this._$Cg=t,null===(i=this._$AP)||void 0===i||i.call(this,t))}}class S{constructor(t,i,s,e,o){this.type=1,this._$AH=w,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=o,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=w}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=P(this,t,i,0),n=!r(t)||t!==this._$AH&&t!==b,n&&(this._$AH=t);else{const e=t;let l,h;for(t=o[0],l=0;l<o.length-1;l++)h=P(this,e[s+l],i,l),h===b&&(h=this._$AH[l]),n||(n=!r(h)||h!==this._$AH[l]),h===w?t=w:t!==w&&(t+=(null!=h?h:\"\")+o[l+1]),this._$AH[l]=h}n&&!e&&this.C(t)}C(t){t===w?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:\"\")}}class M extends S{constructor(){super(...arguments),this.type=3}C(t){this.element[this.name]=t===w?void 0:t}}const k=i?i.emptyScript:\"\";class H extends S{constructor(){super(...arguments),this.type=4}C(t){t&&t!==w?this.element.setAttribute(this.name,k):this.element.removeAttribute(this.name)}}class I extends S{constructor(t,i,s,e,o){super(t,i,s,e,o),this.type=5}_$AI(t,i=this){var s;if((t=null!==(s=P(this,t,i,0))&&void 0!==s?s:w)===b)return;const e=this._$AH,o=t===w&&e!==w||t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive,n=t!==w&&(e===w||o);o&&this.element.removeEventListener(this.name,this,e),n&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var i,s;\"function\"==typeof this._$AH?this._$AH.call(null!==(s=null===(i=this.options)||void 0===i?void 0:i.host)&&void 0!==s?s:this.element,t):this._$AH.handleEvent(t)}}class L{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){P(this,t)}}const R={P:\"$lit$\",L:e,V:o,I:1,N:C,R:V,D:u,j:P,H:N,O:S,F:H,B:I,W:M,Z:L},z=window.litHtmlPolyfillSupport;null==z||z(E,N),(null!==(t=globalThis.litHtmlVersions)&&void 0!==t?t:globalThis.litHtmlVersions=[]).push(\"2.2.1\");export{R as _$LH,$ as html,b as noChange,w as nothing,x as render,y as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as i}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var l,o;const r=t;class s extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Dt=e(i,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!1)}render(){return i}}s.finalized=!0,s._$litElement$=!0,null===(l=globalThis.litElementHydrateSupport)||void 0===l||l.call(globalThis,{LitElement:s});const n=globalThis.litElementPolyfillSupport;null==n||n({LitElement:s});const h={_$AK:(t,e,i)=>{t._$AK(e,i)},_$AL:t=>t._$AL};(null!==(o=globalThis.litElementVersions)&&void 0!==o?o:globalThis.litElementVersions=[]).push(\"3.2.0\");export{s as LitElement,r as UpdatingElement,h as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst n=n=>e=>\"function\"==typeof e?((n,e)=>(window.customElements.define(n,e),e))(n,e):((n,e)=>{const{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(e){window.customElements.define(n,e)}}})(n,e);export{n as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst i=(i,e)=>\"method\"===e.kind&&e.descriptor&&!(\"value\"in e.descriptor)?{...e,finisher(n){n.createProperty(e.key,i)}}:{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},originalKey:e.key,initializer(){\"function\"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(n){n.createProperty(e.key,i)}};function e(e){return(n,t)=>void 0!==t?((i,e,n)=>{e.constructor.createProperty(n,i)})(e,n,t):i(e,n)}export{e as property};\n//# sourceMappingURL=property.js.map\n","import{property as r}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function t(t){return r({...t,state:!0})}export{t as state};\n//# sourceMappingURL=state.js.map\n","import{decorateProperty as o}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function i(i,n){return o({descriptor:o=>{const t={get(){var o,n;return null!==(n=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(i))&&void 0!==n?n:null},enumerable:!0,configurable:!0};if(n){const n=\"symbol\"==typeof o?Symbol():\"__\"+o;t.get=function(){var o,t;return void 0===this[n]&&(this[n]=null!==(t=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(i))&&void 0!==t?t:null),this[n]}}return t}})}export{i as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,o)=>{Object.defineProperty(t,o,e)},t=(e,t)=>({kind:\"method\",placement:\"prototype\",key:t.key,descriptor:e}),o=({finisher:e,descriptor:t})=>(o,n)=>{var r;if(void 0===n){const n=null!==(r=o.originalKey)&&void 0!==r?r:o.key,i=null!=t?{kind:\"method\",placement:\"prototype\",key:n,descriptor:t(o.key)}:{...o,key:n};return null!=e&&(i.finisher=function(t){e(t,n)}),i}{const r=o.constructor;void 0!==t&&Object.defineProperty(o,n,t(n)),null==e||e(r,n)}};export{o as decorateProperty,e as legacyPrototypeMethod,t as standardPrototypeMethod};\n//# sourceMappingURL=base.js.map\n","import{decorateProperty as o}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var n;const e=null!=(null===(n=window.HTMLSlotElement)||void 0===n?void 0:n.prototype.assignedElements)?(o,n)=>o.assignedElements(n):(o,n)=>o.assignedNodes(n).filter((o=>o.nodeType===Node.ELEMENT_NODE));function l(n){const{slot:l,selector:t}=null!=n?n:{};return o({descriptor:o=>({get(){var o;const r=\"slot\"+(l?`[name=${l}]`:\":not([name])\"),i=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(r),s=null!=i?e(i,n):[];return t?s.filter((o=>o.matches(t))):s},enumerable:!0,configurable:!0})})}export{l as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Badge.css\"\n\n/**\n * Badges are used to inform users of the status of an object or of an action that’s been taken. Commonly used in tabular data to indicate status.\n *\n * @status ready\n * @category text\n * @slot - The badge content.\n */\n@customElement(\"nord-badge\")\nexport default class Badge extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The type of badge.\n * Determines the color of the chip shown on the badge.\n */\n @property({ reflect: true }) type?: \"warning\" | \"success\" | \"danger\" | \"highlight\" | \"info\" = \"info\"\n\n render() {\n return html`\n <span class=\"n-badge\">\n <slot></slot>\n </span>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-badge\": Badge\n }\n}\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const l=l=>null!=l?l:t;export{l as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{H:i}=o,t=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,n={HTML:1,SVG:2},v=(o,i)=>{var t,n;return void 0===i?void 0!==(null===(t=o)||void 0===t?void 0:t._$litType$):(null===(n=o)||void 0===n?void 0:n._$litType$)===i},l=o=>{var i;return void 0!==(null===(i=o)||void 0===i?void 0:i._$litDirective$)},d=o=>{var i;return null===(i=o)||void 0===i?void 0:i._$litDirective$},r=o=>void 0===o.strings,e=()=>document.createComment(\"\"),u=(o,t,n)=>{var v;const l=o._$AA.parentNode,d=void 0===t?o._$AB:t._$AA;if(void 0===n){const t=l.insertBefore(e(),d),v=l.insertBefore(e(),d);n=new i(t,v,o,o.options)}else{const i=n._$AB.nextSibling,t=n._$AM,r=t!==o;if(r){let i;null===(v=n._$AQ)||void 0===v||v.call(n,o),n._$AM=o,void 0!==n._$AP&&(i=o._$AU)!==t._$AU&&n._$AP(i)}if(i!==d||r){let o=n._$AA;for(;o!==i;){const i=o.nextSibling;l.insertBefore(o,d),o=i}}}return n},c=(o,i,t=o)=>(o._$AI(i,t),o),f={},s=(o,i=f)=>o._$AH=i,a=o=>o._$AH,m=o=>{var i;null===(i=o._$AP)||void 0===i||i.call(o,!1,!0);let t=o._$AA;const n=o._$AB.nextSibling;for(;t!==n;){const o=t.nextSibling;t.remove(),t=o}},p=o=>{o._$AR()};export{n as TemplateResultType,p as clearPart,a as getCommittedValue,d as getDirectiveClass,u as insertPart,l as isDirectiveResult,t as isPrimitive,r as isSingleExpression,v as isTemplateResult,m as removePart,c as setChildPartValue,s as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as s}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=(i,t)=>{var s,o;const n=i._$AN;if(void 0===n)return!1;for(const i of n)null===(o=(s=i)._$AO)||void 0===o||o.call(s,t,!1),e(i,t);return!0},o=i=>{let t,s;do{if(void 0===(t=i._$AM))break;s=t._$AN,s.delete(i),i=t}while(0===(null==s?void 0:s.size))},n=i=>{for(let t;t=i._$AM;i=t){let s=t._$AN;if(void 0===s)t._$AN=s=new Set;else if(s.has(i))break;s.add(i),l(t)}};function r(i){void 0!==this._$AN?(o(this),this._$AM=i,n(this)):this._$AM=i}function h(i,t=!1,s=0){const n=this._$AH,r=this._$AN;if(void 0!==r&&0!==r.size)if(t)if(Array.isArray(n))for(let i=s;i<n.length;i++)e(n[i],!1),o(n[i]);else null!=n&&(e(n,!1),o(n));else e(this,i)}const l=i=>{var t,e,o,n;i.type==s.CHILD&&(null!==(t=(o=i)._$AP)&&void 0!==t||(o._$AP=h),null!==(e=(n=i)._$AQ)&&void 0!==e||(n._$AQ=r))};class d extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,s){super._$AT(i,t,s),n(this),this.isConnected=i._$AU}_$AO(i,t=!0){var s,n;i!==this.isConnected&&(this.isConnected=i,i?null===(s=this.reconnected)||void 0===s||s.call(this):null===(n=this.disconnected)||void 0===n||n.call(this)),t&&(e(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{d as AsyncDirective};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{directive as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=()=>new o;class o{}const h=new WeakMap,n=s(class extends i{render(i){return t}update(i,[s]){var e;const o=s!==this.U;return o&&void 0!==this.U&&this.ot(void 0),(o||this.rt!==this.lt)&&(this.U=s,this.ht=null===(e=i.options)||void 0===e?void 0:e.host,this.ot(this.lt=i.element)),t}ot(t){\"function\"==typeof this.U?(void 0!==h.get(this.U)&&this.U.call(this.ht,void 0),h.set(this.U,t),void 0!==t&&this.U.call(this.ht,t)):this.U.value=t}get rt(){var t;return\"function\"==typeof this.U?h.get(this.U):null===(t=this.U)||void 0===t?void 0:t.value}disconnected(){this.rt===this.lt&&this.ot(void 0)}reconnected(){this.ot(this.lt)}});export{e as createRef,n as ref};\n//# sourceMappingURL=ref.js.map\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\n\ninterface ShadowRootEventMap {\n slotchange: Event\n}\n\nexport class EventController implements ReactiveController {\n private listeners: Array<() => void> = []\n\n constructor(host: ReactiveControllerHost) {\n host.addController(this)\n }\n\n hostDisconnected() {\n this.listeners.forEach(stop => stop())\n this.listeners = []\n }\n\n listen<K extends keyof WindowEventMap>(\n window: Window,\n type: K,\n listener: (this: Window, ev: WindowEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen<K extends keyof DocumentEventMap>(\n document: Document,\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen<K extends keyof HTMLElementEventMap>(\n element: HTMLElement,\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen<K extends keyof ShadowRootEventMap>(\n element: ShadowRoot,\n type: K,\n listener: (this: ShadowRoot, ev: ShadowRootEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen(\n element: Window | Document | HTMLElement | ShadowRoot,\n type: string,\n listener: (ev: any) => any,\n options?: boolean | AddEventListenerOptions\n ) {\n element.addEventListener(type, listener, options)\n\n const stop = () => element.removeEventListener(type, listener, options)\n this.listeners.push(stop)\n }\n}\n","import { nothing, ReactiveController, ReactiveControllerHost, render, RenderOptions } from \"lit\"\n\ntype LightDomOptions = {\n render: () => unknown\n renderOptions?: RenderOptions\n container?: HTMLElement\n}\n\nexport class LightDomController implements ReactiveController {\n constructor(private host: ReactiveControllerHost & HTMLElement, private options: LightDomOptions) {\n this.host = host\n this.options = options\n host.addController(this)\n }\n\n private get container(): HTMLElement {\n return this.options.container || this.host\n }\n\n hostUpdated() {\n this.render()\n }\n\n hostDisconnected() {\n render(nothing, this.container, this.options.renderOptions)\n }\n\n private render() {\n render(this.options.render(), this.container, this.options.renderOptions)\n }\n}\n","/* eslint-disable max-classes-per-file */\n\nimport { LitElement } from \"lit\"\nimport { createRef, Ref } from \"lit/directives/ref.js\"\n\ntype Constructable<T = Record<string, unknown>> = new (...args: any[]) => T\n\nexport declare class FocusableMixinInterface {\n protected focusableRef: Ref<HTMLElement>\n focus(options?: FocusOptions): void\n blur(): void\n click(): void\n}\n\nexport function FocusableMixin<T extends Constructable<LitElement>>(superClass: T) {\n class FocusableElement extends superClass {\n protected focusableRef = createRef<HTMLButtonElement>()\n\n /**\n * Programmatically move focus to the component.\n * @param {FocusOptions} options An object which controls aspects of the focusing process.\n */\n focus(options?: FocusOptions) {\n this.focusableRef.value?.focus(options)\n }\n\n /**\n * Programmatically remove focus from the component.\n */\n blur() {\n this.focusableRef.value?.blur()\n }\n\n /**\n * Programmatically simulates a click on the component.\n */\n click() {\n this.focusableRef.value?.click()\n }\n }\n\n return FocusableElement as unknown as Constructable<FocusableMixinInterface> & T\n}\n","/* eslint-disable max-classes-per-file */\nimport { LitElement } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\ntype Constructor<T = Record<string, unknown>> = new (...args: any[]) => T\n\nexport declare class InputMixinInterface {\n name: string\n value: string\n disabled: boolean\n form?: HTMLFormElement\n}\n\nexport function InputMixin<T extends Constructor<LitElement>>(superClass: T): Constructor<InputMixinInterface> & T {\n class InputElement extends superClass {\n /**\n * Makes the component disabled. This prevents users from\n * being able to interact with the component, and conveys\n * its inactive state to assistive technologies.\n */\n @property({ type: Boolean, reflect: true }) disabled = false\n\n /**\n * The name of the form component.\n */\n @property() name?: string\n\n /**\n * The value of the form component.\n */\n @property() value: string = \"\"\n\n /**\n * Gets the form, if any, associated with the form element.\n */\n protected get form() {\n return this.closest(\"form\") || undefined\n }\n }\n\n return InputElement as unknown as Constructor<InputMixinInterface> & T\n}\n","import { LitElement, html, nothing, TemplateResult } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { createRef, ref } from \"lit/directives/ref.js\"\nimport { EventController } from \"../common/controllers/EventController.js\"\nimport { LightDomController } from \"../common/controllers/LightDomController.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Button.css\"\n\n/**\n * Buttons are used for interface actions. Primary style should be\n * used only once per section for main call-to-action, while other\n * styles can appear more frequently.\n *\n * @status ready\n * @category action\n * @slot - The button content\n * @slot start - Used to place content at the start of button text. Typically used for icons.\n * @slot end - Used to place content at the end of button text. Typically used for icons.\n */\n@customElement(\"nord-button\")\nexport default class Button extends InputMixin(FocusableMixin(LitElement)) {\n static styles = [componentStyle, style]\n\n private buttonRef = createRef<HTMLButtonElement>()\n private events = new EventController(this)\n private lightDom = new LightDomController(this, {\n render: () => this.renderLightDom(),\n })\n\n /**\n * The style variant of the button.\n */\n @property({ reflect: true }) variant: \"default\" | \"primary\" | \"dashed\" | \"plain\" | \"danger\" = \"default\"\n\n /**\n * The type of the button.\n */\n @property({ reflect: true }) type: \"button\" | \"submit\" | \"reset\" = \"submit\"\n\n /**\n * The size of the button.\n * This affects font-size and padding.\n */\n @property({ reflect: true }) size: \"s\" | \"m\" | \"l\" = \"m\"\n\n /**\n * @private\n * This does not need to be documented,\n * since it is only for forwarding the aria-expanded attribute\n * to the internal button element.\n */\n @property({ attribute: \"aria-expanded\" }) accessibleExpanded?: \"true\" | \"false\"\n\n /**\n * @private\n * This does not need to be documented,\n * since it is only for forwarding the aria-haspopup attribute\n * to the internal button element.\n */\n @property({ attribute: \"aria-haspopup\" }) accessibleHasPopup?:\n | \"false\"\n | \"true\"\n | \"menu\"\n | \"listbox\"\n | \"tree\"\n | \"grid\"\n | \"dialog\"\n\n /**\n * When provided, renders the button as a link,\n * with its href attribute set to the given value.\n */\n @property({ reflect: true }) href?: string\n\n /**\n * When provided together with a href property, the button will\n * trigger a file download instead of a page visit.\n */\n @property({ type: Boolean }) download = false\n\n /**\n * When provided together with a href property, determines where\n * to open the linked URL. The keywords have special meanings for\n * where to load the URL: “_self” means the current browsing context,\n * “_blank” usually a new tab but users can configure browsers this to\n * open a new window instead, “_parent” means the parent browsing\n * context of the current one, but if no parent exists, behaves as\n * _self, and finally “top” means the topmost browsing context.\n */\n @property({ reflect: true }) target: \"_self\" | \"_blank\" | \"_parent\" | \"_top\" = \"_self\"\n\n /**\n * Controls whether the button expands to fill the width of its container.\n */\n @property({ reflect: true, type: Boolean }) expand = false\n\n connectedCallback() {\n super.connectedCallback()\n this.events.listen(this, \"click\", this.handleOuterClick, true)\n }\n\n render() {\n const innards = html`\n <slot name=\"start\"></slot>\n <div class=\"n-content\">\n <slot></slot>\n </div>\n <slot name=\"end\"></slot>\n `\n\n return this.href ? this.renderLink(innards) : this.renderButton(innards)\n }\n\n /**\n * We jump through some hoops here to ensure the link is treated correctly when \"disabled\".\n * Links cannot be disabled natively, so we need to rely on some aria magic to get the correct semantics.\n * Along with the advice in the article below, we also set tabindex to \"-1\", so it is taken out of tab order.\n *\n * @see https://www.scottohara.me/blog/2021/05/28/disabled-links.html\n */\n private renderLink(innards: TemplateResult) {\n return html`\n <a\n ${ref(this.focusableRef)}\n class=\"n-button\"\n target=${this.target}\n ?download=${this.download}\n href=${ifDefined(this.disabled ? undefined : this.href)}\n tabindex=${ifDefined(this.disabled ? \"-1\" : undefined)}\n aria-disabled=${ifDefined(this.disabled ? \"true\" : undefined)}\n role=${ifDefined(this.disabled ? \"link\" : undefined)}\n >${innards}\n </a>\n `\n }\n\n private renderButton(innards: TemplateResult) {\n return html`\n <slot name=\"proxy\"></slot>\n <button\n ${ref(this.focusableRef)}\n class=\"n-button\"\n ?disabled=${this.disabled}\n name=${ifDefined(this.name || undefined)}\n value=${ifDefined(this.value || undefined)}\n @click=${this.handleClick}\n aria-expanded=${ifDefined(this.accessibleExpanded)}\n aria-haspopup=${ifDefined(this.accessibleHasPopup)}\n >\n ${innards}\n </button>\n `\n }\n\n private renderLightDom() {\n if (this.href || !this.form) {\n return nothing\n }\n\n return html`\n <button\n ${ref(this.buttonRef)}\n slot=\"proxy\"\n name=${ifDefined(this.name || undefined)}\n value=${ifDefined(this.value || undefined)}\n ?disabled=${this.disabled}\n type=${this.type}\n ></button>\n `\n }\n\n private handleOuterClick = (e: MouseEvent) => {\n // we want to avoid emitting click events when a click\n // happens in blank space in the host, but not on the button\n // so we stop propagation of any events if click didn't happen on the internal or proxy button\n const isInternalButton = e\n .composedPath()\n .some(node => node === this.focusableRef.value || node === this.buttonRef.value)\n\n if (!isInternalButton) {\n e.stopPropagation()\n }\n }\n\n private handleClick(e: Event) {\n if (this.buttonRef.value) {\n // prevents two events: one from internal button, one from proxy button\n e.stopPropagation()\n this.buttonRef.value.click()\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-button\": Button\n }\n}\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { EventController } from \"./EventController.js\"\n\nexport class SlotController implements ReactiveController {\n private events: EventController\n\n constructor(protected host: ReactiveControllerHost & HTMLElement, public slotName: string = \"\") {\n this.host = host\n host.addController(this)\n this.slotName = slotName\n this.events = new EventController(host)\n }\n\n hostConnected() {\n if (this.host.shadowRoot) {\n this.events.listen(this.host.shadowRoot, \"slotchange\", this.handleSlotChange)\n }\n }\n\n get hasContent() {\n return this.content != null\n }\n\n get isEmpty() {\n return !this.hasContent\n }\n\n get content() {\n const selector = this.slotName ? `[slot=\"${this.slotName}\"]` : `:not([slot])`\n return this.host.querySelector(selector)\n }\n\n private handleSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement\n\n if (slot.name === this.slotName) {\n this.onChange(e)\n }\n }\n\n protected onChange(_e: Event) {\n this.host.requestUpdate()\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Card.css\"\n\n/**\n * Cards are shadowed surfaces that display content and actions on a\n * single topic. They should be easy to scan for relevant and\n * actionable information.\n *\n * @status ready\n * @category structure\n * @slot - The card content.\n * @slot header - Optional slot that holds a header for the card.\n * @slot footer - Optional slot that holds footer content for the card.\n */\n@customElement(\"nord-card\")\nexport default class Card extends LitElement {\n static styles = [componentStyle, style]\n\n private headerSlot = new SlotController(this, \"header\")\n private footerSlot = new SlotController(this, \"footer\")\n\n /**\n * Controls the padding of card component. When set to “none”,\n * the header and footer slots will still have padding.\n */\n @property({ reflect: true }) padding: \"m\" | \"l\" | \"none\" = \"m\"\n\n render() {\n return html`\n <div class=\"n-card\">\n <slot name=\"header\" ?hidden=${this.headerSlot.isEmpty}></slot>\n <slot></slot>\n <slot name=\"footer\" ?hidden=${this.footerSlot.isEmpty}></slot>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-card\": Card\n }\n}\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{Directive as r,PartType as s,directive as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends r{constructor(i){if(super(i),this.it=t,i.type!==s.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this.ft=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this.ft;this.it=r;const s=[r];return s.raw=s,this.ft={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=n(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { InputMixinInterface } from \"../mixins/InputMixin.js\"\nimport { EventController } from \"./EventController.js\"\n\ntype FormDataOptions = {\n value: () => string | undefined\n}\n\nexport class FormDataController implements ReactiveController {\n private events: EventController\n constructor(private host: ReactiveControllerHost & InputMixinInterface, private options: FormDataOptions) {\n this.host = host\n host.addController(this)\n this.options = options\n this.events = new EventController(host)\n }\n\n hostConnected() {\n if (this.host.form) {\n this.events.listen(this.host.form, \"formdata\", this.handleFormData)\n }\n }\n\n private handleFormData = (e: FormDataEvent) => {\n const { disabled, name } = this.host\n\n if (disabled) {\n return\n }\n\n const value = this.options.value()\n\n if (name && value != null) {\n e.formData.append(name, value)\n }\n }\n}\n","/**\n * A base class for events which defaults to bubbling and composed\n */\nexport class NordEvent extends Event {\n constructor(type: string, eventInitDict?: EventInit) {\n super(type, {\n bubbles: true,\n composed: true,\n ...eventInitDict,\n })\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport style from \"./VisuallyHidden.css\"\n\n/**\n * Visually hidden is used when an element needs to be available\n * to assistive technologies like screen readers, but be otherwise\n * hidden.\n *\n * @status ready\n * @category text\n * @slot - The visually hidden content.\n */\n@customElement(\"nord-visually-hidden\")\nexport default class VisuallyHidden extends LitElement {\n static styles = style\n\n render() {\n return html`<slot></slot>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-visually-hidden\": VisuallyHidden\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 hint?: string\n hideLabel: boolean\n placeholder?: string\n error?: string\n expand: boolean\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(): 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 * Controls whether the input expands to fill the width of its container.\n */\n @property({ reflect: true, type: Boolean }) expand = 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() {\n const label = html`\n <label for=${this.inputId}>\n <slot name=\"label\">${this.label}</slot>\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","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\n\nimport searchIcon from \"@nordhealth/icons/lib/assets/navigation-search.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport textFieldStyle from \"../common/styles/TextField.css\"\nimport style from \"./Input.css\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\n\n/**\n * Inputs are used to allow users to provide text input when the expected input is short.\n * As well as plain text, Input supports various types of text, including passwords and numbers.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the input.\n * @slot error - Optional slot that holds error text for the input.\n * @slot start - Optional slot used to place an icon at the start of the input.\n */\n@customElement(\"nord-input\")\nexport default class Input extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, textFieldStyle, style]\n\n private startSlot = new SlotController(this, \"start\")\n\n /**\n * The type of the input.\n */\n @property() type: \"text\" | \"email\" | \"password\" | \"tel\" | \"url\" | \"search\" | \"number\" = \"text\"\n\n render() {\n const hasIcon = this.type === \"search\" || this.startSlot.hasContent\n const isNumber = this.type === \"number\"\n const defaultIcon = this.type === \"search\" ? unsafeHTML(searchIcon) : nothing\n\n return html`\n ${this.renderLabel()}\n\n <div class=\"n-input-container\">\n <slot name=${this.startSlot.slotName} ?hidden=${!hasIcon}>${defaultIcon}</slot>\n <input\n ${ref(this.focusableRef)}\n id=${this.inputId}\n class=\"n-input\"\n type=${isNumber ? \"text\" : this.type}\n inputmode=${ifDefined(isNumber ? \"numeric\" : undefined)}\n pattern=${ifDefined(isNumber ? \"[0-9]*\" : undefined)}\n ?disabled=${this.disabled}\n ?required=${this.required}\n name=${ifDefined(this.name)}\n .value=${this.value ?? \"\"}\n placeholder=${ifDefined(this.placeholder)}\n @input=${this.handleInput}\n @change=${this.handleChange}\n @keydown=${this.handleKeydown}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n spellcheck=\"false\"\n />\n </div>\n\n ${this.renderError()}\n `\n }\n\n private handleKeydown(e: KeyboardEvent) {\n if (e.key === \"Enter\" && this.form) {\n this.form.querySelector<HTMLButtonElement>(`button[type=\"submit\"]`)?.click()\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-input\": Input\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 59.5a52.5 52.5 0 1 0 105 0 52.5 52.5 0 1 0-105 0zM133 133 96.628 96.628\" stroke-width=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"navigation-search\"\nexport const tags = \"nordicon navigation menu find search magnifying glass\"\n","import { html, LitElement, PropertyValues } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Icon.css\"\n\n// in dev we should just load from node_modules\nconst loadIcon = (name: string) => import(`@nordhealth/icons/lib/assets/${name}.js`).then(({ default: svg }) => svg)\n\n// in prod we should load from the CDN, as a sensible default\nconst loadIconCdn = (name: string) =>\n fetch(`https://nordcdn.net/ds/icons/${process.env.ICON_VERSION}/assets/${name}.svg`).then(response => {\n if (!response.ok) {\n throw new TypeError(`NORD: unknown icon '${name}'`)\n }\n\n return response.text()\n })\n\nexport type IconResolver = ((iconName: string) => string) | ((iconName: string) => Promise<string>)\n\n/**\n * Icons are used to provide additional meaning or in places where text label doesn’t fit.\n * Icon component allows you to display an icon from the Nordicons library.\n *\n * @status ready\n * @category image\n * @slot - The default slot used for placing a custom SVG icon.\n */\n@customElement(\"nord-icon\")\nexport default class Icon extends LitElement {\n static styles = [componentStyle, style]\n\n private static resolver: IconResolver = process.env.NODE_ENV === \"development\" ? loadIcon : loadIconCdn\n private static registeredIcons = new Map<string, string>()\n\n /**\n * Register a custom icon resolver, which accepts the icon name as an parameter, and returns an SVG string.\n * Can return a string synchronously, or a promise of a string.\n * By default, will load icons from the Nord CDN.\n * @param resolver The resolver function to register.\n */\n static registerResolver(resolver: IconResolver) {\n Icon.resolver = resolver\n }\n\n /**\n * Register an individual icon so it can be rendered synchronously, to avoid loading over the network.\n * @param icon An object representing the icon to be registered, where \"title\" is the icon's name, and \"default\" is the SVG string.\n * This is intended to be used in cases where you import an icon's entire ES module and register it directly.\n */\n static registerIcon(icon: { title: string; default: string }): void\n\n /**\n * Register an individual icon so it can be rendered synchronously, to avoid loading over the network.\n * @param name The name of the icon to be registered.\n * @param icon The SVG string for the icon.\n */\n static registerIcon(name: string, icon: string): void\n\n /**\n * Register an individual icon so it can be rendered synchronously, to avoid loading over the network.\n * @param iconOrName The name of the icon to be registered or an object representing the icon to be registered, where \"title\" is the icon's name, and \"default\" is the SVG string.\n * @param icon The SVG string for the icon.\n */\n static registerIcon(iconOrName: string | { title: string; default: string }, icon?: string) {\n let name: string | undefined\n let svg: string | undefined\n\n if (typeof iconOrName === \"string\") {\n name = iconOrName\n svg = icon\n } else {\n name = iconOrName.title\n svg = iconOrName.default\n }\n\n // handle errors\n if (!name) {\n throw new Error(\"name is required when registering an icon\")\n }\n if (!svg) {\n throw new Error(\"icon must not be empty\")\n }\n\n if (!Icon.registeredIcons.has(name)) {\n Icon.registeredIcons.set(name, svg)\n }\n }\n\n /**\n * The name of the icon to display, as defined by [nordicons](/nordicons/).\n */\n @property({ reflect: true }) name: string = \"\"\n\n /**\n * The size of the icon.\n */\n @property({ reflect: true }) size: \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The color of the icon.\n * Can accept any valid CSS color value, including custom properties.\n */\n @property({ reflect: true }) color?: string\n\n /**\n * An accessible label for the icon.\n * If no label is supplied, the icon is hidden from assistive technology.\n */\n @property({ reflect: true }) label?: string\n\n @state() private svg: string = \"\"\n\n override willUpdate(changedProperties: PropertyValues<this>) {\n if (!changedProperties.has(\"name\")) {\n return\n }\n\n const resolved = this.resolve()\n\n if (typeof resolved === \"string\") {\n this.svg = resolved\n } else {\n resolved\n .then(svg => {\n this.svg = svg\n })\n .catch(() => {\n this.svg = \"\"\n })\n }\n }\n\n render() {\n // if a label is supplied, we give the div a role of img.\n // without this we could not use aria-label, since it is only valid on elements of certain roles.\n // we always hide the inner svg, since the svg does not have any text/title/label itself.\n return html`\n <div\n role=${ifDefined(this.label ? \"img\" : undefined)}\n style=${ifDefined(this.color ? `color:${this.color}` : undefined)}\n aria-label=${ifDefined(this.label)}\n >\n <slot aria-hidden=\"true\"></slot>\n <div aria-hidden=\"true\">${unsafeHTML(this.svg)}</div>\n </div>\n `\n }\n\n private resolve(): string | Promise<string> {\n if (!this.name) {\n return \"\"\n }\n\n if (Icon.registeredIcons.has(this.name)) {\n return Icon.registeredIcons.get(this.name) as string // we know it is there, so cast to string to keep TS happy.\n }\n\n return Icon.resolver(this.name)\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-icon\": Icon\n }\n}\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){var d;const a=l(s),{values:p,keys:v}=this.dt(t,r,c);if(!Array.isArray(a))return this.ut=v,p;const h=null!==(d=this.ut)&&void 0!==d?d:this.ut=[],m=[];let y,x,j=0,k=a.length-1,w=0,A=p.length-1;for(;j<=k&&w<=A;)if(null===a[j])j++;else if(null===a[k])k--;else if(h[j]===v[w])m[w]=o(a[j],p[w]),j++,w++;else if(h[k]===v[A])m[A]=o(a[k],p[A]),k--,A--;else if(h[j]===v[A])m[A]=o(a[j],p[A]),i(s,m[A+1],a[j]),j++,A--;else if(h[k]===v[w])m[w]=o(a[k],p[w]),i(s,a[j],a[k]),k--,w++;else if(void 0===y&&(y=u(v,w,A),x=u(h,j,k)),y.has(h[j]))if(y.has(h[k])){const e=x.get(v[w]),t=void 0!==e?a[e]:null;if(null===t){const e=i(s,a[j]);o(e,p[w]),m[w]=e}else m[w]=o(t,p[w]),i(s,a[j],t),a[e]=null;w++}else n(a[k]),k--;else n(a[j]),j++;for(;w<=A;){const e=i(s,m[A+1]);o(e,p[w]),m[w++]=e}for(;j<=k;){const e=a[j++];null!==e&&n(e)}return this.ut=v,f(s,m),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as i,Directive as s,PartType as r}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=i(class extends s{constructor(t){var i;if(super(t),t.type!==r.ATTRIBUTE||\"class\"!==t.name||(null===(i=t.strings)||void 0===i?void 0:i.length)>2)throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\")}render(t){return\" \"+Object.keys(t).filter((i=>t[i])).join(\" \")+\" \"}update(i,[s]){var r,o;if(void 0===this.et){this.et=new Set,void 0!==i.strings&&(this.st=new Set(i.strings.join(\" \").split(/\\s/).filter((t=>\"\"!==t))));for(const t in s)s[t]&&!(null===(r=this.st)||void 0===r?void 0:r.has(t))&&this.et.add(t);return this.render(s)}const e=i.element.classList;this.et.forEach((t=>{t in s||(e.remove(t),this.et.delete(t))}));for(const t in s){const i=!!s[t];i===this.et.has(t)||(null===(o=this.st)||void 0===o?void 0:o.has(t))||(i?(e.add(t),this.et.add(t)):(e.remove(t),this.et.delete(t)))}return t}});export{o as classMap};\n//# sourceMappingURL=class-map.js.map\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M105.833 24v93m0-93L80 49.833M105.833 24l25.834 25.833M34.167 117V24m0 93L60 91.167M34.167 117 8.333 91.167\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"keyboard-arrow-up-down\"\nexport const tags = \"nordicon keyboard keys arrow up down shortcut\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"><path d=\"M35 133 7 105l28-28\"/><path d=\"M7 105h112a14 14 0 0 0 14-14V21a14 14 0 0 0-14-14H77\"/></g></svg>'\nexport const title = \"keyboard-return\"\nexport const tags = \"nordicon keyboard return key shortcut\"\n","export default '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.707 4.879A3 3 0 0 1 8.828 4H15a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8.828a3 3 0 0 1-2.12-.879l-4.415-4.414a1 1 0 0 1 0-1.414l4.414-4.414zm4 2.414a1 1 0 0 0-1.414 1.414L10.586 10l-1.293 1.293a1 1 0 1 0 1.414 1.414L12 11.414l1.293 1.293a1 1 0 0 0 1.414-1.414L13.414 10l1.293-1.293a1 1 0 0 0-1.414-1.414L12 8.586l-1.293-1.293z\" clip-rule=\"evenodd\"/></svg>'\nexport const title = \"keyboard-backspace\"\nexport const tags = \"nordicon keyboard backspace back delete key shortcut\"\n","/**\n * Wraps a value so that it always falls within min/max,\n * where a value greater than max gets set to min, and vice versa\n */\nexport function wrap(val: number, min: number, max: number) {\n if (val > max) return min\n if (val < min) return max\n return val\n}\n\nexport function range(from: number, to: number) {\n const result: number[] = []\n\n for (let i = from; i <= to; i++) {\n result.push(i)\n }\n\n return result\n}\n","/**\n * Gets the currently focused element, taking shadow roots into account.\n */\nexport function getFocusedElement(root: Document | ShadowRoot): Element | undefined {\n if (root.activeElement?.shadowRoot) {\n return getFocusedElement(root.activeElement.shadowRoot)\n }\n\n return root.activeElement || undefined\n}\n","var t=[\"Shift\",\"Meta\",\"Alt\",\"Control\"],e=\"object\"==typeof navigator&&/Mac|iPod|iPhone|iPad/.test(navigator.platform)?\"Meta\":\"Control\";function n(t,e){return\"function\"==typeof t.getModifierState&&t.getModifierState(e)}function r(t){return t.trim().split(\" \").map(function(t){var n=t.split(/\\b\\+/),r=n.pop();return[n=n.map(function(t){return\"$mod\"===t?e:t}),r]})}function o(e,o){var i;void 0===o&&(o={});var u=null!=(i=o.timeout)?i:1e3,a=Object.keys(e).map(function(t){return[r(t),e[t]]}),f=new Map,c=null;return function(e){e instanceof KeyboardEvent&&(a.forEach(function(r){var o=r[0],i=r[1],u=f.get(o)||o;!function(e,r){return!(r[1].toUpperCase()!==e.key.toUpperCase()&&r[1]!==e.code||r[0].find(function(t){return!n(e,t)})||t.find(function(t){return!r[0].includes(t)&&r[1]!==t&&n(e,t)}))}(e,u[0])?n(e,e.key)||f.delete(o):u.length>1?f.set(o,u.slice(1)):(f.delete(o),i(e))}),c&&clearTimeout(c),c=setTimeout(f.clear.bind(f),u))}}function i(t,e,n){var r;void 0===n&&(n={});var i=null!=(r=n.event)?r:\"keydown\",u=o(e,n);return t.addEventListener(i,u),function(){t.removeEventListener(i,u)}}export default i;export{o as createKeybindingsHandler,r as parseKeybinding};\n//# sourceMappingURL=tinykeys.module.js.map\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport type { KeyBindingMap } from \"tinykeys\"\nimport tinykeys from \"tinykeys\"\n\ntype ShortcutTarget = Parameters<typeof tinykeys>[0]\n\nconst ARROW_RE = /Arrow(Up|Down|Left|Right)/g\nconst ESC_RE = /Escape/g\n\nfunction normalise(shortcuts: KeyBindingMap) {\n const normalised: KeyBindingMap = {}\n\n Object.keys(shortcuts).forEach(keybinding => {\n normalised[keybinding] = shortcuts[keybinding]\n\n // Arrow and Escape keys in IE/Edge have different names\n if (ARROW_RE.test(keybinding)) {\n const mapped = keybinding.replace(ARROW_RE, (_match, capture) => capture)\n normalised[mapped] = normalised[keybinding]\n }\n if (ESC_RE.test(keybinding)) {\n const mapped = keybinding.replace(ESC_RE, () => \"Esc\")\n normalised[mapped] = normalised[keybinding]\n }\n })\n\n return normalised\n}\n\nexport class ShortcutController implements ReactiveController {\n private unregister?: ReturnType<typeof tinykeys>\n\n constructor(\n host: ReactiveControllerHost,\n private shortcuts?: KeyBindingMap,\n private target: ShortcutTarget = window\n ) {\n host.addController(this)\n this.shortcuts = shortcuts\n this.target = target\n }\n\n hostConnected() {\n if (this.shortcuts) {\n this.bind(this.shortcuts)\n }\n }\n\n hostDisconnected() {\n this.unbind()\n }\n\n unbind() {\n this.unregister?.()\n }\n\n bind(shortcuts: KeyBindingMap) {\n this.unbind()\n this.shortcuts = shortcuts\n this.unregister = tinykeys(this.target, normalise(this.shortcuts))\n }\n}\n\nexport type { KeyBindingMap as ShortcutMap }\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { EventController } from \"./EventController.js\"\nimport { ShortcutController } from \"./ShortcutController.js\"\n\ntype 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 this.host = host\n host.addController(this)\n\n this.options = options\n this.shortcut = new ShortcutController(this.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","import { ReactiveController } from \"lit\"\nimport CommandMenu from \"./CommandMenu.js\"\nimport { ShortcutController, ShortcutMap } from \"../common/controllers/ShortcutController.js\"\n\ntype KeyboardActions = {\n trigger: () => void\n goBack: () => void\n start: () => void\n end: () => void\n next: () => void\n previous: () => void\n toggleOpen: () => void\n}\n\nconst preventDefault = (fn: (e: Event) => void) => (e: Event) => {\n e.preventDefault()\n fn(e)\n}\n\nexport class KeyboardController {\n private host: CommandMenu\n private globalShortcuts: ShortcutController\n private navigationShortcuts: ShortcutController\n private commandShortcuts: ShortcutController\n\n constructor(host: CommandMenu, actions: KeyboardActions) {\n this.host = host\n host.addController(this as ReactiveController)\n\n this.commandShortcuts = new ShortcutController(host)\n this.globalShortcuts = new ShortcutController(host, { \"$mod+k\": preventDefault(actions.toggleOpen) })\n this.navigationShortcuts = new ShortcutController(\n host,\n {\n Enter: preventDefault(actions.trigger),\n Backspace: actions.goBack, // we don't want to prevent default, since that would stop backspace deleting chars\n End: preventDefault(actions.end),\n Home: preventDefault(actions.start),\n ArrowDown: preventDefault(actions.next),\n ArrowUp: preventDefault(actions.previous),\n },\n host\n )\n }\n\n registerCommandShortcuts() {\n const shortcuts: ShortcutMap = {}\n\n for (const command of this.host.commands) {\n if (command.shortcut) {\n shortcuts[command.shortcut] = () => command.handler?.(this.host)\n }\n }\n\n this.commandShortcuts.bind(shortcuts)\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m38.5 7 60.9 58.044a7 7 0 0 1 0 9.912L38.5 133\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/></svg>'\nexport const title = \"arrow-right\"\nexport const tags = \"nordicon arrow right caret pointing triangle chevron\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M101.5 133 40.6 74.956a7 7 0 0 1 0-9.912L101.5 7\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/></svg>'\nexport const title = \"arrow-left\"\nexport const tags = \"nordicon arrow left caret pointing triangle chevron\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><g transform=\"matrix(14,0,0,14,0,0)\"><path d=\"M0.5 3L3 3 6.5 7 9.5 7\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path d=\"M6.5 3L9.5 3\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></g></svg>'\nexport const title = \"keyboard-option\"\nexport const tags = \"nordicon keyboard option key shortcut\"\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\n\nexport type WritingDirection = \"ltr\" | \"rtl\"\n\nexport class DirectionController implements ReactiveController {\n // these are all static as we only want a single observer on <html>\n private static hosts = new Set<ReactiveControllerHost>()\n private static observer?: MutationObserver\n\n // eslint-disable-next-line class-methods-use-this\n get dir(): WritingDirection {\n return (document.documentElement.dir as WritingDirection) || \"ltr\"\n }\n\n get isLTR() {\n return this.dir === \"ltr\"\n }\n\n get isRTL() {\n return this.dir === \"rtl\"\n }\n\n constructor(private host: ReactiveControllerHost) {\n this.host = host\n host.addController(this)\n }\n\n hostConnected() {\n if (!DirectionController.observer) {\n DirectionController.observer = new MutationObserver(DirectionController.observe)\n DirectionController.observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"dir\"] })\n }\n\n if (!DirectionController.hosts.has(this.host)) {\n DirectionController.hosts.add(this.host)\n }\n }\n\n hostDisconnected() {\n DirectionController.hosts.delete(this.host)\n }\n\n private static observe() {\n DirectionController.hosts.forEach(host => host.requestUpdate())\n }\n}\n","import { LitElement, html, nothing, PropertyValues } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport * as chevronIconRight from \"@nordhealth/icons/lib/assets/arrow-right.js\"\nimport * as chevronIconLeft from \"@nordhealth/icons/lib/assets/arrow-left.js\"\nimport * as altKeyIcon from \"@nordhealth/icons/lib/assets/keyboard-option.js\"\n\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\nimport { DirectionController } from \"../common/controllers/DirectionController.js\"\nimport Icon from \"../icon/Icon.js\"\nimport \"../visually-hidden/VisuallyHidden.js\"\n\nimport style from \"./CommandMenuAction.css\"\n\nconst KEY_REGEX = /(?:Key|Digit)([A-Z0-9])/g\nconst isMacintosh = () => navigator.platform.indexOf(\"Mac\") > -1\n\nIcon.registerIcon(chevronIconLeft)\nIcon.registerIcon(chevronIconRight)\nIcon.registerIcon(altKeyIcon)\n\n/**\n * Command Menu Action displays a single action that can be executed by the user. For usage examples, please see Command Menu component.\n *\n * @status internal\n */\n@customElement(\"nord-command-menu-action\")\nexport default class CommandMenuAction extends LitElement {\n static styles = style\n\n private direction = new DirectionController(this)\n\n @property({ type: Object }) command!: ICommandMenuAction\n\n @property({ type: Boolean }) selected = false\n\n /**\n * Scroll to show element\n */\n private ensureInView() {\n requestAnimationFrame(() => this.scrollIntoView({ block: \"nearest\" }))\n }\n\n override updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"selected\") && this.selected) {\n this.ensureInView()\n }\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n \"n-selected\": this.selected,\n \"n-command\": true,\n })}\n >\n <div aria-hidden=\"true\" class=\"n-command-icon\">\n <nord-icon size=\"s\" name=${this.getIconName()}></nord-icon>\n </div>\n <div class=\"n-title\">${this.command.title}</div>\n ${this.renderShortcut()}\n </div>\n `\n }\n\n private getIconName() {\n if (this.command.icon) {\n return this.command.icon\n }\n\n return this.direction.isLTR ? chevronIconRight.title : chevronIconLeft.title\n }\n\n private renderShortcut() {\n if (!this.command.shortcut) {\n return nothing\n }\n\n const keys = this.command.shortcut.replace(KEY_REGEX, \"$1\")\n\n return html`\n <nord-visually-hidden>, ${keys}</nord-visually-hidden>\n\n <div aria-hidden=\"true\" class=\"n-shortcuts\">\n ${keys\n .split(\"+\")\n .map(\n key =>\n html`<div class=\"n-shortcut\">\n ${key.toLowerCase() === \"alt\" && isMacintosh()\n ? html`<nord-icon name=${altKeyIcon.title} size=\"s\"></nord-icon>`\n : key}\n </div>`\n )}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-command-menu-action\": CommandMenuAction\n }\n}\n","import { NordEvent } from \"../common/events.js\"\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\n\nexport class SelectEvent extends NordEvent {\n static eventName = \"nord-select\"\n command: ICommandMenuAction\n\n constructor(command: ICommandMenuAction) {\n super(SelectEvent.eventName)\n this.command = command\n }\n}\n","import commandMenuLocalization from \"../command-menu/localization.js\"\nimport datePickerLocalization from \"../date-picker/localization.js\"\nimport calendarLocalization from \"../calendar/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}\n\nexport default en\n","const commandMenuLocalization = {\n instructions: \"Press 'Enter' to confirm your input or 'Escape' to cancel\",\n inputLabel: \"Type the name of a command to run.\",\n footerArrowKeys: \"Navigate\",\n footerEnterKey: \"Select\",\n footerEscapeKey: \"Esc to dismiss\",\n footerBackspaceKey: \"Move to parent\",\n noResults: (searchTerm: string) => `No results for “${searchTerm}”`,\n tip: \"Search tips: some search terms require exact match. Try typing the entire command name, or use a different word or phrase.\",\n}\n\nexport default commandMenuLocalization\n","const calendarLocalization = {\n prevMonthLabel: \"Previous month\",\n nextMonthLabel: \"Next month\",\n monthSelectLabel: \"Month\",\n yearSelectLabel: \"Year\",\n}\n\nexport default calendarLocalization\n","const datePickerLocalization = {\n modalHeading: \"Choose a date\",\n closeLabel: \"Close window\",\n buttonLabel: \"Choose date\",\n selectedDateMessage: \"Selected date is\",\n}\n\nexport default datePickerLocalization\n","import en from \"./en-us.js\"\n\n// gets list of properties beginning prefix\ntype PickStartsWith<Type, Prefix extends string> = {\n [Property in keyof Type]: Property extends `${Prefix}${string}` ? Property : never\n}[keyof Type]\n\nexport type Translation = typeof en\nexport type WellKnownKeys = PickStartsWith<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): Translation {\n const lang = langCode.toLowerCase()\n const [langOnly] = lang.split(\"-\")\n\n return translations.get(lang) || translations.get(langOnly) || en\n}\n","import type { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { subscribe, resolveTranslation, Translation, WellKnownKeys } from \"./translation.js\"\n\n// helper types...\n\n// used to match any function\ntype Func = (...args: any[]) => any\n\n// if object property is function, use return type, else value type\ntype Result<Type, Key extends keyof Type> = Type[Key] extends Func ? ReturnType<Type[Key]> : Type[Key]\n\n// if object property is function,\ntype FuncParams<Type, K extends keyof Type> = Type[K] extends Func ? Parameters<Type[K]> : never\n\nconst noop = () => {\n // this function is intentionally left blank\n}\n\nexport class LocalizeController<TComponentName extends Exclude<keyof Translation, WellKnownKeys>>\n implements ReactiveController\n{\n private unsubscribe?: ReturnType<typeof subscribe>\n private resolvedTranslation: Translation\n\n constructor(private host: ReactiveControllerHost & HTMLElement, private options = { onLangChange: noop }) {\n this.host = host\n this.options = options\n this.host.addController(this)\n this.resolvedTranslation = resolveTranslation(this.lang)\n }\n\n /**\n * The lang of the document or element, with element taking precedence\n */\n get lang() {\n return this.host.lang || document.documentElement.lang\n }\n\n /**\n * The lang of the translation being applied.\n * This may not match the document/element lang, in case of fallback translation\n */\n get resolvedLang() {\n return this.resolvedTranslation.$lang\n }\n\n hostConnected() {\n this.unsubscribe = subscribe(this.handleLangChange)\n this.options.onLangChange()\n }\n\n hostDisconnected() {\n this.unsubscribe?.()\n }\n\n term<Key extends keyof Translation[TComponentName]>(\n key: Key,\n ...args: FuncParams<Translation[TComponentName], Key>\n ): Result<Translation[TComponentName], Key> {\n const componentName = this.host.localName as TComponentName\n const translation = this.resolvedTranslation[componentName]\n\n const t = translation[key]\n return typeof t === \"function\" ? t(...args) : t\n }\n\n private handleLangChange = () => {\n const resolved = resolveTranslation(this.lang)\n\n if (this.resolvedTranslation !== resolved) {\n this.resolvedTranslation = resolved\n\n this.options.onLangChange()\n this.host.requestUpdate()\n }\n }\n}\n","import { LitElement, html, PropertyValues, nothing } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { repeat } from \"lit/directives/repeat.js\"\nimport { createRef, ref } from \"lit/directives/ref.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\n\nimport * as navigateIcon from \"@nordhealth/icons/lib/assets/keyboard-arrow-up-down.js\"\nimport * as enterIcon from \"@nordhealth/icons/lib/assets/keyboard-return.js\"\nimport * as backspaceIcon from \"@nordhealth/icons/lib/assets/keyboard-backspace.js\"\n\nimport { groupBy } from \"../common/collection.js\"\nimport { wrap } from \"../common/number.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { getFocusedElement } from \"../common/focus.js\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { KeyboardController } from \"./KeyboardController.js\"\n\nimport Icon from \"../icon/Icon.js\"\nimport \"../visually-hidden/VisuallyHidden.js\"\nimport \"./CommandMenuAction.js\"\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\nimport { SelectEvent } from \"./SelectEvent.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./CommandMenu.css\"\nimport { LocalizeController } from \"../localization/LocalizeController.js\"\n\nIcon.registerIcon(navigateIcon)\nIcon.registerIcon(enterIcon)\nIcon.registerIcon(backspaceIcon)\n\n/**\n * Command Menu allows users to navigate and use an app without\n * touching the mouse and helps them transform into “power users”\n * who can harness more advanced features far faster.\n *\n * @status ready\n * @category action\n * @slot footer - Used to replace the default footer contents.\n * @fires open - The command menu was opened.\n * @fires close - The command menu was closed.\n * @fires {SelectEvent} nord-select - User selected a command from the menu.\n */\n@customElement(\"nord-command-menu\")\nexport default class CommandMenu extends LitElement {\n static styles = [componentStyle, style]\n\n private inputRef = createRef<HTMLInputElement>()\n private listRef = createRef<HTMLElement>()\n private previousFocus?: HTMLElement\n\n private localize = new LocalizeController<\"nord-command-menu\">(this)\n private dismissController = new LightDismissController(this, {\n isOpen: () => this.open,\n onDismiss: () => this.close(),\n })\n\n private keyboardController = new KeyboardController(this, {\n trigger: () => this.select(),\n goBack: () => this.goBack(),\n end: () => this.end(),\n start: () => this.start(),\n next: () => this.next(),\n previous: () => this.previous(),\n toggleOpen: () => this.toggleOpen(),\n })\n\n /**\n * Show or hide the command menu.\n */\n @property({ type: Boolean }) open = false\n\n /**\n * Hint text to display in the Command Menu search field.\n */\n @property({ type: String }) placeholder = \"Type a command or search...\"\n\n /**\n * Array of commands to be included in the menu.\n * Please see “Commands data” section for more documentation.\n */\n @property({ type: Array, attribute: false }) commands: Array<ICommandMenuAction> = []\n\n @state() private parent?: string\n @state() private search: string = \"\"\n @state() private bump = true\n @state() private selectedIndex = 0\n @state() private filteredCommands: Array<ICommandMenuAction> = []\n\n private get selected(): ICommandMenuAction {\n return this.filteredCommands[this.selectedIndex]\n }\n\n /**\n * Show the command menu programmatically.\n * @param options allows you to open the menu filtered to a specific parent command.\n */\n show(options: { parent?: string } = {}) {\n const notCancelled = this.dispatchEvent(new NordEvent(\"open\", { cancelable: true }))\n\n if (notCancelled) {\n this.open = true\n this.setParent(options.parent)\n }\n }\n\n /**\n * Close the command menu programmatically.\n */\n close() {\n this.open = false\n this.previousFocus?.focus()\n this.previousFocus = undefined\n\n this.dispatchEvent(new NordEvent(\"close\"))\n }\n\n /**\n * Toggle the open state programmatically.\n */\n toggleOpen() {\n if (this.open) {\n this.close()\n } else {\n this.show()\n }\n }\n\n /**\n * Focus the command menu's input.\n */\n focus() {\n this.inputRef.value?.focus()\n }\n\n override willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"commands\")) {\n this.keyboardController.registerCommandShortcuts()\n }\n\n if (changedProperties.has(\"open\") && this.open) {\n this.bump = true\n }\n\n if (\n // @ts-expect-error this is a private property so it errors, but it's fine here\n changedProperties.has(\"search\") ||\n // @ts-expect-error this is a private property so it errors, but it's fine here\n changedProperties.has(\"parent\") ||\n changedProperties.has(\"commands\")\n ) {\n this.filterCommands()\n }\n }\n\n override updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"open\") && this.open) {\n this.previousFocus = getFocusedElement(document) as HTMLElement\n this.focus()\n\n if (this.listRef.value) {\n this.listRef.value.scrollTop = 0\n }\n }\n }\n\n override render() {\n const sections = groupBy(this.filteredCommands, \"section\")\n const activeDescendant = this.filteredCommands.length === 0 ? \"no-results\" : this.selected?.id\n\n return html`\n <div\n class=${classMap({\n \"n-visible\": this.open,\n \"n-modal\": true,\n })}\n >\n <div\n @animationend=${this.handleAnimationEnd}\n class=${classMap({\n \"n-bump\": this.bump,\n \"n-modal-content\": true,\n })}\n >\n <div class=\"n-search-wrapper\">\n <nord-visually-hidden id=\"instructions\"> ${this.localize.term(\"instructions\")} </nord-visually-hidden>\n <input\n type=\"text\"\n id=\"search\"\n @input=${this.handleInput}\n @blur=${this.handleBlur}\n ${ref(this.inputRef)}\n placeholder=${this.placeholder}\n .value=${this.search}\n spellcheck=\"false\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label=${this.localize.term(\"inputLabel\")}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-controls=\"list\"\n aria-expanded=\"true\"\n aria-activedescendant=${ifDefined(activeDescendant)}\n aria-describedby=\"instructions\"\n />\n </div>\n\n <div class=\"n-modal-body\">\n <div id=\"list\" ${ref(this.listRef)} role=\"listbox\">\n ${this.filteredCommands.length === 0\n ? this.renderNoResults()\n : Array.from(sections, ([section, commands]) => this.renderSection(section, commands))}\n </div>\n </div>\n <slot name=\"footer\">\n <div class=\"n-modal-footer\">\n <span class=\"n-help\">\n <nord-icon label=\"Arrow keys\" name=${navigateIcon.title}></nord-icon>\n ${this.localize.term(\"footerArrowKeys\")}\n </span>\n <span class=\"n-help\">\n <nord-icon label=\"Enter key\" name=${enterIcon.title}></nord-icon>\n ${this.localize.term(\"footerEnterKey\")}\n </span>\n <span class=\"n-help\">${this.localize.term(\"footerEscapeKey\")}</span>\n <span class=\"n-help n-backspace\">\n <nord-icon label=\"Backspace key\" name=${backspaceIcon.title}></nord-icon>\n ${this.localize.term(\"footerBackspaceKey\")}\n </span>\n </div>\n </slot>\n </div>\n </div>\n `\n }\n\n private renderNoResults() {\n return html`\n <div id=\"no-results\" class=\"n-command-empty\" role=\"option\" aria-selected=\"true\">\n <div class=\"n-title\">${this.localize.term(\"noResults\", this.search)}</div>\n <div class=\"n-tip\">${this.localize.term(\"tip\")}</div>\n </div>\n `\n }\n\n private renderSection(section: string | undefined, commands: ICommandMenuAction[]) {\n const sectionId = `section-${section}`\n\n // TODO: test on latest safari, since it seems to have issues with grouped options\n return html`\n <div role=\"group\" aria-labelledby=${ifDefined(section ? sectionId : undefined)}>\n ${section\n ? html`<div class=\"n-group-header\" role=\"presentation\" id=${ifDefined(sectionId)}>${section}</div>`\n : nothing}\n ${repeat(\n commands,\n command => command.id,\n command => html`\n <nord-command-menu-action\n id=${command.id}\n .command=${command}\n ?selected=${command.id === this.selected?.id}\n @click=${() => this.select(command)}\n role=\"option\"\n aria-selected=${ifDefined(command.id === this.selected?.id || undefined)}\n ></nord-command-menu-action>\n `\n )}\n </div>\n `\n }\n\n private handleAnimationEnd() {\n this.bump = false\n }\n\n private handleBlur() {\n if (this.open) {\n this.focus()\n }\n }\n\n private handleInput(event: KeyboardEvent) {\n const input = event.target as HTMLInputElement\n this.setSearch(input.value)\n }\n\n private select(command: ICommandMenuAction = this.selected) {\n const isParent = this.commands.some(item => item.parent === command.id)\n\n if (isParent) {\n this.setParent(command.id)\n this.bump = true\n this.focus()\n } else {\n this.close()\n }\n\n this.setSearch(\"\")\n command.handler?.(this)\n\n // this is separated into two parts because of a bug in Custom Elements Analyzer, where it gets the event name wrong.\n // TODO: cleanup when bug is fixed.\n const event = new SelectEvent(command)\n this.dispatchEvent(event)\n }\n\n private start() {\n this.selectedIndex = 0\n }\n\n private end() {\n this.selectedIndex = this.filteredCommands.length - 1\n }\n\n private next() {\n this.selectedIndex = wrap(this.selectedIndex + 1, 0, this.filteredCommands.length - 1)\n }\n\n private previous() {\n this.selectedIndex = wrap(this.selectedIndex - 1, 0, this.filteredCommands.length - 1)\n }\n\n private goBack() {\n if (this.search) {\n return\n }\n\n if (this.parent) {\n const parentCommand = this.commands.find(command => command.id === this.parent)\n this.setParent(parentCommand?.parent)\n }\n }\n\n private setParent(parent?: string) {\n this.parent = parent\n this.setSearch(\"\")\n }\n\n private setSearch(str: string) {\n this.search = str\n this.selectedIndex = 0\n }\n\n private filterCommands() {\n const searchTerms = this.search.toLocaleLowerCase().split(/\\s+/)\n\n this.filteredCommands = this.commands.filter(({ title, keywords = \"\", parent }) => {\n const searchSpace = `${title} ${keywords}`.toLocaleLowerCase()\n const matcher = searchTerms.every(term => searchSpace.includes(term))\n\n if (!this.parent && this.search) {\n // global search for items on root\n return matcher\n }\n\n return parent === this.parent && matcher\n })\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-command-menu\": CommandMenu\n }\n}\n","/**\n * Groups an array objects by property value\n * @param array the collection of objects to group\n * @param key the property to group by\n * @returns a Map keyed by property value, where values are are an array of objects with that property value.\n */\nexport function groupBy<TObject extends Record<any, any>, TKey extends keyof TObject>(\n array: Array<TObject>,\n key: TKey\n) {\n const grouped = new Map<TObject[TKey], TObject[]>()\n\n for (const item of array) {\n const value = item[key]\n const collection = grouped.get(value) ?? []\n\n if (!grouped.has(value)) {\n grouped.set(value, [])\n }\n collection.push(item)\n grouped.set(value, collection)\n }\n\n return grouped\n}\n\n/**\n * Split an array into chunks of the given size\n * @param array\n * @param chunkSize\n * @returns\n */\nexport function chunk<T>(array: T[], chunkSize: number): T[][] {\n const result = []\n\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize))\n }\n\n return result\n}\n\n/**\n * maps over an array, starting at the given offset and wrapping around.\n * @param array\n * @param startingOffset\n * @param mapFn\n * @returns\n */\nexport function mapWithOffset<T, U>(array: T[], startingOffset: number, mapFn: (item: T, i: number) => U): U[] {\n return array.map((_, i) => {\n const adjustedIndex = (i + startingOffset) % array.length\n return mapFn(array[adjustedIndex], adjustedIndex)\n })\n}\n","/* eslint-disable lit-a11y/no-invalid-change-handler */\nimport { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\n\nimport \"../button/Button.js\"\n\nimport dropdownIcon from \"@nordhealth/icons/lib/assets/interface-dropdown-small.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Select.css\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\n\n/**\n * Select lets users choose one option from an options menu.\n * Consider using select when you have 5 or more options to choose from.\n *\n * @status ready\n * @category form\n * @slot - Default slot for holding <option> elements.\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@customElement(\"nord-select\")\nexport default class Select extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, style]\n\n protected override get formValue() {\n return this.value || undefined\n }\n\n private defaultSlot = new SlotController(this)\n\n protected inputId = \"select\"\n\n render() {\n const slottedOptions = this.options\n const buttonText = this.getButtonText(slottedOptions)\n\n return html`\n <slot></slot>\n ${this.renderLabel()}\n\n <div class=\"n-select-container\">\n <select\n ${ref(this.focusableRef)}\n id=${this.inputId}\n ?disabled=${this.disabled}\n ?required=${this.required}\n name=${ifDefined(this.name)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n >\n ${this.placeholder && html`<option value=\"\" disabled ?selected=${!this.value}>${this.placeholder}</option>`}\n ${slottedOptions.map(option => this.renderOption(option))}\n </select>\n\n <nord-button tabindex=\"-1\" ?disabled=${this.disabled} ?expand=${this.expand} aria-hidden=\"true\" type=\"button\">\n <slot slot=\"start\" name=\"start\"></slot>\n ${buttonText}\n <div slot=\"end\">${unsafeHTML(dropdownIcon)}</div>\n </nord-button>\n </div>\n\n ${this.renderError()}\n `\n }\n\n private get options() {\n return Array.from(this.querySelectorAll(\"option\"))\n }\n\n private getButtonText(options: HTMLOptionElement[]): string {\n const selected = options.find(option => option.value === this.value.toString())\n\n if (selected) {\n return selected.text\n }\n\n if (this.placeholder) {\n return this.placeholder\n }\n\n if (options[0]) {\n return options[0].text\n }\n\n return \"\"\n }\n\n private renderOption(option: HTMLOptionElement) {\n return html`\n <option\n value=${ifDefined(option.value)}\n ?disabled=${option.disabled}\n ?selected=${option.value === this.value.toString()}\n >\n ${option.text}\n </option>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-select\": Select\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M105 56a10.416 10.416 0 0 1-7.42-3.08L72.478 27.818a3.528 3.528 0 0 0-4.956 0L42.42 52.92a10.5 10.5 0 0 1-14.84-14.84l35-35a10.486 10.486 0 0 1 14.84 0l35 35A10.5 10.5 0 0 1 105 56zm-35 84a10.416 10.416 0 0 1-7.42-3.08l-35-35a10.5 10.5 0 0 1 14.84-14.84l25.102 25.102a3.528 3.528 0 0 0 4.956 0L97.58 87.08a10.5 10.5 0 1 1 14.84 14.84l-35 35A10.416 10.416 0 0 1 70 140z\"/></svg>'\nexport const title = \"interface-dropdown-small\"\nexport const tags = \"nordicon small interface dropdown select arrow up down caret triangle chevron\"\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Stack.css\"\n\n/**\n * Stack component manages layout of immediate children along the\n * vertical or horizontal axis with optional spacing between each child.\n *\n * @status ready\n * @category structure\n * @slot - The stack content.\n */\n@customElement(\"nord-stack\")\nexport default class Stack extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The space injected between components.\n */\n @property({ reflect: true }) gap: \"none\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The direction of the stack.\n */\n @property({ reflect: true }) direction: \"vertical\" | \"horizontal\" = \"vertical\"\n\n /**\n * How to align the child items inside the stack.\n */\n @property({ reflect: true, attribute: \"align-items\" }) alignItems?: \"center\" | \"start\" | \"end\" | \"stretch\" = \"stretch\"\n\n /**\n * Enable or disable responsive behaviour of the stack component.\n * Setting this option \"true\" makes sure that contents are\n * stacked vertically on mobile (768px and under).\n */\n @property({ reflect: true, type: Boolean }) responsive = false\n\n /**\n * Defines whether the Stack items are forced in a single line\n * or can be flowed into multiple lines.\n */\n @property({ reflect: true, type: Boolean }) wrap = false\n\n /**\n * How to justify the child items inside the stack.\n */\n @property({ reflect: true, attribute: \"justify-content\" }) justifyContent?:\n | \"center\"\n | \"start\"\n | \"end\"\n | \"baseline\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\"\n\n render() {\n return html`<slot></slot>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-stack\": Stack\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Spinner.css\"\n\n/**\n * Spinner component is used to indicate users that their action is being\n * processed. You can customize the size and color of the spinner with the\n * provided properties.\n *\n * @status ready\n * @category feedback\n */\n@customElement(\"nord-spinner\")\nexport default class Spinner extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The size of the spinner.\n */\n @property({ reflect: true }) size: \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The color of the spinner.\n * Can accept any valid CSS color value, including custom properties.\n */\n @property({ reflect: true }) color?: string\n\n /**\n * An accessible label for the spinner.\n * If no label is supplied, the spinner is hidden from assistive technology.\n */\n @property({ reflect: true }) label?: string\n\n render() {\n // if a label is supplied, we give the div a role of img.\n // without this we could not use aria-label, since it is only valid on elements of certain roles.\n return html`\n <div\n class=\"n-spinner\"\n role=${ifDefined(this.label ? \"img\" : undefined)}\n aria-label=${ifDefined(this.label)}\n style=${ifDefined(this.color ? `color:${this.color}` : undefined)}\n ></div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-spinner\": Spinner\n }\n}\n","import { LitElement, html, render } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport style from \"./Table.css\"\n\nfunction isDocument(node: Node): node is Document {\n return node.nodeType === Node.DOCUMENT_NODE\n}\n\n/**\n * Table is used to organize and display information from a data set.\n * Provides table styles in addition to features like sticky\n * headers and support for narrow viewports.\n *\n * @status ready\n * @category list\n * @slot - The table.\n */\n@customElement(\"nord-table\")\nexport default class Table extends LitElement {\n static styles = style\n\n /**\n * Controls the density of the table's rows and headers.\n * Relaxed increases space, condensed reduces space.\n */\n @property({ reflect: true }) density: \"condensed\" | \"default\" | \"relaxed\" = \"default\"\n\n connectedCallback() {\n super.connectedCallback()\n this.renderStyles()\n }\n\n /**\n * renders table styles into nearest root.\n * this is necessary since we do not use shadow dom.\n */\n private renderStyles() {\n const rootNode = this.getRootNode() as Document | ShadowRoot\n const renderTarget = isDocument(rootNode) ? rootNode.head : rootNode\n const tagName = this.localName\n\n const componentStyles = rootNode.querySelector(`style[data-component=${tagName}]`)\n if (componentStyles) {\n return\n }\n\n render(\n html`\n <style data-component=${tagName}>\n ${style}\n </style>\n `,\n renderTarget\n )\n }\n\n /**\n * opt out of shadow dom\n */\n protected createRenderRoot() {\n return this\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-table\": Table\n }\n}\n","import { LitElement, html, PropertyValues } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport textFieldStyle from \"../common/styles/TextField.css\"\nimport style from \"./Textarea.css\"\n\n/**\n * Textarea is a component that allows user to write text over\n * multiple rows. Used when the expected user input is long.\n * For shorter input, use the Input component.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the textarea.\n * @slot error - Optional slot that holds error text for the textarea.\n */\n@customElement(\"nord-textarea\")\nexport default class Textarea extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, textFieldStyle, style]\n\n protected inputId = \"textarea\"\n\n /**\n * Controls whether the textarea is resizable.\n * By default is manually resizable vertically.\n * Set to \"auto\" to enable auto-resizing as content grows.\n */\n @property({ reflect: true }) resize: \"vertical\" | \"auto\" = \"vertical\"\n\n updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"resize\") || changedProperties.has(\"value\")) {\n this.resizeToFitContent()\n }\n }\n\n render() {\n return html`\n ${this.renderLabel()}\n\n <div class=\"n-input-container\">\n <textarea\n ${ref(this.focusableRef)}\n id=${this.inputId}\n class=\"n-input\"\n ?disabled=${this.disabled}\n ?required=${this.required}\n name=${ifDefined(this.name)}\n .value=${this.value ?? \"\"}\n placeholder=${ifDefined(this.placeholder)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n ></textarea>\n </div>\n\n ${this.renderError()}\n `\n }\n\n private resizeToFitContent() {\n const textarea = this.focusableRef.value\n\n if (!textarea) {\n return\n }\n\n if (this.resize === \"auto\") {\n textarea.style.height = \"auto\"\n textarea.style.height = `${textarea.scrollHeight}px`\n } else {\n // @ts-expect-error this is actually fine, and removes the style value\n textarea.style.height = null\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-textarea\": Textarea\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M105 57.4 47.6 2.8a10.566 10.566 0 1 0-14.56 15.316l51.968 49.35a3.486 3.486 0 0 1 0 5.068l-51.968 49.35a10.502 10.502 0 0 0 14.462 15.232l57.638-54.74A17.584 17.584 0 0 0 105 57.4z\"/></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 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M99.736 140a10.486 10.486 0 0 1-7.238-2.884L35 82.6a17.598 17.598 0 0 1-.14-24.976l57.638-54.74a10.502 10.502 0 1 1 14.462 15.232l-51.968 49.35a3.486 3.486 0 0 0 0 5.068l51.968 49.35A10.5 10.5 0 0 1 99.736 140z\"/></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 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M70 110.236a17.332 17.332 0 0 1-12.306-5.096L2.884 47.502A10.502 10.502 0 1 1 18.116 33.04l49.35 51.968a3.486 3.486 0 0 0 5.068 0l49.35-51.968a10.502 10.502 0 1 1 15.232 14.462L82.6 105a17.766 17.766 0 0 1-12.6 5.236z\"/></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","const ISO_DATE_FORMAT = /^(\\d{4})-(\\d{2})-(\\d{2})$/\n\nexport const enum DaysOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\nexport function createDate(year: string, month: string, day: string): Date | undefined {\n const dayInt = parseInt(day, 10)\n const monthInt = parseInt(month, 10)\n const yearInt = parseInt(year, 10)\n\n const isValid =\n Number.isInteger(yearInt) && // all parts should be integers\n Number.isInteger(monthInt) &&\n Number.isInteger(dayInt) &&\n monthInt > 0 && // month must be 1-12\n monthInt <= 12 &&\n dayInt > 0 && // day must be 1-31\n dayInt <= 31 &&\n yearInt > 0\n\n if (isValid) {\n const date = new Date(yearInt, monthInt - 1, dayInt)\n // this handles values where year is 0-99, which JS \"helpfully\" interprets as 1900-1999\n date.setFullYear(yearInt)\n\n return date\n }\n\n return undefined\n}\n\n/**\n * @param value date string in ISO format YYYY-MM-DD\n */\nexport function parseISODate(value: string): Date | undefined {\n if (!value) {\n return undefined\n }\n\n const matches = value.match(ISO_DATE_FORMAT)\n\n if (matches) {\n return createDate(matches[1], matches[2], matches[3])\n }\n\n return undefined\n}\n\n/**\n * print date in format YYYY-MM-DD\n * @param date\n */\nexport function printISODate(date: Date): string {\n if (!date) {\n return \"\"\n }\n\n const d = date.getDate().toString(10)\n const m = (date.getMonth() + 1).toString(10)\n const y = date.getFullYear().toString(10)\n\n return `${y.padStart(4, \"0\")}-${m.padStart(2, \"0\")}-${d.padStart(2, \"0\")}`\n}\n\nfunction today() {\n const date = new Date()\n return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0))\n}\n\nexport function getDayNames(locale: string, weekday: Exclude<Intl.DateTimeFormatOptions[\"weekday\"], undefined>) {\n const days = []\n const options = { weekday }\n const day = today()\n\n for (let i = 0; i < 7; i++) {\n days[day.getDay()] = day.toLocaleDateString(locale, options)\n day.setDate(day.getDate() + 1)\n }\n\n return days\n}\n\nexport function getMonthNames(locale: string, month: Exclude<Intl.DateTimeFormatOptions[\"month\"], undefined>) {\n const months = []\n const options = { month }\n const day = today()\n\n for (let i = 0; i < 12; i++) {\n months[day.getMonth()] = day.toLocaleDateString(locale, options)\n day.setMonth(day.getMonth() + 1)\n }\n\n return months\n}\n\n/**\n * Compare if two dates are in the same month of the same year.\n */\nexport function isEqualMonth(a?: Date, b?: Date): boolean {\n if (a == null || b == null) {\n return false\n }\n\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth()\n}\n\n/**\n * Compare if two dates are equal in terms of day, month, and year\n */\nexport function isEqual(a?: Date, b?: Date): boolean {\n if (a == null || b == null) {\n return false\n }\n\n return isEqualMonth(a, b) && a.getDate() === b.getDate()\n}\n\nexport function addDays(date: Date, days: number): Date {\n const d = new Date(date)\n d.setDate(d.getDate() + days)\n return d\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const d = new Date(date)\n d.setMonth(date.getMonth() + months)\n return d\n}\n\nexport function addYears(date: Date, years: number): Date {\n const d = new Date(date)\n d.setFullYear(date.getFullYear() + years)\n return d\n}\n\nexport function startOfWeek(date: Date, firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday): Date {\n const d = new Date(date)\n const day = d.getDay()\n const diff = (day < firstDayOfWeek ? 7 : 0) + day - firstDayOfWeek\n\n d.setDate(d.getDate() - diff)\n return d\n}\n\nexport function endOfWeek(date: Date, firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday): Date {\n const d = new Date(date)\n const day = d.getDay()\n const diff = (day < firstDayOfWeek ? -7 : 0) + 6 - (day - firstDayOfWeek)\n\n d.setDate(d.getDate() + diff)\n return d\n}\n\nexport function startOfMonth(date: Date): Date {\n const d = new Date(date.getFullYear(), date.getMonth(), 1)\n d.setFullYear(date.getFullYear())\n return d\n}\n\nexport function endOfMonth(date: Date): Date {\n const d = new Date(date.getFullYear(), date.getMonth() + 1, 0)\n d.setFullYear(date.getFullYear())\n return d\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const d = new Date(date)\n d.setMonth(month)\n return d\n}\n\nexport function setYear(date: Date, year: number): Date {\n const d = new Date(date)\n d.setFullYear(year)\n return d\n}\n\n/**\n * Ensures date is within range, returns min or max if out of bounds\n */\nexport function clamp(date: Date, min?: Date, max?: Date): Date {\n const time = date.getTime()\n\n if (min && min instanceof Date && time < min.getTime()) {\n return min\n }\n\n if (max && max instanceof Date && time > max.getTime()) {\n return max\n }\n\n return date\n}\n\n/**\n * Check if date is within a min and max\n */\nexport function inRange(date: Date, min?: Date, max?: Date): boolean {\n return clamp(date, min, max) === date\n}\n\n/**\n * given start and end date, return an (inclusive) array of all dates in between\n * @param start\n * @param end\n */\nfunction getDaysInRange(start: Date, end: Date): Date[] {\n const days: Date[] = []\n let current = start\n\n while (!isEqual(current, end)) {\n days.push(current)\n current = addDays(current, 1)\n }\n\n days.push(current)\n\n return days\n}\n\n/**\n * given a date, return an array of dates from a calendar perspective\n * @param date\n * @param firstDayOfWeek\n */\nexport function getViewOfMonth(date: Date, firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday): Date[] {\n const start = startOfWeek(startOfMonth(date), firstDayOfWeek)\n const end = endOfWeek(endOfMonth(date), firstDayOfWeek)\n\n return getDaysInRange(start, end)\n}\n","import { html } from \"lit\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { chunk, mapWithOffset } from \"../common/collection.js\"\nimport { DaysOfWeek, getViewOfMonth, inRange as dateInRange, isEqual, isEqualMonth } from \"../common/dates.js\"\nimport { DateDisabledPredicate } from \"./Calendar.js\"\n\nexport type DatePickerDayProps = {\n focusedDay: Date\n today: Date\n day: Date\n disabled: boolean\n inRange: boolean\n isSelected: boolean\n dateFormatter: Intl.DateTimeFormat\n onDaySelect: (day: Date) => void\n onKeyboardNavigation: (event: KeyboardEvent) => void\n}\n\nexport const dayView = ({\n focusedDay,\n today,\n day,\n onDaySelect,\n onKeyboardNavigation,\n disabled,\n inRange,\n isSelected,\n dateFormatter,\n}: DatePickerDayProps) => {\n const isToday = isEqual(day, today)\n const isMonth = isEqualMonth(day, focusedDay)\n const isFocused = isEqual(day, focusedDay)\n const isOutsideRange = !inRange\n\n return html`\n <button\n class=${classMap({\n \"n-calendar-day\": true,\n \"is-outside\": isOutsideRange,\n \"is-month\": isMonth,\n \"is-disabled\": disabled,\n })}\n tabindex=${isFocused ? 0 : -1}\n @click=${() => onDaySelect(day)}\n @keydown=${onKeyboardNavigation}\n aria-disabled=${ifDefined(disabled ? \"true\" : undefined)}\n ?disabled=${isOutsideRange}\n type=\"button\"\n aria-pressed=${isSelected ? \"true\" : \"false\"}\n aria-current=${ifDefined(isToday ? \"date\" : undefined)}\n aria-label=${dateFormatter.format(day)}\n >\n <span aria-hidden=\"true\">${day.getDate()}</span>\n </button>\n `\n}\n\ntype MonthViewArgs = {\n selectedDate: Date | undefined\n focusedDate: Date\n labelledById: string\n dayNames: string[]\n dayNamesShort: string[]\n firstDayOfWeek: DaysOfWeek\n min?: Date\n max?: Date\n dateFormatter: Intl.DateTimeFormat\n isDateDisabled: DateDisabledPredicate\n onDateSelect: DatePickerDayProps[\"onDaySelect\"]\n onFocusIn: EventListener\n onFocusOut: EventListener\n onKeyboardNavigation: DatePickerDayProps[\"onKeyboardNavigation\"]\n}\n\nexport function monthView({\n onFocusIn,\n onFocusOut,\n selectedDate,\n focusedDate,\n labelledById,\n dayNames,\n dayNamesShort,\n firstDayOfWeek,\n min,\n max,\n dateFormatter,\n isDateDisabled,\n onDateSelect,\n onKeyboardNavigation,\n}: MonthViewArgs) {\n const today = new Date()\n const days = getViewOfMonth(focusedDate, firstDayOfWeek)\n\n function handleFocusOut(e: FocusEvent) {\n const table = e.currentTarget as Node\n const relatedTarget = e.relatedTarget as Node\n\n if (relatedTarget && !table.contains(relatedTarget)) {\n onFocusOut(e)\n }\n }\n\n return html`\n <table class=\"n-calendar-table\" aria-labelledby=${labelledById} @focusin=${onFocusIn} @focusout=${handleFocusOut}>\n <thead>\n <tr>\n ${mapWithOffset(\n dayNames,\n firstDayOfWeek,\n (dayName, i) =>\n html`\n <th class=\"n-calendar-table-header\" scope=\"col\">\n <span aria-hidden=\"true\">${dayNamesShort[i]}</span>\n <nord-visually-hidden>${dayName}</nord-visually-hidden>\n </th>\n `\n )}\n </tr>\n </thead>\n <tbody>\n ${chunk(days, 7).map(\n week =>\n html`<tr class=\"n-calendar-row\">\n ${week.map(\n day =>\n html`<td class=\"n-calendar-cell\">\n ${dayView({\n day,\n today,\n focusedDay: focusedDate,\n isSelected: isEqual(day, selectedDate),\n disabled: isDateDisabled(day),\n inRange: dateInRange(day, min, max),\n onDaySelect: onDateSelect,\n dateFormatter,\n onKeyboardNavigation,\n })}\n </td>`\n )}\n </tr>`\n )}\n </tbody>\n </table>\n `\n}\n","import { NordEvent } from \"../common/events.js\"\n\nexport class DateSelectEvent extends NordEvent {\n date: Date\n\n constructor(name: string, date: Date) {\n super(name)\n this.date = date\n }\n}\n","import { html, LitElement, PropertyValues } from \"lit\"\nimport { customElement, property, query, state } from \"lit/decorators.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\"\n\nimport { range } from \"../common/number.js\"\nimport {\n addDays,\n clamp,\n DaysOfWeek,\n endOfMonth,\n endOfWeek,\n getDayNames,\n getMonthNames,\n inRange,\n isEqualMonth,\n parseISODate,\n printISODate,\n setMonth,\n setYear,\n startOfMonth,\n startOfWeek,\n} from \"../common/dates.js\"\n\nimport { monthView } from \"./month-view.js\"\nimport { DateSelectEvent } from \"./DateSelectEvent.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Calendar.css\"\n\nexport type DateDisabledPredicate = (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: DateDisabledPredicate = () => false\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@customElement(\"nord-calendar\")\nexport default class Calendar extends LitElement {\n static styles = [componentStyle, style]\n\n private dialogLabelId = \"dialog-header\"\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: DateDisabledPredicate = isDateDisabled\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 willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"value\")) {\n this.setFocusedDay(parseISODate(this.value) || new Date())\n }\n }\n\n protected updated(changedProperties: PropertyValues<this>): void {\n // @ts-expect-error focusedDay is private so TS complains, but we don't want to loosen the param type\n if (changedProperties.has(\"focusedDay\") && this.activeFocus) {\n this.focusedDayNode.focus()\n }\n }\n\n render() {\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=${this.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=\"xs\"></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=\"xs\"></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\n color=\"var(--n-color-icon)\"\n name=${this.direction.isLTR ? \"arrow-left-small\" : \"arrow-right-small\"}\n size=\"s\"\n ></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\n color=\"var(--n-color-icon)\"\n name=${this.direction.isLTR ? \"arrow-right-small\" : \"arrow-left-small\"}\n size=\"s\"\n ></nord-icon>\n </nord-button>\n </div>\n </div>\n\n ${monthView({\n onFocusOut: this.disableActiveFocus,\n onFocusIn: this.enableActiveFocus,\n dateFormatter: this.dateFormatShort,\n selectedDate: valueAsDate,\n focusedDate: this.focusedDay,\n onDateSelect: this.handleDaySelect,\n onKeyboardNavigation: this.shortcuts,\n labelledById: this.dialogLabelId,\n dayNames: this.dayNames,\n dayNamesShort: this.dayNamesShort,\n firstDayOfWeek: this.firstDayOfWeek,\n min: minDate,\n max: maxDate,\n isDateDisabled: this.isDateDisabled,\n })}\n </div>\n `\n }\n\n private handleLangChange() {\n const lang = this.localize.resolvedLang\n this.dateFormatShort = new Intl.DateTimeFormat(lang, { 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: any) => {\n this.setMonth(parseInt(e.target.value, 10))\n }\n\n private handleYearSelect = (e: any) => {\n this.setYear(parseInt(e.target.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 = () => {\n this.activeFocus = false\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-calendar\": Calendar\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 21h126v112H7zM35 7v28m70-28v28M7 63h126\" stroke-width=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"interface-calendar\"\nexport const tags = \"nordicon interface calendar date time day week month year\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M89.796 74.956a7 7 0 0 1 0-9.912L136.92 17.92a10.5 10.5 0 0 0-14.84-14.84L74.956 50.204a7 7 0 0 1-9.912 0L17.92 3.08A10.5 10.5 0 0 0 3.08 17.92l47.124 47.124a7 7 0 0 1 0 9.912L3.08 122.08a10.5 10.5 0 1 0 14.84 14.84l47.124-47.124a7 7 0 0 1 9.912 0l47.124 47.124a10.5 10.5 0 0 0 14.84-14.84z\"/></svg>'\nexport const title = \"interface-close-small\"\nexport const tags = \"nordicon interface close remove small cross delete erase symbol\"\n","import { parseISODate, printISODate, createDate } from \"../common/dates.js\"\n\ntype CreateDate = typeof createDate\nexport type DateParser = (input: string, createDate: CreateDate) => Date | undefined\nexport type DateFormatter = (date: Date) => string\n\nexport interface DateAdapter {\n parse: DateParser\n format: DateFormatter\n}\n\nexport const isoAdapter: DateAdapter = { parse: parseISODate, format: printISODate }\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property, query, state } from \"lit/decorators.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport * as calendarIcon from \"@nordhealth/icons/lib/assets/interface-calendar.js\"\nimport * as closeIcon from \"@nordhealth/icons/lib/assets/interface-close-small.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport { createDate, DaysOfWeek, parseISODate, printISODate } from \"../common/dates.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { cleanValue } from \"../common/input.js\"\nimport { isDownwardsSwipe, SwipeController } from \"../common/controllers/SwipeController.js\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { LocalizeController } from \"../localization/LocalizeController.js\"\n\nimport \"../button/Button.js\"\nimport type Button from \"../button/Button.js\"\nimport Icon from \"../icon/Icon.js\"\nimport \"../visually-hidden/VisuallyHidden.js\"\n\nimport \"../calendar/Calendar.js\"\nimport { DateSelectEvent } from \"../calendar/DateSelectEvent.js\"\nimport type Calendar from \"../calendar/Calendar.js\"\nimport type { DateDisabledPredicate } from \"../calendar/Calendar.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport textFieldStyle from \"../common/styles/TextField.css\"\nimport style from \"./DatePicker.css\"\n\nimport { DateAdapter, isoAdapter } from \"./date-adapter.js\"\n\nIcon.registerIcon(calendarIcon)\nIcon.registerIcon(closeIcon)\n\nconst DISALLOWED_CHARACTERS = /[^0-9./-]+/g\nconst isDateDisabled = () => false\n\n/**\n *\n * Date Picker allows user to enter a date either through text input,\n * or by choosing a date from the calendar. Please note that the date\n * must be passed in ISO-8601 format: YYYY-MM-DD.\n *\n * @status ready\n * @category form\n */\n@customElement(\"nord-date-picker\")\nexport default class DatePicker extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, textFieldStyle, style]\n\n @query(`.n-date-toggle`, true) private toggleButton!: Button\n @query(`.n-date-close`, true) private closeButton!: HTMLButtonElement\n @query(`nord-calendar`, true) private calendar!: Calendar\n @query(`[role=\"dialog\"]`, true) private dialog!: HTMLElement\n\n private dismiss = new LightDismissController(this, {\n isOpen: () => this.open,\n onDismiss: e => this.hide(e.type !== \"click\"),\n isDismissible: node => node !== this.calendar && node !== this.toggleButton,\n })\n\n private swipe = new SwipeController(this, {\n target: () => this.dialog,\n matchesGesture: isDownwardsSwipe,\n onSwipeEnd: () => this.hide(false),\n })\n\n private localize = new LocalizeController<\"nord-date-picker\">(this, {\n onLangChange: () => this.createDateFormatters(),\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 dateFormatLong!: Intl.DateTimeFormat\n\n @state() private open = false\n\n /**\n * Date value. Must be in IS0-8601 format: YYYY-MM-DD.\n */\n @property() value: string = \"\"\n\n get valueAsDate(): Date | undefined {\n return parseISODate(this.value)\n }\n\n /**\n * Get/set the value of the picker as a Date object.\n */\n set valueAsDate(date: Date | undefined) {\n this.value = date ? printISODate(date) : \"\"\n }\n\n get valueAsNumber(): number {\n return this.valueAsDate?.getTime() ?? NaN\n }\n\n /**\n * Get/set the value of the picker as the number of milliseconds elapsed since the UNIX epoch.\n */\n set valueAsNumber(date: number) {\n this.value = date ? printISODate(new Date(date)) : \"\"\n }\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 * Forces the opening direction of the calendar modal to be always left or right.\n * This setting can be useful when the input is smaller than the opening date picker\n * would be as by default the picker always opens towards right.\n */\n @property() direction: \"left\" | \"right\" = \"right\"\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({ attribute: \"first-day-of-week\", type: Number }) firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n\n /**\n * Date adapter, for custom parsing/formatting.\n * Must be object with a `parse` function which accepts a `string` and returns a `Date`,\n * and a `format` function which accepts a `Date` and returns a `string`.\n * Default is IS0-8601 parsing and formatting.\n */\n @property({ attribute: false }) dateAdapter: DateAdapter = isoAdapter\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: DateDisabledPredicate = isDateDisabled\n\n /**\n * Show the calendar modal, moving focus to the calendar inside.\n */\n show() {\n this.open = true\n /**\n * Dispatched when the calendar is toggled open.\n */\n this.dispatchEvent(new NordEvent(\"open\"))\n\n // we should only focus once the calendar is visible after render is complete\n this.updateComplete.then(() => this.calendar.focus({ target: \"month\" }))\n }\n\n /**\n * Hide the calendar modal.\n * @param {boolean} moveFocusToButton controls whether focus should be returned to the date picker's button.\n */\n hide(moveFocusToButton = true) {\n this.open = false\n /**\n * Dispatched when the calendar is closed.\n */\n this.dispatchEvent(new NordEvent(\"close\"))\n\n if (moveFocusToButton) {\n this.toggleButton.focus()\n }\n }\n\n render() {\n const { valueAsDate } = this\n const formattedDate = valueAsDate ? this.dateAdapter.format(valueAsDate) : \"\"\n\n return html`\n ${this.renderLabel()}\n\n <div class=\"n-input-container\">\n <input\n class=\"n-input\"\n name=${this.name}\n .value=${formattedDate}\n placeholder=${ifDefined(this.placeholder)}\n id=${this.inputId}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-autocomplete=\"none\"\n @input=${this.handleInputChange}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n autocomplete=\"off\"\n ${ref(this.focusableRef)}\n aria-invalid=${ifDefined(this.error ? \"true\" : undefined)}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n />\n <button class=\"n-date-toggle\" @click=${this.toggleOpen} ?disabled=${this.disabled} type=\"button\">\n <nord-icon name=\"interface-calendar\" size=\"s\"></nord-icon>\n <nord-visually-hidden>\n ${this.localize.term(\"buttonLabel\")}\n ${valueAsDate\n ? html`\n <span>\n , ${this.localize.term(\"selectedDateMessage\")} ${this.dateFormatLong.format(valueAsDate)}\n </span>\n `\n : nothing}\n </nord-visually-hidden>\n </button>\n </div>\n\n ${this.renderError()}\n\n <div\n class=${classMap({\n \"is-left\": this.direction === \"left\",\n \"is-active\": this.open,\n })}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden=${this.open ? \"false\" : \"true\"}\n aria-labelledby=\"dialog-header\"\n >\n <div class=\"n-date-dialog-content\">\n <div aria-hidden=\"true\" tabindex=\"0\" @focus=${this.focusLast}></div>\n\n <div class=\"n-date-mobile\">\n <div class=\"n-date-mobile-heading\" id=\"dialog-header\">${this.localize.term(\"modalHeading\")}</div>\n <button class=\"n-date-close\" @click=${this.hide} type=\"button\">\n <nord-icon color=\"var(--n-color-icon)\" name=\"interface-close-small\" size=\"xs\"></nord-icon>\n <nord-visually-hidden>${this.localize.term(\"closeLabel\")}</nord-visually-hidden>\n </button>\n </div>\n <nord-calendar\n value=${this.value}\n min=${this.min}\n max=${this.max}\n .firstDayOfWeek=${this.firstDayOfWeek}\n .isDateDisabled=${this.isDateDisabled}\n @change=${this.handleDaySelect}\n ></nord-calendar>\n\n <div aria-hidden=\"true\" tabindex=\"0\" @focus=${this.focusFirst}></div>\n </div>\n </div>\n `\n }\n\n private createDateFormatters() {\n this.dateFormatLong = new Intl.DateTimeFormat(this.localize.resolvedLang, {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n })\n }\n\n private focusFirst() {\n this.closeButton.focus()\n }\n\n private focusLast() {\n this.calendar.focus({ target: \"day\" })\n }\n\n private handleDaySelect = (e: DateSelectEvent) => {\n e.stopPropagation()\n this.setValue(e.date)\n this.hide()\n }\n\n private toggleOpen = (e: Event) => {\n e.preventDefault()\n\n if (this.open) {\n this.hide(false)\n } else {\n this.show()\n }\n }\n\n private handleBlur = (event: Event) => {\n event.stopPropagation()\n this.dispatchEvent(new NordEvent(\"blur\"))\n }\n\n private handleFocus = (event: Event) => {\n event.stopPropagation()\n this.dispatchEvent(new NordEvent(\"focus\"))\n }\n\n private handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n\n // clean up any invalid characters\n cleanValue(target, DISALLOWED_CHARACTERS)\n this.dispatchEvent(new NordEvent(\"input\"))\n\n const parsed = this.dateAdapter.parse(target.value, createDate)\n if (parsed || target.value === \"\") {\n this.setValue(parsed)\n }\n }\n\n private setValue(date?: Date) {\n this.value = date ? printISODate(date) : \"\"\n this.dispatchEvent(new NordEvent(\"change\"))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-date-picker\": DatePicker\n }\n}\n","export function cleanValue(inputEl: HTMLInputElement, regex: RegExp): string {\n const { value } = inputEl\n const cursor = inputEl.selectionStart as number\n\n const beforeCursor = value.slice(0, cursor)\n const afterCursor = value.slice(cursor, value.length)\n\n const filteredBeforeCursor = beforeCursor.replace(regex, \"\")\n const filterAfterCursor = afterCursor.replace(regex, \"\")\n\n const newValue = filteredBeforeCursor + filterAfterCursor\n const newCursor = filteredBeforeCursor.length\n\n inputEl.value = newValue\n inputEl.selectionStart = newCursor\n inputEl.selectionEnd = newCursor\n\n return newValue\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M41.86 131.25a23.982 23.982 0 0 1-18.494-8.666L2.254 95.746a10.5 10.5 0 1 1 16.492-12.992l21 26.6a2.24 2.24 0 0 0 2.212.882 3.038 3.038 0 0 0 2.38-1.148l76.958-96.39a10.5 10.5 0 1 1 16.408 13.104L60.606 122.29A24.038 24.038 0 0 1 42 131.25z\"/></svg>'\nexport const title = \"interface-checked-small\"\nexport const tags = \"nordicon interface checked small symbol checkmark done ready\"\n","import { html, LitElement } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport * as checkedIcon from \"@nordhealth/icons/lib/assets/interface-checked-small.js\"\n\nimport Icon from \"../icon/Icon.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Checkbox.css\"\n\nIcon.registerIcon(checkedIcon)\n\n/**\n * Checkboxes allow user to choose one or more options from a limited set of options.\n * If you have more than 10 options, please use Select component instead.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the input.\n * @slot error - Optional slot that holds error text for the input.\n */\n@customElement(\"nord-checkbox\")\nexport default class Checkbox extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, style]\n\n protected override get formValue() {\n return this.checked ? this.value || \"on\" : undefined\n }\n\n /**\n * Controls whether the checkbox is checked or not.\n */\n @property({ type: Boolean }) checked: boolean = false\n\n render() {\n return html`\n <div class=\"n-flex\">\n <div class=\"n-input-container\">\n <input\n ${ref(this.focusableRef)}\n class=\"n-input\"\n id=${this.inputId}\n type=\"checkbox\"\n name=${ifDefined(this.name)}\n .value=${this.value}\n .checked=${this.checked}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n @change=${this.handleChange}\n />\n <nord-icon name=\"interface-checked-small\" size=\"s\"></nord-icon>\n </div>\n <div class=\"n-expand\">${this.renderLabel()} ${this.renderError()}</div>\n </div>\n `\n }\n\n protected handleChange(e: Event): void {\n const target = e.target as HTMLInputElement\n this.checked = target.checked\n super.handleChange(e)\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-checkbox\": Checkbox\n }\n}\n","function getSide(placement) {\n return placement.split('-')[0];\n}\n\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';\n}\n\nfunction getLengthFromAxis(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n const commonAlign = reference[length] / 2 - floating[length] / 2;\n const side = getSide(placement);\n const isVertical = mainAxis === 'x';\n let coords;\n\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n\n switch (getAlignment(placement)) {\n case 'start':\n coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n\n case 'end':\n coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\n\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n\n if (process.env.NODE_ENV !== \"production\") {\n if (platform == null) {\n console.error(['Floating UI: `platform` property was not passed to config. If you', 'want to use Floating UI on the web, install @floating-ui/dom', 'instead of the /core package. Otherwise, you can create your own', '`platform`: https://floating-ui.com/docs/platform'].join(' '));\n }\n\n if (middleware.filter(_ref => {\n let {\n name\n } = _ref;\n return name === 'autoPlacement' || name === 'flip';\n }).length > 1) {\n throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement`', 'middleware detected. This will lead to an infinite loop. Ensure only', 'one of either has been passed to the `middleware` array.'].join(' '));\n }\n }\n\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let _debug_loop_count_ = 0;\n\n for (let i = 0; i < middleware.length; i++) {\n if (process.env.NODE_ENV !== \"production\") {\n _debug_loop_count_++;\n\n if (_debug_loop_count_ > 100) {\n throw new Error(['Floating UI: The middleware lifecycle appears to be', 'running in an infinite loop. This is usually caused by a `reset`', 'continually being returned without a break condition.'].join(' '));\n }\n }\n\n const {\n name,\n fn\n } = middleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = { ...middlewareData,\n [name]: { ...middlewareData[name],\n ...data\n }\n };\n\n if (reset) {\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n\n i = -1;\n continue;\n }\n }\n\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\n\nfunction getSideObjectFromPadding(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\n\nfunction rectToClientRect(rect) {\n return { ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(middlewareArguments, options) {\n var _await$platform$isEle;\n\n if (options === void 0) {\n options = {};\n }\n\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = middlewareArguments;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = options;\n const paddingObject = getSideObjectFromPadding(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect: elementContext === 'floating' ? { ...rects.floating,\n x,\n y\n } : rects.reference,\n offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),\n strategy\n }) : rects[elementContext]); // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n return {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered\n * to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n\n async fn(middlewareArguments) {\n // Since `element` is required, we don't Partial<> the type\n const {\n element,\n padding = 0\n } = options != null ? options : {};\n const {\n x,\n y,\n placement,\n rects,\n platform\n } = middlewareArguments;\n\n if (element == null) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn('Floating UI: No `element` was passed to the `arrow` middleware.');\n }\n\n return {};\n }\n\n const paddingObject = getSideObjectFromPadding(padding);\n const coords = {\n x,\n y\n };\n const axis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const minProp = axis === 'y' ? 'top' : 'left';\n const maxProp = axis === 'y' ? 'bottom' : 'right';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n const clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n const centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside of the floating element's bounds\n\n const min = paddingObject[minProp];\n const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = within(min, center, max);\n return {\n data: {\n [axis]: offset,\n centerOffset: center - offset\n }\n };\n }\n\n});\n\nconst hash$1 = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, matched => hash$1[matched]);\n}\n\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n\n const alignment = getAlignment(placement);\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n\n return {\n main: mainAlignmentSide,\n cross: getOppositePlacement(mainAlignmentSide)\n };\n}\n\nconst hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, matched => hash[matched]);\n}\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-start\", side + \"-end\"), []);\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n\n return true;\n });\n}\n\n/**\n * Automatically chooses the `placement` which has the most space available.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'autoPlacement',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$autoP, _middlewareData$autoP2, _middlewareData$autoP3, _middlewareData$autoP4, _placementsSortedByLe;\n\n const {\n x,\n y,\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = middlewareArguments;\n const {\n alignment = null,\n allowedPlacements = allPlacements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = options;\n const placements = getPlacementList(alignment, autoAlignment, allowedPlacements);\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const currentIndex = (_middlewareData$autoP = (_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.index) != null ? _middlewareData$autoP : 0;\n const currentPlacement = placements[currentIndex];\n\n if (currentPlacement == null) {\n return {};\n }\n\n const {\n main,\n cross\n } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))); // Make `computeCoords` start from the right place\n\n if (placement !== currentPlacement) {\n return {\n x,\n y,\n reset: {\n placement: placements[0]\n }\n };\n }\n\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];\n const allOverflows = [...((_middlewareData$autoP3 = (_middlewareData$autoP4 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP4.overflows) != null ? _middlewareData$autoP3 : []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements[currentIndex + 1]; // There are more placements to check\n\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]);\n const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => {\n let {\n overflows\n } = _ref;\n return overflows.every(overflow => overflow <= 0);\n })) == null ? void 0 : _placementsSortedByLe.placement;\n const resetPlacement = placementThatFitsOnAllSides != null ? placementThatFitsOnAllSides : placementsSortedByLeastOverflow[0].placement;\n\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n\n return {};\n }\n\n };\n};\n\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\n/**\n * Changes the placement of the floating element to one that will fit if the\n * initially specified `placement` does not.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'flip',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$flip;\n\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = middlewareArguments;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n flipAlignment = true,\n ...detectOverflowOptions\n } = options;\n const side = getSide(placement);\n const isBasePlacement = side === initialPlacement;\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n\n if (checkCrossAxis) {\n const {\n main,\n cross\n } = getAlignmentSides(placement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n overflows.push(overflow[main], overflow[cross]);\n }\n\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }]; // One or more sides is overflowing\n\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip$, _middlewareData$flip2;\n\n const nextIndex = ((_middlewareData$flip$ = (_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) != null ? _middlewareData$flip$ : 0) + 1;\n const nextPlacement = placements[nextIndex];\n\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n let resetPlacement = 'bottom';\n\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$slice$;\n\n const placement = (_overflowsData$slice$ = overflowsData.slice().sort((a, b) => a.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0) - b.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0))[0]) == null ? void 0 : _overflowsData$slice$.placement;\n\n if (placement) {\n resetPlacement = placement;\n }\n\n break;\n }\n\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n\n return {};\n }\n\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (_temp) {\n let {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = _temp === void 0 ? {} : _temp;\n return {\n name: 'hide',\n\n async fn(middlewareArguments) {\n const {\n rects\n } = middlewareArguments;\n\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(middlewareArguments, { ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n\n case 'escaped':\n {\n const overflow = await detectOverflow(middlewareArguments, { ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n\n default:\n {\n return {};\n }\n }\n }\n\n };\n};\n\nfunction convertValueToCoords(placement, rects, value, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getMainAxisFromPlacement(placement) === 'x';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = typeof value === 'function' ? value({ ...rects,\n placement\n }) : value;\n const isNumber = typeof rawValue === 'number'; // eslint-disable-next-line prefer-const\n\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = isNumber ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n/**\n * Displaces the floating element from its reference element.\n * @see https://floating-ui.com/docs/offset\n */\n\nconst offset = function (value) {\n if (value === void 0) {\n value = 0;\n }\n\n return {\n name: 'offset',\n options: value,\n\n async fn(middlewareArguments) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements\n } = middlewareArguments;\n const diffCoords = convertValueToCoords(placement, rects, value, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords\n };\n }\n\n };\n};\n\nfunction getCrossAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\n/**\n * Shifts the floating element in order to keep it in view when it will overflow\n * a clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'shift',\n options,\n\n async fn(middlewareArguments) {\n const {\n x,\n y,\n placement\n } = middlewareArguments;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = options;\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const mainAxis = getMainAxisFromPlacement(getSide(placement));\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = within(min, mainAxisCoord, max);\n }\n\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = within(min, crossAxisCoord, max);\n }\n\n const limitedCoords = limiter.fn({ ...middlewareArguments,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return { ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n\n };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n options,\n\n fn(middlewareArguments) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = middlewareArguments;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = options;\n const coords = {\n x,\n y\n };\n const mainAxis = getMainAxisFromPlacement(placement);\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = typeof offset === 'function' ? offset({ ...rects,\n placement\n }) : offset;\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2, _middlewareData$offse3, _middlewareData$offse4;\n\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? (_middlewareData$offse = (_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) != null ? _middlewareData$offse : 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : (_middlewareData$offse3 = (_middlewareData$offse4 = middlewareData.offset) == null ? void 0 : _middlewareData$offse4[crossAxis]) != null ? _middlewareData$offse3 : 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n\n };\n};\n\n/**\n * Provides data to change the size of the floating element. For instance,\n * prevent it from overflowing its clipping boundary or match the width of the\n * reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'size',\n options,\n\n async fn(middlewareArguments) {\n const {\n placement,\n rects,\n platform,\n elements\n } = middlewareArguments;\n const {\n apply,\n ...detectOverflowOptions\n } = options;\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n let heightSide;\n let widthSide;\n\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n const dimensions = {\n height: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]),\n width: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide])\n };\n const prevDimensions = await platform.getDimensions(elements.floating);\n apply == null ? void 0 : apply({ ...dimensions,\n ...rects\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n\n if (prevDimensions.width !== nextDimensions.width || prevDimensions.height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n\n return {};\n }\n\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'inline',\n options,\n\n async fn(middlewareArguments) {\n var _await$platform$getCl;\n\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = middlewareArguments; // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n\n const {\n padding = 2,\n x,\n y\n } = options;\n const fallback = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect: rects.reference,\n offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),\n strategy\n }) : rects.reference);\n const clientRects = (_await$platform$getCl = await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) != null ? _await$platform$getCl : [];\n const paddingObject = getSideObjectFromPadding(padding);\n\n function getBoundingClientRect() {\n // There are two rects and they are disjoined\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n var _clientRects$find;\n\n // Find the first rect in which the point is fully inside\n return (_clientRects$find = clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom)) != null ? _clientRects$find : fallback;\n } // There are 2 or more connected rects\n\n\n if (clientRects.length >= 2) {\n if (getMainAxisFromPlacement(placement) === 'x') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n\n return fallback;\n }\n\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n\n return {};\n }\n\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction isWindow(value) {\n return value && value.document && value.location && value.alert && value.setInterval;\n}\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (!isWindow(node)) {\n const ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\nfunction getComputedStyle$1(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction getNodeName(node) {\n return isWindow(node) ? '' : node ? (node.nodeName || '').toLowerCase() : '';\n}\n\nfunction isHTMLElement(value) {\n return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n return value instanceof getWindow(value).Element;\n}\nfunction isNode(value) {\n return value instanceof getWindow(value).Node;\n}\nfunction isShadowRoot(node) {\n const OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n const {\n overflow,\n overflowX,\n overflowY\n } = getComputedStyle$1(element);\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n // TODO: Try and use feature detection here instead\n const isFirefox = navigator.userAgent.toLowerCase().includes('firefox');\n const css = getComputedStyle$1(element); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n return css.transform !== 'none' || css.perspective !== 'none' || // @ts-ignore (TS 4.1 compat)\n css.contain === 'paint' || ['transform', 'perspective'].includes(css.willChange) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false);\n}\nfunction isLayoutViewport() {\n // Not Safari\n return !/^((?!chrome|android).)*safari/i.test(navigator.userAgent); // Feature detection for this fails in various ways\n // • Always-visible scrollbar or not\n // • Width of <html>, etc.\n // const vV = win.visualViewport;\n // return vV ? Math.abs(win.innerWidth / vV.scale - vV.width) < 0.5 : true;\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n var _win$visualViewport$o, _win$visualViewport, _win$visualViewport$o2, _win$visualViewport2;\n\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n const clientRect = element.getBoundingClientRect();\n let scaleX = 1;\n let scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n const win = isElement(element) ? getWindow(element) : window;\n const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n const x = (clientRect.left + (addVisualOffsets ? (_win$visualViewport$o = (_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) != null ? _win$visualViewport$o : 0 : 0)) / scaleX;\n const y = (clientRect.top + (addVisualOffsets ? (_win$visualViewport$o2 = (_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) != null ? _win$visualViewport$o2 : 0 : 0)) / scaleY;\n const width = clientRect.width / scaleX;\n const height = clientRect.height / scaleY;\n return {\n width,\n height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x,\n y\n };\n}\n\nfunction getDocumentElement(node) {\n return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\nfunction isScaled(element) {\n const rect = getBoundingClientRect(element);\n return round(rect.width) !== element.offsetWidth || round(rect.height) !== element.offsetHeight;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(element, // @ts-ignore - checked above (TS 4.1 compat)\n isOffsetParentAnElement && isScaled(offsetParent), strategy === 'fixed');\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // @ts-ignore\n node.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n node.parentNode || ( // DOM Element detected\n isShadowRoot(node) ? node.host : null) || // ShadowRoot detected\n getDocumentElement(node) // fallback\n\n );\n}\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n}\n\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && !['html', 'body'].includes(getNodeName(currentNode))) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n const window = getWindow(element);\n let offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getDimensions(element) {\n if (isHTMLElement(element)) {\n return {\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n }\n\n const rect = getBoundingClientRect(element);\n return {\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n\n if (offsetParent === documentElement) {\n return rect;\n }\n\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } // This doesn't appear to be need to be negated.\n // else if (documentElement) {\n // offsets.x = getWindowScrollBarX(documentElement);\n // }\n\n }\n\n return { ...rect,\n x: rect.x - scroll.scrollLeft + offsets.x,\n y: rect.y - scroll.scrollTop + offsets.y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n const width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n const height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n\n if (getComputedStyle$1(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n\n if (['html', 'body', '#document'].includes(getNodeName(parentNode))) {\n // @ts-ignore assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n\n return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n var _node$ownerDocument;\n\n if (list === void 0) {\n list = [];\n }\n\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n const win = getWindow(scrollableAncestor);\n const target = isBody ? [win].concat(win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []) : scrollableAncestor;\n const updatedList = list.concat(target);\n return isBody ? updatedList : // @ts-ignore: isBody tells us target will be an HTMLElement here\n updatedList.concat(getOverflowAncestors(target));\n}\n\nfunction contains(parent, child) {\n const rootNode = child == null ? void 0 : child.getRootNode == null ? void 0 : child.getRootNode(); // First, attempt with faster native method\n\n if (parent != null && parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n\n do {\n // use `===` replace node.isSameNode()\n if (next && parent === next) {\n return true;\n } // @ts-ignore: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n }\n\n return false;\n}\n\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, false, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n return {\n top,\n left,\n x: left,\n y: top,\n right: left + element.clientWidth,\n bottom: top + element.clientHeight,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getClientRectFromClippingAncestor(element, clippingParent, strategy) {\n if (clippingParent === 'viewport') {\n return rectToClientRect(getViewportRect(element, strategy));\n }\n\n if (isElement(clippingParent)) {\n return getInnerBoundingClientRect(clippingParent, strategy);\n }\n\n return rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping ancestor\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingAncestors(element) {\n const clippingAncestors = getOverflowAncestors(element);\n const canEscapeClipping = ['absolute', 'fixed'].includes(getComputedStyle$1(element).position);\n const clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // @ts-ignore isElement check ensures we return Array<Element>\n\n\n return clippingAncestors.filter(clippingAncestors => isElement(clippingAncestors) && contains(clippingAncestors, clipperElement) && getNodeName(clippingAncestors) !== 'body');\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors\n\n\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const mainClippingAncestors = boundary === 'clippingAncestors' ? getClippingAncestors(element) : [].concat(boundary);\n const clippingAncestors = [...mainClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nconst platform = {\n getClippingRect,\n convertOffsetParentRelativeRectToViewportRelativeRect,\n isElement,\n getDimensions,\n getOffsetParent,\n getDocumentElement,\n getElementRects: _ref => {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n return {\n reference: getRectRelativeToOffsetParent(reference, getOffsetParent(floating), strategy),\n floating: { ...getDimensions(floating),\n x: 0,\n y: 0\n }\n };\n },\n getClientRects: element => Array.from(element.getClientRects()),\n isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n\n const {\n ancestorScroll: _ancestorScroll = true,\n ancestorResize: _ancestorResize = true,\n elementResize: _elementResize = true,\n animationFrame = false\n } = options;\n let cleanedUp = false;\n const ancestorScroll = _ancestorScroll && !animationFrame;\n const ancestorResize = _ancestorResize && !animationFrame;\n const elementResize = _elementResize && !animationFrame;\n const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n let observer = null;\n\n if (elementResize) {\n observer = new ResizeObserver(update);\n isElement(reference) && observer.observe(reference);\n observer.observe(floating);\n }\n\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n\n if (animationFrame) {\n frameLoop();\n }\n\n function frameLoop() {\n if (cleanedUp) {\n return;\n }\n\n const nextRefRect = getBoundingClientRect(reference);\n\n if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n update();\n }\n\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n\n return () => {\n var _observer;\n\n cleanedUp = true;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n (_observer = observer) == null ? void 0 : _observer.disconnect();\n observer = null;\n\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\n\nconst computePosition = (reference, floating, options) => computePosition$1(reference, floating, {\n platform,\n ...options\n});\n\nexport { autoUpdate, computePosition, getOverflowAncestors };\n","function getTokens(element: Element, attr: string) {\n const value = element.getAttribute(attr)\n return value ? value.split(/\\s+/) : []\n}\n\nfunction setTokens(element: Element, attr: string, tokens: string[]) {\n element.setAttribute(attr, tokens.join(\" \"))\n}\n\n/**\n * Carefully adds a token to a space-separated attribute\n * Similar to classList, but for any attribute.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/add\n */\nexport function add(element: Element, attr: string, token: string) {\n const tokens = getTokens(element, attr)\n\n if (!tokens.includes(token)) {\n setTokens(element, attr, tokens.concat(token))\n }\n}\n\n/**\n * Carefully removes a token from a space-separated attribute.\n * Similar to classList, but for any attribute.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/remove\n */\nexport function remove(element: Element, attr: string, token: string) {\n const tokens = getTokens(element, attr)\n\n if (tokens.includes(token)) {\n setTokens(\n element,\n attr,\n tokens.filter(t => t !== token)\n )\n }\n}\n","type MemberUnion<T> = T extends any ? keyof T : never\n\nexport function fsm<TStates extends keyof TTransitions, TTransitions extends Record<TStates, Record<string, TStates>>>(\n config: TTransitions\n) {\n return {\n transition(currentState: TStates, event: MemberUnion<TTransitions[TStates]>) {\n const nextState = config[currentState][event]\n return nextState || currentState\n },\n }\n}\n\nexport type Machine = ReturnType<typeof fsm>\n\nexport type States<T extends Machine | Machine[\"transition\"]> = T extends Machine\n ? Parameters<T[\"transition\"]>[0]\n : T extends Machine[\"transition\"]\n ? Parameters<T>[0]\n : never\n","import { Side, Placement, Alignment } from \"@floating-ui/dom\"\n\ntype FullPlacement = Exclude<Placement, Side>\ntype LogicalSide = \"block-end\" | \"block-start\" | \"inline-start\" | \"inline-end\"\ntype LogicalSideAlign = `${LogicalSide}-${Alignment}`\ntype Direction = \"ltr\" | \"rtl\"\n\nconst logicalMapLTR: Record<LogicalSideAlign, FullPlacement> = {\n \"inline-start-start\": \"left-start\",\n \"inline-start-end\": \"left-end\",\n \"inline-end-start\": \"right-start\",\n \"inline-end-end\": \"right-end\",\n \"block-start-start\": \"top-start\",\n \"block-start-end\": \"top-end\",\n \"block-end-start\": \"bottom-start\",\n \"block-end-end\": \"bottom-end\",\n}\n\nconst logicalMapRTL: Record<LogicalSideAlign, FullPlacement> = {\n \"inline-start-start\": \"right-start\",\n \"inline-start-end\": \"right-end\",\n \"inline-end-start\": \"left-start\",\n \"inline-end-end\": \"left-end\",\n \"block-start-start\": \"top-start\",\n \"block-start-end\": \"top-end\",\n \"block-end-start\": \"bottom-start\",\n \"block-end-end\": \"bottom-end\",\n}\n\nconst logicalMap: Record<LogicalSide, Side> = {\n \"block-end\": \"bottom\",\n \"block-start\": \"top\",\n \"inline-start\": \"left\",\n \"inline-end\": \"right\",\n}\n\n/**\n * Converts a single logical position to a physical position\n */\nexport function logicalToPhysical(logicalSide: LogicalSide): Side\n\n/**\n * Converts a logical side and alignment to floating-ui compatible placement\n */\nexport function logicalToPhysical(logicalSide: LogicalSide, alignment: Alignment, dir: Direction): Placement\n\nexport function logicalToPhysical(logicalSide: LogicalSide, alignment?: Alignment, dir?: Direction) {\n if (alignment != null && dir != null) {\n const logicalSideAlign: LogicalSideAlign = `${logicalSide}-${alignment}`\n return dir === \"ltr\" ? logicalMapLTR[logicalSideAlign] : logicalMapRTL[logicalSideAlign]\n }\n\n return logicalMap[logicalSide]\n}\n","import { LitElement, html, PropertyValues } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { computePosition, flip, shift, offset } from \"@floating-ui/dom\"\n\nimport * as attr from \"../common/attribute.js\"\nimport type { FocusableMixinInterface } from \"../common/mixins/FocusableMixin.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Tooltip.css\"\nimport { EventController } from \"../common/controllers/EventController.js\"\nimport { States, fsm } from \"../common/fsm.js\"\nimport { logicalToPhysical } from \"../common/positioning.js\"\n\n// @ts-expect-error we're being naughty and accessing a protected field!\n// however this means we always get the correct types,\n// and it will ensure this file is not forgotten about if focusable mixin ever changes\ntype FocusableElement = HTMLElement & Pick<FocusableMixinInterface, \"focusableRef\">\n\nfunction isElement(el: Node): el is Element {\n return el.nodeType === Node.ELEMENT_NODE\n}\n\nfunction referencesTooltip(node: Node, tooltip: Tooltip) {\n return Boolean(tooltip.id) && isElement(node) && node.getAttribute(\"aria-describedby\") === tooltip.id\n}\n\nconst { transition } = fsm({\n hidden: {\n show: \"waiting\",\n },\n visible: {\n hide: \"hidden\",\n reposition: \"positioning\",\n show: \"positioning\",\n },\n waiting: {\n timeout: \"positioning\",\n hide: \"hidden\",\n },\n positioning: {\n positioned: \"visible\",\n hide: \"hidden\",\n },\n})\n\ntype TooltipStates = States<typeof transition>\n\n/**\n * Tooltips are floating containers for displaying additional information\n * for the currently focused element. A tooltip can be useful when you want\n * to e.g. give a hint about an existing Command Menu shortcut.\n *\n * @status ready\n * @category overlay\n * @slot - The tooltip content\n * @slot shortcut - Optional slot that holds shortcut keys to access the subject\n */\n@customElement(\"nord-tooltip\")\nexport default class Tooltip extends LitElement {\n static styles = [componentStyle, style]\n\n // tracks the last tooltip opened, so we can enforce only one is ever open at a time\n static lastOpened?: Tooltip\n\n private shortcutSlot = new SlotController(this, \"shortcut\")\n private events = new EventController(this)\n\n // The current element which revealed the tooltip shown\n private currentElement?: FocusableElement\n private timeoutId?: ReturnType<typeof setTimeout>\n\n /**\n * the proxy element is for cases where the targetElement is a web component,\n * and the WC has a focusable child in its shadow root e.g. a button component.\n * in this case, when the tooltip is shown, we inject the proxy into targetElement's shadow root\n * and wire up aria-describedby from the focusable element to the proxy.\n * when the tooltip is hidden, we remove the proxy and remove the aria-describedby relationship.\n */\n private proxy = document.createElement(\"span\")\n\n /**\n * The current state of the tooltip, dependent on the state machine\n */\n @state() private state: TooltipStates = \"hidden\"\n\n // The current coordinates for the tooltip\n private coords: [number, number] = [0, 0]\n\n /**\n * Control the position of the tooltip component.\n * When set to \"none\", the tooltip will be shown above\n * but accommodate for browser boundaries.\n */\n @property({ reflect: true }) position: \"block-end\" | \"block-start\" | \"inline-start\" | \"inline-end\" = \"block-start\"\n\n /**\n * The tooltip role, set on the component by default.\n */\n @property({ reflect: true }) role = \"tooltip\"\n\n /**\n * The id for the active element to reference via aria-describedby.\n */\n @property({ reflect: true }) id: string = \"\"\n\n /**\n * The delay in milliseconds before the tooltip is opened.\n */\n @property({ reflect: true, type: Number }) delay: number = 500\n\n /**\n * Apply all event listeners\n */\n connectedCallback() {\n super.connectedCallback()\n\n const rootNode = this.getRootNode() as Document\n\n this.events.listen(rootNode, \"keydown\", this.hideOnEscape)\n\n // we treat mouseover and focusin the same, since they both show tooltip\n this.events.listen(rootNode, \"mouseover\", this.handleShow)\n this.events.listen(rootNode, \"focusin\", this.handleShow)\n\n // we treat focusout, mouseout, click the same, since they all hide tooltip\n this.events.listen(rootNode, \"mouseout\", this.handleHide)\n this.events.listen(rootNode, \"focusout\", this.handleHide)\n this.events.listen(rootNode, \"click\", this.handleHide)\n\n this.events.listen(window, \"resize\", this.reposition, { passive: true })\n this.events.listen(window, \"scroll\", this.reposition, { passive: true })\n }\n\n /**\n * Check if the tooltip has an id, warn them if not\n */\n willUpdate(changedProperties: PropertyValues) {\n if (changedProperties.has(\"id\") && !this.id) {\n // eslint-disable-next-line no-console\n console.warn(\"NORD: The tooltip requires an id attribute and value\")\n }\n\n if (changedProperties.has(\"state\")) {\n this.handleTransition(changedProperties.get(\"state\"))\n }\n }\n\n render() {\n return html`\n <div class=\"n-tooltip\">\n <slot></slot>\n <div class=\"n-tooltip-shortcut\" ?hidden=${this.shortcutSlot.isEmpty}>\n <slot class=\"n-tooltip-key\" name=\"shortcut\"></slot>\n </div>\n </div>\n `\n }\n\n private handleTransition(prevState: TooltipStates) {\n switch (this.state) {\n case \"hidden\": {\n if (prevState === \"waiting\" && this.timeoutId) {\n clearTimeout(this.timeoutId)\n }\n\n this.removeDescribedBy()\n this.currentElement = undefined\n this.style.visibility = \"hidden\"\n this.style.opacity = \"0\"\n break\n }\n\n case \"visible\": {\n this.timeoutId = undefined\n Tooltip.lastOpened = this\n this.addDescribedBy()\n\n const [x, y] = this.coords\n\n // use physical properties here since floating-ui\n // works exclusively in physical dimensions\n // we do all the mapping in logicalToPhysical\n this.style.left = `${x}px`\n this.style.top = `${y}px`\n this.style.visibility = \"visible\"\n this.style.opacity = \"1\"\n break\n }\n\n case \"waiting\": {\n this.timeoutId = setTimeout(() => {\n this.state = transition(this.state, \"timeout\")\n }, this.delay)\n break\n }\n\n case \"positioning\": {\n if (Tooltip.lastOpened !== this) {\n Tooltip.lastOpened?.hideTooltip()\n }\n\n if (this.currentElement) {\n this.updatePosition(this.currentElement)\n }\n break\n }\n }\n }\n\n /**\n * Setting and updating the position of the tooltip\n */\n private updatePosition = (currentElement: HTMLElement) =>\n computePosition(currentElement, this, {\n strategy: \"fixed\",\n placement: logicalToPhysical(this.position),\n middleware: [\n shift({\n padding: 8,\n }),\n offset(8),\n flip(),\n ],\n }).then(({ x, y }) => {\n this.coords = [x, y]\n this.state = transition(this.state, \"positioned\")\n })\n\n private hideTooltip = () => {\n this.state = transition(this.state, \"hide\")\n }\n\n private reposition = () => {\n this.state = transition(this.state, \"reposition\")\n }\n\n private handleShow = (e: Event) => {\n const target = e.target as FocusableElement\n\n if (referencesTooltip(target, this)) {\n this.currentElement = target\n this.state = transition(this.state, \"show\")\n }\n }\n\n private handleHide = (e: Event) => {\n if (e.target === this.currentElement) {\n this.hideTooltip()\n }\n }\n\n private hideOnEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n this.hideTooltip()\n }\n }\n\n private addDescribedBy = () => {\n const focusable = this.currentElement?.focusableRef?.value\n\n if (focusable) {\n this.proxy.hidden = true\n this.proxy.id = this.id\n this.proxy.textContent = this.textContent\n\n focusable.insertAdjacentElement(\"afterend\", this.proxy)\n attr.add(focusable, \"aria-describedby\", this.id)\n }\n }\n\n private removeDescribedBy = () => {\n const focusable = this.currentElement?.focusableRef?.value\n\n if (focusable) {\n this.proxy.remove()\n attr.remove(focusable, \"aria-describedby\", this.id)\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-tooltip\": Tooltip\n }\n}\n","import { html, LitElement } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Fieldset.css\"\n\n/**\n * Fieldset is used for grouping sets of input components.\n * It is necessary to use a fieldset with radio and checkbox components.\n * It can also be useful for logically grouping other types of inputs.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the fieldset.\n * @slot error - Optional slot that holds error text for the fieldset.\n */\n@customElement(\"nord-fieldset\")\nexport default class Fieldset extends LitElement {\n static styles = [componentStyle, formFieldStyle, style]\n\n private errorSlot = new SlotController(this, \"error\")\n private hintSlot = new SlotController(this, \"hint\")\n\n /**\n * Label for the fieldset.\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 * Optional error to be shown with the fieldset. Alternatively use the error slot.\n */\n @property() error?: string\n\n render() {\n const { hasError } = this\n\n return html`\n <fieldset\n aria-invalid=${ifDefined(hasError ? \"true\" : undefined)}\n aria-describedby=${ifDefined(hasError ? \"error\" : undefined)}\n >\n <legend class=\"n-label-container\">\n <slot class=\"n-label\" name=\"label\">${this.label}</slot>\n\n <div class=\"n-caption n-hint\" ?hidden=${!this.hasHint}>\n <slot name=\"hint\">${this.hint}</slot>\n </div>\n </legend>\n\n <slot></slot>\n\n <div class=\"n-caption n-error\" id=\"error\" role=\"alert\" ?hidden=${!this.hasError}>\n <slot name=\"error\">${this.error}</slot>\n </div>\n </fieldset>\n `\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\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-fieldset\": Fieldset\n }\n}\n","import { nothing, ReactiveControllerHost } from \"lit\"\nimport { LightDomController } from \"./LightDomController.js\"\nimport { SlotController } from \"./SlotController.js\"\n\ntype LightSlotOptions = {\n slotName: string\n render: () => unknown\n syncLightDom: (element: Element) => void\n}\n\n/**\n * Handles cases where a component needs to render to light DOM,\n * and potentially sync component properties to user-supplied content.\n */\nexport class LightSlotController extends SlotController {\n private renderHook: Comment\n private lightDom: LightDomController\n\n constructor(host: ReactiveControllerHost & HTMLElement, private options: LightSlotOptions) {\n super(host, options.slotName)\n this.options = options\n\n // we need a node to hook onto for rendering\n // without this, multiple controllers rendering to the light DOM\n // will overwrite each others' content\n this.renderHook = document.createComment(this.slotName)\n\n this.lightDom = new LightDomController(host, {\n render: () => (this.hasContent ? nothing : this.options.render()),\n renderOptions: { renderBefore: this.renderHook },\n })\n }\n\n hostConnected() {\n super.hostConnected()\n this.host.appendChild(this.renderHook)\n this.syncLightDom()\n }\n\n hostDisconnected() {\n this.renderHook.remove()\n }\n\n protected override onChange = () => {\n this.syncLightDom()\n }\n\n private syncLightDom() {\n const node = this.content\n\n if (node) {\n this.options.syncLightDom(node)\n }\n }\n}\n","import { html, LitElement, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { LightDomController } from \"../common/controllers/LightDomController.js\"\nimport { LightSlotController } from \"../common/controllers/LightSlotController.js\"\nimport { wrapIf } from \"../common/directives/wrapIf.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Radio.css\"\n\nlet id = 0\nconst createId = (suffix: string) => `nord-radio-${suffix}-${id++}`\n\nfunction isLabel(element: Element): element is HTMLLabelElement {\n return element.localName === \"label\"\n}\n\n/**\n * Radio buttons are graphical user interface elements that allow user to choose only one option from\n * a predefined set of mutually exclusive options.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the input.\n * @slot error - Optional slot that holds error text for the input.\n */\n@customElement(\"nord-radio\")\nexport default class Radio extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, style]\n\n protected override inputId = createId(\"input\")\n protected override hintId = createId(\"hint\")\n protected override errorId = createId(\"error\")\n\n /**\n * For accessibility reasons, we render some parts of the component to the light DOM.\n */\n protected override hintSlot = new LightSlotController(this, {\n slotName: \"hint\",\n render: () => (this.hint ? html`<div slot=\"hint-internal\" id=${this.hintId}>${this.hint}</div>` : nothing),\n syncLightDom: element => {\n element.id = this.hintId\n },\n })\n\n protected override labelSlot = new LightSlotController(this, {\n slotName: \"label\",\n render: () => (this.label ? html`<label slot=\"label-internal\" for=${this.inputId}>${this.label}</label>` : nothing),\n syncLightDom: element => {\n if (!isLabel(element)) {\n // eslint-disable-next-line no-console\n console.warn(`NORD: Only <label> elements should be placed in radio's \"label\" slot`)\n } else {\n element.htmlFor = this.inputId\n }\n },\n })\n\n protected override errorSlot = new LightSlotController(this, {\n slotName: \"error\",\n render: () => (this.error ? html`<div slot=\"error-internal\" id=${this.errorId}>${this.error}</div>` : nothing),\n syncLightDom: element => {\n element.id = this.hintId\n },\n })\n\n protected inputSlot = new LightDomController(this, {\n render: () =>\n html`\n <input\n slot=\"input\"\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n ${ref(this.focusableRef)}\n class=\"n-input\"\n id=${this.inputId}\n type=\"radio\"\n name=${ifDefined(this.name)}\n .value=${this.value}\n .checked=${this.checked}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n />\n `,\n })\n\n // eslint-disable-next-line class-methods-use-this\n protected override get formValue() {\n // opt out of formdata event, since radio button is in light dom\n return undefined\n }\n\n /**\n * Controls whether the checkbox is checked or not.\n */\n @property({ type: Boolean, reflect: true }) checked: boolean = false\n\n willUpdate(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has(\"checked\")) {\n const previousChecked = changedProperties.get(\"checked\")\n\n // if this component was previous unchecked but is now checked,\n // then we need to uncheck any radios in the same group\n if (!previousChecked && this.checked) {\n this.uncheckSiblings()\n }\n }\n }\n\n render() {\n return html`\n <div class=\"n-flex\">\n <div class=\"n-input-container\" @change=${this.handleChange}>\n <slot name=\"input\"></slot>\n ${this.checked ? html`<div class=\"n-dot\"></div>` : nothing}\n </div>\n <div class=\"n-expand\">\n <div class=\"n-label-container\">\n ${wrapIf(\n this.hideLabel,\n () => html`\n <slot name=\"label\"></slot>\n <slot name=\"label-internal\"></slot>\n `,\n content => html`<nord-visually-hidden>${content}</nord-visually-hidden>`\n )}\n <div class=\"n-caption n-hint\" ?hidden=${!this.hasHint}>\n <slot name=\"hint\"></slot>\n <slot name=\"hint-internal\"></slot>\n </div>\n </div>\n <div class=\"n-caption n-error\" role=\"alert\" ?hidden=${!this.hasError}>\n <slot name=\"error\"></slot>\n <slot name=\"error-internal\"></slot>\n </div>\n </div>\n </div>\n `\n }\n\n private uncheckSiblings() {\n const root = this.getRootNode() as Document | ShadowRoot\n\n root.querySelectorAll<Radio>(`nord-radio[name=\"${this.name}\"]`).forEach(radio => {\n if (radio !== this) {\n radio.checked = false\n }\n })\n }\n\n protected handleChange(e: Event): void {\n e.stopPropagation()\n const target = e.target as HTMLInputElement\n\n this.checked = target.checked\n super.handleChange(e)\n }\n\n private handleBlur = (e: Event) => {\n e.stopPropagation()\n this.dispatchEvent(new Event(\"blur\", { bubbles: false, cancelable: true }))\n }\n\n private handleFocus = (e: Event) => {\n e.stopPropagation()\n this.dispatchEvent(new Event(\"focus\", { bubbles: false, cancelable: true }))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-radio\": Radio\n }\n}\n","// some clever typing so that TS knows what happens if you pass true/false values\nexport function wrapIf<TInner, TWrapper>(\n condition: false,\n inner: () => TInner,\n wrapper: (inner: TInner) => TWrapper\n): TInner\nexport function wrapIf<TInner, TWrapper>(\n condition: true,\n inner: () => TInner,\n wrapper: (inner: TInner) => TWrapper\n): TWrapper\nexport function wrapIf<TInner, TWrapper>(\n condition: unknown,\n inner: () => TInner,\n wrapper: (inner: TInner) => TWrapper\n): TInner | TWrapper\n\n/**\n * @returns if condition is truthy, return result of wrapper, passing result of inner as arg. if falsy, return result of inner\n */\nexport function wrapIf<TInner, TWrapper>(condition: any, inner: () => TInner, wrapper: (innards: TInner) => TWrapper) {\n return condition ? wrapper(inner()) : inner()\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Header.css\"\n\n/**\n * The header is a block of designated space for labelling the currently\n * viewed context as well as providing primary actions.\n *\n * @status new\n * @category structure\n * @slot - The header content.\n * @slot end - Optional slot for buttons, toggles, etc.\n */\n@customElement(\"nord-header\")\nexport default class Header extends LitElement {\n static styles = [componentStyle, style]\n\n private endSlot = new SlotController(this, \"end\")\n\n render() {\n return html`\n <header class=\"n-header\">\n <slot></slot>\n <div class=\"n-header-end\" ?hidden=${this.endSlot.isEmpty}>\n <slot name=\"end\"></slot>\n </div>\n </header>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-header\": Header\n }\n}\n","import { LitElement } from \"lit\"\n\ntype Constructable<T = Record<string, unknown>> = new (...args: any[]) => T\n\nexport function DraftComponentMixin<T extends Constructable<LitElement>>(superClass: T) {\n class DraftComponent extends superClass {\n private static _warningLogged = false\n\n connectedCallback() {\n super.connectedCallback()\n\n if (process.env.NODE_ENV !== \"development\" && !DraftComponent._warningLogged) {\n // eslint-disable-next-line no-console\n console.warn(\n `NORD: %c${this.localName}%c should not be used in production, as it is in draft status.`,\n \"font-weight:bold\",\n \"font-weight:normal\"\n )\n DraftComponent._warningLogged = true\n }\n }\n }\n\n return DraftComponent as T\n}\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\nimport \"../icon/Icon.js\"\n\nimport style from \"./NavGroup.css\"\n\n/**\n * Navigation group includes all the actions or items in a single\n * group and is used for grouping items into related categories.\n *\n * @category navigation\n * @status draft\n * @slot - The default slot used for the nav items.\n */\n@customElement(\"nord-nav-group\")\nexport default class NavGroup extends DraftComponentMixin(LitElement) {\n static styles = style\n\n /**\n * Heading and accessible label for the nav group\n */\n @property() heading?: string\n\n render() {\n return html`\n ${this.heading ? html`<p id=\"heading\" aria-hidden=\"true\" class=\"n-heading\">${this.heading}</p>` : nothing}\n <div role=\"list\" aria-labelledby=${this.heading ? \"heading\" : nothing}>\n <slot></slot>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-nav-group\": NavGroup\n }\n}\n","import { LitElement, html, nothing, TemplateResult } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { DirectionController } from \"../common/controllers/DirectionController.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\n\nimport style from \"./NavItem.css\"\n\n/**\n * Navigation item populates sidebar navigation with links.\n * Every item should be placed inside a navigation group.\n *\n * @status draft\n * @category navigation\n * @slot - The default slot used for the nav item's text.\n * @slot subnav - Used for nesting navigation. When used the nav-item becomes a button to collapse the subnav, rather than a link.\n * @fires toggle - Dispatched whenever a nav item's state changes between open and closed.\n */\n@customElement(\"nord-nav-item\")\nexport default class NavItem extends FocusableMixin(DraftComponentMixin(LitElement)) {\n static styles = style\n\n private subnavSlot = new SlotController(this, \"subnav\")\n private direction = new DirectionController(this)\n\n /**\n * Used for indicating the current page. This gives a prominent background to the nav item,\n * and marks the item as the current page for assistive technology.\n */\n @property({ type: Boolean, reflect: true }) active = false\n\n /**\n * The name of an icon from Nordicons to display for the nav item.\n */\n @property() icon?: string\n\n /**\n * The url the nav item should link to.\n * Note: this is not used if you have nested navigation using the \"subnav\" slot.\n */\n @property() href?: string\n\n /**\n * Allows you to add a notification badge with a number next to the nav item.\n */\n @property() badge?: string\n\n /**\n * When the nav items contains a subnav, controls whether the section is expanded or not.\n * Note: this is only used if you have nested navigation using the \"subnav\" slot.\n */\n @property({ type: Boolean }) open = false\n\n connectedCallback() {\n super.connectedCallback()\n\n // in cases where there is nested nav, and one of the items is active\n // we should auto-open the nav item for developer convenience\n if (this.querySelector(`nord-nav-item[active]`)) {\n this.open = true\n }\n }\n\n render() {\n const innards = html`\n ${this.icon ? html`<nord-icon class=\"n-nav-icon\" name=${this.icon} size=\"m\"></nord-icon>` : nothing}\n <div class=\"n-content\">\n <slot></slot>\n </div>\n `\n let element: TemplateResult\n\n if (this.subnavSlot.hasContent) {\n element = this.renderToggle(innards)\n } else if (this.href) {\n element = this.renderLink(innards)\n } else {\n element = this.renderButton(innards)\n }\n\n return html`\n <div role=\"listitem\">\n ${element}\n <slot name=${this.subnavSlot.slotName} ?hidden=${!this.open}></slot>\n </div>\n `\n }\n\n private renderLink(innards: TemplateResult) {\n return html`\n <a\n class=\"n-nav-item\"\n ${ref(this.focusableRef)}\n aria-current=${ifDefined(this.active ? \"page\" : undefined)}\n href=${this.href || \"\"}\n >\n ${innards} ${this.badge ? html`<span class=\"n-nav-badge\">${this.badge}</span>` : nothing}\n </a>\n `\n }\n\n private renderToggle(innards: TemplateResult) {\n return html`\n <button\n class=\"n-nav-item\"\n @click=${this.toggleOpen}\n aria-expanded=${this.open ? \"true\" : \"false\"}\n ${ref(this.focusableRef)}\n >\n ${innards}\n\n <nord-icon\n size=\"xs\"\n class=${classMap({ \"n-toggle-icon\": true, \"n-rtl\": this.direction.isRTL })}\n name=\"arrow-expand-right-small\"\n ></nord-icon>\n </button>\n `\n }\n\n private renderButton(innards: TemplateResult) {\n return html`<button class=\"n-nav-item\" ${ref(this.focusableRef)}>\n ${innards} ${this.badge ? html`<span class=\"n-nav-badge\">${this.badge}</span>` : nothing}\n </button>`\n }\n\n private toggleOpen() {\n this.open = !this.open\n this.dispatchEvent(new NordEvent(\"toggle\"))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-nav-item\": NavItem\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\n\nimport style from \"./Navigation.css\"\n\n/**\n * Navigation is used to display the primary navigation in the sidebar\n * of an application. Navigation includes a list of links that users\n * use to move between sections of the application.\n *\n * @status draft\n * @category navigation\n * @slot - The main section of the sidebar, for holding nav components.\n * @slot header - The top section of the sidebar.\n * @slot footer - The bottom section of the sidebar.\n */\n@customElement(\"nord-navigation\")\nexport default class Navigation extends DraftComponentMixin(LitElement) {\n static styles = style\n\n render() {\n return html`\n <slot name=\"header\"></slot>\n <nav>\n <slot></slot>\n </nav>\n <slot name=\"footer\"></slot>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-navigation\": Navigation\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Layout.css\"\n\n/**\n * Layout component is used to create the main layout of an app. Layout\n * currently comes with one main configuration: two-column.\n *\n * @status draft\n * @category structure\n * @slot - The default main section content.\n * @slot nav - Used to place content inside the navigation sidebar.\n * @slot header - Used to place content inside the header section.\n */\n@customElement(\"nord-layout\")\nexport default class Layout extends DraftComponentMixin(LitElement) {\n static styles = [componentStyle, style]\n\n render() {\n return html`\n <div class=\"n-layout\">\n <div class=\"n-layout-nav\">\n <slot name=\"nav\"></slot>\n </div>\n <div class=\"n-layout-main\">\n <slot name=\"header\"></slot>\n <main>\n <slot></slot>\n </main>\n </div>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-layout\": Layout\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./EmptyState.css\"\n\n/**\n * Empty state can be used when there is no data to display to\n * describe what the user can do next. Empty state provides\n * explanation and guidance to help user progress.\n *\n * @status new\n * @category feedback\n * @slot - default slot\n */\n@customElement(\"nord-empty-state\")\nexport default class EmptyState extends LitElement {\n static styles = [componentStyle, style]\n\n render() {\n return html`<div class=\"n-empty-state\">\n <slot></slot>\n </div>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-empty-state\": EmptyState\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 70a63 63 0 1 0 126 0A63 63 0 1 0 7 70z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/><path fill=\"currentColor\" d=\"M59.5 101.5a10.5 10.5 0 1 0 21 0 10.5 10.5 0 1 0-21 0z\"/><path d=\"M70 70a17.5 17.5 0 1 0-14-28\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/></svg>'\nexport const title = \"interface-help-2\"\nexport const tags = \"nordicon interface help support question mark circle round\"\n","export default '<svg viewBox=\"0 0 36 36\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 9C18.9941 9 19.8 9.80589 19.8 10.8V18C19.8 18.9941 18.9941 19.8 18 19.8C17.0058 19.8 16.2 18.9941 16.2 18V10.8C16.2 9.80589 17.0058 9 18 9Z\" fill=\"currentColor\"/><path d=\"M15.3214 25.2C15.3214 25.9104 15.6036 26.5917 16.106 27.0941C16.6083 27.5964 17.2896 27.8786 18 27.8786C18.7105 27.8786 19.3918 27.5964 19.8941 27.0941C20.3965 26.5917 20.6787 25.9104 20.6787 25.2C20.6787 24.4896 20.3965 23.8083 19.8941 23.3059C19.3918 22.8036 18.7105 22.5214 18 22.5214C17.2896 22.5214 16.6083 22.8036 16.106 23.3059C15.6036 23.8083 15.3214 24.4896 15.3214 25.2Z\" fill=\"currentColor\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.3891 0.71328C16.1794 0.244619 17.0813 -0.00268555 18.0002 -0.00268555C18.919 -0.00268555 19.8209 0.244619 20.6113 0.71328C21.3993 1.18057 22.0474 1.85075 22.4881 2.65385L35.092 25.2668L35.0968 25.2753C35.7031 26.3771 36.0118 27.618 35.9924 28.8754C35.973 30.1329 35.6263 31.3636 34.9863 32.4462C34.3463 33.5288 33.4352 34.426 32.3428 35.0491C31.2505 35.6723 30.0146 36 28.757 35.9999C28.757 35.9999 28.757 35.9999 28.757 35.9999H7.23618C7.23611 35.9999 7.23626 35.9999 7.23618 35.9999C5.97993 35.9998 4.74519 35.6722 3.65409 35.0496C2.56299 34.427 1.65299 33.5308 1.01378 32.4493C0.374574 31.3678 0.0282382 30.1384 0.00891227 28.8823C-0.0104135 27.6262 0.297938 26.3868 0.90357 25.2862L0.90814 25.2779L13.5122 2.65398C13.9529 1.85082 14.601 1.1806 15.3891 0.71328ZM7.23641 32.3999H28.757C29.3889 32.4 30.0101 32.2353 30.559 31.9222C31.1079 31.609 31.5657 31.1582 31.8873 30.6142C32.2089 30.0703 32.3831 29.4518 32.3928 28.82C32.4026 28.1896 32.2482 27.5676 31.945 27.0149C31.9442 27.0136 31.9435 27.0123 31.9428 27.011L19.3403 4.40069L19.3332 4.38778C19.2024 4.14852 19.0096 3.94887 18.7751 3.80979C18.5405 3.67071 18.2729 3.59731 18.0002 3.59731C17.7275 3.59731 17.4599 3.67071 17.2253 3.80979C16.9908 3.94887 16.798 4.14852 16.6672 4.38778L16.6602 4.40037L4.0576 27.0217C4.05692 27.0229 4.05625 27.0242 4.05558 27.0254C3.75289 27.577 3.59881 28.1978 3.60849 28.827C3.61819 29.4575 3.79205 30.0747 4.11292 30.6175C4.4338 31.1604 4.89061 31.6103 5.43834 31.9229C5.986 32.2354 6.60586 32.3998 7.23641 32.3999C7.23648 32.3999 7.23633 32.3999 7.23641 32.3999Z\" fill=\"currentColor\"/></svg>\\n'\nexport const title = \"interface-warning\"\nexport const tags = \"nordicon interface warning exclamation mark triangle shape alert error\"\n","export default '<svg viewBox=\"0 0 36 36\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.27208 5.27208C8.64773 1.89642 13.2261 0 18 0C22.7739 0 27.3523 1.89642 30.7279 5.27208C34.1036 8.64773 36 13.2261 36 18C36 22.7739 34.1036 27.3523 30.7279 30.7279C27.3523 34.1036 22.7739 36 18 36C13.2261 36 8.64773 34.1036 5.27208 30.7279C1.89642 27.3523 0 22.7739 0 18C0 13.2261 1.89642 8.64773 5.27208 5.27208ZM18 3.6C14.1809 3.6 10.5182 5.11714 7.81766 7.81766C5.11714 10.5182 3.6 14.1809 3.6 18C3.6 21.8191 5.11714 25.4818 7.81766 28.1823C10.5182 30.8829 14.1809 32.4 18 32.4C21.8191 32.4 25.4818 30.8829 28.1823 28.1823C30.8829 25.4818 32.4 21.8191 32.4 18C32.4 14.1809 30.8829 10.5182 28.1823 7.81766C25.4818 5.11714 21.8191 3.6 18 3.6Z\" fill=\"currentColor\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 18C18.9941 18 19.8 18.8059 19.8 19.8V27C19.8 27.9941 18.9941 28.8 18 28.8C17.0058 28.8 16.2 27.9941 16.2 27V19.8C16.2 18.8059 17.0058 18 18 18Z\" fill=\"currentColor\"/><path d=\"M15.2795 10.7999C15.2795 11.5213 15.5661 12.2132 16.0763 12.7234C16.5864 13.2336 17.2784 13.5202 17.9998 13.5202C18.7213 13.5202 19.4132 13.2336 19.9234 12.7234C20.4335 12.2132 20.7201 11.5213 20.7201 10.7999C20.7201 10.0784 20.4335 9.38649 19.9234 8.87634C19.4132 8.36619 18.7213 8.07959 17.9998 8.07959C17.2784 8.07959 16.5864 8.36619 16.0763 8.87634C15.5661 9.38649 15.2795 10.0784 15.2795 10.7999Z\" fill=\"currentColor\"/></svg>\\n'\nexport const title = \"interface-info\"\nexport const tags = \"nordicon interface info circle round alert notice information\"\n","export default '<svg viewBox=\"0 0 36 36\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.67198 5.27208C9.04764 1.89642 13.626 0 18.3999 0C23.1738 0 27.7522 1.89642 31.1278 5.27208C34.5035 8.64773 36.3999 13.2261 36.3999 18C36.3999 22.7739 34.5035 27.3523 31.1278 30.7279C27.7522 34.1036 23.1738 36 18.3999 36C13.626 36 9.04764 34.1036 5.67198 30.7279C2.29633 27.3523 0.399902 22.7739 0.399902 18C0.399902 13.2261 2.29633 8.64773 5.67198 5.27208ZM18.3999 3.6C14.5808 3.6 10.9181 5.11714 8.21757 7.81766C5.51704 10.5182 3.9999 14.1809 3.9999 18C3.9999 21.8191 5.51704 25.4818 8.21757 28.1823C10.9181 30.8829 14.5808 32.4 18.3999 32.4C22.219 32.4 25.8817 30.8829 28.5822 28.1823C31.2828 25.4818 32.7999 21.8191 32.7999 18C32.7999 14.1809 31.2828 10.5182 28.5822 7.81766C25.8817 5.11714 22.219 3.6 18.3999 3.6Z\" fill=\"currentColor\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M27.0484 10.0907C27.8261 10.7099 27.9546 11.8423 27.3354 12.62L16.233 26.5642C15.8927 26.9915 15.3768 27.2412 14.8306 27.243C14.2843 27.2447 13.7669 26.9983 13.4239 26.5732L9.39039 21.5735C8.76619 20.7998 8.8874 19.6666 9.66112 19.0424C10.4348 18.4182 11.5681 18.5394 12.1923 19.3131L14.8156 22.5648L24.5191 10.3776C25.1383 9.59994 26.2707 9.47146 27.0484 10.0907Z\" fill=\"currentColor\"/></svg>\\n'\nexport const title = \"interface-checked-circle\"\nexport const tags = \"nordicon interface circle round checked checkmark ready done success\"\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport * as warningIcon from \"@nordhealth/icons/lib/assets/interface-help-2.js\"\nimport * as dangerIcon from \"@nordhealth/icons/lib/assets/interface-warning.js\"\nimport * as infoIcon from \"@nordhealth/icons/lib/assets/interface-info.js\"\nimport * as successIcon from \"@nordhealth/icons/lib/assets/interface-checked-circle.js\"\n\nimport Icon from \"../icon/Icon.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Banner.css\"\n\nIcon.registerIcon(warningIcon)\nIcon.registerIcon(dangerIcon)\nIcon.registerIcon(infoIcon)\nIcon.registerIcon(successIcon)\n\nconst iconMap = {\n warning: \"interface-help-2\",\n danger: \"interface-warning\",\n info: \"interface-info\",\n success: \"interface-checked-circle\",\n}\n\n/**\n * Banner informs users about important changes or conditions in the\n * interface. Use this component if you need to communicate to users\n * in a prominent way.\n *\n * @status new\n * @category feedback\n * @slot - default slot\n */\n@customElement(\"nord-banner\")\nexport default class Banner extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The style variant of the banner.\n */\n @property({ reflect: true }) variant: \"info\" | \"danger\" | \"success\" | \"warning\" = \"info\"\n\n render() {\n const icon = iconMap[this.variant] || iconMap.info\n\n return html`\n <div class=\"n-banner\" role=\"alert\">\n <nord-stack align-items=\"start\" direction=\"horizontal\">\n <nord-icon name=${icon} size=\"m\"></nord-icon>\n <div class=\"n-banner-content\">\n <slot></slot>\n </div>\n </nord-stack>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-banner\": Banner\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport { LitElement, html, PropertyValues, nothing } from \"lit\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { customElement, property, state } from \"lit/decorators.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Avatar.css\"\nimport { fsm, States } from \"../common/fsm.js\"\n\nconst { transition } = fsm({\n initial: {\n \"src-set\": \"loading\",\n },\n loading: {\n load: \"loaded\",\n error: \"initial\",\n \"src-clear\": \"initial\",\n },\n loaded: {\n \"src-set\": \"loading\",\n \"src-clear\": \"initial\",\n },\n})\n\n/**\n * Avatar is used for showing a thumbnail representation of a user or entity.\n * Default avatar illustration is displayed when no src is specified.\n *\n * @status new\n * @category image\n */\n@customElement(\"nord-avatar\")\nexport default class Avatar extends LitElement {\n static styles = [componentStyle, style]\n\n @state() private state: States<typeof transition> = \"initial\"\n\n /**\n * The size of the avatar.\n */\n @property({ reflect: true }) size: \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The URL of the avatar image uploaded by the user.\n */\n @property({ reflect: true }) src?: string\n\n /**\n * The name of the person.\n */\n @property() name: string = \"\"\n\n protected willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has(\"src\")) {\n const event = this.src ? \"src-set\" : \"src-clear\"\n this.state = transition(this.state, event)\n }\n }\n\n render() {\n return html`\n <div class=\"n-avatar\">\n ${this.state !== \"initial\" ? this.renderImage() : nothing}\n ${this.state !== \"loaded\" ? this.renderFallback() : nothing}\n </div>\n `\n }\n\n protected renderImage() {\n return this.src\n ? html`\n <img\n class=\"n-${this.state}\"\n src=${this.src}\n @load=${this.handleLoad}\n @error=${this.handleError}\n alt=${this.name || \"\"}\n />\n `\n : nothing\n }\n\n protected renderFallback() {\n return html`\n <svg\n aria-label=${this.name}\n role=${ifDefined(this.name ? \"img\" : undefined)}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 27 27\"\n >\n <rect fill=\"var(--n-color-status-info)\" height=\"27\" rx=\"12\" width=\"27\" x=\"0\" y=\"0\"></rect>\n <g fill=\"#fff\" opacity=\".5\">\n <circle cx=\"13.5\" cy=\"30\" r=\"13\"></circle>\n <circle cx=\"13.5\" cy=\"11\" r=\"5\"></circle>\n </g>\n </svg>\n `\n }\n\n private handleLoad() {\n this.state = transition(this.state, \"load\")\n }\n\n private handleError() {\n this.state = transition(this.state, \"error\")\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-avatar\": Avatar\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./ProgressBar.css\"\n\n/**\n * Progress Bar is used to visually represent the completion\n * of a task or process. It shows how much of the task has\n * been completed and how much is still left.\n *\n * @status new\n * @category feedback\n */\n@customElement(\"nord-progress-bar\")\nexport default class ProgressBar extends FocusableMixin(LitElement) {\n static styles = [componentStyle, style]\n\n /**\n * Specifies how much of the task has been completed. Must be a valid floating\n * point number between 0 and max, or between 0 and 100 if max is omitted. If\n * there is no value, the progress bar is indeterminate; this indicates that\n * an activity is ongoing with no indication of how long it’s expected to take.\n */\n @property({ reflect: true, type: Number }) value?: number\n\n /**\n * Describes how much work the task indicated by the progress element requires.\n * The max attribute, if present, must have a value greater than 0 and be a\n * valid floating point number.\n */\n @property({ reflect: true, type: Number }) max: number = 100\n\n /**\n * Accessible label for the progress indicator. Visually hidden, but shown\n * for assistive technology.\n */\n @property({ reflect: true }) label: string = \"Current progress\"\n\n render() {\n /**\n * The Aria properties are required for now due to a Chrome bug.\n * In the future we can probably get rid of them. For context:\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1310779\n */\n return html`<label>\n <nord-visually-hidden>${this.label}</nord-visually-hidden>\n <progress\n ${ref(this.focusableRef)}\n aria-valuenow=${ifDefined(this.value)}\n aria-valuemin=\"0\"\n aria-valuemax=${this.max}\n tabindex=\"-1\"\n max=${this.max}\n value=${ifDefined(this.value)}\n ></progress>\n </label>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-progress-bar\": ProgressBar\n }\n}\n","import { LitElement, html, PropertyValues } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { computePosition, shift, offset, flip, hide, autoUpdate, Placement } from \"@floating-ui/dom\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { NordEvent } from \"../common/events.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Popout.css\"\nimport { logicalToPhysical } from \"../common/positioning.js\"\nimport { DirectionController } from \"../common/controllers/DirectionController.js\"\n\n/**\n * Popouts are small overlays that open on demand. They let users access additional content and actions without cluttering the page.\n *\n * @status new\n * @category overlay\n * @slot - The popout content.\n */\n@customElement(\"nord-popout\")\nexport default class Popout extends LitElement {\n static styles = [componentStyle, style]\n\n private targetElement!: HTMLElement\n private cleanupAutoUpdate?: ReturnType<typeof autoUpdate>\n\n /**\n * Handle dismissal of the popout, clicking outside the target button and popout.\n */\n private dismiss = new LightDismissController(this, {\n isOpen: () => this.open,\n onDismiss: e => this.hide(e.type !== \"click\"),\n isDismissible: node => node !== this && node !== this.targetElement,\n })\n\n private direction = new DirectionController(this)\n\n @state() private open = false\n\n @state() private computedPosition?: Placement\n\n /**\n * Set the alignment of the popout in relation to the toggle depending on the position.\n * `start` will align the left of the popout to the left of the toggle.\n * `end` will align the right of the popout to the right of the toggle.\n * A popout with a set position of `inline-start` or `inline-end` will switch\n * `start` and `end` to the top and bottom of the popout respectively.\n */\n @property({ reflect: true }) align: \"start\" | \"end\" = \"start\"\n\n /**\n * Set the position of the popout in relation to the toggle.\n * Options follow logical properties.\n * `block-start` and `block-end` referring to top and bottom respectively,\n * `inline-start` and `inline-end` referring to left and right respectively.\n */\n @property({ reflect: true }) position: \"block-end\" | \"block-start\" | \"inline-start\" | \"inline-end\" = \"block-end\"\n\n /**\n * The id for the active element to reference via aria-controls.\n */\n @property({ reflect: true }) id: string = \"\"\n\n /**\n * Show the popout, moving focus to the calendar inside.\n */\n show() {\n if (this.open) {\n return\n }\n\n this.open = true\n this.cleanupAutoUpdate = autoUpdate(this.targetElement, this, this.updatePosition)\n\n // we should only focus once the popout is visible after render is complete\n this.updateComplete.then(() => {\n /**\n * Dispatched when the popout is opened.\n */\n this.dispatchEvent(new NordEvent(\"open\"))\n })\n }\n\n /**\n * Hide the popout.\n * @param {boolean} moveFocusToButton prevent focus returning to the target\n * button. Default is true.\n */\n hide(moveFocusToButton = true) {\n if (!this.open) {\n return\n }\n\n this.open = false\n this.cleanupAutoUpdate?.()\n\n /**\n * Dispatched when the popout is closed.\n */\n this.dispatchEvent(new NordEvent(\"close\"))\n\n if (moveFocusToButton) {\n this.targetElement.focus({ preventScroll: true })\n }\n }\n\n /**\n * Position the popout on load.\n */\n firstUpdated() {\n this.updatePosition()\n }\n\n /**\n * Check if the popout has an id, warn them if not\n */\n willUpdate(changedProperties: PropertyValues<this>) {\n if (changedProperties.has(\"id\") && !this.id) {\n // eslint-disable-next-line no-console\n console.warn(\"The popout requires an id attribute and value\")\n }\n\n this.targetElement.setAttribute(\"aria-expanded\", `${this.open}`)\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.targetElement = this.getToggle()\n this.targetElement.addEventListener(\"click\", this.toggleOpen)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n\n this.cleanupAutoUpdate?.()\n this.targetElement.removeAttribute(\"aria-expanded\")\n this.targetElement.removeEventListener(\"click\", this.toggleOpen)\n }\n\n render() {\n return html`\n <div\n class=\"n-popout ${this.computedPosition} is-${this.direction.dir}\"\n aria-hidden=${this.open ? \"false\" : \"true\"}\n >\n <slot></slot>\n </div>\n `\n }\n\n /**\n * Get the position of the element toggling the popout\n * and position the popout underneath it, taking into account the optional placement.\n */\n private updatePosition = async () => {\n const { x, y, placement, middlewareData } = await computePosition(this.targetElement, this, {\n strategy: \"fixed\",\n placement: logicalToPhysical(this.position, this.align, this.direction.dir),\n middleware: [\n shift({\n padding: 8,\n }),\n offset(8),\n flip(),\n hide(),\n ],\n })\n\n this.computedPosition = placement\n\n // use physical properties here since floating-ui\n // works exclusively in physical dimensions\n // we do all the mapping in logicalToPhysical\n this.style.left = `${x}px`\n this.style.top = `${y}px`\n\n if (middlewareData.hide?.referenceHidden) {\n this.hide()\n }\n }\n\n /**\n * Toggle the popout open or closed using state.\n * Updating the position to underneath the target button before the popout is opened.\n */\n private toggleOpen = (e: Event) => {\n e.preventDefault()\n if (this.open) {\n this.hide(false)\n } else {\n this.updatePosition().then(() => this.show())\n }\n }\n\n private getToggle() {\n const rootNode = this.getRootNode() as Document | ShadowRoot\n const toggle = <HTMLElement>rootNode.querySelector(`[aria-controls='${this.id}']`)\n\n if (toggle instanceof HTMLSlotElement) {\n return toggle.assignedElements()[0] as HTMLElement\n }\n\n return toggle\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-popout\": Popout\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property, query } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\n\nimport Popout from \"../popout/Popout.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Dropdown.css\"\n\n/**\n * Dropdown menu displays a list of actions or selectable options for\n * a user. Dropdown uses popout component internally to create\n * the overlay functionality.\n *\n * @status new\n * @category action\n * @slot - The dropdown content.\n * @slot toggle - Used to place the toggle for dropdown.\n */\n@customElement(\"nord-dropdown\")\nexport default class Dropdown extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * we delegate focus, to ensure focus does not move to body if you click\n * some whitespace or a dropdown-group heading, as this would close the dropdown\n * @internal\n */\n static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n\n @query(\"nord-popout\", true) private popout!: Popout\n\n /**\n * Set the alignment of the dropdown in relation to the toggle depending on the position.\n * `start` will align the left of the dropdown to the left of the toggle.\n * `end` will align the right of the dropdown to the right of the toggle.\n * A dropdown with a set position of `inline-start` or `inline-end` will switch\n * `start` and `end` to the top and bottom of the dropdown respectively.\n */\n @property({ reflect: true }) align?: Popout[\"align\"]\n\n /**\n * Set the position of the dropdown in relation to the toggle.\n * Options follow logical properties.\n * `block-start` and `block-end` referring to top and bottom respectively,\n * `inline-start` and `inline-end` referring to left and right respectively.\n */\n @property({ reflect: true }) position?: Popout[\"position\"]\n\n /**\n * Controls whether the toggle slot expands to fill the width of its container.\n */\n @property({ reflect: true, type: Boolean }) expand = false\n\n connectedCallback() {\n super.connectedCallback()\n\n const toggle = this.querySelector(`[slot=\"toggle\"]`) || undefined\n toggle?.setAttribute(\"aria-haspopup\", \"true\")\n }\n\n render() {\n return html`\n <div class=\"n-dropdown\" @focusout=${this.handleBlur}>\n <slot name=\"toggle\" aria-controls=\"popout\"></slot>\n <nord-popout\n id=\"popout\"\n align=${ifDefined(this.align)}\n position=${ifDefined(this.position)}\n @open=${this.handleOpen}\n >\n <div class=\"n-dropdown-content\">\n <slot></slot>\n </div>\n </nord-popout>\n </div>\n `\n }\n\n private handleBlur(e: FocusEvent) {\n const relatedTarget = e.relatedTarget as Node\n\n // safari will set relatedTarget to null when clicking on the trigger button\n // because it doesn't focus buttons on click.\n // this caused weird behavior where the dropdown closed _and_ opened with a single click.\n // so we only run this logic if relatedTarget is set, which sidesteps this issue\n if (relatedTarget && !this.contains(relatedTarget)) {\n this.popout.hide(false)\n }\n }\n\n private handleOpen() {\n this.querySelector(\"nord-dropdown-item\")?.focus()\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-dropdown\": Dropdown\n }\n}\n","import { LitElement, html, TemplateResult } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./DropdownItem.css\"\n\n/**\n * Dropdown item populates dropdown with actions. Items can be\n * placed either inside a dropdown group or directly inside a\n * dropdown component.\n *\n * @status new\n * @category action\n * @slot - The dropdown item content.\n * @slot start - Used to place content before dropdown item text. Typically used for icons.\n * @slot end - Used to place content after dropdown item text. Typically used for icons.\n */\n@customElement(\"nord-dropdown-item\")\nexport default class DropdownItem extends FocusableMixin(LitElement) {\n static styles = [componentStyle, style]\n\n /**\n * The url the dropdown item should link to.\n */\n @property({ reflect: true }) href?: string\n\n render() {\n const link = (content: TemplateResult) =>\n html`<a href=${ifDefined(this.href)} ${ref(this.focusableRef)} class=\"n-dropdown-item\">${content}</a>`\n const button = (content: TemplateResult) =>\n html`<button ${ref(this.focusableRef)} class=\"n-dropdown-item\">${content}</button>`\n\n const container = this.href ? link : button\n\n return container(html`\n <slot name=\"start\"></slot>\n <span class=\"n-truncate\"><slot></slot></span>\n <slot name=\"end\"></slot>\n `)\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-dropdown-item\": DropdownItem\n }\n}\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./DropdownGroup.css\"\n\n/**\n * Dropdown group includes all the actions or items in a single dropdown\n * group and is used for grouping items into related categories.\n *\n * @status new\n * @category action\n * @slot - The dropdown group content.\n */\n@customElement(\"nord-dropdown-group\")\nexport default class DropdownGroup extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * Heading and accessible label for the dropdown group.\n */\n @property() heading?: string\n\n render() {\n return html`\n <div class=\"n-dropdown-group\">\n ${this.heading\n ? html`<p id=\"heading\" aria-hidden=\"true\" class=\"n-dropdown-group-heading\">${this.heading}</p>`\n : nothing}\n <div class=\"n-dropdown-group-content\" role=\"group\" aria-labelledby=${this.heading ? \"heading\" : nothing}>\n <slot></slot>\n </div>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-dropdown-group\": DropdownGroup\n }\n}\n"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","t","window","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","e","Symbol","n","Map","s","constructor","this","_$cssResult$","Error","cssText","styleSheet","get","set","replaceSync","toString","o","reduce","S","cssRules","trustedTypes","emptyScript","h","reactiveElementPolyfillSupport","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","l","attribute","type","String","converter","reflect","hasChanged","a","HTMLElement","super","_$Et","isUpdatePending","hasUpdated","_$Ei","static","push","observedAttributes","finalize","elementProperties","forEach","_$Eh","_$Eu","state","noAccessor","hasOwnProperty","getPropertyDescriptor","requestUpdate","configurable","enumerable","finalized","getPrototypeOf","properties","getOwnPropertyNames","getOwnPropertySymbols","createProperty","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","_$Ep","Promise","enableUpdating","_$AL","_$Em","addController","_$Eg","renderRoot","isConnected","hostConnected","call","removeController","splice","indexOf","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ES","removeAttribute","getPropertyOptions","has","_$EC","_$E_","async","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EU","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","mode","ReactiveElement","globalThis","reactiveElementVersions","createPolicy","createHTML","Math","random","slice","createComment","u","iterator","v","f","_","m","g","$","_$litType$","strings","values","p","b","for","w","T","WeakMap","x","renderBefore","_$litPart$","N","insertBefore","_$AI","A","createTreeWalker","C","lastIndex","exec","test","RegExp","y","startsWith","E","parts","el","currentNode","content","firstChild","remove","append","childNodes","nextNode","nodeType","hasAttributes","getAttributeNames","endsWith","getAttribute","split","index","name","ctor","M","H","I","tagName","data","innerHTML","P","_$Cl","_$Cu","_$litDirective$","_$AO","_$AT","_$AS","V","_$AN","_$AD","_$AM","parentNode","_$AU","creationScope","importNode","nextSibling","L","_$AH","_$AA","_$AB","options","_$Cg","startNode","endNode","_$AR","k","createTextNode","_$AC","_$AP","setConnected","element","fill","capture","once","passive","removeEventListener","addEventListener","handleEvent","host","R","D","j","O","F","B","W","Z","z","litHtmlPolyfillSupport","litHtmlVersions","renderOptions","_$Dt","render","_$litElement$","litElementHydrateSupport","LitElement","litElementPolyfillSupport","litElementVersions","customElements","define","kind","elements","finisher","descriptor","placement","originalKey","initializer","querySelector","HTMLSlotElement","assignedElements","Badge","html","componentStyle","style","property","customElement","_$AQ","_$Ct","_$Ci","delete","size","add","reconnected","disconnected","setValue","U","ot","rt","lt","ht","value","EventController","listeners","stop","listen","listener","LightDomController","container","nothing","FocusableMixin","superClass","createRef","focus","focusableRef","blur","click","InputMixin","InputElement","form","closest","undefined","Button","renderLightDom","composedPath","some","node","buttonRef","stopPropagation","events","handleOuterClick","innards","href","renderLink","renderButton","ref","download","ifDefined","disabled","handleClick","accessibleExpanded","accessibleHasPopup","SlotController","slotName","onChange","handleSlotChange","hasContent","isEmpty","selector","_e","Card","headerSlot","footerSlot","it","directiveName","ft","raw","resultType","FormDataController","formData","handleFormData","NordEvent","Event","eventInitDict","bubbles","composed","VisuallyHidden","FormAssociatedMixin","FormAssociatedElement","formValue","handleInput","dispatchEvent","handleChange","renderLabel","label","inputId","hintId","hasHint","hint","hideLabel","renderError","errorId","hasError","error","getDescribedBy","getInvalid","hintSlot","errorSlot","Input","hasIcon","startSlot","isNumber","defaultIcon","unsafeHTML","required","placeholder","handleKeydown","formFieldStyle","textFieldStyle","Icon","resolver","Icon_1","iconOrName","icon","svg","title","default","registeredIcons","changedProperties","resolved","resolve","then","catch","color","fetch","response","ok","TypeError","text","dt","keys","ut","filter","join","et","st","classList","wrap","val","min","max","getFocusedElement","root","activeElement","navigator","platform","getModifierState","trim","pop","timeout","KeyboardEvent","toUpperCase","code","find","includes","clearTimeout","setTimeout","clear","bind","ARROW_RE","ESC_RE","ShortcutController","shortcuts","unbind","unregister","event","tinykeys","normalised","keybinding","mapped","replace","_match","normalise","LightDismissController","isOpen","onDismiss","predicate","isDismissible","every","shortcut","Escape","handleEsc","handleClickOut","preventDefault","fn","KeyboardController","actions","commandShortcuts","globalShortcuts","toggleOpen","navigationShortcuts","Enter","trigger","Backspace","goBack","End","end","Home","start","ArrowDown","next","ArrowUp","previous","registerCommandShortcuts","command","commands","handler","DirectionController","dir","documentElement","isLTR","isRTL","observer","MutationObserver","observe","attributes","attributeFilter","hosts","KEY_REGEX","registerIcon","chevronIconLeft","chevronIconRight","altKeyIcon","CommandMenuAction","ensureInView","requestAnimationFrame","scrollIntoView","block","selected","classMap","getIconName","renderShortcut","direction","SelectEvent","eventName","en","$lang","$name","$dir","instructions","inputLabel","footerArrowKeys","footerEnterKey","footerEscapeKey","footerBackspaceKey","noResults","searchTerm","tip","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","modalHeading","closeLabel","buttonLabel","selectedDateMessage","subscribers","translations","subscriber","registerTranslation","translation","lang","isTranslationRegistered","resolveTranslation","langCode","langOnly","noop","LocalizeController","onLangChange","resolvedTranslation","resolvedLang","unsubscribe","handleLangChange","term","args","componentName","localName","navigateIcon","enterIcon","backspaceIcon","CommandMenu","open","close","select","filteredCommands","selectedIndex","show","cancelable","setParent","parent","previousFocus","inputRef","keyboardController","bump","filterCommands","listRef","scrollTop","sections","array","grouped","item","collection","groupBy","activeDescendant","id","handleAnimationEnd","localize","handleBlur","search","renderNoResults","from","section","renderSection","navigateIcon.title","sectionId","repeat","input","setSearch","parentCommand","str","searchTerms","toLocaleLowerCase","keywords","searchSpace","matcher","Select","slottedOptions","buttonText","getButtonText","option","renderOption","expand","querySelectorAll","Stack","Spinner","Table","renderStyles","rootNode","getRootNode","renderTarget","Node","DOCUMENT_NODE","head","Textarea","resizeToFitContent","textarea","resize","height","scrollHeight","SwipeController","pageX","pageY","changedTouches","initialTouchX","initialTouchY","matchesGesture","onSwipeEnd","distX","distY","details","initialX","initialY","hadFirstUpdate","handleTouchStart","handleTouchEnd","isHorizontalSwipe","abs","isDownwardsSwipe","ISO_DATE_FORMAT","createDate","year","month","day","dayInt","parseInt","monthInt","yearInt","isInteger","date","Date","setFullYear","parseISODate","matches","match","printISODate","getDate","getMonth","getFullYear","padStart","today","UTC","getDayNames","locale","weekday","days","getDay","toLocaleDateString","setDate","getMonthNames","months","setMonth","isEqualMonth","isEqual","addDays","startOfWeek","firstDayOfWeek","diff","endOfWeek","startOfMonth","endOfMonth","setYear","clamp","time","getTime","inRange","getViewOfMonth","current","getDaysInRange","monthView","onFocusIn","onFocusOut","selectedDate","focusedDate","labelledById","dayNames","dayNamesShort","dateFormatter","isDateDisabled","onDateSelect","onKeyboardNavigation","table","currentTarget","relatedTarget","contains","startingOffset","mapFn","dayName","adjustedIndex","chunkSize","result","chunk","week","focusedDay","onDaySelect","isSelected","isToday","isMonth","isFocused","isOutsideRange","format","dayView","dateInRange","DateSelectEvent","arrowRightIcon","arrowLeftIcon","arrowDownIcon","Calendar","addMonths","createKeybindingsHandler","ArrowRight","ArrowLeft","PageUp","PageDown","addYears","isInRange","isAllowed","activeFocus","focusedDayNode","monthSelectNode","setFocusedDay","valueAsDate","focusedMonth","focusedYear","minDate","maxDate","minDateStartOfMonth","maxDateEndOfMonth","selectedYear","minYear","maxYear","dialogLabelId","monthNames","handleMonthSelect","monthNamesShort","handleYearSelect","to","range","handlePreviousMonthClick","handleNextMonthClick","disableActiveFocus","enableActiveFocus","dateFormatShort","handleDaySelect","Intl","DateTimeFormat","years","query","isoAdapter","calendarIcon","closeIcon","DISALLOWED_CHARACTERS","DatePicker","hide","calendar","toggleButton","dialog","createDateFormatters","inputEl","regex","cursor","selectionStart","beforeCursor","afterCursor","filteredBeforeCursor","newValue","newCursor","selectionEnd","cleanValue","parsed","dateAdapter","valueAsNumber","NaN","moveFocusToButton","formattedDate","handleInputChange","handleFocus","dateFormatLong","focusLast","focusFirst","closeButton","checkedIcon","Checkbox","checked","getSide","getAlignment","getMainAxisFromPlacement","getLengthFromAxis","axis","computeCoordsFromPlacement","_ref","rtl","reference","floating","commonX","width","commonY","mainAxis","commonAlign","isVertical","coords","rectToClientRect","rect","top","left","right","bottom","detectOverflow","middlewareArguments","_await$platform$isEle","rects","strategy","boundary","rootBoundary","elementContext","altBoundary","padding","paddingObject","expandPaddingObject","getSideObjectFromPadding","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","offsetParent","getOffsetParent","within","min$1","max$1","hash$1","getOppositePlacement","matched","hash","getOppositeAlignmentPlacement","sides","flip","_middlewareData$flip","middlewareData","initialPlacement","checkMainAxis","crossAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","flipAlignment","detectOverflowOptions","side","oppositePlacement","getExpandedPlacements","placements","overflow","overflows","overflowsData","main","cross","alignment","mainAlignmentSide","getAlignmentSides","_middlewareData$flip$","_middlewareData$flip2","nextIndex","nextPlacement","reset","resetPlacement","_overflowsData$slice$","sort","acc","getSideOffsets","isAnySideFullyClipped","_temp","offsets","referenceHiddenOffsets","referenceHidden","escapedOffsets","escaped","offset","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","alignmentAxis","convertValueToCoords","shift","limiter","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","isWindow","location","alert","setInterval","getWindow","ownerDocument","defaultView","getComputedStyle$1","getComputedStyle","getNodeName","nodeName","isHTMLElement","Element","isShadowRoot","isOverflowElement","overflowX","overflowY","isTableElement","isContainingBlock","isFirefox","userAgent","css","transform","perspective","contain","willChange","isLayoutViewport","round","getBoundingClientRect","includeScale","isFixedStrategy","_win$visualViewport$o","_win$visualViewport","_win$visualViewport$o2","_win$visualViewport2","clientRect","scaleX","scaleY","offsetWidth","offsetHeight","win","addVisualOffsets","visualViewport","offsetLeft","offsetTop","getNodeScroll","scrollLeft","pageXOffset","pageYOffset","getWindowScrollBarX","getRectRelativeToOffsetParent","isOffsetParentAnElement","isScaled","scroll","offsetRect","clientLeft","clientTop","getParentNode","assignedSlot","getTrueOffsetParent","position","getContainingBlock","getDimensions","getNearestOverflowAncestor","body","getOverflowAncestors","list","_node$ownerDocument","scrollableAncestor","isBody","concat","updatedList","getClientRectFromClippingAncestor","clippingParent","clientWidth","clientHeight","layoutViewport","getViewportRect","getInnerBoundingClientRect","_element$ownerDocumen","scrollWidth","getDocumentRect","getClippingAncestors","clippingAncestors","clipperElement","child","firstClippingAncestor","clippingRect","accRect","clippingAncestor","getElementRects","getClientRects","computePosition","config","middleware","statefulPlacement","nextX","nextY","computePosition$1","getTokens","attr","setTokens","tokens","fsm","transition","currentState","logicalMapLTR","logicalMapRTL","logicalMap","logicalToPhysical","logicalSide","logicalSideAlign","referencesTooltip","tooltip","ELEMENT_NODE","hidden","visible","reposition","waiting","positioning","positioned","Tooltip","currentElement","hideTooltip","focusable","proxy","insertAdjacentElement","token","attr.add","attr.remove","hideOnEscape","handleShow","handleHide","console","warn","handleTransition","shortcutSlot","prevState","timeoutId","removeDescribedBy","visibility","opacity","Tooltip_1","lastOpened","addDescribedBy","delay","updatePosition","Fieldset","LightSlotController","syncLightDom","renderHook","lightDom","createId","suffix","Radio","isLabel","htmlFor","uncheckSiblings","condition","inner","wrapper","radio","Header","endSlot","DraftComponentMixin","DraftComponent","_warningLogged","NavGroup","heading","NavItem","subnavSlot","renderToggle","active","badge","Navigation","Layout","EmptyState","warningIcon","dangerIcon","infoIcon","successIcon","iconMap","warning","danger","info","success","Banner","variant","initial","loading","load","loaded","Avatar","src","renderImage","renderFallback","handleLoad","handleError","ProgressBar","Popout","targetElement","align","computedPosition","cleanupAutoUpdate","ancestorScroll","_ancestorScroll","ancestorResize","_ancestorResize","elementResize","_elementResize","animationFrame","cleanedUp","ancestors","ancestor","frameId","ResizeObserver","prevRefRect","frameLoop","nextRefRect","_observer","disconnect","cancelAnimationFrame","autoUpdate","preventScroll","getToggle","toggle","Dropdown","handleOpen","popout","delegatesFocus","DropdownItem","DropdownGroup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundle.js","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../src/badge/Badge.ts","../node_modules/lit-html/directive-helpers.js","../node_modules/lit-html/directive.js","../node_modules/lit-html/async-directive.js","../node_modules/lit-html/directives/ref.js","../src/common/controllers/EventController.ts","../src/common/controllers/LightDomController.ts","../src/common/directives/cond.ts","../src/common/mixins/FocusableMixin.ts","../src/common/mixins/InputMixin.ts","../src/button/Button.ts","../src/common/controllers/SlotController.ts","../src/card/Card.ts","../node_modules/lit-html/directives/if-defined.js","../node_modules/lit-html/directives/unsafe-html.js","../src/common/controllers/FormDataController.ts","../src/common/events.ts","../src/visually-hidden/VisuallyHidden.ts","../src/common/mixins/FormAssociatedMixin.ts","../src/input/Input.ts","../../icons/lib/assets/navigation-search.js","../src/common/decorators/observe.ts","../src/icon/Icon.ts","../node_modules/lit-html/directives/repeat.js","../node_modules/lit-html/directives/class-map.js","../../icons/lib/assets/keyboard-arrow-up-down.js","../../icons/lib/assets/keyboard-return.js","../../icons/lib/assets/keyboard-backspace.js","../src/common/number.ts","../src/common/focus.ts","../node_modules/tinykeys/dist/tinykeys.module.js","../src/common/controllers/ShortcutController.ts","../src/common/controllers/LightDismissController.ts","../src/command-menu/KeyboardController.ts","../../icons/lib/assets/arrow-right.js","../../icons/lib/assets/arrow-left.js","../../icons/lib/assets/keyboard-option.js","../src/common/controllers/DirectionController.ts","../src/command-menu/CommandMenuAction.ts","../src/command-menu/SelectEvent.ts","../src/localization/en-us.ts","../src/command-menu/localization.ts","../src/calendar/localization.ts","../src/date-picker/localization.ts","../src/localization/translation.ts","../src/localization/LocalizeController.ts","../src/command-menu/CommandMenu.ts","../src/common/collection.ts","../src/select/Select.ts","../../icons/lib/assets/interface-dropdown-small.js","../src/stack/Stack.ts","../src/spinner/Spinner.ts","../src/table/Table.ts","../src/textarea/Textarea.ts","../../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/common/dates.ts","../src/calendar/month-view.ts","../src/calendar/DateSelectEvent.ts","../src/calendar/Calendar.ts","../../icons/lib/assets/interface-calendar.js","../../icons/lib/assets/interface-close-small.js","../src/date-picker/date-adapter.ts","../src/date-picker/DatePicker.ts","../src/common/input.ts","../../icons/lib/assets/interface-checked-small.js","../src/checkbox/Checkbox.ts","../node_modules/@floating-ui/core/dist/floating-ui.core.esm.js","../node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js","../src/common/attribute.ts","../src/common/fsm.ts","../src/common/positioning.ts","../src/tooltip/Tooltip.ts","../src/fieldset/Fieldset.ts","../src/common/controllers/LightSlotController.ts","../src/radio/Radio.ts","../src/common/directives/wrapIf.ts","../src/header/Header.ts","../src/common/mixins/DraftComponentMixin.ts","../src/nav-group/NavGroup.ts","../src/nav-item/NavItem.ts","../src/navigation/Navigation.ts","../src/layout/Layout.ts","../src/empty-state/EmptyState.ts","../../icons/lib/assets/interface-help-2.js","../../icons/lib/assets/interface-warning.js","../../icons/lib/assets/interface-info.js","../../icons/lib/assets/interface-checked-circle.js","../src/banner/Banner.ts","../src/avatar/Avatar.ts","../src/progress-bar/ProgressBar.ts","../src/popout/Popout.ts","../src/dropdown/Dropdown.ts","../src/dropdown-item/DropdownItem.ts","../src/dropdown-group/DropdownGroup.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,e=Symbol(),n=new Map;class s{constructor(t,n){if(this._$cssResult$=!0,n!==e)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t}get styleSheet(){let e=n.get(this.cssText);return t&&void 0===e&&(n.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const o=t=>new s(\"string\"==typeof t?t:t+\"\",e),r=(t,...n)=>{const o=1===t.length?t[0]:n.reduce(((e,n,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(n)+t[s+1]),t[0]);return new s(o,e)},i=(e,n)=>{t?e.adoptedStyleSheets=n.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):n.forEach((t=>{const n=document.createElement(\"style\"),s=window.litNonce;void 0!==s&&n.setAttribute(\"nonce\",s),n.textContent=t.cssText,e.appendChild(n)}))},S=t?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const n of t.cssRules)e+=n.cssText;return o(e)})(t):t;export{s as CSSResult,i as adoptStyles,r as css,S as getCompatibleStyle,t as supportsAdoptingStyleSheets,o as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as i}from\"./css-tag.js\";export{CSSResult,adoptStyles,css,getCompatibleStyle,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var s;const e=window.trustedTypes,r=e?e.emptyScript:\"\",h=window.reactiveElementPolyfillSupport,o={toAttribute(t,i){switch(i){case Boolean:t=t?r:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t)}catch(t){s=null}}return s}},n=(t,i)=>i!==t&&(i==i||t==t),l={attribute:!0,type:String,converter:o,reflect:!1,hasChanged:n};class a extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var i;null!==(i=this.l)&&void 0!==i||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this._$Eh(s,i);void 0!==e&&(this._$Eu.set(e,s),t.push(e))})),t}static createProperty(t,i=l){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s=\"symbol\"==typeof t?Symbol():\"__\"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e)}}static getPropertyDescriptor(t,i,s){return{get(){return this[i]},set(e){const r=this[t];this[i]=e,this.requestUpdate(t,r,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||l}static finalize(){if(this.hasOwnProperty(\"finalized\"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty(\"properties\")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(t(i))}else void 0!==i&&s.push(t(i));return s}static _$Eh(t,i){const s=i.attribute;return!1===s?void 0:\"string\"==typeof s?s:\"string\"==typeof t?t.toLowerCase():void 0}o(){var t;this._$Ep=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var i,s;(null!==(i=this._$Eg)&&void 0!==i?i:this._$Eg=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t))}removeController(t){var i;null===(i=this._$Eg)||void 0===i||i.splice(this._$Eg.indexOf(t)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this._$Et.set(i,this[i]),delete this[i])}))}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return i(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)}))}attributeChangedCallback(t,i,s){this._$AK(t,s)}_$ES(t,i,s=l){var e,r;const h=this.constructor._$Eh(t,s);if(void 0!==h&&!0===s.reflect){const n=(null!==(r=null===(e=s.converter)||void 0===e?void 0:e.toAttribute)&&void 0!==r?r:o.toAttribute)(i,s.type);this._$Ei=t,null==n?this.removeAttribute(h):this.setAttribute(h,n),this._$Ei=null}}_$AK(t,i){var s,e,r;const h=this.constructor,n=h._$Eu.get(t);if(void 0!==n&&this._$Ei!==n){const t=h.getPropertyOptions(n),l=t.converter,a=null!==(r=null!==(e=null===(s=l)||void 0===s?void 0:s.fromAttribute)&&void 0!==e?e:\"function\"==typeof l?l:null)&&void 0!==r?r:o.fromAttribute;this._$Ei=n,this[n]=a(i,t.type),this._$Ei=null}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||n)(this[t],i)?(this._$AL.has(t)||this._$AL.set(t,i),!0===s.reflect&&this._$Ei!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this._$Ep=this._$E_())}async _$E_(){this.isUpdatePending=!0;try{await this._$Ep}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,i)=>this[i]=t)),this._$Et=void 0);let i=!1;const s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this._$EU()}catch(t){throw i=!1,this._$EU(),t}i&&this._$AE(s)}willUpdate(t){}_$AE(t){var i;null===(i=this._$Eg)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,i)=>this._$ES(i,this[i],t))),this._$EC=void 0),this._$EU()}updated(t){}firstUpdated(t){}}a.finalized=!0,a.elementProperties=new Map,a.elementStyles=[],a.shadowRootOptions={mode:\"open\"},null==h||h({ReactiveElement:a}),(null!==(s=globalThis.reactiveElementVersions)&&void 0!==s?s:globalThis.reactiveElementVersions=[]).push(\"1.3.1\");export{a as ReactiveElement,o as defaultConverter,n as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nvar t;const i=globalThis.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=`lit$${(Math.random()+\"\").slice(9)}$`,o=\"?\"+e,n=`<${o}>`,l=document,h=(t=\"\")=>l.createComment(t),r=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,d=Array.isArray,u=t=>{var i;return d(t)||\"function\"==typeof(null===(i=t)||void 0===i?void 0:i[Symbol.iterator])},c=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,a=/>/g,f=/>|[ \t\\n\f\\r](?:([^\\s\"'>=/]+)([ \t\\n\f\\r]*=[ \t\\n\f\\r]*(?:[^ \t\\n\f\\r\"'`<>=]|(\"|')|))|$)/g,_=/'/g,m=/\"/g,g=/^(?:script|style|textarea|title)$/i,p=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),$=p(1),y=p(2),b=Symbol.for(\"lit-noChange\"),w=Symbol.for(\"lit-nothing\"),T=new WeakMap,x=(t,i,s)=>{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new N(i.insertBefore(h(),t),t,void 0,null!=s?s:{})}return l._$AI(t),l},A=l.createTreeWalker(l,129,null,!1),C=(t,i)=>{const o=t.length-1,l=[];let h,r=2===i?\"<svg>\":\"\",d=c;for(let i=0;i<o;i++){const s=t[i];let o,u,p=-1,$=0;for(;$<s.length&&(d.lastIndex=$,u=d.exec(s),null!==u);)$=d.lastIndex,d===c?\"!--\"===u[1]?d=v:void 0!==u[1]?d=a:void 0!==u[2]?(g.test(u[2])&&(h=RegExp(\"</\"+u[2],\"g\")),d=f):void 0!==u[3]&&(d=f):d===f?\">\"===u[0]?(d=null!=h?h:c,p=-1):void 0===u[1]?p=-2:(p=d.lastIndex-u[2].length,o=u[1],d=void 0===u[3]?f:'\"'===u[3]?m:_):d===m||d===_?d=f:d===v||d===a?d=c:(d=f,h=void 0);const y=d===f&&t[i+1].startsWith(\"/>\")?\" \":\"\";r+=d===c?s+n:p>=0?(l.push(o),s.slice(0,p)+\"$lit$\"+s.slice(p)+e+y):s+e+(-2===p?(l.push(void 0),i):y)}const u=r+(t[o]||\"<?>\")+(2===i?\"</svg>\":\"\");if(!Array.isArray(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return[void 0!==s?s.createHTML(u):u,l]};class E{constructor({strings:t,_$litType$:s},n){let l;this.parts=[];let r=0,d=0;const u=t.length-1,c=this.parts,[v,a]=C(t,s);if(this.el=E.createElement(v,n),A.currentNode=this.el.content,2===s){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes)}for(;null!==(l=A.nextNode())&&c.length<u;){if(1===l.nodeType){if(l.hasAttributes()){const t=[];for(const i of l.getAttributeNames())if(i.endsWith(\"$lit$\")||i.startsWith(e)){const s=a[d++];if(t.push(i),void 0!==s){const t=l.getAttribute(s.toLowerCase()+\"$lit$\").split(e),i=/([.?@])?(.*)/.exec(s);c.push({type:1,index:r,name:i[2],strings:t,ctor:\".\"===i[1]?M:\"?\"===i[1]?H:\"@\"===i[1]?I:S})}else c.push({type:6,index:r})}for(const i of t)l.removeAttribute(i)}if(g.test(l.tagName)){const t=l.textContent.split(e),s=t.length-1;if(s>0){l.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)l.append(t[i],h()),A.nextNode(),c.push({type:2,index:++r});l.append(t[s],h())}}}else if(8===l.nodeType)if(l.data===o)c.push({type:2,index:r});else{let t=-1;for(;-1!==(t=l.data.indexOf(e,t+1));)c.push({type:7,index:r}),t+=e.length-1}r++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function P(t,i,s=t,e){var o,n,l,h;if(i===b)return i;let d=void 0!==e?null===(o=s._$Cl)||void 0===o?void 0:o[e]:s._$Cu;const u=r(i)?void 0:i._$litDirective$;return(null==d?void 0:d.constructor)!==u&&(null===(n=null==d?void 0:d._$AO)||void 0===n||n.call(d,!1),void 0===u?d=void 0:(d=new u(t),d._$AT(t,s,e)),void 0!==e?(null!==(l=(h=s)._$Cl)&&void 0!==l?l:h._$Cl=[])[e]=d:s._$Cu=d),void 0!==d&&(i=P(t,d._$AS(t,i.values),d,e)),i}class V{constructor(t,i){this.v=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(t){var i;const{el:{content:s},parts:e}=this._$AD,o=(null!==(i=null==t?void 0:t.creationScope)&&void 0!==i?i:l).importNode(s,!0);A.currentNode=o;let n=A.nextNode(),h=0,r=0,d=e[0];for(;void 0!==d;){if(h===d.index){let i;2===d.type?i=new N(n,n.nextSibling,this,t):1===d.type?i=new d.ctor(n,d.name,d.strings,this,t):6===d.type&&(i=new L(n,this,t)),this.v.push(i),d=e[++r]}h!==(null==d?void 0:d.index)&&(n=A.nextNode(),h++)}return o}m(t){let i=0;for(const s of this.v)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class N{constructor(t,i,s,e){var o;this.type=2,this._$AH=w,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cg=null===(o=null==e?void 0:e.isConnected)||void 0===o||o}get _$AU(){var t,i;return null!==(i=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==i?i:this._$Cg}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=P(this,t,i),r(t)?t===w||null==t||\"\"===t?(this._$AH!==w&&this._$AR(),this._$AH=w):t!==this._$AH&&t!==b&&this.$(t):void 0!==t._$litType$?this.T(t):void 0!==t.nodeType?this.k(t):u(t)?this.S(t):this.$(t)}M(t,i=this._$AB){return this._$AA.parentNode.insertBefore(t,i)}k(t){this._$AH!==t&&(this._$AR(),this._$AH=this.M(t))}$(t){this._$AH!==w&&r(this._$AH)?this._$AA.nextSibling.data=t:this.k(l.createTextNode(t)),this._$AH=t}T(t){var i;const{values:s,_$litType$:e}=t,o=\"number\"==typeof e?this._$AC(t):(void 0===e.el&&(e.el=E.createElement(e.h,this.options)),e);if((null===(i=this._$AH)||void 0===i?void 0:i._$AD)===o)this._$AH.m(s);else{const t=new V(o,this),i=t.p(this.options);t.m(s),this.k(i),this._$AH=t}}_$AC(t){let i=T.get(t.strings);return void 0===i&&T.set(t.strings,i=new E(t)),i}S(t){d(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const o of t)e===i.length?i.push(s=new N(this.M(h()),this.M(h()),this,this.options)):s=i[e],s._$AI(o),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){var s;for(null===(s=this._$AP)||void 0===s||s.call(this,!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){var i;void 0===this._$AM&&(this._$Cg=t,null===(i=this._$AP)||void 0===i||i.call(this,t))}}class S{constructor(t,i,s,e,o){this.type=1,this._$AH=w,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=o,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=w}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=P(this,t,i,0),n=!r(t)||t!==this._$AH&&t!==b,n&&(this._$AH=t);else{const e=t;let l,h;for(t=o[0],l=0;l<o.length-1;l++)h=P(this,e[s+l],i,l),h===b&&(h=this._$AH[l]),n||(n=!r(h)||h!==this._$AH[l]),h===w?t=w:t!==w&&(t+=(null!=h?h:\"\")+o[l+1]),this._$AH[l]=h}n&&!e&&this.C(t)}C(t){t===w?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:\"\")}}class M extends S{constructor(){super(...arguments),this.type=3}C(t){this.element[this.name]=t===w?void 0:t}}const k=i?i.emptyScript:\"\";class H extends S{constructor(){super(...arguments),this.type=4}C(t){t&&t!==w?this.element.setAttribute(this.name,k):this.element.removeAttribute(this.name)}}class I extends S{constructor(t,i,s,e,o){super(t,i,s,e,o),this.type=5}_$AI(t,i=this){var s;if((t=null!==(s=P(this,t,i,0))&&void 0!==s?s:w)===b)return;const e=this._$AH,o=t===w&&e!==w||t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive,n=t!==w&&(e===w||o);o&&this.element.removeEventListener(this.name,this,e),n&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var i,s;\"function\"==typeof this._$AH?this._$AH.call(null!==(s=null===(i=this.options)||void 0===i?void 0:i.host)&&void 0!==s?s:this.element,t):this._$AH.handleEvent(t)}}class L{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){P(this,t)}}const R={L:\"$lit$\",P:e,V:o,I:1,N:C,R:V,j:u,D:P,H:N,F:S,O:H,W:I,B:M,Z:L},z=window.litHtmlPolyfillSupport;null==z||z(E,N),(null!==(t=globalThis.litHtmlVersions)&&void 0!==t?t:globalThis.litHtmlVersions=[]).push(\"2.2.2\");export{R as _$LH,$ as html,b as noChange,w as nothing,x as render,y as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as i}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var l,o;const r=t;class s extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Dt=e(i,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!1)}render(){return i}}s.finalized=!0,s._$litElement$=!0,null===(l=globalThis.litElementHydrateSupport)||void 0===l||l.call(globalThis,{LitElement:s});const n=globalThis.litElementPolyfillSupport;null==n||n({LitElement:s});const h={_$AK:(t,e,i)=>{t._$AK(e,i)},_$AL:t=>t._$AL};(null!==(o=globalThis.litElementVersions)&&void 0!==o?o:globalThis.litElementVersions=[]).push(\"3.2.0\");export{s as LitElement,r as UpdatingElement,h as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst n=n=>e=>\"function\"==typeof e?((n,e)=>(window.customElements.define(n,e),e))(n,e):((n,e)=>{const{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(e){window.customElements.define(n,e)}}})(n,e);export{n as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst i=(i,e)=>\"method\"===e.kind&&e.descriptor&&!(\"value\"in e.descriptor)?{...e,finisher(n){n.createProperty(e.key,i)}}:{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},originalKey:e.key,initializer(){\"function\"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(n){n.createProperty(e.key,i)}};function e(e){return(n,t)=>void 0!==t?((i,e,n)=>{e.constructor.createProperty(n,i)})(e,n,t):i(e,n)}export{e as property};\n//# sourceMappingURL=property.js.map\n","import{property as r}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function t(t){return r({...t,state:!0})}export{t as state};\n//# sourceMappingURL=state.js.map\n","import{decorateProperty as o}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function i(i,n){return o({descriptor:o=>{const t={get(){var o,n;return null!==(n=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(i))&&void 0!==n?n:null},enumerable:!0,configurable:!0};if(n){const n=\"symbol\"==typeof o?Symbol():\"__\"+o;t.get=function(){var o,t;return void 0===this[n]&&(this[n]=null!==(t=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(i))&&void 0!==t?t:null),this[n]}}return t}})}export{i as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,o)=>{Object.defineProperty(t,o,e)},t=(e,t)=>({kind:\"method\",placement:\"prototype\",key:t.key,descriptor:e}),o=({finisher:e,descriptor:t})=>(o,n)=>{var r;if(void 0===n){const n=null!==(r=o.originalKey)&&void 0!==r?r:o.key,i=null!=t?{kind:\"method\",placement:\"prototype\",key:n,descriptor:t(o.key)}:{...o,key:n};return null!=e&&(i.finisher=function(t){e(t,n)}),i}{const r=o.constructor;void 0!==t&&Object.defineProperty(o,n,t(n)),null==e||e(r,n)}};export{o as decorateProperty,e as legacyPrototypeMethod,t as standardPrototypeMethod};\n//# sourceMappingURL=base.js.map\n","import{decorateProperty as o}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var n;const e=null!=(null===(n=window.HTMLSlotElement)||void 0===n?void 0:n.prototype.assignedElements)?(o,n)=>o.assignedElements(n):(o,n)=>o.assignedNodes(n).filter((o=>o.nodeType===Node.ELEMENT_NODE));function l(n){const{slot:l,selector:t}=null!=n?n:{};return o({descriptor:o=>({get(){var o;const r=\"slot\"+(l?`[name=${l}]`:\":not([name])\"),i=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(r),s=null!=i?e(i,n):[];return t?s.filter((o=>o.matches(t))):s},enumerable:!0,configurable:!0})})}export{l as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Badge.css\"\n\n/**\n * Badges are used to inform users of the status of an object or of an action that’s been taken. Commonly used in tabular data to indicate status.\n *\n * @status ready\n * @category text\n * @slot - The badge content.\n */\n@customElement(\"nord-badge\")\nexport default class Badge extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The type of badge.\n * Determines the color of the chip shown on the badge.\n */\n @property({ reflect: true }) type?: \"warning\" | \"success\" | \"danger\" | \"highlight\" | \"info\" = \"info\"\n\n render() {\n return html`\n <span class=\"n-badge\">\n <slot></slot>\n </span>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-badge\": Badge\n }\n}\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{H:i}=o,t=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,n={HTML:1,SVG:2},v=(o,i)=>{var t,n;return void 0===i?void 0!==(null===(t=o)||void 0===t?void 0:t._$litType$):(null===(n=o)||void 0===n?void 0:n._$litType$)===i},l=o=>{var i;return void 0!==(null===(i=o)||void 0===i?void 0:i._$litDirective$)},d=o=>{var i;return null===(i=o)||void 0===i?void 0:i._$litDirective$},r=o=>void 0===o.strings,e=()=>document.createComment(\"\"),u=(o,t,n)=>{var v;const l=o._$AA.parentNode,d=void 0===t?o._$AB:t._$AA;if(void 0===n){const t=l.insertBefore(e(),d),v=l.insertBefore(e(),d);n=new i(t,v,o,o.options)}else{const i=n._$AB.nextSibling,t=n._$AM,r=t!==o;if(r){let i;null===(v=n._$AQ)||void 0===v||v.call(n,o),n._$AM=o,void 0!==n._$AP&&(i=o._$AU)!==t._$AU&&n._$AP(i)}if(i!==d||r){let o=n._$AA;for(;o!==i;){const i=o.nextSibling;l.insertBefore(o,d),o=i}}}return n},c=(o,i,t=o)=>(o._$AI(i,t),o),f={},s=(o,i=f)=>o._$AH=i,a=o=>o._$AH,m=o=>{var i;null===(i=o._$AP)||void 0===i||i.call(o,!1,!0);let t=o._$AA;const n=o._$AB.nextSibling;for(;t!==n;){const o=t.nextSibling;t.remove(),t=o}},p=o=>{o._$AR()};export{n as TemplateResultType,p as clearPart,a as getCommittedValue,d as getDirectiveClass,u as insertPart,l as isDirectiveResult,t as isPrimitive,r as isSingleExpression,v as isTemplateResult,m as removePart,c as setChildPartValue,s as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as s}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=(i,t)=>{var s,o;const n=i._$AN;if(void 0===n)return!1;for(const i of n)null===(o=(s=i)._$AO)||void 0===o||o.call(s,t,!1),e(i,t);return!0},o=i=>{let t,s;do{if(void 0===(t=i._$AM))break;s=t._$AN,s.delete(i),i=t}while(0===(null==s?void 0:s.size))},n=i=>{for(let t;t=i._$AM;i=t){let s=t._$AN;if(void 0===s)t._$AN=s=new Set;else if(s.has(i))break;s.add(i),l(t)}};function r(i){void 0!==this._$AN?(o(this),this._$AM=i,n(this)):this._$AM=i}function h(i,t=!1,s=0){const n=this._$AH,r=this._$AN;if(void 0!==r&&0!==r.size)if(t)if(Array.isArray(n))for(let i=s;i<n.length;i++)e(n[i],!1),o(n[i]);else null!=n&&(e(n,!1),o(n));else e(this,i)}const l=i=>{var t,e,o,n;i.type==s.CHILD&&(null!==(t=(o=i)._$AP)&&void 0!==t||(o._$AP=h),null!==(e=(n=i)._$AQ)&&void 0!==e||(n._$AQ=r))};class d extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,s){super._$AT(i,t,s),n(this),this.isConnected=i._$AU}_$AO(i,t=!0){var s,n;i!==this.isConnected&&(this.isConnected=i,i?null===(s=this.reconnected)||void 0===s||s.call(this):null===(n=this.disconnected)||void 0===n||n.call(this)),t&&(e(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{d as AsyncDirective};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as i}from\"../lit-html.js\";import{AsyncDirective as t}from\"../async-directive.js\";import{directive as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=()=>new o;class o{}const h=new WeakMap,n=s(class extends t{render(t){return i}update(t,[s]){var e;const o=s!==this.U;return o&&void 0!==this.U&&this.ot(void 0),(o||this.rt!==this.lt)&&(this.U=s,this.ht=null===(e=t.options)||void 0===e?void 0:e.host,this.ot(this.lt=t.element)),i}ot(i){var t;if(\"function\"==typeof this.U){const s=null!==(t=this.ht)&&void 0!==t?t:globalThis;let e=h.get(s);void 0===e&&(e=new WeakMap,h.set(s,e)),void 0!==e.get(this.U)&&this.U.call(this.ht,void 0),e.set(this.U,i),void 0!==i&&this.U.call(this.ht,i)}else this.U.value=i}get rt(){var i,t,s;return\"function\"==typeof this.U?null===(t=h.get(null!==(i=this.ht)&&void 0!==i?i:globalThis))||void 0===t?void 0:t.get(this.U):null===(s=this.U)||void 0===s?void 0:s.value}disconnected(){this.rt===this.lt&&this.ot(void 0)}reconnected(){this.ot(this.lt)}});export{e as createRef,n as ref};\n//# sourceMappingURL=ref.js.map\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\n\ninterface ShadowRootEventMap {\n slotchange: Event\n}\n\nexport class EventController implements ReactiveController {\n private listeners: Array<() => void> = []\n\n constructor(host: ReactiveControllerHost) {\n host.addController(this)\n }\n\n hostDisconnected() {\n this.listeners.forEach(stop => stop())\n this.listeners = []\n }\n\n listen<K extends keyof WindowEventMap>(\n window: Window,\n type: K,\n listener: (this: Window, ev: WindowEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen<K extends keyof DocumentEventMap>(\n document: Document,\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen<K extends keyof HTMLElementEventMap>(\n element: HTMLElement,\n type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen<K extends keyof ShadowRootEventMap>(\n element: ShadowRoot,\n type: K,\n listener: (this: ShadowRoot, ev: ShadowRootEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void\n\n listen(\n element: Window | Document | HTMLElement | ShadowRoot,\n type: string,\n listener: (ev: any) => any,\n options?: boolean | AddEventListenerOptions\n ) {\n element.addEventListener(type, listener, options)\n\n const stop = () => element.removeEventListener(type, listener, options)\n this.listeners.push(stop)\n }\n}\n","import { nothing, ReactiveController, ReactiveControllerHost, render, RenderOptions } from \"lit\"\n\ntype LightDomOptions = {\n render: () => unknown\n renderOptions?: RenderOptions\n container?: HTMLElement\n}\n\nexport class LightDomController implements ReactiveController {\n constructor(private host: ReactiveControllerHost & HTMLElement, private options: LightDomOptions) {\n host.addController(this)\n }\n\n private get container(): HTMLElement {\n return this.options.container || this.host\n }\n\n hostUpdated() {\n this.render()\n }\n\n hostDisconnected() {\n render(nothing, this.container, this.options.renderOptions)\n }\n\n private render() {\n render(this.options.render(), this.container, this.options.renderOptions)\n }\n}\n","import { nothing } from \"lit\"\n\n// NOTE: the below generic versions cannot be used until this bug is fixed: https://github.com/runem/lit-analyzer/issues/207\n// since lit-analyzer does not understand the use of nothing\n\n// /**\n// * if value is truthy, return it, otherwise return nothing\n// */\n// export function cond<T>(value: T): NonNullable<T> | typeof nothing\n\n// /**\n// * if condition is truthy, return trueCase, otherwise return nothing\n// */\n// export function cond<T>(condition: unknown, trueCase: T): T | typeof nothing\n\n// /**\n// * condition is true, so always return trueCase\n// */\n// export function cond<T>(condition: true, trueCase: T): T\n\n// /**\n// * condition is false, to will always return nothing\n// */\n// export function cond<T>(condition: false, trueCase: T): typeof nothing\n\n// /**\n// * if condition is truthy, return trueCase, otherwise return falseCase\n// */\n// export function cond<T, F>(condition: unknown, trueCase: T, falseCase: F): T | F\n\n// /**\n// * condition is true, so always return trueCase\n// */\n// export function cond<T, F>(condition: true, trueCase: T, falseCase: F): T\n\n// /**\n// * condition is false, so always return falseCase\n// */\n// export function cond<T, F>(condition: false, trueCase: T, falseCase: F): F\n\n/**\n * if value is truthy, return it, otherwise return nothing\n */\nexport function cond(value: any): typeof value | typeof nothing\n\n/**\n * if condition is truthy, return trueCase, otherwise return nothing\n */\nexport function cond(condition: unknown, trueCase: any): typeof trueCase | typeof nothing\n\n/**\n * condition is true, so always return trueCase\n */\nexport function cond(condition: true, trueCase: any): typeof trueCase\n\n/**\n * condition is false, to will always return nothing\n */\nexport function cond(condition: false, trueCase: any): typeof nothing\n\n/**\n * if condition is truthy, return trueCase, otherwise return falseCase\n */\nexport function cond(condition: unknown, trueCase: any, falseCase: any): typeof trueCase | typeof falseCase\n\n/**\n * condition is true, so always return trueCase\n */\nexport function cond(condition: true, trueCase: any, falseCase: any): typeof trueCase\n\n/**\n * condition is false, so always return falseCase\n */\nexport function cond(condition: false, trueCase: any, falseCase: any): typeof falseCase\n\nexport function cond(condition: unknown, trueCase: any = condition, falseCase: any = nothing) {\n return condition ? trueCase : falseCase\n}\n","/* eslint-disable max-classes-per-file */\n\nimport { LitElement } from \"lit\"\nimport { createRef, Ref } from \"lit/directives/ref.js\"\n\ntype Constructable<T = Record<string, unknown>> = new (...args: any[]) => T\n\nexport declare class FocusableMixinInterface {\n protected focusableRef: Ref<HTMLElement>\n focus(options?: FocusOptions): void\n blur(): void\n click(): void\n}\n\nexport function FocusableMixin<T extends Constructable<LitElement>>(superClass: T) {\n class FocusableElement extends superClass {\n protected focusableRef = createRef<HTMLButtonElement>()\n\n /**\n * Programmatically move focus to the component.\n * @param {FocusOptions} options An object which controls aspects of the focusing process.\n */\n focus(options?: FocusOptions) {\n this.focusableRef.value?.focus(options)\n }\n\n /**\n * Programmatically remove focus from the component.\n */\n blur() {\n this.focusableRef.value?.blur()\n }\n\n /**\n * Programmatically simulates a click on the component.\n */\n click() {\n this.focusableRef.value?.click()\n }\n }\n\n return FocusableElement as unknown as Constructable<FocusableMixinInterface> & T\n}\n","/* eslint-disable max-classes-per-file */\nimport { LitElement } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\ntype Constructor<T = Record<string, unknown>> = new (...args: any[]) => T\n\nexport declare class InputMixinInterface {\n name: string | undefined\n value: string\n disabled: boolean\n form?: HTMLFormElement\n}\n\nexport function InputMixin<T extends Constructor<LitElement>>(superClass: T): Constructor<InputMixinInterface> & T {\n class InputElement extends superClass {\n /**\n * Makes the component disabled. This prevents users from\n * being able to interact with the component, and conveys\n * its inactive state to assistive technologies.\n */\n @property({ type: Boolean, reflect: true }) disabled = false\n\n /**\n * The name of the form component.\n */\n @property() name?: string\n\n /**\n * The value of the form component.\n */\n @property() value: string = \"\"\n\n /**\n * Gets the form, if any, associated with the form element.\n */\n protected get form() {\n return this.closest(\"form\") || undefined\n }\n }\n\n return InputElement as unknown as Constructor<InputMixinInterface> & T\n}\n","import { LitElement, html, nothing, TemplateResult } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { createRef, ref } from \"lit/directives/ref.js\"\nimport { EventController } from \"../common/controllers/EventController.js\"\nimport { LightDomController } from \"../common/controllers/LightDomController.js\"\nimport { cond } from \"../common/directives/cond.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Button.css\"\n\n/**\n * Buttons are used for interface actions. Primary style should be\n * used only once per section for main call-to-action, while other\n * styles can appear more frequently.\n *\n * @status ready\n * @category action\n * @slot - The button content\n * @slot start - Used to place content at the start of button text. Typically used for icons.\n * @slot end - Used to place content at the end of button text. Typically used for icons.\n */\n@customElement(\"nord-button\")\nexport default class Button extends InputMixin(FocusableMixin(LitElement)) {\n static styles = [componentStyle, style]\n\n private buttonRef = createRef<HTMLButtonElement>()\n private events = new EventController(this)\n private lightDom = new LightDomController(this, {\n render: () => this.renderLightDom(),\n })\n\n /**\n * The style variant of the button.\n */\n @property({ reflect: true }) variant: \"default\" | \"primary\" | \"dashed\" | \"plain\" | \"danger\" = \"default\"\n\n /**\n * The type of the button.\n */\n @property({ reflect: true }) type: \"button\" | \"submit\" | \"reset\" = \"submit\"\n\n /**\n * The size of the button.\n * This affects font-size and padding.\n */\n @property({ reflect: true }) size: \"s\" | \"m\" | \"l\" = \"m\"\n\n /**\n * @private\n * This does not need to be documented,\n * since it is only for forwarding the aria-expanded attribute\n * to the internal button element.\n */\n @property({ attribute: \"aria-expanded\" }) accessibleExpanded?: \"true\" | \"false\"\n\n /**\n * @private\n * This does not need to be documented,\n * since it is only for forwarding the aria-haspopup attribute\n * to the internal button element.\n */\n @property({ attribute: \"aria-haspopup\" }) accessibleHasPopup?:\n | \"false\"\n | \"true\"\n | \"menu\"\n | \"listbox\"\n | \"tree\"\n | \"grid\"\n | \"dialog\"\n\n /**\n * When provided, renders the button as a link,\n * with its href attribute set to the given value.\n */\n @property({ reflect: true }) href?: string\n\n /**\n * When provided together with a href property, the button will\n * trigger a file download instead of a page visit.\n */\n @property({ type: Boolean }) download = false\n\n /**\n * When provided together with a href property, determines where\n * to open the linked URL. The keywords have special meanings for\n * where to load the URL: “_self” means the current browsing context,\n * “_blank” usually a new tab but users can configure browsers this to\n * open a new window instead, “_parent” means the parent browsing\n * context of the current one, but if no parent exists, behaves as\n * _self, and finally “top” means the topmost browsing context.\n */\n @property({ reflect: true }) target: \"_self\" | \"_blank\" | \"_parent\" | \"_top\" = \"_self\"\n\n /**\n * Controls whether the button expands to fill the width of its container.\n */\n @property({ reflect: true, type: Boolean }) expand = false\n\n connectedCallback() {\n super.connectedCallback()\n this.events.listen(this, \"click\", this.handleOuterClick, true)\n }\n\n render() {\n const innards = html`\n <slot name=\"start\"></slot>\n <div class=\"n-content\">\n <slot></slot>\n </div>\n <slot name=\"end\"></slot>\n `\n\n return this.href ? this.renderLink(innards) : this.renderButton(innards)\n }\n\n /**\n * We jump through some hoops here to ensure the link is treated correctly when \"disabled\".\n * Links cannot be disabled natively, so we need to rely on some aria magic to get the correct semantics.\n * Along with the advice in the article below, we also set tabindex to \"-1\", so it is taken out of tab order.\n *\n * @see https://www.scottohara.me/blog/2021/05/28/disabled-links.html\n */\n private renderLink(innards: TemplateResult) {\n return html`\n <a\n ${ref(this.focusableRef)}\n class=\"n-button\"\n target=${this.target}\n ?download=${this.download}\n href=${cond(this.disabled, nothing, this.href)}\n tabindex=${cond(this.disabled, \"-1\")}\n aria-disabled=${cond(this.disabled, \"true\")}\n role=${cond(this.disabled, \"link\")}\n >${innards}\n </a>\n `\n }\n\n private renderButton(innards: TemplateResult) {\n return html`\n <slot name=\"proxy\"></slot>\n <button\n ${ref(this.focusableRef)}\n class=\"n-button\"\n ?disabled=${this.disabled}\n name=${cond(this.name)}\n value=${cond(this.value)}\n @click=${this.handleClick}\n aria-expanded=${cond(this.accessibleExpanded)}\n aria-haspopup=${cond(this.accessibleHasPopup)}\n >\n ${innards}\n </button>\n `\n }\n\n private renderLightDom() {\n if (this.href || !this.form) {\n return nothing\n }\n\n return html`\n <button\n ${ref(this.buttonRef)}\n slot=\"proxy\"\n name=${cond(this.name)}\n value=${cond(this.value)}\n ?disabled=${this.disabled}\n type=${this.type}\n ></button>\n `\n }\n\n private handleOuterClick = (e: MouseEvent) => {\n // we want to avoid emitting click events when a click\n // happens in blank space in the host, but not on the button\n // so we stop propagation of any events if click didn't happen on the internal or proxy button\n const isInternalButton = e\n .composedPath()\n .some(node => node === this.focusableRef.value || node === this.buttonRef.value)\n\n if (!isInternalButton) {\n e.stopPropagation()\n }\n }\n\n private handleClick(e: Event) {\n if (this.buttonRef.value) {\n // prevents two events: one from internal button, one from proxy button\n e.stopPropagation()\n this.buttonRef.value.click()\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-button\": Button\n }\n}\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { EventController } from \"./EventController.js\"\n\nexport class SlotController implements ReactiveController {\n private events: EventController\n\n constructor(protected host: ReactiveControllerHost & HTMLElement, public slotName: string = \"\") {\n host.addController(this)\n this.events = new EventController(host)\n }\n\n hostConnected() {\n if (this.host.shadowRoot) {\n this.events.listen(this.host.shadowRoot, \"slotchange\", this.handleSlotChange)\n }\n }\n\n get hasContent() {\n return this.content != null\n }\n\n get isEmpty() {\n return !this.hasContent\n }\n\n get content() {\n const selector = this.slotName ? `[slot=\"${this.slotName}\"]` : `:not([slot])`\n return this.host.querySelector(selector)\n }\n\n private handleSlotChange = (e: Event) => {\n const slot = e.target as HTMLSlotElement\n\n if (slot.name === this.slotName) {\n this.onChange(e)\n }\n }\n\n protected onChange(_e: Event) {\n this.host.requestUpdate()\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Card.css\"\n\n/**\n * Cards are shadowed surfaces that display content and actions on a\n * single topic. They should be easy to scan for relevant and\n * actionable information.\n *\n * @status ready\n * @category structure\n * @slot - The card content.\n * @slot header - Optional slot that holds a header for the card.\n * @slot footer - Optional slot that holds footer content for the card.\n */\n@customElement(\"nord-card\")\nexport default class Card extends LitElement {\n static styles = [componentStyle, style]\n\n private headerSlot = new SlotController(this, \"header\")\n private footerSlot = new SlotController(this, \"footer\")\n\n /**\n * Controls the padding of card component. When set to “none”,\n * the header and footer slots will still have padding.\n */\n @property({ reflect: true }) padding: \"m\" | \"l\" | \"none\" = \"m\"\n\n render() {\n return html`\n <div class=\"n-card\">\n <slot name=\"header\" ?hidden=${this.headerSlot.isEmpty}></slot>\n <slot></slot>\n <slot name=\"footer\" ?hidden=${this.footerSlot.isEmpty}></slot>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-card\": Card\n }\n}\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const l=l=>null!=l?l:t;export{l as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{Directive as r,PartType as s,directive as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends r{constructor(i){if(super(i),this.it=t,i.type!==s.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this.ft=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this.ft;this.it=r;const s=[r];return s.raw=s,this.ft={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=n(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { InputMixinInterface } from \"../mixins/InputMixin.js\"\nimport { EventController } from \"./EventController.js\"\n\ntype FormDataOptions = {\n value: () => string | undefined\n}\n\nexport class FormDataController implements ReactiveController {\n private events: EventController\n constructor(private host: ReactiveControllerHost & InputMixinInterface, private options: FormDataOptions) {\n host.addController(this)\n this.events = new EventController(host)\n }\n\n hostConnected() {\n if (this.host.form) {\n this.events.listen(this.host.form, \"formdata\", this.handleFormData)\n }\n }\n\n private handleFormData = (e: FormDataEvent) => {\n const { disabled, name } = this.host\n\n if (disabled) {\n return\n }\n\n const value = this.options.value()\n\n if (name && value != null) {\n e.formData.append(name, value)\n }\n }\n}\n","/**\n * A base class for events which defaults to bubbling and composed\n */\nexport class NordEvent extends Event {\n constructor(type: string, eventInitDict?: EventInit) {\n super(type, {\n bubbles: true,\n composed: true,\n ...eventInitDict,\n })\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport style from \"./VisuallyHidden.css\"\n\n/**\n * Visually hidden is used when an element needs to be available\n * to assistive technologies like screen readers, but be otherwise\n * hidden.\n *\n * @status ready\n * @category text\n * @slot - The visually hidden content.\n */\n@customElement(\"nord-visually-hidden\")\nexport default class VisuallyHidden extends LitElement {\n static styles = style\n\n render() {\n return html`<slot></slot>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-visually-hidden\": VisuallyHidden\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 hint?: string\n hideLabel: boolean\n placeholder?: string\n error?: string\n expand: boolean\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(): 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 * Controls whether the input expands to fill the width of its container.\n */\n @property({ reflect: true, type: Boolean }) expand = 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() {\n const label = html`\n <label for=${this.inputId}>\n <slot name=\"label\">${this.label}</slot>\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","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\n\nimport searchIcon from \"@nordhealth/icons/lib/assets/navigation-search.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport textFieldStyle from \"../common/styles/TextField.css\"\nimport style from \"./Input.css\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport { cond } from \"../common/directives/cond.js\"\n\n/**\n * Inputs are used to allow users to provide text input when the expected input is short.\n * As well as plain text, Input supports various types of text, including passwords and numbers.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the input.\n * @slot error - Optional slot that holds error text for the input.\n * @slot start - Optional slot used to place an icon at the start of the input.\n */\n@customElement(\"nord-input\")\nexport default class Input extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, textFieldStyle, style]\n\n private startSlot = new SlotController(this, \"start\")\n\n /**\n * The type of the input.\n */\n @property() type: \"text\" | \"email\" | \"password\" | \"tel\" | \"url\" | \"search\" | \"number\" = \"text\"\n\n render() {\n const hasIcon = this.type === \"search\" || this.startSlot.hasContent\n const isNumber = this.type === \"number\"\n const defaultIcon = this.type === \"search\" ? unsafeHTML(searchIcon) : nothing\n\n return html`\n ${this.renderLabel()}\n\n <div class=\"n-input-container\">\n <slot name=${this.startSlot.slotName} ?hidden=${!hasIcon}>${defaultIcon}</slot>\n <input\n ${ref(this.focusableRef)}\n id=${this.inputId}\n class=\"n-input\"\n type=${isNumber ? \"text\" : this.type}\n inputmode=${cond(isNumber, \"numeric\")}\n pattern=${cond(isNumber, \"[0-9]*\")}\n ?disabled=${this.disabled}\n ?required=${this.required}\n name=${ifDefined(this.name)}\n .value=${this.value ?? \"\"}\n placeholder=${ifDefined(this.placeholder)}\n @input=${this.handleInput}\n @change=${this.handleChange}\n @keydown=${this.handleKeydown}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n spellcheck=\"false\"\n />\n </div>\n\n ${this.renderError()}\n `\n }\n\n private handleKeydown(e: KeyboardEvent) {\n if (e.key === \"Enter\" && this.form) {\n this.form.querySelector<HTMLButtonElement>(`button[type=\"submit\"]`)?.click()\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-input\": Input\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 59.5a52.5 52.5 0 1 0 105 0 52.5 52.5 0 1 0-105 0zM133 133 96.628 96.628\" stroke-width=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"navigation-search\"\nexport const tags = \"nordicon navigation menu find search magnifying glass\"\n","import { ReactiveController, ReactiveElement } from \"lit\"\n\ntype ObserveFunction = (oldValue: any, newValue: any, name: PropertyKey) => void\ntype ObserveLifecycle = \"update\" | \"updated\"\n\nclass PropertyObserverController<T extends ReactiveElement, TKey extends keyof T> implements ReactiveController {\n private _value?: T[TKey]\n\n constructor(private host: T, private key: TKey, private cb: ObserveFunction, private lifecycle: ObserveLifecycle) {\n host.addController(this)\n }\n\n hostUpdate() {\n if (this.lifecycle === \"update\") {\n this.handle()\n }\n }\n\n hostUpdated() {\n if (this.lifecycle === \"updated\") {\n this.handle()\n }\n }\n\n private handle() {\n const { key, _value, host } = this\n const newValue = host[key]\n\n if (_value !== newValue) {\n this._value = newValue\n this.cb.call(host, _value, newValue, key)\n }\n }\n}\n\nexport function observe(propertyName: string, lifecycle: ObserveLifecycle = \"update\") {\n return function decorator(target: any, methodName: string) {\n const proto = target.constructor as typeof ReactiveElement\n\n proto.addInitializer(el => {\n type Key = keyof typeof el\n const cb = el[methodName as Key] as ObserveFunction\n\n // since we can't get strong typing here, we can add a runtime check\n // this will get stripped out in prod, and should only ever happen in dev anyway\n if (process.env.NODE_ENV === \"development\") {\n if (!(propertyName in el)) {\n throw new TypeError(\n `@observe: no property found with name: '${propertyName}'. Possible properties: ${Object.keys(target).join(\n \", \"\n )}`\n )\n }\n }\n\n el.addController(new PropertyObserverController(el, propertyName as Key, cb, lifecycle))\n })\n }\n}\n","import { html, LitElement } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\nimport { observe } from \"../common/decorators/observe.js\"\nimport { cond } from \"../common/directives/cond.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Icon.css\"\n\nexport type IconResolver = (iconName: string) => Promise<string>\n\n// in dev we should just load from node_modules\nconst loadIcon: IconResolver = (name: string) =>\n import(`@nordhealth/icons/lib/assets/${name}.js`).then(({ default: svg }) => svg)\n\n// in prod we should load from the CDN, as a sensible default\nconst loadIconCdn: IconResolver = (name: string) =>\n fetch(`https://nordcdn.net/ds/icons/${process.env.ICON_VERSION}/assets/${name}.svg`).then(response => {\n if (!response.ok) {\n throw new TypeError(`NORD: unknown icon '${name}'`)\n }\n\n return response.text()\n })\n\n/**\n * Icons are used to provide additional meaning or in places where text label doesn’t fit.\n * Icon component allows you to display an icon from the Nordicons library.\n *\n * @status ready\n * @category image\n * @slot - The default slot used for placing a custom SVG icon.\n */\n@customElement(\"nord-icon\")\nexport default class Icon extends LitElement {\n static styles = [componentStyle, style]\n\n private static resolver: IconResolver = process.env.NODE_ENV === \"development\" ? loadIcon : loadIconCdn\n private static registeredIcons = new Map<string, string>()\n\n /**\n * Register a custom icon resolver, which accepts the icon name as an parameter, and returns an SVG string.\n * Can return a string synchronously, or a promise of a string.\n * By default, will load icons from the Nord CDN.\n * @param resolver The resolver function to register.\n */\n static registerResolver(resolver: IconResolver) {\n Icon.resolver = resolver\n }\n\n /**\n * Register an individual icon so it can be rendered synchronously, to avoid loading over the network.\n * @param icon An object representing the icon to be registered, where \"title\" is the icon's name, and \"default\" is the SVG string.\n * This is intended to be used in cases where you import an icon's entire ES module and register it directly.\n */\n static registerIcon(icon: { title: string; default: string }): void\n\n /**\n * Register an individual icon so it can be rendered synchronously, to avoid loading over the network.\n * @param name The name of the icon to be registered.\n * @param icon The SVG string for the icon.\n */\n static registerIcon(name: string, icon: string): void\n\n /**\n * Register an individual icon so it can be rendered synchronously, to avoid loading over the network.\n * @param iconOrName The name of the icon to be registered or an object representing the icon to be registered, where \"title\" is the icon's name, and \"default\" is the SVG string.\n * @param icon The SVG string for the icon.\n */\n static registerIcon(iconOrName: string | { title: string; default: string }, icon?: string) {\n let name: string | undefined\n let svg: string | undefined\n\n if (typeof iconOrName === \"string\") {\n name = iconOrName\n svg = icon\n } else {\n name = iconOrName.title\n svg = iconOrName.default\n }\n\n // handle errors\n if (!name) {\n throw new Error(\"name is required when registering an icon\")\n }\n if (!svg) {\n throw new Error(\"icon must not be empty\")\n }\n\n if (!Icon.registeredIcons.has(name)) {\n Icon.registeredIcons.set(name, svg)\n }\n }\n\n /**\n * The name of the icon to display, as defined by [nordicons](/nordicons/).\n */\n @property({ reflect: true }) name: string = \"\"\n\n /**\n * The size of the icon.\n */\n @property({ reflect: true }) size: \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The color of the icon.\n * Can accept any valid CSS color value, including custom properties.\n */\n @property({ reflect: true }) color?: string\n\n /**\n * An accessible label for the icon.\n * If no label is supplied, the icon is hidden from assistive technology.\n */\n @property({ reflect: true }) label?: string\n\n @state() private svg: string = \"\"\n\n render() {\n // if a label is supplied, we give the div a role of img.\n // without this we could not use aria-label, since it is only valid on elements of certain roles.\n // we always hide the inner svg, since the svg does not have any text/title/label itself.\n return html`\n <div\n role=${cond(this.label, \"img\")}\n style=${cond(this.color, `color:${this.color}`)}\n aria-label=${ifDefined(this.label)}\n >\n <slot aria-hidden=\"true\"></slot>\n <div aria-hidden=\"true\">${unsafeHTML(this.svg)}</div>\n </div>\n `\n }\n\n @observe(\"name\")\n protected handleNameChange() {\n if (!this.name) {\n this.svg = \"\"\n return\n }\n\n if (Icon.registeredIcons.has(this.name)) {\n this.svg = Icon.registeredIcons.get(this.name) as string\n return\n }\n\n Icon.resolver(this.name)\n .then(svg => {\n this.svg = svg\n })\n .catch(() => {\n this.svg = \"\"\n })\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-icon\": Icon\n }\n}\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){var d;const a=l(s),{values:p,keys:v}=this.dt(t,r,c);if(!Array.isArray(a))return this.ut=v,p;const h=null!==(d=this.ut)&&void 0!==d?d:this.ut=[],m=[];let y,x,j=0,k=a.length-1,w=0,A=p.length-1;for(;j<=k&&w<=A;)if(null===a[j])j++;else if(null===a[k])k--;else if(h[j]===v[w])m[w]=o(a[j],p[w]),j++,w++;else if(h[k]===v[A])m[A]=o(a[k],p[A]),k--,A--;else if(h[j]===v[A])m[A]=o(a[j],p[A]),i(s,m[A+1],a[j]),j++,A--;else if(h[k]===v[w])m[w]=o(a[k],p[w]),i(s,a[j],a[k]),k--,w++;else if(void 0===y&&(y=u(v,w,A),x=u(h,j,k)),y.has(h[j]))if(y.has(h[k])){const e=x.get(v[w]),t=void 0!==e?a[e]:null;if(null===t){const e=i(s,a[j]);o(e,p[w]),m[w]=e}else m[w]=o(t,p[w]),i(s,a[j],t),a[e]=null;w++}else n(a[k]),k--;else n(a[j]),j++;for(;w<=A;){const e=i(s,m[A+1]);o(e,p[w]),m[w++]=e}for(;j<=k;){const e=a[j++];null!==e&&n(e)}return this.ut=v,f(s,m),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as i,Directive as s,PartType as r}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=i(class extends s{constructor(t){var i;if(super(t),t.type!==r.ATTRIBUTE||\"class\"!==t.name||(null===(i=t.strings)||void 0===i?void 0:i.length)>2)throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\")}render(t){return\" \"+Object.keys(t).filter((i=>t[i])).join(\" \")+\" \"}update(i,[s]){var r,o;if(void 0===this.et){this.et=new Set,void 0!==i.strings&&(this.st=new Set(i.strings.join(\" \").split(/\\s/).filter((t=>\"\"!==t))));for(const t in s)s[t]&&!(null===(r=this.st)||void 0===r?void 0:r.has(t))&&this.et.add(t);return this.render(s)}const e=i.element.classList;this.et.forEach((t=>{t in s||(e.remove(t),this.et.delete(t))}));for(const t in s){const i=!!s[t];i===this.et.has(t)||(null===(o=this.st)||void 0===o?void 0:o.has(t))||(i?(e.add(t),this.et.add(t)):(e.remove(t),this.et.delete(t)))}return t}});export{o as classMap};\n//# sourceMappingURL=class-map.js.map\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M105.833 24v93m0-93L80 49.833M105.833 24l25.834 25.833M34.167 117V24m0 93L60 91.167M34.167 117 8.333 91.167\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"14\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"keyboard-arrow-up-down\"\nexport const tags = \"nordicon keyboard keys arrow up down shortcut\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"><path d=\"M35 133 7 105l28-28\"/><path d=\"M7 105h112a14 14 0 0 0 14-14V21a14 14 0 0 0-14-14H77\"/></g></svg>'\nexport const title = \"keyboard-return\"\nexport const tags = \"nordicon keyboard return key shortcut\"\n","export default '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M6.707 4.879A3 3 0 0 1 8.828 4H15a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H8.828a3 3 0 0 1-2.12-.879l-4.415-4.414a1 1 0 0 1 0-1.414l4.414-4.414zm4 2.414a1 1 0 0 0-1.414 1.414L10.586 10l-1.293 1.293a1 1 0 1 0 1.414 1.414L12 11.414l1.293 1.293a1 1 0 0 0 1.414-1.414L13.414 10l1.293-1.293a1 1 0 0 0-1.414-1.414L12 8.586l-1.293-1.293z\" clip-rule=\"evenodd\"/></svg>'\nexport const title = \"keyboard-backspace\"\nexport const tags = \"nordicon keyboard backspace back delete key shortcut\"\n","/**\n * Wraps a value so that it always falls within min/max,\n * where a value greater than max gets set to min, and vice versa\n */\nexport function wrap(val: number, min: number, max: number) {\n if (val > max) return min\n if (val < min) return max\n return val\n}\n\nexport function range(from: number, to: number) {\n const result: number[] = []\n\n for (let i = from; i <= to; i++) {\n result.push(i)\n }\n\n return result\n}\n","/**\n * Gets the currently focused element, taking shadow roots into account.\n */\nexport function getFocusedElement(root: Document | ShadowRoot): Element | undefined {\n if (root.activeElement?.shadowRoot) {\n return getFocusedElement(root.activeElement.shadowRoot)\n }\n\n return root.activeElement || undefined\n}\n","var t=[\"Shift\",\"Meta\",\"Alt\",\"Control\"],e=\"object\"==typeof navigator&&/Mac|iPod|iPhone|iPad/.test(navigator.platform)?\"Meta\":\"Control\";function n(t,e){return\"function\"==typeof t.getModifierState&&t.getModifierState(e)}function r(t){return t.trim().split(\" \").map(function(t){var n=t.split(/\\b\\+/),r=n.pop();return[n=n.map(function(t){return\"$mod\"===t?e:t}),r]})}function o(e,o){var i;void 0===o&&(o={});var u=null!=(i=o.timeout)?i:1e3,a=Object.keys(e).map(function(t){return[r(t),e[t]]}),f=new Map,c=null;return function(e){e instanceof KeyboardEvent&&(a.forEach(function(r){var o=r[0],i=r[1],u=f.get(o)||o;!function(e,r){return!(r[1].toUpperCase()!==e.key.toUpperCase()&&r[1]!==e.code||r[0].find(function(t){return!n(e,t)})||t.find(function(t){return!r[0].includes(t)&&r[1]!==t&&n(e,t)}))}(e,u[0])?n(e,e.key)||f.delete(o):u.length>1?f.set(o,u.slice(1)):(f.delete(o),i(e))}),c&&clearTimeout(c),c=setTimeout(f.clear.bind(f),u))}}function i(t,e,n){var r;void 0===n&&(n={});var i=null!=(r=n.event)?r:\"keydown\",u=o(e,n);return t.addEventListener(i,u),function(){t.removeEventListener(i,u)}}export default i;export{o as createKeybindingsHandler,r as parseKeybinding};\n//# sourceMappingURL=tinykeys.module.js.map\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport type { KeyBindingMap } from \"tinykeys\"\nimport tinykeys from \"tinykeys\"\n\ntype ShortcutTarget = Parameters<typeof tinykeys>[0]\n\nconst ARROW_RE = /Arrow(Up|Down|Left|Right)/g\nconst ESC_RE = /Escape/g\n\nfunction normalise(shortcuts: KeyBindingMap) {\n const normalised: KeyBindingMap = {}\n\n Object.keys(shortcuts).forEach(keybinding => {\n normalised[keybinding] = shortcuts[keybinding]\n\n // Arrow and Escape keys in IE/Edge have different names\n if (ARROW_RE.test(keybinding)) {\n const mapped = keybinding.replace(ARROW_RE, (_match, capture) => capture)\n normalised[mapped] = normalised[keybinding]\n }\n if (ESC_RE.test(keybinding)) {\n const mapped = keybinding.replace(ESC_RE, () => \"Esc\")\n normalised[mapped] = normalised[keybinding]\n }\n })\n\n return normalised\n}\n\nexport class ShortcutController implements ReactiveController {\n private unregister?: ReturnType<typeof tinykeys>\n\n constructor(\n host: ReactiveControllerHost,\n private shortcuts?: KeyBindingMap,\n private target: ShortcutTarget = window\n ) {\n host.addController(this)\n }\n\n hostConnected() {\n if (this.shortcuts) {\n this.bind(this.shortcuts)\n }\n }\n\n hostDisconnected() {\n this.unbind()\n }\n\n unbind() {\n this.unregister?.()\n }\n\n bind(shortcuts: KeyBindingMap) {\n this.unbind()\n this.shortcuts = shortcuts\n this.unregister = tinykeys(this.target, normalise(this.shortcuts))\n }\n}\n\nexport type { KeyBindingMap as ShortcutMap }\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { EventController } from \"./EventController.js\"\nimport { ShortcutController } from \"./ShortcutController.js\"\n\ntype 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","import { ReactiveController } from \"lit\"\nimport CommandMenu from \"./CommandMenu.js\"\nimport { ShortcutController, ShortcutMap } from \"../common/controllers/ShortcutController.js\"\n\ntype KeyboardActions = {\n trigger: () => void\n goBack: () => void\n start: () => void\n end: () => void\n next: () => void\n previous: () => void\n toggleOpen: () => void\n}\n\nconst preventDefault = (fn: (e: Event) => void) => (e: Event) => {\n e.preventDefault()\n fn(e)\n}\n\nexport class KeyboardController {\n private globalShortcuts: ShortcutController\n private navigationShortcuts: ShortcutController\n private commandShortcuts: ShortcutController\n\n constructor(private host: CommandMenu, actions: KeyboardActions) {\n host.addController(this as ReactiveController)\n\n this.commandShortcuts = new ShortcutController(host)\n this.globalShortcuts = new ShortcutController(host, { \"$mod+k\": preventDefault(actions.toggleOpen) })\n this.navigationShortcuts = new ShortcutController(\n host,\n {\n Enter: preventDefault(actions.trigger),\n Backspace: actions.goBack, // we don't want to prevent default, since that would stop backspace deleting chars\n End: preventDefault(actions.end),\n Home: preventDefault(actions.start),\n ArrowDown: preventDefault(actions.next),\n ArrowUp: preventDefault(actions.previous),\n },\n host\n )\n }\n\n registerCommandShortcuts() {\n const shortcuts: ShortcutMap = {}\n\n for (const command of this.host.commands) {\n if (command.shortcut) {\n shortcuts[command.shortcut] = () => command.handler?.(this.host)\n }\n }\n\n this.commandShortcuts.bind(shortcuts)\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m38.5 7 60.9 58.044a7 7 0 0 1 0 9.912L38.5 133\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/></svg>'\nexport const title = \"arrow-right\"\nexport const tags = \"nordicon arrow right caret pointing triangle chevron\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M101.5 133 40.6 74.956a7 7 0 0 1 0-9.912L101.5 7\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/></svg>'\nexport const title = \"arrow-left\"\nexport const tags = \"nordicon arrow left caret pointing triangle chevron\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><g transform=\"matrix(14,0,0,14,0,0)\"><path d=\"M0.5 3L3 3 6.5 7 9.5 7\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path><path d=\"M6.5 3L9.5 3\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></g></svg>'\nexport const title = \"keyboard-option\"\nexport const tags = \"nordicon keyboard option key shortcut\"\n","import { ReactiveController, ReactiveControllerHost } from \"lit\"\n\nexport type WritingDirection = \"ltr\" | \"rtl\"\n\nexport class DirectionController implements ReactiveController {\n // these are all static as we only want a single observer on <html>\n private static hosts = new Set<ReactiveControllerHost>()\n private static observer?: MutationObserver\n\n // eslint-disable-next-line class-methods-use-this\n get dir(): WritingDirection {\n return (document.documentElement.dir as WritingDirection) || \"ltr\"\n }\n\n get isLTR() {\n return this.dir === \"ltr\"\n }\n\n get isRTL() {\n return this.dir === \"rtl\"\n }\n\n constructor(private host: ReactiveControllerHost) {\n this.host.addController(this)\n }\n\n hostConnected() {\n if (!DirectionController.observer) {\n DirectionController.observer = new MutationObserver(DirectionController.observe)\n DirectionController.observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"dir\"] })\n }\n\n if (!DirectionController.hosts.has(this.host)) {\n DirectionController.hosts.add(this.host)\n }\n }\n\n hostDisconnected() {\n DirectionController.hosts.delete(this.host)\n }\n\n private static observe() {\n DirectionController.hosts.forEach(host => host.requestUpdate())\n }\n}\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport * as chevronIconRight from \"@nordhealth/icons/lib/assets/arrow-right.js\"\nimport * as chevronIconLeft from \"@nordhealth/icons/lib/assets/arrow-left.js\"\nimport * as altKeyIcon from \"@nordhealth/icons/lib/assets/keyboard-option.js\"\n\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\nimport { DirectionController } from \"../common/controllers/DirectionController.js\"\nimport { observe } from \"../common/decorators/observe.js\"\nimport Icon from \"../icon/Icon.js\"\nimport \"../visually-hidden/VisuallyHidden.js\"\n\nimport style from \"./CommandMenuAction.css\"\n\nconst KEY_REGEX = /(?:Key|Digit)([A-Z0-9])/g\nconst isMacintosh = () => navigator.platform.indexOf(\"Mac\") > -1\n\nIcon.registerIcon(chevronIconLeft)\nIcon.registerIcon(chevronIconRight)\nIcon.registerIcon(altKeyIcon)\n\n/**\n * Command Menu Action displays a single action that can be executed by the user. For usage examples, please see Command Menu component.\n *\n * @status internal\n */\n@customElement(\"nord-command-menu-action\")\nexport default class CommandMenuAction extends LitElement {\n static styles = style\n\n private direction = new DirectionController(this)\n\n @property({ type: Object }) command!: ICommandMenuAction\n\n @property({ type: Boolean }) selected = false\n\n override render() {\n return html`\n <div\n class=${classMap({\n \"n-selected\": this.selected,\n \"n-command\": true,\n })}\n >\n <div aria-hidden=\"true\" class=\"n-command-icon\">\n <nord-icon size=\"s\" name=${this.getIconName()}></nord-icon>\n </div>\n <div class=\"n-title\">${this.command.title}</div>\n ${this.renderShortcut()}\n </div>\n `\n }\n\n /**\n * Scroll to show element\n */\n @observe(\"selected\")\n protected ensureInView() {\n if (this.selected) {\n requestAnimationFrame(() => this.scrollIntoView({ block: \"nearest\" }))\n }\n }\n\n private getIconName() {\n if (this.command.icon) {\n return this.command.icon\n }\n\n return this.direction.isLTR ? chevronIconRight.title : chevronIconLeft.title\n }\n\n private renderShortcut() {\n if (!this.command.shortcut) {\n return nothing\n }\n\n const keys = this.command.shortcut.replace(KEY_REGEX, \"$1\")\n\n return html`\n <nord-visually-hidden>, ${keys}</nord-visually-hidden>\n\n <div aria-hidden=\"true\" class=\"n-shortcuts\">\n ${keys\n .split(\"+\")\n .map(\n key =>\n html`<div class=\"n-shortcut\">\n ${key.toLowerCase() === \"alt\" && isMacintosh()\n ? html`<nord-icon name=${altKeyIcon.title} size=\"s\"></nord-icon>`\n : key}\n </div>`\n )}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-command-menu-action\": CommandMenuAction\n }\n}\n","import { NordEvent } from \"../common/events.js\"\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\n\nexport class SelectEvent extends NordEvent {\n static eventName = \"nord-select\"\n\n constructor(public command: ICommandMenuAction) {\n super(SelectEvent.eventName)\n }\n}\n","import commandMenuLocalization from \"../command-menu/localization.js\"\nimport datePickerLocalization from \"../date-picker/localization.js\"\nimport calendarLocalization from \"../calendar/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}\n\nexport default en\n","const commandMenuLocalization = {\n instructions: \"Press 'Enter' to confirm your input or 'Escape' to cancel\",\n inputLabel: \"Type the name of a command to run.\",\n footerArrowKeys: \"Navigate\",\n footerEnterKey: \"Select\",\n footerEscapeKey: \"Esc to dismiss\",\n footerBackspaceKey: \"Move to parent\",\n noResults: (searchTerm: string) => `No results for “${searchTerm}”`,\n tip: \"Search tips: some search terms require exact match. Try typing the entire command name, or use a different word or phrase.\",\n}\n\nexport default commandMenuLocalization\n","const calendarLocalization = {\n prevMonthLabel: \"Previous month\",\n nextMonthLabel: \"Next month\",\n monthSelectLabel: \"Month\",\n yearSelectLabel: \"Year\",\n}\n\nexport default calendarLocalization\n","const datePickerLocalization = {\n modalHeading: \"Choose a date\",\n closeLabel: \"Close window\",\n buttonLabel: \"Choose date\",\n selectedDateMessage: \"Selected date is\",\n}\n\nexport default datePickerLocalization\n","import en from \"./en-us.js\"\n\n// gets list of properties beginning prefix\ntype PickStartsWith<Type, Prefix extends string> = {\n [Property in keyof Type]: Property extends `${Prefix}${string}` ? Property : never\n}[keyof Type]\n\nexport type Translation = typeof en\nexport type WellKnownKeys = PickStartsWith<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): Translation {\n const lang = langCode.toLowerCase()\n const [langOnly] = lang.split(\"-\")\n\n return translations.get(lang) || translations.get(langOnly) || en\n}\n","import type { ReactiveController, ReactiveControllerHost } from \"lit\"\nimport { subscribe, resolveTranslation, Translation, WellKnownKeys } from \"./translation.js\"\n\n// helper types...\n\n// used to match any function\ntype Func = (...args: any[]) => any\n\n// if object property is function, use return type, else value type\ntype Result<Type, Key extends keyof Type> = Type[Key] extends Func ? ReturnType<Type[Key]> : Type[Key]\n\n// if object property is function,\ntype FuncParams<Type, K extends keyof Type> = Type[K] extends Func ? Parameters<Type[K]> : never\n\nconst noop = () => {\n // this function is intentionally left blank\n}\n\nexport class LocalizeController<TComponentName extends Exclude<keyof Translation, WellKnownKeys>>\n implements ReactiveController\n{\n private unsubscribe?: ReturnType<typeof subscribe>\n private resolvedTranslation: Translation\n\n constructor(private host: ReactiveControllerHost & HTMLElement, private options = { onLangChange: noop }) {\n host.addController(this)\n this.resolvedTranslation = resolveTranslation(this.lang)\n }\n\n /**\n * The lang of the document or element, with element taking precedence\n */\n get lang() {\n return this.host.lang || document.documentElement.lang\n }\n\n /**\n * The lang of the translation being applied.\n * This may not match the document/element lang, in case of fallback translation\n */\n get resolvedLang() {\n return this.resolvedTranslation.$lang\n }\n\n hostConnected() {\n this.unsubscribe = subscribe(this.handleLangChange)\n this.options.onLangChange()\n }\n\n hostDisconnected() {\n this.unsubscribe?.()\n }\n\n term<Key extends keyof Translation[TComponentName]>(\n key: Key,\n ...args: FuncParams<Translation[TComponentName], Key>\n ): Result<Translation[TComponentName], Key> {\n const componentName = this.host.localName as TComponentName\n const translation = this.resolvedTranslation[componentName]\n\n const t = translation[key]\n return typeof t === \"function\" ? t(...args) : t\n }\n\n private handleLangChange = () => {\n const resolved = resolveTranslation(this.lang)\n\n if (this.resolvedTranslation !== resolved) {\n this.resolvedTranslation = resolved\n\n this.options.onLangChange()\n this.host.requestUpdate()\n }\n }\n}\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { repeat } from \"lit/directives/repeat.js\"\nimport { createRef, ref } from \"lit/directives/ref.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\n\nimport * as navigateIcon from \"@nordhealth/icons/lib/assets/keyboard-arrow-up-down.js\"\nimport * as enterIcon from \"@nordhealth/icons/lib/assets/keyboard-return.js\"\nimport * as backspaceIcon from \"@nordhealth/icons/lib/assets/keyboard-backspace.js\"\n\nimport { groupBy } from \"../common/collection.js\"\nimport { wrap } from \"../common/number.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { getFocusedElement } from \"../common/focus.js\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { KeyboardController } from \"./KeyboardController.js\"\n\nimport Icon from \"../icon/Icon.js\"\nimport \"../visually-hidden/VisuallyHidden.js\"\nimport \"./CommandMenuAction.js\"\nimport { ICommandMenuAction } from \"./ICommandMenuAction.js\"\nimport { SelectEvent } from \"./SelectEvent.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./CommandMenu.css\"\nimport { LocalizeController } from \"../localization/LocalizeController.js\"\nimport { cond } from \"../common/directives/cond.js\"\nimport { observe } from \"../common/decorators/observe.js\"\n\nIcon.registerIcon(navigateIcon)\nIcon.registerIcon(enterIcon)\nIcon.registerIcon(backspaceIcon)\n\n/**\n * Command Menu allows users to navigate and use an app without\n * touching the mouse and helps them transform into “power users”\n * who can harness more advanced features far faster.\n *\n * @status ready\n * @category action\n * @slot footer - Used to replace the default footer contents.\n * @fires open - The command menu was opened.\n * @fires close - The command menu was closed.\n * @fires {SelectEvent} nord-select - User selected a command from the menu.\n */\n@customElement(\"nord-command-menu\")\nexport default class CommandMenu extends LitElement {\n static styles = [componentStyle, style]\n\n private inputRef = createRef<HTMLInputElement>()\n private listRef = createRef<HTMLElement>()\n private previousFocus?: HTMLElement\n\n private localize = new LocalizeController<\"nord-command-menu\">(this)\n private dismissController = new LightDismissController(this, {\n isOpen: () => this.open,\n onDismiss: () => this.close(),\n })\n\n private keyboardController = new KeyboardController(this, {\n trigger: () => this.select(),\n goBack: () => this.goBack(),\n end: () => this.end(),\n start: () => this.start(),\n next: () => this.next(),\n previous: () => this.previous(),\n toggleOpen: () => this.toggleOpen(),\n })\n\n /**\n * Show or hide the command menu.\n */\n @property({ type: Boolean }) open = false\n\n /**\n * Hint text to display in the Command Menu search field.\n */\n @property({ type: String }) placeholder = \"Type a command or search...\"\n\n /**\n * Array of commands to be included in the menu.\n * Please see “Commands data” section for more documentation.\n */\n @property({ type: Array, attribute: false }) commands: Array<ICommandMenuAction> = []\n\n @state() private parent?: string\n @state() private search: string = \"\"\n @state() private bump = true\n @state() private selectedIndex = 0\n @state() private filteredCommands: Array<ICommandMenuAction> = []\n\n private get selected(): ICommandMenuAction {\n return this.filteredCommands[this.selectedIndex]\n }\n\n /**\n * Show the command menu programmatically.\n * @param options allows you to open the menu filtered to a specific parent command.\n */\n show(options: { parent?: string } = {}) {\n const notCancelled = this.dispatchEvent(new NordEvent(\"open\", { cancelable: true }))\n\n if (notCancelled) {\n this.open = true\n this.setParent(options.parent)\n }\n }\n\n /**\n * Close the command menu programmatically.\n */\n close() {\n this.open = false\n this.previousFocus?.focus()\n this.previousFocus = undefined\n\n this.dispatchEvent(new NordEvent(\"close\"))\n }\n\n /**\n * Toggle the open state programmatically.\n */\n toggleOpen() {\n if (this.open) {\n this.close()\n } else {\n this.show()\n }\n }\n\n /**\n * Focus the command menu's input.\n */\n focus() {\n this.inputRef.value?.focus()\n }\n\n override render() {\n const sections = groupBy(this.filteredCommands, \"section\")\n const activeDescendant = this.filteredCommands.length === 0 ? \"no-results\" : this.selected?.id\n\n return html`\n <div\n class=${classMap({\n \"n-visible\": this.open,\n \"n-modal\": true,\n })}\n >\n <div\n @animationend=${this.handleAnimationEnd}\n class=${classMap({\n \"n-bump\": this.bump,\n \"n-modal-content\": true,\n })}\n >\n <div class=\"n-search-wrapper\">\n <nord-visually-hidden id=\"instructions\"> ${this.localize.term(\"instructions\")} </nord-visually-hidden>\n <input\n type=\"text\"\n id=\"search\"\n @input=${this.handleInput}\n @blur=${this.handleBlur}\n ${ref(this.inputRef)}\n placeholder=${this.placeholder}\n .value=${this.search}\n spellcheck=\"false\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n aria-label=${this.localize.term(\"inputLabel\")}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-controls=\"list\"\n aria-expanded=\"true\"\n aria-activedescendant=${ifDefined(activeDescendant)}\n aria-describedby=\"instructions\"\n />\n </div>\n\n <div class=\"n-modal-body\">\n <div id=\"list\" ${ref(this.listRef)} role=\"listbox\">\n ${this.filteredCommands.length === 0\n ? this.renderNoResults()\n : Array.from(sections, ([section, commands]) => this.renderSection(section, commands))}\n </div>\n </div>\n <slot name=\"footer\">\n <div class=\"n-modal-footer\">\n <span class=\"n-help\">\n <nord-icon label=\"Arrow keys\" name=${navigateIcon.title}></nord-icon>\n ${this.localize.term(\"footerArrowKeys\")}\n </span>\n <span class=\"n-help\">\n <nord-icon label=\"Enter key\" name=${enterIcon.title}></nord-icon>\n ${this.localize.term(\"footerEnterKey\")}\n </span>\n <span class=\"n-help\">${this.localize.term(\"footerEscapeKey\")}</span>\n <span class=\"n-help n-backspace\">\n <nord-icon label=\"Backspace key\" name=${backspaceIcon.title}></nord-icon>\n ${this.localize.term(\"footerBackspaceKey\")}\n </span>\n </div>\n </slot>\n </div>\n </div>\n `\n }\n\n private renderNoResults() {\n return html`\n <div id=\"no-results\" class=\"n-command-empty\" role=\"option\" aria-selected=\"true\">\n <div class=\"n-title\">${this.localize.term(\"noResults\", this.search)}</div>\n <div class=\"n-tip\">${this.localize.term(\"tip\")}</div>\n </div>\n `\n }\n\n private renderSection(section: string | undefined, commands: ICommandMenuAction[]) {\n const sectionId = `section-${section}`\n\n // TODO: test on latest safari, since it seems to have issues with grouped options\n return html`\n <div role=\"group\" aria-labelledby=${cond(section, sectionId)}>\n ${section ? html`<div class=\"n-group-header\" role=\"presentation\" id=${sectionId}>${section}</div>` : nothing}\n ${repeat(\n commands,\n command => command.id,\n command => html`\n <nord-command-menu-action\n id=${command.id}\n .command=${command}\n ?selected=${command.id === this.selected?.id}\n @click=${() => this.select(command)}\n role=\"option\"\n aria-selected=${ifDefined(command.id === this.selected?.id || undefined)}\n ></nord-command-menu-action>\n `\n )}\n </div>\n `\n }\n\n @observe(\"commands\")\n protected handleCommandsChange() {\n this.keyboardController.registerCommandShortcuts()\n }\n\n @observe(\"open\")\n protected handleBump() {\n if (this.open) {\n this.bump = true\n }\n }\n\n @observe(\"open\", \"updated\")\n protected focusOnOpen() {\n if (this.open) {\n this.previousFocus = getFocusedElement(document) as HTMLElement\n this.focus()\n\n if (this.listRef.value) {\n this.listRef.value.scrollTop = 0\n }\n }\n }\n\n private handleAnimationEnd() {\n this.bump = false\n }\n\n private handleBlur() {\n if (this.open) {\n this.focus()\n }\n }\n\n private handleInput(event: KeyboardEvent) {\n const input = event.target as HTMLInputElement\n this.setSearch(input.value)\n }\n\n private select(command: ICommandMenuAction = this.selected) {\n const isParent = this.commands.some(item => item.parent === command.id)\n\n if (isParent) {\n this.setParent(command.id)\n this.bump = true\n this.focus()\n } else {\n this.close()\n }\n\n this.setSearch(\"\")\n command.handler?.(this)\n\n // this is separated into two parts because of a bug in Custom Elements Analyzer, where it gets the event name wrong.\n // TODO: cleanup when bug is fixed.\n const event = new SelectEvent(command)\n this.dispatchEvent(event)\n }\n\n private start() {\n this.selectedIndex = 0\n }\n\n private end() {\n this.selectedIndex = this.filteredCommands.length - 1\n }\n\n private next() {\n this.selectedIndex = wrap(this.selectedIndex + 1, 0, this.filteredCommands.length - 1)\n }\n\n private previous() {\n this.selectedIndex = wrap(this.selectedIndex - 1, 0, this.filteredCommands.length - 1)\n }\n\n private goBack() {\n if (this.search) {\n return\n }\n\n if (this.parent) {\n const parentCommand = this.commands.find(command => command.id === this.parent)\n this.setParent(parentCommand?.parent)\n }\n }\n\n private setParent(parent?: string) {\n this.parent = parent\n this.setSearch(\"\")\n }\n\n private setSearch(str: string) {\n this.search = str\n this.selectedIndex = 0\n }\n\n @observe(\"search\")\n @observe(\"parent\")\n @observe(\"commands\")\n private filterCommands() {\n const searchTerms = this.search.toLocaleLowerCase().split(/\\s+/)\n\n this.filteredCommands = this.commands.filter(({ title, keywords = \"\", parent }) => {\n const searchSpace = `${title} ${keywords}`.toLocaleLowerCase()\n const matcher = searchTerms.every(term => searchSpace.includes(term))\n\n if (!this.parent && this.search) {\n // global search for items on root\n return matcher\n }\n\n return parent === this.parent && matcher\n })\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-command-menu\": CommandMenu\n }\n}\n","/**\n * Groups an array objects by property value\n * @param array the collection of objects to group\n * @param key the property to group by\n * @returns a Map keyed by property value, where values are are an array of objects with that property value.\n */\nexport function groupBy<TObject extends Record<any, any>, TKey extends keyof TObject>(\n array: Array<TObject>,\n key: TKey\n) {\n const grouped = new Map<TObject[TKey], TObject[]>()\n\n for (const item of array) {\n const value = item[key]\n const collection = grouped.get(value) ?? []\n\n if (!grouped.has(value)) {\n grouped.set(value, [])\n }\n collection.push(item)\n grouped.set(value, collection)\n }\n\n return grouped\n}\n\n/**\n * Split an array into chunks of the given size\n * @param array\n * @param chunkSize\n * @returns\n */\nexport function chunk<T>(array: T[], chunkSize: number): T[][] {\n const result = []\n\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize))\n }\n\n return result\n}\n\n/**\n * maps over an array, starting at the given offset and wrapping around.\n * @param array\n * @param startingOffset\n * @param mapFn\n * @returns\n */\nexport function mapWithOffset<T, U>(array: T[], startingOffset: number, mapFn: (item: T, i: number) => U): U[] {\n return array.map((_, i) => {\n const adjustedIndex = (i + startingOffset) % array.length\n return mapFn(array[adjustedIndex], adjustedIndex)\n })\n}\n","/* eslint-disable lit-a11y/no-invalid-change-handler */\nimport { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\"\n\nimport \"../button/Button.js\"\n\nimport dropdownIcon from \"@nordhealth/icons/lib/assets/interface-dropdown-small.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Select.css\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\n\n/**\n * Select lets users choose one option from an options menu.\n * Consider using select when you have 5 or more options to choose from.\n *\n * @status ready\n * @category form\n * @slot - Default slot for holding <option> elements.\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@customElement(\"nord-select\")\nexport default class Select extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, style]\n\n protected override get formValue() {\n return this.value || undefined\n }\n\n private defaultSlot = new SlotController(this)\n\n protected inputId = \"select\"\n\n render() {\n const slottedOptions = this.options\n const buttonText = this.getButtonText(slottedOptions)\n\n return html`\n <slot></slot>\n ${this.renderLabel()}\n\n <div class=\"n-select-container\">\n <select\n ${ref(this.focusableRef)}\n id=${this.inputId}\n ?disabled=${this.disabled}\n ?required=${this.required}\n name=${ifDefined(this.name)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n >\n ${this.placeholder && html`<option value=\"\" disabled ?selected=${!this.value}>${this.placeholder}</option>`}\n ${slottedOptions.map(option => this.renderOption(option))}\n </select>\n\n <nord-button tabindex=\"-1\" ?disabled=${this.disabled} ?expand=${this.expand} aria-hidden=\"true\" type=\"button\">\n <slot slot=\"start\" name=\"start\"></slot>\n ${buttonText}\n <div slot=\"end\">${unsafeHTML(dropdownIcon)}</div>\n </nord-button>\n </div>\n\n ${this.renderError()}\n `\n }\n\n private get options() {\n return Array.from(this.querySelectorAll(\"option\"))\n }\n\n private getButtonText(options: HTMLOptionElement[]): string {\n const selected = options.find(option => option.value === this.value.toString())\n\n if (selected) {\n return selected.text\n }\n\n if (this.placeholder) {\n return this.placeholder\n }\n\n if (options[0]) {\n return options[0].text\n }\n\n return \"\"\n }\n\n private renderOption(option: HTMLOptionElement) {\n return html`\n <option\n value=${ifDefined(option.value)}\n ?disabled=${option.disabled}\n ?selected=${option.value === this.value.toString()}\n >\n ${option.text}\n </option>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-select\": Select\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M105 56a10.416 10.416 0 0 1-7.42-3.08L72.478 27.818a3.528 3.528 0 0 0-4.956 0L42.42 52.92a10.5 10.5 0 0 1-14.84-14.84l35-35a10.486 10.486 0 0 1 14.84 0l35 35A10.5 10.5 0 0 1 105 56zm-35 84a10.416 10.416 0 0 1-7.42-3.08l-35-35a10.5 10.5 0 0 1 14.84-14.84l25.102 25.102a3.528 3.528 0 0 0 4.956 0L97.58 87.08a10.5 10.5 0 1 1 14.84 14.84l-35 35A10.416 10.416 0 0 1 70 140z\"/></svg>'\nexport const title = \"interface-dropdown-small\"\nexport const tags = \"nordicon small interface dropdown select arrow up down caret triangle chevron\"\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Stack.css\"\n\n/**\n * Stack component manages layout of immediate children along the\n * vertical or horizontal axis with optional spacing between each child.\n *\n * @status ready\n * @category structure\n * @slot - The stack content.\n */\n@customElement(\"nord-stack\")\nexport default class Stack extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The space injected between components.\n */\n @property({ reflect: true }) gap: \"none\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The direction of the stack.\n */\n @property({ reflect: true }) direction: \"vertical\" | \"horizontal\" = \"vertical\"\n\n /**\n * How to align the child items inside the stack.\n */\n @property({ reflect: true, attribute: \"align-items\" }) alignItems?: \"center\" | \"start\" | \"end\" | \"stretch\" = \"stretch\"\n\n /**\n * Enable or disable responsive behaviour of the stack component.\n * Setting this option \"true\" makes sure that contents are\n * stacked vertically on mobile (768px and under).\n */\n @property({ reflect: true, type: Boolean }) responsive = false\n\n /**\n * Defines whether the Stack items are forced in a single line\n * or can be flowed into multiple lines.\n */\n @property({ reflect: true, type: Boolean }) wrap = false\n\n /**\n * How to justify the child items inside the stack.\n */\n @property({ reflect: true, attribute: \"justify-content\" }) justifyContent?:\n | \"center\"\n | \"start\"\n | \"end\"\n | \"baseline\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\"\n\n render() {\n return html`<slot></slot>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-stack\": Stack\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { cond } from \"../common/directives/cond.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Spinner.css\"\n\n/**\n * Spinner component is used to indicate users that their action is being\n * processed. You can customize the size and color of the spinner with the\n * provided properties.\n *\n * @status ready\n * @category feedback\n */\n@customElement(\"nord-spinner\")\nexport default class Spinner extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The size of the spinner.\n */\n @property({ reflect: true }) size: \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The color of the spinner.\n * Can accept any valid CSS color value, including custom properties.\n */\n @property({ reflect: true }) color?: string\n\n /**\n * An accessible label for the spinner.\n * If no label is supplied, the spinner is hidden from assistive technology.\n */\n @property({ reflect: true }) label?: string\n\n render() {\n // if a label is supplied, we give the div a role of img.\n // without this we could not use aria-label, since it is only valid on elements of certain roles.\n return html`\n <div\n class=\"n-spinner\"\n role=${cond(this.label, \"img\")}\n aria-label=${ifDefined(this.label)}\n style=${cond(this.color, `color:${this.color}`)}\n ></div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-spinner\": Spinner\n }\n}\n","import { LitElement, html, render } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport style from \"./Table.css\"\n\nfunction isDocument(node: Node): node is Document {\n return node.nodeType === Node.DOCUMENT_NODE\n}\n\n/**\n * Table is used to organize and display information from a data set.\n * Provides table styles in addition to features like sticky\n * headers and support for narrow viewports.\n *\n * @status ready\n * @category list\n * @slot - The table.\n */\n@customElement(\"nord-table\")\nexport default class Table extends LitElement {\n static styles = style\n\n /**\n * Controls the density of the table's rows and headers.\n * Relaxed increases space, condensed reduces space.\n */\n @property({ reflect: true }) density: \"condensed\" | \"default\" | \"relaxed\" = \"default\"\n\n connectedCallback() {\n super.connectedCallback()\n this.renderStyles()\n }\n\n /**\n * renders table styles into nearest root.\n * this is necessary since we do not use shadow dom.\n */\n private renderStyles() {\n const rootNode = this.getRootNode() as Document | ShadowRoot\n const renderTarget = isDocument(rootNode) ? rootNode.head : rootNode\n const tagName = this.localName\n\n const componentStyles = rootNode.querySelector(`style[data-component=${tagName}]`)\n if (componentStyles) {\n return\n }\n\n render(\n html`\n <style data-component=${tagName}>\n ${style}\n </style>\n `,\n renderTarget\n )\n }\n\n /**\n * opt out of shadow dom\n */\n protected createRenderRoot() {\n return this\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-table\": Table\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { observe } from \"../common/decorators/observe.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport textFieldStyle from \"../common/styles/TextField.css\"\nimport style from \"./Textarea.css\"\n\n/**\n * Textarea is a component that allows user to write text over\n * multiple rows. Used when the expected user input is long.\n * For shorter input, use the Input component.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the textarea.\n * @slot error - Optional slot that holds error text for the textarea.\n */\n@customElement(\"nord-textarea\")\nexport default class Textarea extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, textFieldStyle, style]\n\n protected inputId = \"textarea\"\n\n /**\n * Controls whether the textarea is resizable.\n * By default is manually resizable vertically.\n * Set to \"auto\" to enable auto-resizing as content grows.\n */\n @property({ reflect: true }) resize: \"vertical\" | \"auto\" = \"vertical\"\n\n render() {\n return html`\n ${this.renderLabel()}\n\n <div class=\"n-input-container\">\n <textarea\n ${ref(this.focusableRef)}\n id=${this.inputId}\n class=\"n-input\"\n ?disabled=${this.disabled}\n ?required=${this.required}\n name=${ifDefined(this.name)}\n .value=${this.value ?? \"\"}\n placeholder=${ifDefined(this.placeholder)}\n @change=${this.handleChange}\n @input=${this.handleInput}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n ></textarea>\n </div>\n\n ${this.renderError()}\n `\n }\n\n @observe(\"resize\", \"updated\")\n @observe(\"value\", \"updated\")\n protected resizeToFitContent() {\n const textarea = this.focusableRef.value\n\n if (!textarea) {\n return\n }\n\n if (this.resize === \"auto\") {\n textarea.style.height = \"auto\"\n textarea.style.height = `${textarea.scrollHeight}px`\n } else {\n // @ts-expect-error this is actually fine, and removes the style value\n textarea.style.height = null\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-textarea\": Textarea\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M105 57.4 47.6 2.8a10.566 10.566 0 1 0-14.56 15.316l51.968 49.35a3.486 3.486 0 0 1 0 5.068l-51.968 49.35a10.502 10.502 0 0 0 14.462 15.232l57.638-54.74A17.584 17.584 0 0 0 105 57.4z\"/></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 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M99.736 140a10.486 10.486 0 0 1-7.238-2.884L35 82.6a17.598 17.598 0 0 1-.14-24.976l57.638-54.74a10.502 10.502 0 1 1 14.462 15.232l-51.968 49.35a3.486 3.486 0 0 0 0 5.068l51.968 49.35A10.5 10.5 0 0 1 99.736 140z\"/></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 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M70 110.236a17.332 17.332 0 0 1-12.306-5.096L2.884 47.502A10.502 10.502 0 1 1 18.116 33.04l49.35 51.968a3.486 3.486 0 0 0 5.068 0l49.35-51.968a10.502 10.502 0 1 1 15.232 14.462L82.6 105a17.766 17.766 0 0 1-12.6 5.236z\"/></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","const ISO_DATE_FORMAT = /^(\\d{4})-(\\d{2})-(\\d{2})$/\n\nexport const enum DaysOfWeek {\n Sunday = 0,\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3,\n Thursday = 4,\n Friday = 5,\n Saturday = 6,\n}\n\nexport function createDate(year: string, month: string, day: string): Date | undefined {\n const dayInt = parseInt(day, 10)\n const monthInt = parseInt(month, 10)\n const yearInt = parseInt(year, 10)\n\n const isValid =\n Number.isInteger(yearInt) && // all parts should be integers\n Number.isInteger(monthInt) &&\n Number.isInteger(dayInt) &&\n monthInt > 0 && // month must be 1-12\n monthInt <= 12 &&\n dayInt > 0 && // day must be 1-31\n dayInt <= 31 &&\n yearInt > 0\n\n if (isValid) {\n const date = new Date(yearInt, monthInt - 1, dayInt)\n // this handles values where year is 0-99, which JS \"helpfully\" interprets as 1900-1999\n date.setFullYear(yearInt)\n\n return date\n }\n\n return undefined\n}\n\n/**\n * @param value date string in ISO format YYYY-MM-DD\n */\nexport function parseISODate(value: string): Date | undefined {\n if (!value) {\n return undefined\n }\n\n const matches = value.match(ISO_DATE_FORMAT)\n\n if (matches) {\n return createDate(matches[1], matches[2], matches[3])\n }\n\n return undefined\n}\n\n/**\n * print date in format YYYY-MM-DD\n * @param date\n */\nexport function printISODate(date: Date): string {\n if (!date) {\n return \"\"\n }\n\n const d = date.getDate().toString(10)\n const m = (date.getMonth() + 1).toString(10)\n const y = date.getFullYear().toString(10)\n\n return `${y.padStart(4, \"0\")}-${m.padStart(2, \"0\")}-${d.padStart(2, \"0\")}`\n}\n\nfunction today() {\n const date = new Date()\n return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0))\n}\n\nexport function getDayNames(locale: string, weekday: Exclude<Intl.DateTimeFormatOptions[\"weekday\"], undefined>) {\n const days = []\n const options = { weekday }\n const day = today()\n\n for (let i = 0; i < 7; i++) {\n days[day.getDay()] = day.toLocaleDateString(locale, options)\n day.setDate(day.getDate() + 1)\n }\n\n return days\n}\n\nexport function getMonthNames(locale: string, month: Exclude<Intl.DateTimeFormatOptions[\"month\"], undefined>) {\n const months = []\n const options = { month }\n\n // set to first of the month, so that all dates are valid\n const day = today()\n day.setDate(1)\n\n for (let i = 0; i < 12; i++) {\n months[day.getMonth()] = day.toLocaleDateString(locale, options)\n day.setMonth(day.getMonth() + 1)\n }\n\n return months\n}\n\n/**\n * Compare if two dates are in the same month of the same year.\n */\nexport function isEqualMonth(a?: Date, b?: Date): boolean {\n if (a == null || b == null) {\n return false\n }\n\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth()\n}\n\n/**\n * Compare if two dates are equal in terms of day, month, and year\n */\nexport function isEqual(a?: Date, b?: Date): boolean {\n if (a == null || b == null) {\n return false\n }\n\n return isEqualMonth(a, b) && a.getDate() === b.getDate()\n}\n\nexport function addDays(date: Date, days: number): Date {\n const d = new Date(date)\n d.setDate(d.getDate() + days)\n return d\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const d = new Date(date)\n d.setMonth(date.getMonth() + months)\n return d\n}\n\nexport function addYears(date: Date, years: number): Date {\n const d = new Date(date)\n d.setFullYear(date.getFullYear() + years)\n return d\n}\n\nexport function startOfWeek(date: Date, firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday): Date {\n const d = new Date(date)\n const day = d.getDay()\n const diff = (day < firstDayOfWeek ? 7 : 0) + day - firstDayOfWeek\n\n d.setDate(d.getDate() - diff)\n return d\n}\n\nexport function endOfWeek(date: Date, firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday): Date {\n const d = new Date(date)\n const day = d.getDay()\n const diff = (day < firstDayOfWeek ? -7 : 0) + 6 - (day - firstDayOfWeek)\n\n d.setDate(d.getDate() + diff)\n return d\n}\n\nexport function startOfMonth(date: Date): Date {\n const d = new Date(date.getFullYear(), date.getMonth(), 1)\n d.setFullYear(date.getFullYear())\n return d\n}\n\nexport function endOfMonth(date: Date): Date {\n const d = new Date(date.getFullYear(), date.getMonth() + 1, 0)\n d.setFullYear(date.getFullYear())\n return d\n}\n\nexport function setMonth(date: Date, month: number): Date {\n const d = new Date(date)\n d.setMonth(month)\n return d\n}\n\nexport function setYear(date: Date, year: number): Date {\n const d = new Date(date)\n d.setFullYear(year)\n return d\n}\n\n/**\n * Ensures date is within range, returns min or max if out of bounds\n */\nexport function clamp(date: Date, min?: Date, max?: Date): Date {\n const time = date.getTime()\n\n if (min && min instanceof Date && time < min.getTime()) {\n return min\n }\n\n if (max && max instanceof Date && time > max.getTime()) {\n return max\n }\n\n return date\n}\n\n/**\n * Check if date is within a min and max\n */\nexport function inRange(date: Date, min?: Date, max?: Date): boolean {\n return clamp(date, min, max) === date\n}\n\n/**\n * given start and end date, return an (inclusive) array of all dates in between\n * @param start\n * @param end\n */\nfunction getDaysInRange(start: Date, end: Date): Date[] {\n const days: Date[] = []\n let current = start\n\n while (!isEqual(current, end)) {\n days.push(current)\n current = addDays(current, 1)\n }\n\n days.push(current)\n\n return days\n}\n\n/**\n * given a date, return an array of dates from a calendar perspective\n * @param date\n * @param firstDayOfWeek\n */\nexport function getViewOfMonth(date: Date, firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday): Date[] {\n const start = startOfWeek(startOfMonth(date), firstDayOfWeek)\n const end = endOfWeek(endOfMonth(date), firstDayOfWeek)\n\n return getDaysInRange(start, end)\n}\n","import { html } from \"lit\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { chunk, mapWithOffset } from \"../common/collection.js\"\nimport { DaysOfWeek, getViewOfMonth, inRange as dateInRange, isEqual, isEqualMonth } from \"../common/dates.js\"\nimport { cond } from \"../common/directives/cond.js\"\nimport { DateDisabledPredicate } from \"./Calendar.js\"\n\nexport type DatePickerDayProps = {\n focusedDay: Date\n today: Date\n day: Date\n disabled: boolean\n inRange: boolean\n isSelected: boolean\n dateFormatter: Intl.DateTimeFormat\n onDaySelect: (day: Date) => void\n onKeyboardNavigation: (event: KeyboardEvent) => void\n}\n\nexport const dayView = ({\n focusedDay,\n today,\n day,\n onDaySelect,\n onKeyboardNavigation,\n disabled,\n inRange,\n isSelected,\n dateFormatter,\n}: DatePickerDayProps) => {\n const isToday = isEqual(day, today)\n const isMonth = isEqualMonth(day, focusedDay)\n const isFocused = isEqual(day, focusedDay)\n const isOutsideRange = !inRange\n\n return html`\n <button\n class=${classMap({\n \"n-calendar-day\": true,\n \"is-outside\": isOutsideRange,\n \"is-month\": isMonth,\n \"is-disabled\": disabled,\n })}\n tabindex=${isFocused ? 0 : -1}\n @click=${() => onDaySelect(day)}\n @keydown=${onKeyboardNavigation}\n aria-disabled=${cond(disabled, \"true\")}\n ?disabled=${isOutsideRange}\n type=\"button\"\n aria-pressed=${isSelected ? \"true\" : \"false\"}\n aria-current=${cond(isToday, \"date\")}\n aria-label=${dateFormatter.format(day)}\n >\n <span aria-hidden=\"true\">${day.getDate()}</span>\n </button>\n `\n}\n\ntype MonthViewArgs = {\n selectedDate: Date | undefined\n focusedDate: Date\n labelledById: string\n dayNames: string[]\n dayNamesShort: string[]\n firstDayOfWeek: DaysOfWeek\n min?: Date\n max?: Date\n dateFormatter: Intl.DateTimeFormat\n isDateDisabled: DateDisabledPredicate\n onDateSelect: DatePickerDayProps[\"onDaySelect\"]\n onFocusIn: EventListener\n onFocusOut: EventListener\n onKeyboardNavigation: DatePickerDayProps[\"onKeyboardNavigation\"]\n}\n\nexport function monthView({\n onFocusIn,\n onFocusOut,\n selectedDate,\n focusedDate,\n labelledById,\n dayNames,\n dayNamesShort,\n firstDayOfWeek,\n min,\n max,\n dateFormatter,\n isDateDisabled,\n onDateSelect,\n onKeyboardNavigation,\n}: MonthViewArgs) {\n const today = new Date()\n const days = getViewOfMonth(focusedDate, firstDayOfWeek)\n\n function handleFocusOut(e: FocusEvent) {\n const table = e.currentTarget as Node\n const relatedTarget = e.relatedTarget as Node\n\n if (relatedTarget && !table.contains(relatedTarget)) {\n onFocusOut(e)\n }\n }\n\n return html`\n <table class=\"n-calendar-table\" aria-labelledby=${labelledById} @focusin=${onFocusIn} @focusout=${handleFocusOut}>\n <thead>\n <tr>\n ${mapWithOffset(\n dayNames,\n firstDayOfWeek,\n (dayName, i) =>\n html`\n <th class=\"n-calendar-table-header\" scope=\"col\">\n <span aria-hidden=\"true\">${dayNamesShort[i]}</span>\n <nord-visually-hidden>${dayName}</nord-visually-hidden>\n </th>\n `\n )}\n </tr>\n </thead>\n <tbody>\n ${chunk(days, 7).map(\n week =>\n html`<tr class=\"n-calendar-row\">\n ${week.map(\n day =>\n html`<td class=\"n-calendar-cell\">\n ${dayView({\n day,\n today,\n focusedDay: focusedDate,\n isSelected: isEqual(day, selectedDate),\n disabled: isDateDisabled(day),\n inRange: dateInRange(day, min, max),\n onDaySelect: onDateSelect,\n dateFormatter,\n onKeyboardNavigation,\n })}\n </td>`\n )}\n </tr>`\n )}\n </tbody>\n </table>\n `\n}\n","import { NordEvent } from \"../common/events.js\"\n\nexport class DateSelectEvent extends NordEvent {\n constructor(name: string, public date: Date) {\n super(name)\n }\n}\n","import { html, LitElement } from \"lit\"\nimport { customElement, property, query, state } from \"lit/decorators.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\"\n\nimport { range } from \"../common/number.js\"\nimport {\n addDays,\n clamp,\n DaysOfWeek,\n endOfMonth,\n endOfWeek,\n getDayNames,\n getMonthNames,\n inRange,\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 { monthView } from \"./month-view.js\"\nimport { DateSelectEvent } from \"./DateSelectEvent.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Calendar.css\"\n\nexport type DateDisabledPredicate = (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: DateDisabledPredicate = () => false\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@customElement(\"nord-calendar\")\nexport default class Calendar extends LitElement {\n static styles = [componentStyle, style]\n\n private dialogLabelId = \"dialog-header\"\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: DateDisabledPredicate = isDateDisabled\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 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=${this.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=\"xs\"></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=\"xs\"></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\n color=\"var(--n-color-icon)\"\n name=${this.direction.isLTR ? \"arrow-left-small\" : \"arrow-right-small\"}\n size=\"s\"\n ></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\n color=\"var(--n-color-icon)\"\n name=${this.direction.isLTR ? \"arrow-right-small\" : \"arrow-left-small\"}\n size=\"s\"\n ></nord-icon>\n </nord-button>\n </div>\n </div>\n\n ${monthView({\n onFocusOut: this.disableActiveFocus,\n onFocusIn: this.enableActiveFocus,\n dateFormatter: this.dateFormatShort,\n selectedDate: valueAsDate,\n focusedDate: this.focusedDay,\n onDateSelect: this.handleDaySelect,\n onKeyboardNavigation: this.shortcuts,\n labelledById: this.dialogLabelId,\n dayNames: this.dayNames,\n dayNamesShort: this.dayNamesShort,\n firstDayOfWeek: this.firstDayOfWeek,\n min: minDate,\n max: maxDate,\n isDateDisabled: this.isDateDisabled,\n })}\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, { 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: any) => {\n this.setMonth(parseInt(e.target.value, 10))\n }\n\n private handleYearSelect = (e: any) => {\n this.setYear(parseInt(e.target.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 = () => {\n this.activeFocus = false\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-calendar\": Calendar\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 21h126v112H7zM35 7v28m70-28v28M7 63h126\" stroke-width=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>'\nexport const title = \"interface-calendar\"\nexport const tags = \"nordicon interface calendar date time day week month year\"\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M89.796 74.956a7 7 0 0 1 0-9.912L136.92 17.92a10.5 10.5 0 0 0-14.84-14.84L74.956 50.204a7 7 0 0 1-9.912 0L17.92 3.08A10.5 10.5 0 0 0 3.08 17.92l47.124 47.124a7 7 0 0 1 0 9.912L3.08 122.08a10.5 10.5 0 1 0 14.84 14.84l47.124-47.124a7 7 0 0 1 9.912 0l47.124 47.124a10.5 10.5 0 0 0 14.84-14.84z\"/></svg>'\nexport const title = \"interface-close-small\"\nexport const tags = \"nordicon interface close remove small cross delete erase symbol\"\n","import { parseISODate, printISODate, createDate } from \"../common/dates.js\"\n\ntype CreateDate = typeof createDate\nexport type DateParser = (input: string, createDate: CreateDate) => Date | undefined\nexport type DateFormatter = (date: Date) => string\n\nexport interface DateAdapter {\n parse: DateParser\n format: DateFormatter\n}\n\nexport const isoAdapter: DateAdapter = { parse: parseISODate, format: printISODate }\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property, query, state } from \"lit/decorators.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport * as calendarIcon from \"@nordhealth/icons/lib/assets/interface-calendar.js\"\nimport * as closeIcon from \"@nordhealth/icons/lib/assets/interface-close-small.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport { createDate, DaysOfWeek, parseISODate, printISODate } from \"../common/dates.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { cleanValue } from \"../common/input.js\"\nimport { isDownwardsSwipe, SwipeController } from \"../common/controllers/SwipeController.js\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { LocalizeController } from \"../localization/LocalizeController.js\"\n\nimport \"../button/Button.js\"\nimport type Button from \"../button/Button.js\"\nimport Icon from \"../icon/Icon.js\"\nimport \"../visually-hidden/VisuallyHidden.js\"\n\nimport \"../calendar/Calendar.js\"\nimport { DateSelectEvent } from \"../calendar/DateSelectEvent.js\"\nimport type Calendar from \"../calendar/Calendar.js\"\nimport type { DateDisabledPredicate } from \"../calendar/Calendar.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport textFieldStyle from \"../common/styles/TextField.css\"\nimport style from \"./DatePicker.css\"\n\nimport { DateAdapter, isoAdapter } from \"./date-adapter.js\"\n\nIcon.registerIcon(calendarIcon)\nIcon.registerIcon(closeIcon)\n\nconst DISALLOWED_CHARACTERS = /[^0-9./-]+/g\nconst isDateDisabled = () => false\n\n/**\n *\n * Date Picker allows user to enter a date either through text input,\n * or by choosing a date from the calendar. Please note that the date\n * must be passed in ISO-8601 format: YYYY-MM-DD.\n *\n * @status ready\n * @category form\n */\n@customElement(\"nord-date-picker\")\nexport default class DatePicker extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, textFieldStyle, style]\n\n @query(`.n-date-toggle`, true) private toggleButton!: Button\n @query(`.n-date-close`, true) private closeButton!: HTMLButtonElement\n @query(`nord-calendar`, true) private calendar!: Calendar\n @query(`[role=\"dialog\"]`, true) private dialog!: HTMLElement\n\n private dismiss = new LightDismissController(this, {\n isOpen: () => this.open,\n onDismiss: e => this.hide(e.type !== \"click\"),\n isDismissible: node => node !== this.calendar && node !== this.toggleButton,\n })\n\n private swipe = new SwipeController(this, {\n target: () => this.dialog,\n matchesGesture: isDownwardsSwipe,\n onSwipeEnd: () => this.hide(false),\n })\n\n private localize = new LocalizeController<\"nord-date-picker\">(this, {\n onLangChange: () => this.createDateFormatters(),\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 dateFormatLong!: Intl.DateTimeFormat\n\n @state() private open = false\n\n /**\n * Date value. Must be in IS0-8601 format: YYYY-MM-DD.\n */\n @property() value: string = \"\"\n\n get valueAsDate(): Date | undefined {\n return parseISODate(this.value)\n }\n\n /**\n * Get/set the value of the picker as a Date object.\n */\n set valueAsDate(date: Date | undefined) {\n this.value = date ? printISODate(date) : \"\"\n }\n\n get valueAsNumber(): number {\n return this.valueAsDate?.getTime() ?? NaN\n }\n\n /**\n * Get/set the value of the picker as the number of milliseconds elapsed since the UNIX epoch.\n */\n set valueAsNumber(date: number) {\n this.value = date ? printISODate(new Date(date)) : \"\"\n }\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 * Forces the opening direction of the calendar modal to be always left or right.\n * This setting can be useful when the input is smaller than the opening date picker\n * would be as by default the picker always opens towards right.\n */\n @property() direction: \"left\" | \"right\" = \"right\"\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({ attribute: \"first-day-of-week\", type: Number }) firstDayOfWeek: DaysOfWeek = DaysOfWeek.Monday\n\n /**\n * Date adapter, for custom parsing/formatting.\n * Must be object with a `parse` function which accepts a `string` and returns a `Date`,\n * and a `format` function which accepts a `Date` and returns a `string`.\n * Default is IS0-8601 parsing and formatting.\n */\n @property({ attribute: false }) dateAdapter: DateAdapter = isoAdapter\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: DateDisabledPredicate = isDateDisabled\n\n /**\n * Show the calendar modal, moving focus to the calendar inside.\n */\n show() {\n this.open = true\n /**\n * Dispatched when the calendar is toggled open.\n */\n this.dispatchEvent(new NordEvent(\"open\"))\n\n // we should only focus once the calendar is visible after render is complete\n this.updateComplete.then(() => this.calendar.focus({ target: \"month\" }))\n }\n\n /**\n * Hide the calendar modal.\n * @param {boolean} moveFocusToButton controls whether focus should be returned to the date picker's button.\n */\n hide(moveFocusToButton = true) {\n this.open = false\n /**\n * Dispatched when the calendar is closed.\n */\n this.dispatchEvent(new NordEvent(\"close\"))\n\n if (moveFocusToButton) {\n this.toggleButton.focus()\n }\n }\n\n render() {\n const { valueAsDate } = this\n const formattedDate = valueAsDate ? this.dateAdapter.format(valueAsDate) : \"\"\n\n return html`\n ${this.renderLabel()}\n\n <div class=\"n-input-container\">\n <input\n class=\"n-input\"\n name=${this.name}\n .value=${formattedDate}\n placeholder=${ifDefined(this.placeholder)}\n id=${this.inputId}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-autocomplete=\"none\"\n @input=${this.handleInputChange}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n autocomplete=\"off\"\n ${ref(this.focusableRef)}\n aria-invalid=${ifDefined(this.error ? \"true\" : undefined)}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n />\n <button class=\"n-date-toggle\" @click=${this.toggleOpen} ?disabled=${this.disabled} type=\"button\">\n <nord-icon name=\"interface-calendar\" size=\"s\"></nord-icon>\n <nord-visually-hidden>\n ${this.localize.term(\"buttonLabel\")}\n ${valueAsDate\n ? html`\n <span>\n , ${this.localize.term(\"selectedDateMessage\")} ${this.dateFormatLong.format(valueAsDate)}\n </span>\n `\n : nothing}\n </nord-visually-hidden>\n </button>\n </div>\n\n ${this.renderError()}\n\n <div\n class=${classMap({\n \"is-left\": this.direction === \"left\",\n \"is-active\": this.open,\n })}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden=${this.open ? \"false\" : \"true\"}\n aria-labelledby=\"dialog-header\"\n >\n <div class=\"n-date-dialog-content\">\n <div aria-hidden=\"true\" tabindex=\"0\" @focus=${this.focusLast}></div>\n\n <div class=\"n-date-mobile\">\n <div class=\"n-date-mobile-heading\" id=\"dialog-header\">${this.localize.term(\"modalHeading\")}</div>\n <button class=\"n-date-close\" @click=${this.hide} type=\"button\">\n <nord-icon color=\"var(--n-color-icon)\" name=\"interface-close-small\" size=\"xs\"></nord-icon>\n <nord-visually-hidden>${this.localize.term(\"closeLabel\")}</nord-visually-hidden>\n </button>\n </div>\n <nord-calendar\n value=${this.value}\n min=${this.min}\n max=${this.max}\n .firstDayOfWeek=${this.firstDayOfWeek}\n .isDateDisabled=${this.isDateDisabled}\n @change=${this.handleDaySelect}\n ></nord-calendar>\n\n <div aria-hidden=\"true\" tabindex=\"0\" @focus=${this.focusFirst}></div>\n </div>\n </div>\n `\n }\n\n private createDateFormatters() {\n this.dateFormatLong = new Intl.DateTimeFormat(this.localize.resolvedLang, {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n })\n }\n\n private focusFirst() {\n this.closeButton.focus()\n }\n\n private focusLast() {\n this.calendar.focus({ target: \"day\" })\n }\n\n private handleDaySelect = (e: DateSelectEvent) => {\n e.stopPropagation()\n this.setValue(e.date)\n this.hide()\n }\n\n private toggleOpen = (e: Event) => {\n e.preventDefault()\n\n if (this.open) {\n this.hide(false)\n } else {\n this.show()\n }\n }\n\n private handleBlur = (event: Event) => {\n event.stopPropagation()\n this.dispatchEvent(new NordEvent(\"blur\"))\n }\n\n private handleFocus = (event: Event) => {\n event.stopPropagation()\n this.dispatchEvent(new NordEvent(\"focus\"))\n }\n\n private handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n\n // clean up any invalid characters\n cleanValue(target, DISALLOWED_CHARACTERS)\n this.dispatchEvent(new NordEvent(\"input\"))\n\n const parsed = this.dateAdapter.parse(target.value, createDate)\n if (parsed || target.value === \"\") {\n this.setValue(parsed)\n }\n }\n\n private setValue(date?: Date) {\n this.value = date ? printISODate(date) : \"\"\n this.dispatchEvent(new NordEvent(\"change\"))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-date-picker\": DatePicker\n }\n}\n","export function cleanValue(inputEl: HTMLInputElement, regex: RegExp): string {\n const { value } = inputEl\n const cursor = inputEl.selectionStart as number\n\n const beforeCursor = value.slice(0, cursor)\n const afterCursor = value.slice(cursor, value.length)\n\n const filteredBeforeCursor = beforeCursor.replace(regex, \"\")\n const filterAfterCursor = afterCursor.replace(regex, \"\")\n\n const newValue = filteredBeforeCursor + filterAfterCursor\n const newCursor = filteredBeforeCursor.length\n\n inputEl.value = newValue\n inputEl.selectionStart = newCursor\n inputEl.selectionEnd = newCursor\n\n return newValue\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M41.86 131.25a23.982 23.982 0 0 1-18.494-8.666L2.254 95.746a10.5 10.5 0 1 1 16.492-12.992l21 26.6a2.24 2.24 0 0 0 2.212.882 3.038 3.038 0 0 0 2.38-1.148l76.958-96.39a10.5 10.5 0 1 1 16.408 13.104L60.606 122.29A24.038 24.038 0 0 1 42 131.25z\"/></svg>'\nexport const title = \"interface-checked-small\"\nexport const tags = \"nordicon interface checked small symbol checkmark done ready\"\n","import { html, LitElement } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport * as checkedIcon from \"@nordhealth/icons/lib/assets/interface-checked-small.js\"\n\nimport Icon from \"../icon/Icon.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Checkbox.css\"\n\nIcon.registerIcon(checkedIcon)\n\n/**\n * Checkboxes allow user to choose one or more options from a limited set of options.\n * If you have more than 10 options, please use Select component instead.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the input.\n * @slot error - Optional slot that holds error text for the input.\n */\n@customElement(\"nord-checkbox\")\nexport default class Checkbox extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, style]\n\n protected override get formValue() {\n return this.checked ? this.value || \"on\" : undefined\n }\n\n /**\n * Controls whether the checkbox is checked or not.\n */\n @property({ type: Boolean }) checked: boolean = false\n\n render() {\n return html`\n <div class=\"n-flex\">\n <div class=\"n-input-container\">\n <input\n ${ref(this.focusableRef)}\n class=\"n-input\"\n id=${this.inputId}\n type=\"checkbox\"\n name=${ifDefined(this.name)}\n .value=${this.value}\n .checked=${this.checked}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n @change=${this.handleChange}\n />\n <nord-icon name=\"interface-checked-small\" size=\"s\"></nord-icon>\n </div>\n <div class=\"n-expand\">${this.renderLabel()} ${this.renderError()}</div>\n </div>\n `\n }\n\n protected handleChange(e: Event): void {\n const target = e.target as HTMLInputElement\n this.checked = target.checked\n super.handleChange(e)\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-checkbox\": Checkbox\n }\n}\n","function getSide(placement) {\n return placement.split('-')[0];\n}\n\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y';\n}\n\nfunction getLengthFromAxis(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n const commonAlign = reference[length] / 2 - floating[length] / 2;\n const side = getSide(placement);\n const isVertical = mainAxis === 'x';\n let coords;\n\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n\n switch (getAlignment(placement)) {\n case 'start':\n coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n\n case 'end':\n coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\n\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n\n if (process.env.NODE_ENV !== \"production\") {\n if (platform == null) {\n console.error(['Floating UI: `platform` property was not passed to config. If you', 'want to use Floating UI on the web, install @floating-ui/dom', 'instead of the /core package. Otherwise, you can create your own', '`platform`: https://floating-ui.com/docs/platform'].join(' '));\n }\n\n if (middleware.filter(_ref => {\n let {\n name\n } = _ref;\n return name === 'autoPlacement' || name === 'flip';\n }).length > 1) {\n throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement`', 'middleware detected. This will lead to an infinite loop. Ensure only', 'one of either has been passed to the `middleware` array.'].join(' '));\n }\n }\n\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let _debug_loop_count_ = 0;\n\n for (let i = 0; i < middleware.length; i++) {\n if (process.env.NODE_ENV !== \"production\") {\n _debug_loop_count_++;\n\n if (_debug_loop_count_ > 100) {\n throw new Error(['Floating UI: The middleware lifecycle appears to be', 'running in an infinite loop. This is usually caused by a `reset`', 'continually being returned without a break condition.'].join(' '));\n }\n }\n\n const {\n name,\n fn\n } = middleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = { ...middlewareData,\n [name]: { ...middlewareData[name],\n ...data\n }\n };\n\n if (reset) {\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n\n i = -1;\n continue;\n }\n }\n\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\n\nfunction getSideObjectFromPadding(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\n\nfunction rectToClientRect(rect) {\n return { ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(middlewareArguments, options) {\n var _await$platform$isEle;\n\n if (options === void 0) {\n options = {};\n }\n\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = middlewareArguments;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = options;\n const paddingObject = getSideObjectFromPadding(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect: elementContext === 'floating' ? { ...rects.floating,\n x,\n y\n } : rects.reference,\n offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),\n strategy\n }) : rects[elementContext]); // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n return {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n return max(min$1, min(value, max$1));\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered\n * to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n\n async fn(middlewareArguments) {\n // Since `element` is required, we don't Partial<> the type\n const {\n element,\n padding = 0\n } = options != null ? options : {};\n const {\n x,\n y,\n placement,\n rects,\n platform\n } = middlewareArguments;\n\n if (element == null) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn('Floating UI: No `element` was passed to the `arrow` middleware.');\n }\n\n return {};\n }\n\n const paddingObject = getSideObjectFromPadding(padding);\n const coords = {\n x,\n y\n };\n const axis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const minProp = axis === 'y' ? 'top' : 'left';\n const maxProp = axis === 'y' ? 'bottom' : 'right';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n const clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n const centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside of the floating element's bounds\n\n const min = paddingObject[minProp];\n const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = within(min, center, max);\n return {\n data: {\n [axis]: offset,\n centerOffset: center - offset\n }\n };\n }\n\n});\n\nconst hash$1 = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, matched => hash$1[matched]);\n}\n\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n\n const alignment = getAlignment(placement);\n const mainAxis = getMainAxisFromPlacement(placement);\n const length = getLengthFromAxis(mainAxis);\n let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n\n return {\n main: mainAlignmentSide,\n cross: getOppositePlacement(mainAlignmentSide)\n };\n}\n\nconst hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, matched => hash[matched]);\n}\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-start\", side + \"-end\"), []);\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n\n return true;\n });\n}\n\n/**\n * Automatically chooses the `placement` which has the most space available.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'autoPlacement',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$autoP, _middlewareData$autoP2, _middlewareData$autoP3, _middlewareData$autoP4, _placementsSortedByLe;\n\n const {\n x,\n y,\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = middlewareArguments;\n const {\n alignment = null,\n allowedPlacements = allPlacements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = options;\n const placements = getPlacementList(alignment, autoAlignment, allowedPlacements);\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const currentIndex = (_middlewareData$autoP = (_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.index) != null ? _middlewareData$autoP : 0;\n const currentPlacement = placements[currentIndex];\n\n if (currentPlacement == null) {\n return {};\n }\n\n const {\n main,\n cross\n } = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))); // Make `computeCoords` start from the right place\n\n if (placement !== currentPlacement) {\n return {\n x,\n y,\n reset: {\n placement: placements[0]\n }\n };\n }\n\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[main], overflow[cross]];\n const allOverflows = [...((_middlewareData$autoP3 = (_middlewareData$autoP4 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP4.overflows) != null ? _middlewareData$autoP3 : []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements[currentIndex + 1]; // There are more placements to check\n\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]);\n const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => {\n let {\n overflows\n } = _ref;\n return overflows.every(overflow => overflow <= 0);\n })) == null ? void 0 : _placementsSortedByLe.placement;\n const resetPlacement = placementThatFitsOnAllSides != null ? placementThatFitsOnAllSides : placementsSortedByLeastOverflow[0].placement;\n\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n\n return {};\n }\n\n };\n};\n\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\n/**\n * Changes the placement of the floating element to one that will fit if the\n * initially specified `placement` does not.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'flip',\n options,\n\n async fn(middlewareArguments) {\n var _middlewareData$flip;\n\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = middlewareArguments;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n flipAlignment = true,\n ...detectOverflowOptions\n } = options;\n const side = getSide(placement);\n const isBasePlacement = side === initialPlacement;\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n\n if (checkCrossAxis) {\n const {\n main,\n cross\n } = getAlignmentSides(placement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n overflows.push(overflow[main], overflow[cross]);\n }\n\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }]; // One or more sides is overflowing\n\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip$, _middlewareData$flip2;\n\n const nextIndex = ((_middlewareData$flip$ = (_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) != null ? _middlewareData$flip$ : 0) + 1;\n const nextPlacement = placements[nextIndex];\n\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n let resetPlacement = 'bottom';\n\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$map$so;\n\n const placement = (_overflowsData$map$so = overflowsData.map(d => [d, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0].placement;\n\n if (placement) {\n resetPlacement = placement;\n }\n\n break;\n }\n\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n\n return {};\n }\n\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (_temp) {\n let {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = _temp === void 0 ? {} : _temp;\n return {\n name: 'hide',\n\n async fn(middlewareArguments) {\n const {\n rects\n } = middlewareArguments;\n\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(middlewareArguments, { ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n\n case 'escaped':\n {\n const overflow = await detectOverflow(middlewareArguments, { ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n\n default:\n {\n return {};\n }\n }\n }\n\n };\n};\n\nfunction convertValueToCoords(placement, rects, value, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getMainAxisFromPlacement(placement) === 'x';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = typeof value === 'function' ? value({ ...rects,\n placement\n }) : value; // eslint-disable-next-line prefer-const\n\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n/**\n * Displaces the floating element from its reference element.\n * @see https://floating-ui.com/docs/offset\n */\n\nconst offset = function (value) {\n if (value === void 0) {\n value = 0;\n }\n\n return {\n name: 'offset',\n options: value,\n\n async fn(middlewareArguments) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements\n } = middlewareArguments;\n const diffCoords = convertValueToCoords(placement, rects, value, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: diffCoords\n };\n }\n\n };\n};\n\nfunction getCrossAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\n/**\n * Shifts the floating element in order to keep it in view when it will overflow\n * a clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'shift',\n options,\n\n async fn(middlewareArguments) {\n const {\n x,\n y,\n placement\n } = middlewareArguments;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = options;\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const mainAxis = getMainAxisFromPlacement(getSide(placement));\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = within(min, mainAxisCoord, max);\n }\n\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = within(min, crossAxisCoord, max);\n }\n\n const limitedCoords = limiter.fn({ ...middlewareArguments,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return { ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n\n };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n options,\n\n fn(middlewareArguments) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = middlewareArguments;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = options;\n const coords = {\n x,\n y\n };\n const mainAxis = getMainAxisFromPlacement(placement);\n const crossAxis = getCrossAxis(mainAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = typeof offset === 'function' ? offset({ ...rects,\n placement\n }) : offset;\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2, _middlewareData$offse3, _middlewareData$offse4;\n\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? (_middlewareData$offse = (_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) != null ? _middlewareData$offse : 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : (_middlewareData$offse3 = (_middlewareData$offse4 = middlewareData.offset) == null ? void 0 : _middlewareData$offse4[crossAxis]) != null ? _middlewareData$offse3 : 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n\n };\n};\n\n/**\n * Provides data to change the size of the floating element. For instance,\n * prevent it from overflowing its clipping boundary or match the width of the\n * reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'size',\n options,\n\n async fn(middlewareArguments) {\n const {\n placement,\n rects,\n platform,\n elements\n } = middlewareArguments;\n const {\n apply,\n ...detectOverflowOptions\n } = options;\n const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n let heightSide;\n let widthSide;\n\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n const dimensions = {\n height: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]),\n width: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide])\n };\n const prevDimensions = await platform.getDimensions(elements.floating);\n apply == null ? void 0 : apply({ ...dimensions,\n ...rects\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n\n if (prevDimensions.width !== nextDimensions.width || prevDimensions.height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n\n return {};\n }\n\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n return {\n name: 'inline',\n options,\n\n async fn(middlewareArguments) {\n var _await$platform$getCl;\n\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = middlewareArguments; // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n\n const {\n padding = 2,\n x,\n y\n } = options;\n const fallback = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect: rects.reference,\n offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)),\n strategy\n }) : rects.reference);\n const clientRects = (_await$platform$getCl = await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) != null ? _await$platform$getCl : [];\n const paddingObject = getSideObjectFromPadding(padding);\n\n function getBoundingClientRect() {\n // There are two rects and they are disjoined\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n var _clientRects$find;\n\n // Find the first rect in which the point is fully inside\n return (_clientRects$find = clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom)) != null ? _clientRects$find : fallback;\n } // There are 2 or more connected rects\n\n\n if (clientRects.length >= 2) {\n if (getMainAxisFromPlacement(placement) === 'x') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n\n return fallback;\n }\n\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n\n return {};\n }\n\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction isWindow(value) {\n return value && value.document && value.location && value.alert && value.setInterval;\n}\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (!isWindow(node)) {\n const ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\nfunction getComputedStyle$1(element) {\n return getWindow(element).getComputedStyle(element);\n}\n\nfunction getNodeName(node) {\n return isWindow(node) ? '' : node ? (node.nodeName || '').toLowerCase() : '';\n}\n\nfunction isHTMLElement(value) {\n return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n return value instanceof getWindow(value).Element;\n}\nfunction isNode(value) {\n return value instanceof getWindow(value).Node;\n}\nfunction isShadowRoot(node) {\n const OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isOverflowElement(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n const {\n overflow,\n overflowX,\n overflowY\n } = getComputedStyle$1(element);\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n // TODO: Try and use feature detection here instead\n const isFirefox = navigator.userAgent.toLowerCase().includes('firefox');\n const css = getComputedStyle$1(element); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n return css.transform !== 'none' || css.perspective !== 'none' || // @ts-ignore (TS 4.1 compat)\n css.contain === 'paint' || ['transform', 'perspective'].includes(css.willChange) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false);\n}\nfunction isLayoutViewport() {\n // Not Safari\n return !/^((?!chrome|android).)*safari/i.test(navigator.userAgent); // Feature detection for this fails in various ways\n // • Always-visible scrollbar or not\n // • Width of <html>, etc.\n // const vV = win.visualViewport;\n // return vV ? Math.abs(win.innerWidth / vV.scale - vV.width) < 0.5 : true;\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n var _win$visualViewport$o, _win$visualViewport, _win$visualViewport$o2, _win$visualViewport2;\n\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n const clientRect = element.getBoundingClientRect();\n let scaleX = 1;\n let scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n const win = isElement(element) ? getWindow(element) : window;\n const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n const x = (clientRect.left + (addVisualOffsets ? (_win$visualViewport$o = (_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) != null ? _win$visualViewport$o : 0 : 0)) / scaleX;\n const y = (clientRect.top + (addVisualOffsets ? (_win$visualViewport$o2 = (_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) != null ? _win$visualViewport$o2 : 0 : 0)) / scaleY;\n const width = clientRect.width / scaleX;\n const height = clientRect.height / scaleY;\n return {\n width,\n height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x,\n y\n };\n}\n\nfunction getDocumentElement(node) {\n return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\n\nfunction getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\nfunction isScaled(element) {\n const rect = getBoundingClientRect(element);\n return round(rect.width) !== element.offsetWidth || round(rect.height) !== element.offsetHeight;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(element, // @ts-ignore - checked above (TS 4.1 compat)\n isOffsetParentAnElement && isScaled(offsetParent), strategy === 'fixed');\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // @ts-ignore\n node.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n node.parentNode || ( // DOM Element detected\n isShadowRoot(node) ? node.host : null) || // ShadowRoot detected\n getDocumentElement(node) // fallback\n\n );\n}\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n}\n\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && !['html', 'body'].includes(getNodeName(currentNode))) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n const window = getWindow(element);\n let offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getDimensions(element) {\n if (isHTMLElement(element)) {\n return {\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n }\n\n const rect = getBoundingClientRect(element);\n return {\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n\n if (offsetParent === documentElement) {\n return rect;\n }\n\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent, true);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } // This doesn't appear to be need to be negated.\n // else if (documentElement) {\n // offsets.x = getWindowScrollBarX(documentElement);\n // }\n\n }\n\n return { ...rect,\n x: rect.x - scroll.scrollLeft + offsets.x,\n y: rect.y - scroll.scrollTop + offsets.y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n const width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n const height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n\n if (getComputedStyle$1(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n\n if (['html', 'body', '#document'].includes(getNodeName(parentNode))) {\n // @ts-ignore assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n\n return getNearestOverflowAncestor(parentNode);\n}\n\nfunction getOverflowAncestors(node, list) {\n var _node$ownerDocument;\n\n if (list === void 0) {\n list = [];\n }\n\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n const win = getWindow(scrollableAncestor);\n const target = isBody ? [win].concat(win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []) : scrollableAncestor;\n const updatedList = list.concat(target);\n return isBody ? updatedList : // @ts-ignore: isBody tells us target will be an HTMLElement here\n updatedList.concat(getOverflowAncestors(target));\n}\n\nfunction contains(parent, child) {\n const rootNode = child == null ? void 0 : child.getRootNode == null ? void 0 : child.getRootNode(); // First, attempt with faster native method\n\n if (parent != null && parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n let next = child;\n\n do {\n // use `===` replace node.isSameNode()\n if (next && parent === next) {\n return true;\n } // @ts-ignore: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n }\n\n return false;\n}\n\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, false, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n return {\n top,\n left,\n x: left,\n y: top,\n right: left + element.clientWidth,\n bottom: top + element.clientHeight,\n width: element.clientWidth,\n height: element.clientHeight\n };\n}\n\nfunction getClientRectFromClippingAncestor(element, clippingParent, strategy) {\n if (clippingParent === 'viewport') {\n return rectToClientRect(getViewportRect(element, strategy));\n }\n\n if (isElement(clippingParent)) {\n return getInnerBoundingClientRect(clippingParent, strategy);\n }\n\n return rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping ancestor\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingAncestors(element) {\n const clippingAncestors = getOverflowAncestors(element);\n const canEscapeClipping = ['absolute', 'fixed'].includes(getComputedStyle$1(element).position);\n const clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // @ts-ignore isElement check ensures we return Array<Element>\n\n\n return clippingAncestors.filter(clippingAncestors => isElement(clippingAncestors) && contains(clippingAncestors, clipperElement) && getNodeName(clippingAncestors) !== 'body');\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors\n\n\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const mainClippingAncestors = boundary === 'clippingAncestors' ? getClippingAncestors(element) : [].concat(boundary);\n const clippingAncestors = [...mainClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nconst platform = {\n getClippingRect,\n convertOffsetParentRelativeRectToViewportRelativeRect,\n isElement,\n getDimensions,\n getOffsetParent,\n getDocumentElement,\n getElementRects: _ref => {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n return {\n reference: getRectRelativeToOffsetParent(reference, getOffsetParent(floating), strategy),\n floating: { ...getDimensions(floating),\n x: 0,\n y: 0\n }\n };\n },\n getClientRects: element => Array.from(element.getClientRects()),\n isRTL: element => getComputedStyle$1(element).direction === 'rtl'\n};\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n\n const {\n ancestorScroll: _ancestorScroll = true,\n ancestorResize: _ancestorResize = true,\n elementResize: _elementResize = true,\n animationFrame = false\n } = options;\n let cleanedUp = false;\n const ancestorScroll = _ancestorScroll && !animationFrame;\n const ancestorResize = _ancestorResize && !animationFrame;\n const elementResize = _elementResize && !animationFrame;\n const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n let observer = null;\n\n if (elementResize) {\n observer = new ResizeObserver(update);\n isElement(reference) && observer.observe(reference);\n observer.observe(floating);\n }\n\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n\n if (animationFrame) {\n frameLoop();\n }\n\n function frameLoop() {\n if (cleanedUp) {\n return;\n }\n\n const nextRefRect = getBoundingClientRect(reference);\n\n if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n update();\n }\n\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n\n return () => {\n var _observer;\n\n cleanedUp = true;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n (_observer = observer) == null ? void 0 : _observer.disconnect();\n observer = null;\n\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\n\nconst computePosition = (reference, floating, options) => computePosition$1(reference, floating, {\n platform,\n ...options\n});\n\nexport { autoUpdate, computePosition, getOverflowAncestors };\n","function getTokens(element: Element, attr: string) {\n const value = element.getAttribute(attr)\n return value ? value.split(/\\s+/) : []\n}\n\nfunction setTokens(element: Element, attr: string, tokens: string[]) {\n element.setAttribute(attr, tokens.join(\" \"))\n}\n\n/**\n * Carefully adds a token to a space-separated attribute\n * Similar to classList, but for any attribute.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/add\n */\nexport function add(element: Element, attr: string, token: string) {\n const tokens = getTokens(element, attr)\n\n if (!tokens.includes(token)) {\n setTokens(element, attr, tokens.concat(token))\n }\n}\n\n/**\n * Carefully removes a token from a space-separated attribute.\n * Similar to classList, but for any attribute.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/remove\n */\nexport function remove(element: Element, attr: string, token: string) {\n const tokens = getTokens(element, attr)\n\n if (tokens.includes(token)) {\n setTokens(\n element,\n attr,\n tokens.filter(t => t !== token)\n )\n }\n}\n","type Events<T> = { [Prop in keyof T]: keyof T[Prop] }[keyof T]\n\nexport function fsm<\n TTransitions extends Record<TStates, Partial<Record<TEvents, TStates>>>,\n TStates extends keyof TTransitions,\n TEvents extends Events<TTransitions>\n>(config: TTransitions) {\n return {\n transition(currentState: TStates, event: TEvents) {\n const nextState = config[currentState][event] as TStates\n return nextState || currentState\n },\n }\n}\n\nexport type Machine = ReturnType<typeof fsm>\n\nexport type States<T extends Machine | Machine[\"transition\"]> = T extends Machine\n ? Parameters<T[\"transition\"]>[0]\n : T extends Machine[\"transition\"]\n ? Parameters<T>[0]\n : never\n","import { Side, Placement, Alignment } from \"@floating-ui/dom\"\n\ntype FullPlacement = Exclude<Placement, Side>\ntype LogicalSide = \"block-end\" | \"block-start\" | \"inline-start\" | \"inline-end\"\ntype LogicalSideAlign = `${LogicalSide}-${Alignment}`\ntype Direction = \"ltr\" | \"rtl\"\n\nconst logicalMapLTR: Record<LogicalSideAlign, FullPlacement> = {\n \"inline-start-start\": \"left-start\",\n \"inline-start-end\": \"left-end\",\n \"inline-end-start\": \"right-start\",\n \"inline-end-end\": \"right-end\",\n \"block-start-start\": \"top-start\",\n \"block-start-end\": \"top-end\",\n \"block-end-start\": \"bottom-start\",\n \"block-end-end\": \"bottom-end\",\n}\n\nconst logicalMapRTL: Record<LogicalSideAlign, FullPlacement> = {\n \"inline-start-start\": \"right-start\",\n \"inline-start-end\": \"right-end\",\n \"inline-end-start\": \"left-start\",\n \"inline-end-end\": \"left-end\",\n \"block-start-start\": \"top-start\",\n \"block-start-end\": \"top-end\",\n \"block-end-start\": \"bottom-start\",\n \"block-end-end\": \"bottom-end\",\n}\n\nconst logicalMap: Record<LogicalSide, Side> = {\n \"block-end\": \"bottom\",\n \"block-start\": \"top\",\n \"inline-start\": \"left\",\n \"inline-end\": \"right\",\n}\n\n/**\n * Converts a single logical position to a physical position\n */\nexport function logicalToPhysical(logicalSide: LogicalSide): Side\n\n/**\n * Converts a logical side and alignment to floating-ui compatible placement\n */\nexport function logicalToPhysical(logicalSide: LogicalSide, alignment: Alignment, dir: Direction): Placement\n\nexport function logicalToPhysical(logicalSide: LogicalSide, alignment?: Alignment, dir?: Direction) {\n if (alignment != null && dir != null) {\n const logicalSideAlign: LogicalSideAlign = `${logicalSide}-${alignment}`\n return dir === \"ltr\" ? logicalMapLTR[logicalSideAlign] : logicalMapRTL[logicalSideAlign]\n }\n\n return logicalMap[logicalSide]\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { computePosition, flip, shift, offset } from \"@floating-ui/dom\"\n\nimport * as attr from \"../common/attribute.js\"\nimport type { FocusableMixinInterface } from \"../common/mixins/FocusableMixin.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Tooltip.css\"\nimport { EventController } from \"../common/controllers/EventController.js\"\nimport { States, fsm } from \"../common/fsm.js\"\nimport { logicalToPhysical } from \"../common/positioning.js\"\nimport { observe } from \"../common/decorators/observe.js\"\n\n// @ts-expect-error we're being naughty and accessing a protected field!\n// however this means we always get the correct types,\n// and it will ensure this file is not forgotten about if focusable mixin ever changes\ntype FocusableElement = HTMLElement & Pick<FocusableMixinInterface, \"focusableRef\">\n\nfunction isElement(el: Node): el is Element {\n return el.nodeType === Node.ELEMENT_NODE\n}\n\nfunction referencesTooltip(node: Node, tooltip: Tooltip) {\n return Boolean(tooltip.id) && isElement(node) && node.getAttribute(\"aria-describedby\") === tooltip.id\n}\n\nconst { transition } = fsm({\n hidden: {\n show: \"waiting\",\n },\n visible: {\n hide: \"hidden\",\n reposition: \"positioning\",\n show: \"positioning\",\n },\n waiting: {\n timeout: \"positioning\",\n hide: \"hidden\",\n },\n positioning: {\n positioned: \"visible\",\n hide: \"hidden\",\n },\n})\n\ntype TooltipStates = States<typeof transition>\n\n/**\n * Tooltips are floating containers for displaying additional information\n * for the currently focused element. A tooltip can be useful when you want\n * to e.g. give a hint about an existing Command Menu shortcut.\n *\n * @status ready\n * @category overlay\n * @slot - The tooltip content\n * @slot shortcut - Optional slot that holds shortcut keys to access the subject\n */\n@customElement(\"nord-tooltip\")\nexport default class Tooltip extends LitElement {\n static styles = [componentStyle, style]\n\n // tracks the last tooltip opened, so we can enforce only one is ever open at a time\n static lastOpened?: Tooltip\n\n private shortcutSlot = new SlotController(this, \"shortcut\")\n private events = new EventController(this)\n\n // The current element which revealed the tooltip shown\n private currentElement?: FocusableElement\n private timeoutId?: ReturnType<typeof setTimeout>\n\n /**\n * the proxy element is for cases where the targetElement is a web component,\n * and the WC has a focusable child in its shadow root e.g. a button component.\n * in this case, when the tooltip is shown, we inject the proxy into targetElement's shadow root\n * and wire up aria-describedby from the focusable element to the proxy.\n * when the tooltip is hidden, we remove the proxy and remove the aria-describedby relationship.\n */\n private proxy = document.createElement(\"span\")\n\n /**\n * The current state of the tooltip, dependent on the state machine\n */\n @state() private state: TooltipStates = \"hidden\"\n\n // The current coordinates for the tooltip\n private coords: [number, number] = [0, 0]\n\n /**\n * Control the position of the tooltip component.\n * When set to \"none\", the tooltip will be shown above\n * but accommodate for browser boundaries.\n */\n @property({ reflect: true }) position: \"block-end\" | \"block-start\" | \"inline-start\" | \"inline-end\" = \"block-start\"\n\n /**\n * The tooltip role, set on the component by default.\n */\n @property({ reflect: true }) role = \"tooltip\"\n\n /**\n * The id for the active element to reference via aria-describedby.\n */\n @property({ reflect: true }) id: string = \"\"\n\n /**\n * The delay in milliseconds before the tooltip is opened.\n */\n @property({ reflect: true, type: Number }) delay: number = 500\n\n /**\n * Apply all event listeners\n */\n connectedCallback() {\n super.connectedCallback()\n\n const rootNode = this.getRootNode() as Document\n\n this.events.listen(rootNode, \"keydown\", this.hideOnEscape)\n\n // we treat mouseover and focusin the same, since they both show tooltip\n this.events.listen(rootNode, \"mouseover\", this.handleShow)\n this.events.listen(rootNode, \"focusin\", this.handleShow)\n\n // we treat focusout, mouseout, click the same, since they all hide tooltip\n this.events.listen(rootNode, \"mouseout\", this.handleHide)\n this.events.listen(rootNode, \"focusout\", this.handleHide)\n this.events.listen(rootNode, \"click\", this.handleHide)\n\n this.events.listen(window, \"resize\", this.reposition, { passive: true })\n this.events.listen(window, \"scroll\", this.reposition, { passive: true })\n }\n\n render() {\n return html`\n <div class=\"n-tooltip\">\n <slot></slot>\n <div class=\"n-tooltip-shortcut\" ?hidden=${this.shortcutSlot.isEmpty}>\n <slot class=\"n-tooltip-key\" name=\"shortcut\"></slot>\n </div>\n </div>\n `\n }\n\n @observe(\"id\")\n protected handleIdChange() {\n if (!this.id) {\n // eslint-disable-next-line no-console\n console.warn(\"NORD: The tooltip requires an id attribute and value\")\n }\n }\n\n @observe(\"state\")\n private handleStateChange(prevState: TooltipStates) {\n switch (this.state) {\n case \"hidden\": {\n if (prevState === \"waiting\" && this.timeoutId) {\n clearTimeout(this.timeoutId)\n }\n\n this.removeDescribedBy()\n this.currentElement = undefined\n this.style.visibility = \"hidden\"\n this.style.opacity = \"0\"\n break\n }\n\n case \"visible\": {\n this.timeoutId = undefined\n Tooltip.lastOpened = this\n this.addDescribedBy()\n\n const [x, y] = this.coords\n\n // use physical properties here since floating-ui\n // works exclusively in physical dimensions\n // we do all the mapping in logicalToPhysical\n this.style.left = `${x}px`\n this.style.top = `${y}px`\n this.style.visibility = \"visible\"\n this.style.opacity = \"1\"\n break\n }\n\n case \"waiting\": {\n this.timeoutId = setTimeout(() => {\n this.state = transition(this.state, \"timeout\")\n }, this.delay)\n break\n }\n\n case \"positioning\": {\n if (Tooltip.lastOpened !== this) {\n Tooltip.lastOpened?.hideTooltip()\n }\n\n if (this.currentElement) {\n this.updatePosition(this.currentElement)\n }\n break\n }\n }\n }\n\n /**\n * Setting and updating the position of the tooltip\n */\n private updatePosition = (currentElement: HTMLElement) =>\n computePosition(currentElement, this, {\n strategy: \"fixed\",\n placement: logicalToPhysical(this.position),\n middleware: [\n shift({\n padding: 8,\n }),\n offset(8),\n flip(),\n ],\n }).then(({ x, y }) => {\n this.coords = [x, y]\n this.state = transition(this.state, \"positioned\")\n })\n\n private hideTooltip = () => {\n this.state = transition(this.state, \"hide\")\n }\n\n private reposition = () => {\n this.state = transition(this.state, \"reposition\")\n }\n\n private handleShow = (e: Event) => {\n const target = e.target as FocusableElement\n\n if (referencesTooltip(target, this)) {\n this.currentElement = target\n this.state = transition(this.state, \"show\")\n }\n }\n\n private handleHide = (e: Event) => {\n if (e.target === this.currentElement) {\n this.hideTooltip()\n }\n }\n\n private hideOnEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n this.hideTooltip()\n }\n }\n\n private addDescribedBy = () => {\n const focusable = this.currentElement?.focusableRef?.value\n\n if (focusable) {\n this.proxy.hidden = true\n this.proxy.id = this.id\n this.proxy.textContent = this.textContent\n\n focusable.insertAdjacentElement(\"afterend\", this.proxy)\n attr.add(focusable, \"aria-describedby\", this.id)\n }\n }\n\n private removeDescribedBy = () => {\n const focusable = this.currentElement?.focusableRef?.value\n\n if (focusable) {\n this.proxy.remove()\n attr.remove(focusable, \"aria-describedby\", this.id)\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-tooltip\": Tooltip\n }\n}\n","import { html, LitElement } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport { cond } from \"../common/directives/cond.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Fieldset.css\"\n\n/**\n * Fieldset is used for grouping sets of input components.\n * It is necessary to use a fieldset with radio and checkbox components.\n * It can also be useful for logically grouping other types of inputs.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the fieldset.\n * @slot error - Optional slot that holds error text for the fieldset.\n */\n@customElement(\"nord-fieldset\")\nexport default class Fieldset extends LitElement {\n static styles = [componentStyle, formFieldStyle, style]\n\n private errorSlot = new SlotController(this, \"error\")\n private hintSlot = new SlotController(this, \"hint\")\n\n /**\n * Label for the fieldset.\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 * Optional error to be shown with the fieldset. Alternatively use the error slot.\n */\n @property() error?: string\n\n render() {\n const { hasError } = this\n\n return html`\n <fieldset aria-invalid=${cond(hasError, \"true\")} aria-describedby=${cond(hasError, \"error\")}>\n <legend class=\"n-label-container\">\n <slot class=\"n-label\" name=\"label\">${this.label}</slot>\n\n <div class=\"n-caption n-hint\" ?hidden=${!this.hasHint}>\n <slot name=\"hint\">${this.hint}</slot>\n </div>\n </legend>\n\n <slot></slot>\n\n <div class=\"n-caption n-error\" id=\"error\" role=\"alert\" ?hidden=${!this.hasError}>\n <slot name=\"error\">${this.error}</slot>\n </div>\n </fieldset>\n `\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\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-fieldset\": Fieldset\n }\n}\n","import { nothing, ReactiveControllerHost } from \"lit\"\nimport { LightDomController } from \"./LightDomController.js\"\nimport { SlotController } from \"./SlotController.js\"\n\ntype LightSlotOptions = {\n slotName: string\n render: () => unknown\n syncLightDom: (element: Element) => void\n}\n\n/**\n * Handles cases where a component needs to render to light DOM,\n * and potentially sync component properties to user-supplied content.\n */\nexport class LightSlotController extends SlotController {\n private renderHook: Comment\n private lightDom: LightDomController\n\n constructor(host: ReactiveControllerHost & HTMLElement, private options: LightSlotOptions) {\n super(host, options.slotName)\n\n // we need a node to hook onto for rendering\n // without this, multiple controllers rendering to the light DOM\n // will overwrite each others' content\n this.renderHook = document.createComment(this.slotName)\n\n this.lightDom = new LightDomController(host, {\n render: () => (this.hasContent ? nothing : this.options.render()),\n renderOptions: { renderBefore: this.renderHook },\n })\n }\n\n hostConnected() {\n super.hostConnected()\n this.host.appendChild(this.renderHook)\n this.syncLightDom()\n }\n\n hostDisconnected() {\n this.renderHook.remove()\n }\n\n protected override onChange = () => {\n this.syncLightDom()\n }\n\n private syncLightDom() {\n const node = this.content\n\n if (node) {\n this.options.syncLightDom(node)\n }\n }\n}\n","import { html, LitElement, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { LightDomController } from \"../common/controllers/LightDomController.js\"\nimport { LightSlotController } from \"../common/controllers/LightSlotController.js\"\nimport { observe } from \"../common/decorators/observe.js\"\nimport { wrapIf } from \"../common/directives/wrapIf.js\"\n\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\nimport { FormAssociatedMixin } from \"../common/mixins/FormAssociatedMixin.js\"\nimport { InputMixin } from \"../common/mixins/InputMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport formFieldStyle from \"../common/styles/FormField.css\"\nimport style from \"./Radio.css\"\n\nlet id = 0\nconst createId = (suffix: string) => `nord-radio-${suffix}-${id++}`\n\nfunction isLabel(element: Element): element is HTMLLabelElement {\n return element.localName === \"label\"\n}\n\n/**\n * Radio buttons are graphical user interface elements that allow user to choose only one option from\n * a predefined set of mutually exclusive options.\n *\n * @status ready\n * @category form\n * @slot label - Use when a label requires more than plain text.\n * @slot hint - Optional slot that holds hint text for the input.\n * @slot error - Optional slot that holds error text for the input.\n */\n@customElement(\"nord-radio\")\nexport default class Radio extends FormAssociatedMixin(InputMixin(FocusableMixin(LitElement))) {\n static styles = [componentStyle, formFieldStyle, style]\n\n protected override inputId = createId(\"input\")\n protected override hintId = createId(\"hint\")\n protected override errorId = createId(\"error\")\n\n /**\n * For accessibility reasons, we render some parts of the component to the light DOM.\n */\n protected override hintSlot = new LightSlotController(this, {\n slotName: \"hint\",\n render: () => (this.hint ? html`<div slot=\"hint-internal\" id=${this.hintId}>${this.hint}</div>` : nothing),\n syncLightDom: element => {\n element.id = this.hintId\n },\n })\n\n protected override labelSlot = new LightSlotController(this, {\n slotName: \"label\",\n render: () => (this.label ? html`<label slot=\"label-internal\" for=${this.inputId}>${this.label}</label>` : nothing),\n syncLightDom: element => {\n if (!isLabel(element)) {\n // eslint-disable-next-line no-console\n console.warn(`NORD: Only <label> elements should be placed in radio's \"label\" slot`)\n } else {\n element.htmlFor = this.inputId\n }\n },\n })\n\n protected override errorSlot = new LightSlotController(this, {\n slotName: \"error\",\n render: () => (this.error ? html`<div slot=\"error-internal\" id=${this.errorId}>${this.error}</div>` : nothing),\n syncLightDom: element => {\n element.id = this.hintId\n },\n })\n\n protected inputSlot = new LightDomController(this, {\n render: () =>\n html`\n <input\n slot=\"input\"\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n ${ref(this.focusableRef)}\n class=\"n-input\"\n id=${this.inputId}\n type=\"radio\"\n name=${ifDefined(this.name)}\n .value=${this.value}\n .checked=${this.checked}\n ?disabled=${this.disabled}\n ?required=${this.required}\n aria-describedby=${ifDefined(this.getDescribedBy())}\n aria-invalid=${ifDefined(this.getInvalid())}\n />\n `,\n })\n\n // eslint-disable-next-line class-methods-use-this\n protected override get formValue() {\n // opt out of formdata event, since radio button is in light dom\n return undefined\n }\n\n /**\n * Controls whether the checkbox is checked or not.\n */\n @property({ type: Boolean, reflect: true }) checked: boolean = false\n\n render() {\n return html`\n <div class=\"n-flex\">\n <div class=\"n-input-container\" @change=${this.handleChange}>\n <slot name=\"input\"></slot>\n ${this.checked ? html`<div class=\"n-dot\"></div>` : nothing}\n </div>\n <div class=\"n-expand\">\n <div class=\"n-label-container\">\n ${wrapIf(\n this.hideLabel,\n () => html`\n <slot name=\"label\"></slot>\n <slot name=\"label-internal\"></slot>\n `,\n content => html`<nord-visually-hidden>${content}</nord-visually-hidden>`\n )}\n <div class=\"n-caption n-hint\" ?hidden=${!this.hasHint}>\n <slot name=\"hint\"></slot>\n <slot name=\"hint-internal\"></slot>\n </div>\n </div>\n <div class=\"n-caption n-error\" role=\"alert\" ?hidden=${!this.hasError}>\n <slot name=\"error\"></slot>\n <slot name=\"error-internal\"></slot>\n </div>\n </div>\n </div>\n `\n }\n\n @observe(\"checked\")\n protected handleCheckedChange(previousChecked: boolean) {\n // if this component was previous unchecked but is now checked,\n // then we need to uncheck any radios in the same group\n if (!previousChecked && this.checked) {\n this.uncheckSiblings()\n }\n }\n\n private uncheckSiblings() {\n const root = this.getRootNode() as Document | ShadowRoot\n\n root.querySelectorAll<Radio>(`nord-radio[name=\"${this.name}\"]`).forEach(radio => {\n if (radio !== this) {\n radio.checked = false\n }\n })\n }\n\n protected handleChange(e: Event): void {\n e.stopPropagation()\n const target = e.target as HTMLInputElement\n\n this.checked = target.checked\n super.handleChange(e)\n }\n\n private handleBlur = (e: Event) => {\n e.stopPropagation()\n this.dispatchEvent(new Event(\"blur\", { bubbles: false, cancelable: true }))\n }\n\n private handleFocus = (e: Event) => {\n e.stopPropagation()\n this.dispatchEvent(new Event(\"focus\", { bubbles: false, cancelable: true }))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-radio\": Radio\n }\n}\n","// some clever typing so that TS knows what happens if you pass true/false values\nexport function wrapIf<TInner, TWrapper>(\n condition: false,\n inner: () => TInner,\n wrapper: (inner: TInner) => TWrapper\n): TInner\nexport function wrapIf<TInner, TWrapper>(\n condition: true,\n inner: () => TInner,\n wrapper: (inner: TInner) => TWrapper\n): TWrapper\nexport function wrapIf<TInner, TWrapper>(\n condition: unknown,\n inner: () => TInner,\n wrapper: (inner: TInner) => TWrapper\n): TInner | TWrapper\n\n/**\n * @returns if condition is truthy, return result of wrapper, passing result of inner as arg. if falsy, return result of inner\n */\nexport function wrapIf<TInner, TWrapper>(condition: any, inner: () => TInner, wrapper: (innards: TInner) => TWrapper) {\n return condition ? wrapper(inner()) : inner()\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Header.css\"\n\n/**\n * The header is a block of designated space for labelling the currently\n * viewed context as well as providing primary actions.\n *\n * @status new\n * @category structure\n * @slot - The header content.\n * @slot end - Optional slot for buttons, toggles, etc.\n */\n@customElement(\"nord-header\")\nexport default class Header extends LitElement {\n static styles = [componentStyle, style]\n\n private endSlot = new SlotController(this, \"end\")\n\n render() {\n return html`\n <header class=\"n-header\">\n <slot></slot>\n <div class=\"n-header-end\" ?hidden=${this.endSlot.isEmpty}>\n <slot name=\"end\"></slot>\n </div>\n </header>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-header\": Header\n }\n}\n","import { LitElement } from \"lit\"\n\ntype Constructable<T = Record<string, unknown>> = new (...args: any[]) => T\n\nexport function DraftComponentMixin<T extends Constructable<LitElement>>(superClass: T) {\n class DraftComponent extends superClass {\n private static _warningLogged = false\n\n connectedCallback() {\n super.connectedCallback()\n\n if (process.env.NODE_ENV !== \"development\" && !DraftComponent._warningLogged) {\n // eslint-disable-next-line no-console\n console.warn(\n `NORD: %c${this.localName}%c should not be used in production, as it is in draft status.`,\n \"font-weight:bold\",\n \"font-weight:normal\"\n )\n DraftComponent._warningLogged = true\n }\n }\n }\n\n return DraftComponent as T\n}\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\nimport \"../icon/Icon.js\"\n\nimport style from \"./NavGroup.css\"\n\n/**\n * Navigation group includes all the actions or items in a single\n * group and is used for grouping items into related categories.\n *\n * @category navigation\n * @status draft\n * @slot - The default slot used for the nav items.\n */\n@customElement(\"nord-nav-group\")\nexport default class NavGroup extends DraftComponentMixin(LitElement) {\n static styles = style\n\n /**\n * Heading and accessible label for the nav group\n */\n @property() heading?: string\n\n render() {\n return html`\n ${this.heading ? html`<p id=\"heading\" aria-hidden=\"true\" class=\"n-heading\">${this.heading}</p>` : nothing}\n <div role=\"list\" aria-labelledby=${this.heading ? \"heading\" : nothing}>\n <slot></slot>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-nav-group\": NavGroup\n }\n}\n","import { LitElement, html, nothing, TemplateResult } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { classMap } from \"lit/directives/class-map.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { DirectionController } from \"../common/controllers/DirectionController.js\"\nimport { SlotController } from \"../common/controllers/SlotController.js\"\nimport { cond } from \"../common/directives/cond.js\"\nimport { NordEvent } from \"../common/events.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\n\nimport style from \"./NavItem.css\"\n\n/**\n * Navigation item populates sidebar navigation with links.\n * Every item should be placed inside a navigation group.\n *\n * @status draft\n * @category navigation\n * @slot - The default slot used for the nav item's text.\n * @slot subnav - Used for nesting navigation. When used the nav-item becomes a button to collapse the subnav, rather than a link.\n * @fires toggle - Dispatched whenever a nav item's state changes between open and closed.\n */\n@customElement(\"nord-nav-item\")\nexport default class NavItem extends FocusableMixin(DraftComponentMixin(LitElement)) {\n static styles = style\n\n private subnavSlot = new SlotController(this, \"subnav\")\n private direction = new DirectionController(this)\n\n /**\n * Used for indicating the current page. This gives a prominent background to the nav item,\n * and marks the item as the current page for assistive technology.\n */\n @property({ type: Boolean, reflect: true }) active = false\n\n /**\n * The name of an icon from Nordicons to display for the nav item.\n */\n @property() icon?: string\n\n /**\n * The url the nav item should link to.\n * Note: this is not used if you have nested navigation using the \"subnav\" slot.\n */\n @property() href?: string\n\n /**\n * Allows you to add a notification badge with a number next to the nav item.\n */\n @property() badge?: string\n\n /**\n * When the nav items contains a subnav, controls whether the section is expanded or not.\n * Note: this is only used if you have nested navigation using the \"subnav\" slot.\n */\n @property({ type: Boolean }) open = false\n\n connectedCallback() {\n super.connectedCallback()\n\n // in cases where there is nested nav, and one of the items is active\n // we should auto-open the nav item for developer convenience\n if (this.querySelector(`nord-nav-item[active]`)) {\n this.open = true\n }\n }\n\n render() {\n const innards = html`\n ${this.icon ? html`<nord-icon class=\"n-nav-icon\" name=${this.icon} size=\"m\"></nord-icon>` : nothing}\n <div class=\"n-content\">\n <slot></slot>\n </div>\n `\n let element: TemplateResult\n\n if (this.subnavSlot.hasContent) {\n element = this.renderToggle(innards)\n } else if (this.href) {\n element = this.renderLink(innards)\n } else {\n element = this.renderButton(innards)\n }\n\n return html`\n <div role=\"listitem\">\n ${element}\n <slot name=${this.subnavSlot.slotName} ?hidden=${!this.open}></slot>\n </div>\n `\n }\n\n private renderLink(innards: TemplateResult) {\n return html`\n <a class=\"n-nav-item\" ${ref(this.focusableRef)} aria-current=${cond(this.active, \"page\")} href=${this.href || \"\"}>\n ${innards} ${this.badge ? html`<span class=\"n-nav-badge\">${this.badge}</span>` : nothing}\n </a>\n `\n }\n\n private renderToggle(innards: TemplateResult) {\n return html`\n <button\n class=\"n-nav-item\"\n @click=${this.toggleOpen}\n aria-expanded=${this.open ? \"true\" : \"false\"}\n ${ref(this.focusableRef)}\n >\n ${innards}\n\n <nord-icon\n size=\"xs\"\n class=${classMap({ \"n-toggle-icon\": true, \"n-rtl\": this.direction.isRTL })}\n name=\"arrow-expand-right-small\"\n ></nord-icon>\n </button>\n `\n }\n\n private renderButton(innards: TemplateResult) {\n return html`<button class=\"n-nav-item\" ${ref(this.focusableRef)}>\n ${innards} ${this.badge ? html`<span class=\"n-nav-badge\">${this.badge}</span>` : nothing}\n </button>`\n }\n\n private toggleOpen() {\n this.open = !this.open\n this.dispatchEvent(new NordEvent(\"toggle\"))\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-nav-item\": NavItem\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\n\nimport style from \"./Navigation.css\"\n\n/**\n * Navigation is used to display the primary navigation in the sidebar\n * of an application. Navigation includes a list of links that users\n * use to move between sections of the application.\n *\n * @status draft\n * @category navigation\n * @slot - The main section of the sidebar, for holding nav components.\n * @slot header - The top section of the sidebar.\n * @slot footer - The bottom section of the sidebar.\n */\n@customElement(\"nord-navigation\")\nexport default class Navigation extends DraftComponentMixin(LitElement) {\n static styles = style\n\n render() {\n return html`\n <slot name=\"header\"></slot>\n <nav>\n <slot></slot>\n </nav>\n <slot name=\"footer\"></slot>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-navigation\": Navigation\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\nimport { DraftComponentMixin } from \"../common/mixins/DraftComponentMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Layout.css\"\n\n/**\n * Layout component is used to create the main layout of an app. Layout\n * currently comes with one main configuration: two-column.\n *\n * @status draft\n * @category structure\n * @slot - The default main section content.\n * @slot nav - Used to place content inside the navigation sidebar.\n * @slot header - Used to place content inside the header section.\n */\n@customElement(\"nord-layout\")\nexport default class Layout extends DraftComponentMixin(LitElement) {\n static styles = [componentStyle, style]\n\n render() {\n return html`\n <div class=\"n-layout\">\n <div class=\"n-layout-nav\">\n <slot name=\"nav\"></slot>\n </div>\n <div class=\"n-layout-main\">\n <slot name=\"header\"></slot>\n <main>\n <slot></slot>\n </main>\n </div>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-layout\": Layout\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement } from \"lit/decorators.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./EmptyState.css\"\n\n/**\n * Empty state can be used when there is no data to display to\n * describe what the user can do next. Empty state provides\n * explanation and guidance to help user progress.\n *\n * @status new\n * @category feedback\n * @slot - default slot\n */\n@customElement(\"nord-empty-state\")\nexport default class EmptyState extends LitElement {\n static styles = [componentStyle, style]\n\n render() {\n return html`<div class=\"n-empty-state\">\n <slot></slot>\n </div>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-empty-state\": EmptyState\n }\n}\n","export default '<svg viewBox=\"0 0 140 140\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 70a63 63 0 1 0 126 0A63 63 0 1 0 7 70z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/><path fill=\"currentColor\" d=\"M59.5 101.5a10.5 10.5 0 1 0 21 0 10.5 10.5 0 1 0-21 0z\"/><path d=\"M70 70a17.5 17.5 0 1 0-14-28\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"14\"/></svg>'\nexport const title = \"interface-help-2\"\nexport const tags = \"nordicon interface help support question mark circle round\"\n","export default '<svg viewBox=\"0 0 36 36\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 9C18.9941 9 19.8 9.80589 19.8 10.8V18C19.8 18.9941 18.9941 19.8 18 19.8C17.0058 19.8 16.2 18.9941 16.2 18V10.8C16.2 9.80589 17.0058 9 18 9Z\" fill=\"currentColor\"/><path d=\"M15.3214 25.2C15.3214 25.9104 15.6036 26.5917 16.106 27.0941C16.6083 27.5964 17.2896 27.8786 18 27.8786C18.7105 27.8786 19.3918 27.5964 19.8941 27.0941C20.3965 26.5917 20.6787 25.9104 20.6787 25.2C20.6787 24.4896 20.3965 23.8083 19.8941 23.3059C19.3918 22.8036 18.7105 22.5214 18 22.5214C17.2896 22.5214 16.6083 22.8036 16.106 23.3059C15.6036 23.8083 15.3214 24.4896 15.3214 25.2Z\" fill=\"currentColor\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15.3891 0.71328C16.1794 0.244619 17.0813 -0.00268555 18.0002 -0.00268555C18.919 -0.00268555 19.8209 0.244619 20.6113 0.71328C21.3993 1.18057 22.0474 1.85075 22.4881 2.65385L35.092 25.2668L35.0968 25.2753C35.7031 26.3771 36.0118 27.618 35.9924 28.8754C35.973 30.1329 35.6263 31.3636 34.9863 32.4462C34.3463 33.5288 33.4352 34.426 32.3428 35.0491C31.2505 35.6723 30.0146 36 28.757 35.9999C28.757 35.9999 28.757 35.9999 28.757 35.9999H7.23618C7.23611 35.9999 7.23626 35.9999 7.23618 35.9999C5.97993 35.9998 4.74519 35.6722 3.65409 35.0496C2.56299 34.427 1.65299 33.5308 1.01378 32.4493C0.374574 31.3678 0.0282382 30.1384 0.00891227 28.8823C-0.0104135 27.6262 0.297938 26.3868 0.90357 25.2862L0.90814 25.2779L13.5122 2.65398C13.9529 1.85082 14.601 1.1806 15.3891 0.71328ZM7.23641 32.3999H28.757C29.3889 32.4 30.0101 32.2353 30.559 31.9222C31.1079 31.609 31.5657 31.1582 31.8873 30.6142C32.2089 30.0703 32.3831 29.4518 32.3928 28.82C32.4026 28.1896 32.2482 27.5676 31.945 27.0149C31.9442 27.0136 31.9435 27.0123 31.9428 27.011L19.3403 4.40069L19.3332 4.38778C19.2024 4.14852 19.0096 3.94887 18.7751 3.80979C18.5405 3.67071 18.2729 3.59731 18.0002 3.59731C17.7275 3.59731 17.4599 3.67071 17.2253 3.80979C16.9908 3.94887 16.798 4.14852 16.6672 4.38778L16.6602 4.40037L4.0576 27.0217C4.05692 27.0229 4.05625 27.0242 4.05558 27.0254C3.75289 27.577 3.59881 28.1978 3.60849 28.827C3.61819 29.4575 3.79205 30.0747 4.11292 30.6175C4.4338 31.1604 4.89061 31.6103 5.43834 31.9229C5.986 32.2354 6.60586 32.3998 7.23641 32.3999C7.23648 32.3999 7.23633 32.3999 7.23641 32.3999Z\" fill=\"currentColor\"/></svg>\\n'\nexport const title = \"interface-warning\"\nexport const tags = \"nordicon interface warning exclamation mark triangle shape alert error\"\n","export default '<svg viewBox=\"0 0 36 36\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.27208 5.27208C8.64773 1.89642 13.2261 0 18 0C22.7739 0 27.3523 1.89642 30.7279 5.27208C34.1036 8.64773 36 13.2261 36 18C36 22.7739 34.1036 27.3523 30.7279 30.7279C27.3523 34.1036 22.7739 36 18 36C13.2261 36 8.64773 34.1036 5.27208 30.7279C1.89642 27.3523 0 22.7739 0 18C0 13.2261 1.89642 8.64773 5.27208 5.27208ZM18 3.6C14.1809 3.6 10.5182 5.11714 7.81766 7.81766C5.11714 10.5182 3.6 14.1809 3.6 18C3.6 21.8191 5.11714 25.4818 7.81766 28.1823C10.5182 30.8829 14.1809 32.4 18 32.4C21.8191 32.4 25.4818 30.8829 28.1823 28.1823C30.8829 25.4818 32.4 21.8191 32.4 18C32.4 14.1809 30.8829 10.5182 28.1823 7.81766C25.4818 5.11714 21.8191 3.6 18 3.6Z\" fill=\"currentColor\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18 18C18.9941 18 19.8 18.8059 19.8 19.8V27C19.8 27.9941 18.9941 28.8 18 28.8C17.0058 28.8 16.2 27.9941 16.2 27V19.8C16.2 18.8059 17.0058 18 18 18Z\" fill=\"currentColor\"/><path d=\"M15.2795 10.7999C15.2795 11.5213 15.5661 12.2132 16.0763 12.7234C16.5864 13.2336 17.2784 13.5202 17.9998 13.5202C18.7213 13.5202 19.4132 13.2336 19.9234 12.7234C20.4335 12.2132 20.7201 11.5213 20.7201 10.7999C20.7201 10.0784 20.4335 9.38649 19.9234 8.87634C19.4132 8.36619 18.7213 8.07959 17.9998 8.07959C17.2784 8.07959 16.5864 8.36619 16.0763 8.87634C15.5661 9.38649 15.2795 10.0784 15.2795 10.7999Z\" fill=\"currentColor\"/></svg>\\n'\nexport const title = \"interface-info\"\nexport const tags = \"nordicon interface info circle round alert notice information\"\n","export default '<svg viewBox=\"0 0 36 36\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.67198 5.27208C9.04764 1.89642 13.626 0 18.3999 0C23.1738 0 27.7522 1.89642 31.1278 5.27208C34.5035 8.64773 36.3999 13.2261 36.3999 18C36.3999 22.7739 34.5035 27.3523 31.1278 30.7279C27.7522 34.1036 23.1738 36 18.3999 36C13.626 36 9.04764 34.1036 5.67198 30.7279C2.29633 27.3523 0.399902 22.7739 0.399902 18C0.399902 13.2261 2.29633 8.64773 5.67198 5.27208ZM18.3999 3.6C14.5808 3.6 10.9181 5.11714 8.21757 7.81766C5.51704 10.5182 3.9999 14.1809 3.9999 18C3.9999 21.8191 5.51704 25.4818 8.21757 28.1823C10.9181 30.8829 14.5808 32.4 18.3999 32.4C22.219 32.4 25.8817 30.8829 28.5822 28.1823C31.2828 25.4818 32.7999 21.8191 32.7999 18C32.7999 14.1809 31.2828 10.5182 28.5822 7.81766C25.8817 5.11714 22.219 3.6 18.3999 3.6Z\" fill=\"currentColor\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M27.0484 10.0907C27.8261 10.7099 27.9546 11.8423 27.3354 12.62L16.233 26.5642C15.8927 26.9915 15.3768 27.2412 14.8306 27.243C14.2843 27.2447 13.7669 26.9983 13.4239 26.5732L9.39039 21.5735C8.76619 20.7998 8.8874 19.6666 9.66112 19.0424C10.4348 18.4182 11.5681 18.5394 12.1923 19.3131L14.8156 22.5648L24.5191 10.3776C25.1383 9.59994 26.2707 9.47146 27.0484 10.0907Z\" fill=\"currentColor\"/></svg>\\n'\nexport const title = \"interface-checked-circle\"\nexport const tags = \"nordicon interface circle round checked checkmark ready done success\"\n","import { LitElement, html } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport * as warningIcon from \"@nordhealth/icons/lib/assets/interface-help-2.js\"\nimport * as dangerIcon from \"@nordhealth/icons/lib/assets/interface-warning.js\"\nimport * as infoIcon from \"@nordhealth/icons/lib/assets/interface-info.js\"\nimport * as successIcon from \"@nordhealth/icons/lib/assets/interface-checked-circle.js\"\n\nimport Icon from \"../icon/Icon.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Banner.css\"\n\nIcon.registerIcon(warningIcon)\nIcon.registerIcon(dangerIcon)\nIcon.registerIcon(infoIcon)\nIcon.registerIcon(successIcon)\n\nconst iconMap = {\n warning: \"interface-help-2\",\n danger: \"interface-warning\",\n info: \"interface-info\",\n success: \"interface-checked-circle\",\n}\n\n/**\n * Banner informs users about important changes or conditions in the\n * interface. Use this component if you need to communicate to users\n * in a prominent way.\n *\n * @status new\n * @category feedback\n * @slot - default slot\n */\n@customElement(\"nord-banner\")\nexport default class Banner extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * The style variant of the banner.\n */\n @property({ reflect: true }) variant: \"info\" | \"danger\" | \"success\" | \"warning\" = \"info\"\n\n render() {\n const icon = iconMap[this.variant] || iconMap.info\n\n return html`\n <div class=\"n-banner\" role=\"alert\">\n <nord-stack align-items=\"start\" direction=\"horizontal\">\n <nord-icon name=${icon} size=\"m\"></nord-icon>\n <div class=\"n-banner-content\">\n <slot></slot>\n </div>\n </nord-stack>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-banner\": Banner\n }\n}\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Avatar.css\"\nimport { fsm, States } from \"../common/fsm.js\"\nimport { cond } from \"../common/directives/cond.js\"\nimport { observe } from \"../common/decorators/observe.js\"\n\nconst { transition } = fsm({\n initial: {\n \"src-set\": \"loading\",\n },\n loading: {\n load: \"loaded\",\n error: \"initial\",\n \"src-clear\": \"initial\",\n },\n loaded: {\n \"src-set\": \"loading\",\n \"src-clear\": \"initial\",\n },\n})\n\n/**\n * Avatar is used for showing a thumbnail representation of a user or entity.\n * Default avatar illustration is displayed when no src is specified.\n *\n * @status new\n * @category image\n */\n@customElement(\"nord-avatar\")\nexport default class Avatar extends LitElement {\n static styles = [componentStyle, style]\n\n @state() private state: States<typeof transition> = \"initial\"\n\n /**\n * The size of the avatar.\n */\n @property({ reflect: true }) size: \"m\" | \"l\" | \"xl\" | \"xxl\" = \"m\"\n\n /**\n * The URL of the avatar image uploaded by the user.\n */\n @property({ reflect: true }) src?: string\n\n /**\n * The name of the person.\n */\n @property() name: string = \"\"\n\n render() {\n return html`\n <div class=\"n-avatar\">\n ${this.state !== \"initial\" ? this.renderImage() : nothing}\n ${this.state !== \"loaded\" ? this.renderFallback() : nothing}\n </div>\n `\n }\n\n @observe(\"src\")\n protected handleSrcChange() {\n const event = this.src ? \"src-set\" : \"src-clear\"\n this.state = transition(this.state, event)\n }\n\n protected renderImage() {\n return this.src\n ? html`\n <img\n class=\"n-${this.state}\"\n src=${this.src}\n @load=${this.handleLoad}\n @error=${this.handleError}\n alt=${this.name || \"\"}\n />\n `\n : nothing\n }\n\n protected renderFallback() {\n return html`\n <svg\n aria-label=${this.name}\n role=${cond(this.name, \"img\")}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 27 27\"\n >\n <rect fill=\"var(--n-color-status-info)\" height=\"27\" rx=\"12\" width=\"27\" x=\"0\" y=\"0\"></rect>\n <g fill=\"#fff\" opacity=\".5\">\n <circle cx=\"13.5\" cy=\"30\" r=\"13\"></circle>\n <circle cx=\"13.5\" cy=\"11\" r=\"5\"></circle>\n </g>\n </svg>\n `\n }\n\n private handleLoad() {\n this.state = transition(this.state, \"load\")\n }\n\n private handleError() {\n this.state = transition(this.state, \"error\")\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-avatar\": Avatar\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./ProgressBar.css\"\n\n/**\n * Progress Bar is used to visually represent the completion\n * of a task or process. It shows how much of the task has\n * been completed and how much is still left.\n *\n * @status new\n * @category feedback\n */\n@customElement(\"nord-progress-bar\")\nexport default class ProgressBar extends FocusableMixin(LitElement) {\n static styles = [componentStyle, style]\n\n /**\n * Specifies how much of the task has been completed. Must be a valid floating\n * point number between 0 and max, or between 0 and 100 if max is omitted. If\n * there is no value, the progress bar is indeterminate; this indicates that\n * an activity is ongoing with no indication of how long it’s expected to take.\n */\n @property({ reflect: true, type: Number }) value?: number\n\n /**\n * Describes how much work the task indicated by the progress element requires.\n * The max attribute, if present, must have a value greater than 0 and be a\n * valid floating point number.\n */\n @property({ reflect: true, type: Number }) max: number = 100\n\n /**\n * Accessible label for the progress indicator. Visually hidden, but shown\n * for assistive technology.\n */\n @property({ reflect: true }) label: string = \"Current progress\"\n\n render() {\n /**\n * The Aria properties are required for now due to a Chrome bug.\n * In the future we can probably get rid of them. For context:\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1310779\n */\n return html`<label>\n <nord-visually-hidden>${this.label}</nord-visually-hidden>\n <progress\n ${ref(this.focusableRef)}\n aria-valuenow=${ifDefined(this.value)}\n aria-valuemin=\"0\"\n aria-valuemax=${this.max}\n tabindex=\"-1\"\n max=${this.max}\n value=${ifDefined(this.value)}\n ></progress>\n </label>`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-progress-bar\": ProgressBar\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property, state } from \"lit/decorators.js\"\nimport { computePosition, shift, offset, flip, hide, autoUpdate, Placement } from \"@floating-ui/dom\"\nimport { LightDismissController } from \"../common/controllers/LightDismissController.js\"\nimport { NordEvent } from \"../common/events.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Popout.css\"\nimport { logicalToPhysical } from \"../common/positioning.js\"\nimport { DirectionController } from \"../common/controllers/DirectionController.js\"\nimport { observe } from \"../common/decorators/observe.js\"\n\n/**\n * Popouts are small overlays that open on demand. They let users access additional content and actions without cluttering the page.\n *\n * @status new\n * @category overlay\n * @slot - The popout content.\n */\n@customElement(\"nord-popout\")\nexport default class Popout extends LitElement {\n static styles = [componentStyle, style]\n\n private targetElement!: HTMLElement\n private cleanupAutoUpdate?: ReturnType<typeof autoUpdate>\n\n /**\n * Handle dismissal of the popout, clicking outside the target button and popout.\n */\n private dismiss = new LightDismissController(this, {\n isOpen: () => this.open,\n onDismiss: e => this.hide(e.type !== \"click\"),\n isDismissible: node => node !== this && node !== this.targetElement,\n })\n\n private direction = new DirectionController(this)\n\n @state() private open = false\n\n @state() private computedPosition?: Placement\n\n /**\n * Set the alignment of the popout in relation to the toggle depending on the position.\n * `start` will align the left of the popout to the left of the toggle.\n * `end` will align the right of the popout to the right of the toggle.\n * A popout with a set position of `inline-start` or `inline-end` will switch\n * `start` and `end` to the top and bottom of the popout respectively.\n */\n @property({ reflect: true }) align: \"start\" | \"end\" = \"start\"\n\n /**\n * Set the position of the popout in relation to the toggle.\n * Options follow logical properties.\n * `block-start` and `block-end` referring to top and bottom respectively,\n * `inline-start` and `inline-end` referring to left and right respectively.\n */\n @property({ reflect: true }) position: \"block-end\" | \"block-start\" | \"inline-start\" | \"inline-end\" = \"block-end\"\n\n /**\n * The id for the active element to reference via aria-controls.\n */\n @property({ reflect: true }) id: string = \"\"\n\n /**\n * Show the popout, moving focus to the calendar inside.\n */\n show() {\n if (this.open) {\n return\n }\n\n this.open = true\n this.cleanupAutoUpdate = autoUpdate(this.targetElement, this, this.updatePosition)\n\n // we should only focus once the popout is visible after render is complete\n this.updateComplete.then(() => {\n /**\n * Dispatched when the popout is opened.\n */\n this.dispatchEvent(new NordEvent(\"open\"))\n })\n }\n\n /**\n * Hide the popout.\n * @param {boolean} moveFocusToButton prevent focus returning to the target\n * button. Default is true.\n */\n hide(moveFocusToButton = true) {\n if (!this.open) {\n return\n }\n\n this.open = false\n this.cleanupAutoUpdate?.()\n\n /**\n * Dispatched when the popout is closed.\n */\n this.dispatchEvent(new NordEvent(\"close\"))\n\n if (moveFocusToButton) {\n this.targetElement.focus({ preventScroll: true })\n }\n }\n\n /**\n * Position the popout on load.\n */\n firstUpdated() {\n this.updatePosition()\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n this.targetElement = this.getToggle()\n this.targetElement.addEventListener(\"click\", this.toggleOpen)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n\n this.cleanupAutoUpdate?.()\n this.targetElement.removeAttribute(\"aria-expanded\")\n this.targetElement.removeEventListener(\"click\", this.toggleOpen)\n }\n\n render() {\n return html`\n <div\n class=\"n-popout ${this.computedPosition} is-${this.direction.dir}\"\n aria-hidden=${this.open ? \"false\" : \"true\"}\n >\n <slot></slot>\n </div>\n `\n }\n\n @observe(\"id\")\n protected handleIdChange() {\n if (!this.id) {\n // eslint-disable-next-line no-console\n console.warn(\"NORD: popout requires an id attribute and value\")\n }\n }\n\n @observe(\"open\")\n protected handleOpenChange() {\n this.targetElement.setAttribute(\"aria-expanded\", `${this.open}`)\n }\n\n /**\n * Get the position of the element toggling the popout\n * and position the popout underneath it, taking into account the optional placement.\n */\n private updatePosition = async () => {\n const { x, y, placement, middlewareData } = await computePosition(this.targetElement, this, {\n strategy: \"fixed\",\n placement: logicalToPhysical(this.position, this.align, this.direction.dir),\n middleware: [\n shift({\n padding: 8,\n }),\n offset(8),\n flip(),\n hide(),\n ],\n })\n\n this.computedPosition = placement\n\n // use physical properties here since floating-ui\n // works exclusively in physical dimensions\n // we do all the mapping in logicalToPhysical\n this.style.left = `${x}px`\n this.style.top = `${y}px`\n\n if (middlewareData.hide?.referenceHidden) {\n this.hide()\n }\n }\n\n /**\n * Toggle the popout open or closed using state.\n * Updating the position to underneath the target button before the popout is opened.\n */\n private toggleOpen = (e: Event) => {\n e.preventDefault()\n if (this.open) {\n this.hide(false)\n } else {\n this.updatePosition().then(() => this.show())\n }\n }\n\n private getToggle() {\n const rootNode = this.getRootNode() as Document | ShadowRoot\n const toggle = <HTMLElement>rootNode.querySelector(`[aria-controls='${this.id}']`)\n\n if (toggle instanceof HTMLSlotElement) {\n return toggle.assignedElements()[0] as HTMLElement\n }\n\n return toggle\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-popout\": Popout\n }\n}\n","import { LitElement, html } from \"lit\"\nimport { customElement, property, query } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\n\nimport Popout from \"../popout/Popout.js\"\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./Dropdown.css\"\n\n/**\n * Dropdown menu displays a list of actions or selectable options for\n * a user. Dropdown uses popout component internally to create\n * the overlay functionality.\n *\n * @status new\n * @category action\n * @slot - The dropdown content.\n * @slot toggle - Used to place the toggle for dropdown.\n */\n@customElement(\"nord-dropdown\")\nexport default class Dropdown extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * we delegate focus, to ensure focus does not move to body if you click\n * some whitespace or a dropdown-group heading, as this would close the dropdown\n * @internal\n */\n static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n\n @query(\"nord-popout\", true) private popout!: Popout\n\n /**\n * Set the alignment of the dropdown in relation to the toggle depending on the position.\n * `start` will align the left of the dropdown to the left of the toggle.\n * `end` will align the right of the dropdown to the right of the toggle.\n * A dropdown with a set position of `inline-start` or `inline-end` will switch\n * `start` and `end` to the top and bottom of the dropdown respectively.\n */\n @property({ reflect: true }) align?: Popout[\"align\"]\n\n /**\n * Set the position of the dropdown in relation to the toggle.\n * Options follow logical properties.\n * `block-start` and `block-end` referring to top and bottom respectively,\n * `inline-start` and `inline-end` referring to left and right respectively.\n */\n @property({ reflect: true }) position?: Popout[\"position\"]\n\n /**\n * Controls whether the toggle slot expands to fill the width of its container.\n */\n @property({ reflect: true, type: Boolean }) expand = false\n\n connectedCallback() {\n super.connectedCallback()\n\n const toggle = this.querySelector(`[slot=\"toggle\"]`) || undefined\n toggle?.setAttribute(\"aria-haspopup\", \"true\")\n }\n\n render() {\n return html`\n <div class=\"n-dropdown\" @focusout=${this.handleBlur}>\n <slot name=\"toggle\" aria-controls=\"popout\"></slot>\n <nord-popout\n id=\"popout\"\n align=${ifDefined(this.align)}\n position=${ifDefined(this.position)}\n @open=${this.handleOpen}\n >\n <div class=\"n-dropdown-content\">\n <slot></slot>\n </div>\n </nord-popout>\n </div>\n `\n }\n\n private handleBlur(e: FocusEvent) {\n const relatedTarget = e.relatedTarget as Node\n\n // safari will set relatedTarget to null when clicking on the trigger button\n // because it doesn't focus buttons on click.\n // this caused weird behavior where the dropdown closed _and_ opened with a single click.\n // so we only run this logic if relatedTarget is set, which sidesteps this issue\n if (relatedTarget && !this.contains(relatedTarget)) {\n this.popout.hide(false)\n }\n }\n\n private handleOpen() {\n this.querySelector(\"nord-dropdown-item\")?.focus()\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-dropdown\": Dropdown\n }\n}\n","import { LitElement, html, TemplateResult } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\nimport { ifDefined } from \"lit/directives/if-defined.js\"\nimport { ref } from \"lit/directives/ref.js\"\nimport { FocusableMixin } from \"../common/mixins/FocusableMixin.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./DropdownItem.css\"\n\n/**\n * Dropdown item populates dropdown with actions. Items can be\n * placed either inside a dropdown group or directly inside a\n * dropdown component.\n *\n * @status new\n * @category action\n * @slot - The dropdown item content.\n * @slot start - Used to place content before dropdown item text. Typically used for icons.\n * @slot end - Used to place content after dropdown item text. Typically used for icons.\n */\n@customElement(\"nord-dropdown-item\")\nexport default class DropdownItem extends FocusableMixin(LitElement) {\n static styles = [componentStyle, style]\n\n /**\n * The url the dropdown item should link to.\n */\n @property({ reflect: true }) href?: string\n\n render() {\n const link = (content: TemplateResult) =>\n html`<a href=${ifDefined(this.href)} ${ref(this.focusableRef)} class=\"n-dropdown-item\">${content}</a>`\n const button = (content: TemplateResult) =>\n html`<button ${ref(this.focusableRef)} class=\"n-dropdown-item\">${content}</button>`\n\n const container = this.href ? link : button\n\n return container(html`\n <slot name=\"start\"></slot>\n <span class=\"n-truncate\"><slot></slot></span>\n <slot name=\"end\"></slot>\n `)\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-dropdown-item\": DropdownItem\n }\n}\n","import { LitElement, html, nothing } from \"lit\"\nimport { customElement, property } from \"lit/decorators.js\"\n\nimport componentStyle from \"../common/styles/Component.css\"\nimport style from \"./DropdownGroup.css\"\n\n/**\n * Dropdown group includes all the actions or items in a single dropdown\n * group and is used for grouping items into related categories.\n *\n * @status new\n * @category action\n * @slot - The dropdown group content.\n */\n@customElement(\"nord-dropdown-group\")\nexport default class DropdownGroup extends LitElement {\n static styles = [componentStyle, style]\n\n /**\n * Heading and accessible label for the dropdown group.\n */\n @property() heading?: string\n\n render() {\n return html`\n <div class=\"n-dropdown-group\">\n ${this.heading\n ? html`<p id=\"heading\" aria-hidden=\"true\" class=\"n-dropdown-group-heading\">${this.heading}</p>`\n : nothing}\n <div class=\"n-dropdown-group-content\" role=\"group\" aria-labelledby=${this.heading ? \"heading\" : nothing}>\n <slot></slot>\n </div>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"nord-dropdown-group\": DropdownGroup\n }\n}\n"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","t","window","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","e","Symbol","n","Map","s","constructor","this","_$cssResult$","Error","cssText","styleSheet","get","set","replaceSync","toString","o","reduce","S","cssRules","trustedTypes","emptyScript","h","reactiveElementPolyfillSupport","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","l","attribute","type","String","converter","reflect","hasChanged","a","HTMLElement","super","_$Et","isUpdatePending","hasUpdated","_$Ei","static","push","observedAttributes","finalize","elementProperties","forEach","_$Eh","_$Eu","state","noAccessor","hasOwnProperty","getPropertyDescriptor","requestUpdate","configurable","enumerable","finalized","getPrototypeOf","properties","getOwnPropertyNames","getOwnPropertySymbols","createProperty","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","_$Ep","Promise","enableUpdating","_$AL","_$Em","addController","_$Eg","renderRoot","isConnected","hostConnected","call","removeController","splice","indexOf","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ES","removeAttribute","getPropertyOptions","has","_$EC","_$E_","async","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EU","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","mode","ReactiveElement","globalThis","reactiveElementVersions","createPolicy","createHTML","Math","random","slice","createComment","u","iterator","v","f","_","m","g","$","_$litType$","strings","values","p","b","for","w","T","WeakMap","x","renderBefore","_$litPart$","N","insertBefore","_$AI","A","createTreeWalker","C","lastIndex","exec","test","RegExp","y","startsWith","E","parts","el","currentNode","content","firstChild","remove","append","childNodes","nextNode","nodeType","hasAttributes","getAttributeNames","endsWith","getAttribute","split","index","name","ctor","M","H","I","tagName","data","innerHTML","P","_$Cl","_$Cu","_$litDirective$","_$AO","_$AT","_$AS","V","_$AN","_$AD","_$AM","parentNode","_$AU","creationScope","importNode","nextSibling","L","_$AH","_$AA","_$AB","options","_$Cg","startNode","endNode","_$AR","k","createTextNode","_$AC","_$AP","setConnected","element","fill","capture","once","passive","removeEventListener","addEventListener","handleEvent","host","R","j","D","F","O","W","B","Z","z","litHtmlPolyfillSupport","litHtmlVersions","renderOptions","_$Dt","render","_$litElement$","litElementHydrateSupport","LitElement","litElementPolyfillSupport","litElementVersions","customElements","define","kind","elements","finisher","descriptor","placement","originalKey","initializer","querySelector","HTMLSlotElement","assignedElements","Badge","html","componentStyle","style","property","customElement","_$AQ","_$Ct","_$Ci","delete","size","add","reconnected","disconnected","setValue","U","ot","rt","lt","ht","value","EventController","listeners","stop","listen","listener","LightDomController","container","nothing","cond","condition","trueCase","falseCase","FocusableMixin","superClass","focusableRef","createRef","focus","_a","blur","click","InputMixin","InputElement","disabled","form","closest","undefined","Button","buttonRef","events","lightDom","renderLightDom","variant","download","expand","handleOuterClick","composedPath","some","node","stopPropagation","innards","href","renderLink","renderButton","ref","handleClick","accessibleExpanded","accessibleHasPopup","SlotController","slotName","handleSlotChange","onChange","hasContent","isEmpty","selector","_e","Card","headerSlot","footerSlot","padding","it","directiveName","ft","raw","resultType","FormDataController","handleFormData","formData","NordEvent","Event","eventInitDict","bubbles","composed","VisuallyHidden","FormAssociatedMixin","FormAssociatedElement","labelSlot","errorSlot","hintSlot","formValue","inputId","errorId","hintId","label","hideLabel","required","handleInput","dispatchEvent","handleChange","renderLabel","hasHint","hint","renderError","hasError","error","getDescribedBy","getInvalid","Input","startSlot","hasIcon","isNumber","defaultIcon","unsafeHTML","ifDefined","placeholder","handleKeydown","formFieldStyle","textFieldStyle","PropertyObserverController","cb","lifecycle","handle","_value","newValue","observe","propertyName","methodName","addInitializer","Icon","Icon_1","svg","resolver","iconOrName","icon","title","default","registeredIcons","color","handleNameChange","then","catch","fetch","response","ok","TypeError","text","dt","keys","ut","filter","join","et","st","classList","wrap","val","min","max","getFocusedElement","root","activeElement","navigator","platform","getModifierState","trim","pop","timeout","KeyboardEvent","toUpperCase","code","find","includes","clearTimeout","setTimeout","clear","bind","ARROW_RE","ESC_RE","ShortcutController","shortcuts","unbind","unregister","event","tinykeys","normalised","keybinding","mapped","replace","_match","normalise","LightDismissController","handleEsc","isOpen","onDismiss","handleClickOut","predicate","isDismissible","every","shortcut","Escape","preventDefault","fn","KeyboardController","actions","commandShortcuts","globalShortcuts","toggleOpen","navigationShortcuts","Enter","trigger","Backspace","goBack","End","end","Home","start","ArrowDown","next","ArrowUp","previous","registerCommandShortcuts","command","commands","handler","DirectionController","dir","documentElement","isLTR","isRTL","observer","MutationObserver","attributes","attributeFilter","hosts","KEY_REGEX","registerIcon","chevronIconLeft","chevronIconRight","altKeyIcon","CommandMenuAction","direction","selected","classMap","getIconName","renderShortcut","ensureInView","requestAnimationFrame","scrollIntoView","block","SelectEvent","eventName","en","$lang","$name","$dir","instructions","inputLabel","footerArrowKeys","footerEnterKey","footerEscapeKey","footerBackspaceKey","noResults","searchTerm","tip","prevMonthLabel","nextMonthLabel","monthSelectLabel","yearSelectLabel","modalHeading","closeLabel","buttonLabel","selectedDateMessage","subscribers","translations","subscriber","registerTranslation","translation","lang","isTranslationRegistered","resolveTranslation","langCode","langOnly","noop","LocalizeController","onLangChange","handleLangChange","resolved","resolvedTranslation","resolvedLang","unsubscribe","term","args","componentName","localName","navigateIcon","enterIcon","backspaceIcon","CommandMenu","inputRef","listRef","localize","dismissController","open","close","keyboardController","select","search","bump","selectedIndex","filteredCommands","show","cancelable","setParent","parent","previousFocus","sections","array","grouped","item","collection","groupBy","activeDescendant","id","handleAnimationEnd","handleBlur","renderNoResults","from","section","renderSection","navigateIcon.title","sectionId","repeat","_b","handleCommandsChange","handleBump","focusOnOpen","scrollTop","input","setSearch","parentCommand","str","filterCommands","searchTerms","toLocaleLowerCase","keywords","searchSpace","matcher","Select","defaultSlot","slottedOptions","buttonText","getButtonText","option","renderOption","querySelectorAll","Stack","gap","alignItems","responsive","Spinner","Table","density","renderStyles","rootNode","getRootNode","renderTarget","Node","DOCUMENT_NODE","head","Textarea","resize","resizeToFitContent","textarea","height","scrollHeight","SwipeController","hadFirstUpdate","initialTouchX","initialTouchY","handleTouchStart","pageX","pageY","changedTouches","handleTouchEnd","matchesGesture","onSwipeEnd","distX","distY","details","initialX","initialY","isHorizontalSwipe","abs","isDownwardsSwipe","ISO_DATE_FORMAT","createDate","year","month","day","dayInt","parseInt","monthInt","yearInt","isInteger","date","Date","setFullYear","parseISODate","matches","match","printISODate","getDate","getMonth","getFullYear","padStart","today","UTC","getDayNames","locale","weekday","days","getDay","toLocaleDateString","setDate","getMonthNames","months","setMonth","isEqualMonth","isEqual","addDays","startOfWeek","firstDayOfWeek","diff","endOfWeek","startOfMonth","endOfMonth","setYear","clamp","time","getTime","inRange","getViewOfMonth","current","getDaysInRange","monthView","onFocusIn","onFocusOut","selectedDate","focusedDate","labelledById","dayNames","dayNamesShort","dateFormatter","isDateDisabled","onDateSelect","onKeyboardNavigation","table","currentTarget","relatedTarget","contains","startingOffset","mapFn","dayName","adjustedIndex","chunkSize","result","chunk","week","focusedDay","onDaySelect","isSelected","isToday","isMonth","isFocused","isOutsideRange","format","dayView","dateInRange","DateSelectEvent","arrowRightIcon","arrowLeftIcon","arrowDownIcon","Calendar","dialogLabelId","swipe","addMonths","createKeybindingsHandler","ArrowRight","ArrowLeft","PageUp","PageDown","addYears","activeFocus","handleDaySelect","isInRange","isAllowed","handleMonthSelect","handleYearSelect","handleNextMonthClick","handlePreviousMonthClick","enableActiveFocus","disableActiveFocus","focusedDayNode","monthSelectNode","valueAsDate","focusedMonth","focusedYear","minDate","maxDate","minDateStartOfMonth","maxDateEndOfMonth","selectedYear","minYear","maxYear","monthNames","monthNamesShort","to","range","dateFormatShort","handleValueChange","setFocusedDay","handleFocusedDayChange","Intl","DateTimeFormat","years","query","isoAdapter","calendarIcon","closeIcon","DISALLOWED_CHARACTERS","DatePicker","dismiss","hide","calendar","toggleButton","dialog","createDateFormatters","dateAdapter","handleFocus","handleInputChange","inputEl","regex","cursor","selectionStart","beforeCursor","afterCursor","filteredBeforeCursor","newCursor","selectionEnd","cleanValue","parsed","valueAsNumber","NaN","moveFocusToButton","formattedDate","dateFormatLong","focusLast","focusFirst","closeButton","checkedIcon","Checkbox","checked","getSide","getAlignment","getMainAxisFromPlacement","getLengthFromAxis","axis","computeCoordsFromPlacement","_ref","rtl","reference","floating","commonX","width","commonY","mainAxis","commonAlign","isVertical","coords","rectToClientRect","rect","top","left","right","bottom","detectOverflow","middlewareArguments","_await$platform$isEle","rects","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","expandPaddingObject","getSideObjectFromPadding","clippingClientRect","getClippingRect","isElement","contextElement","getDocumentElement","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","offsetParent","getOffsetParent","within","min$1","max$1","hash$1","getOppositePlacement","matched","hash","getOppositeAlignmentPlacement","sides","flip","_middlewareData$flip","middlewareData","initialPlacement","checkMainAxis","crossAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","flipAlignment","detectOverflowOptions","side","oppositePlacement","getExpandedPlacements","placements","overflow","overflows","overflowsData","main","cross","alignment","mainAlignmentSide","getAlignmentSides","_middlewareData$flip$","_middlewareData$flip2","nextIndex","nextPlacement","reset","resetPlacement","_overflowsData$map$so","acc","sort","getSideOffsets","isAnySideFullyClipped","_temp","offsets","referenceHiddenOffsets","referenceHidden","escapedOffsets","escaped","offset","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","alignmentAxis","convertValueToCoords","shift","limiter","mainAxisCoord","crossAxisCoord","maxSide","limitedCoords","isWindow","location","alert","setInterval","getWindow","ownerDocument","defaultView","getComputedStyle$1","getComputedStyle","getNodeName","nodeName","isHTMLElement","Element","isShadowRoot","isOverflowElement","overflowX","overflowY","isTableElement","isContainingBlock","isFirefox","userAgent","css","transform","perspective","contain","willChange","isLayoutViewport","round","getBoundingClientRect","includeScale","isFixedStrategy","_win$visualViewport$o","_win$visualViewport","_win$visualViewport$o2","_win$visualViewport2","clientRect","scaleX","scaleY","offsetWidth","offsetHeight","win","addVisualOffsets","visualViewport","offsetLeft","offsetTop","getNodeScroll","scrollLeft","pageXOffset","pageYOffset","getWindowScrollBarX","getRectRelativeToOffsetParent","isOffsetParentAnElement","isScaled","scroll","offsetRect","clientLeft","clientTop","getParentNode","assignedSlot","getTrueOffsetParent","position","getContainingBlock","getDimensions","getNearestOverflowAncestor","body","getOverflowAncestors","list","_node$ownerDocument","scrollableAncestor","isBody","concat","updatedList","getClientRectFromClippingAncestor","clippingParent","clientWidth","clientHeight","layoutViewport","getViewportRect","getInnerBoundingClientRect","_element$ownerDocumen","scrollWidth","getDocumentRect","getClippingAncestors","clippingAncestors","clipperElement","child","firstClippingAncestor","clippingRect","accRect","clippingAncestor","getElementRects","getClientRects","computePosition","config","middleware","statefulPlacement","nextX","nextY","computePosition$1","getTokens","attr","setTokens","tokens","fsm","transition","currentState","logicalMapLTR","logicalMapRTL","logicalMap","logicalToPhysical","logicalSide","logicalSideAlign","referencesTooltip","tooltip","ELEMENT_NODE","hidden","visible","reposition","waiting","positioning","positioned","Tooltip","Tooltip_1","shortcutSlot","proxy","role","delay","updatePosition","currentElement","hideTooltip","handleShow","handleHide","hideOnEscape","addDescribedBy","focusable","insertAdjacentElement","token","attr.add","removeDescribedBy","attr.remove","handleIdChange","console","warn","handleStateChange","prevState","timeoutId","visibility","opacity","lastOpened","Fieldset","LightSlotController","syncLightDom","renderHook","createId","suffix","Radio","isLabel","htmlFor","inputSlot","inner","wrapper","handleCheckedChange","previousChecked","uncheckSiblings","radio","Header","endSlot","DraftComponentMixin","DraftComponent","_warningLogged","NavGroup","heading","NavItem","subnavSlot","active","renderToggle","badge","Navigation","Layout","EmptyState","warningIcon","dangerIcon","infoIcon","successIcon","iconMap","warning","danger","info","success","Banner","initial","loading","load","loaded","Avatar","renderImage","renderFallback","handleSrcChange","src","handleLoad","handleError","ProgressBar","Popout","targetElement","align","computedPosition","cleanupAutoUpdate","ancestorScroll","_ancestorScroll","ancestorResize","_ancestorResize","elementResize","_elementResize","animationFrame","cleanedUp","ancestors","ancestor","frameId","ResizeObserver","prevRefRect","frameLoop","nextRefRect","_observer","disconnect","cancelAnimationFrame","autoUpdate","preventScroll","getToggle","handleOpenChange","toggle","Dropdown","handleOpen","popout","delegatesFocus","DropdownItem","DropdownGroup"],"mappings":"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"}
|