igniteui-webcomponents 7.3.0 → 7.3.2
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/CHANGELOG.md +64 -1
- package/README.md +30 -0
- package/components/avatar/avatar.d.ts +1 -2
- package/components/avatar/avatar.js +4 -8
- package/components/avatar/avatar.js.map +1 -1
- package/components/avatar/themes/avatar.base.css.js +1 -1
- package/components/avatar/themes/avatar.base.css.js.map +1 -1
- package/components/badge/badge.d.ts +6 -1
- package/components/badge/badge.js +8 -5
- package/components/badge/badge.js.map +1 -1
- package/components/badge/themes/badge.base.css.js +1 -1
- package/components/badge/themes/badge.base.css.js.map +1 -1
- package/components/banner/themes/banner.base.css.js +1 -1
- package/components/banner/themes/banner.base.css.js.map +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js.map +1 -1
- package/components/calendar/base.d.ts +7 -2
- package/components/calendar/base.js +8 -3
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +4 -0
- package/components/calendar/calendar.js +41 -14
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.d.ts +3 -6
- package/components/calendar/days-view/days-view.js +7 -16
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/helpers.d.ts +13 -0
- package/components/calendar/helpers.js +15 -0
- package/components/calendar/helpers.js.map +1 -1
- package/components/calendar/themes/calendar.base.css.js +1 -1
- package/components/calendar/themes/calendar.base.css.js.map +1 -1
- package/components/calendar/themes/days-view.base.css.js +1 -1
- package/components/calendar/themes/days-view.base.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/fluent/days-view.fluent.css.js +1 -1
- package/components/calendar/themes/shared/fluent/days-view.fluent.css.js.map +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/shared/indigo/days-view.indigo.css.js +1 -1
- package/components/calendar/themes/shared/indigo/days-view.indigo.css.js.map +1 -1
- package/components/calendar/themes/shared/material/days-view.material.css.js +1 -1
- package/components/calendar/themes/shared/material/days-view.material.css.js.map +1 -1
- package/components/calendar/themes/year-month-view.base.css.js +1 -1
- package/components/calendar/themes/year-month-view.base.css.js.map +1 -1
- package/components/card/themes/container.base.css.js +1 -1
- package/components/card/themes/container.base.css.js.map +1 -1
- package/components/carousel/themes/carousel.base.css.js +1 -1
- package/components/carousel/themes/carousel.base.css.js.map +1 -1
- package/components/carousel/themes/shared/carousel.indigo.css.js +1 -1
- package/components/carousel/themes/shared/carousel.indigo.css.js.map +1 -1
- package/components/chat/themes/chat.base.css.js +1 -1
- package/components/chat/themes/chat.base.css.js.map +1 -1
- package/components/chat/themes/message.base.css.js +1 -1
- package/components/chat/themes/message.base.css.js.map +1 -1
- package/components/checkbox/themes/checkbox.base.css.js +1 -1
- package/components/checkbox/themes/checkbox.base.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.material.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.material.css.js.map +1 -1
- package/components/checkbox/themes/switch.base.css.js +1 -1
- package/components/checkbox/themes/switch.base.css.js.map +1 -1
- package/components/chip/chip.d.ts +30 -14
- package/components/chip/chip.js +54 -48
- package/components/chip/chip.js.map +1 -1
- package/components/chip/themes/chip.base.css.js +1 -1
- package/components/chip/themes/chip.base.css.js.map +1 -1
- package/components/chip/themes/dark/chip.bootstrap.css.js +1 -1
- package/components/chip/themes/dark/chip.bootstrap.css.js.map +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js +1 -1
- package/components/chip/themes/dark/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js +1 -1
- package/components/chip/themes/dark/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/dark/chip.material.css.js +1 -1
- package/components/chip/themes/dark/chip.material.css.js.map +1 -1
- package/components/chip/themes/light/chip.bootstrap.css.js +1 -1
- package/components/chip/themes/light/chip.bootstrap.css.js.map +1 -1
- package/components/chip/themes/light/chip.fluent.css.js +1 -1
- package/components/chip/themes/light/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/light/chip.indigo.css.js +1 -1
- package/components/chip/themes/light/chip.indigo.css.js.map +1 -1
- package/components/chip/themes/light/chip.material.css.js +1 -1
- package/components/chip/themes/light/chip.material.css.js.map +1 -1
- package/components/chip/themes/shared/chip.bootstrap.css.js +1 -1
- package/components/chip/themes/shared/chip.bootstrap.css.js.map +1 -1
- package/components/chip/themes/shared/chip.common.css.js +1 -1
- package/components/chip/themes/shared/chip.common.css.js.map +1 -1
- package/components/chip/themes/shared/chip.fluent.css.js +1 -1
- package/components/chip/themes/shared/chip.fluent.css.js.map +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
- package/components/color-picker/color-picker.d.ts +2 -2
- package/components/color-picker/color-picker.js.map +1 -1
- package/components/color-picker/picker-canvas.js +2 -1
- package/components/color-picker/picker-canvas.js.map +1 -1
- package/components/color-picker/themes/color-picker.base.css.js +1 -1
- package/components/color-picker/themes/color-picker.base.css.js.map +1 -1
- package/components/combo/themes/combo-item.base.css.js +1 -1
- package/components/combo/themes/combo-item.base.css.js.map +1 -1
- package/components/combo/themes/combo.base.css.js +1 -1
- package/components/combo/themes/combo.base.css.js.map +1 -1
- package/components/combo/themes/shared/combo.bootstrap.css.js +1 -1
- package/components/combo/themes/shared/combo.bootstrap.css.js.map +1 -1
- package/components/date-picker/date-picker.base.d.ts +11 -2
- package/components/date-picker/date-picker.base.js +8 -3
- package/components/date-picker/date-picker.base.js.map +1 -1
- package/components/date-picker/themes/date-picker.base.css.js +1 -1
- package/components/date-picker/themes/date-picker.base.css.js.map +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.base.css.js +1 -1
- package/components/date-range-picker/predefined-ranges-area.base.css.js.map +1 -1
- package/components/divider/themes/divider.base.css.js +1 -1
- package/components/divider/themes/divider.base.css.js.map +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js.map +1 -1
- package/components/dropdown/themes/dropdown.base.css.js +1 -1
- package/components/dropdown/themes/dropdown.base.css.js.map +1 -1
- package/components/file-input/themes/file-input.base.css.js +1 -1
- package/components/file-input/themes/file-input.base.css.js.map +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
- package/components/input/themes/shared/input.indigo.css.js +1 -1
- package/components/input/themes/shared/input.indigo.css.js.map +1 -1
- package/components/input/themes/shared/input.material.css.js +1 -1
- package/components/input/themes/shared/input.material.css.js.map +1 -1
- package/components/list/themes/item.base.css.js +1 -1
- package/components/list/themes/item.base.css.js.map +1 -1
- package/components/nav-drawer/themes/item.base.css.js +1 -1
- package/components/nav-drawer/themes/item.base.css.js.map +1 -1
- package/components/progress/themes/linear/linear.progress.base.css.js +1 -1
- package/components/progress/themes/linear/linear.progress.base.css.js.map +1 -1
- package/components/progress/themes/linear/shared/linear.progress.bootstrap.css.js +3 -0
- package/components/progress/themes/linear/shared/linear.progress.bootstrap.css.js.map +1 -0
- package/components/progress/themes/linear/themes.js +3 -2
- package/components/progress/themes/linear/themes.js.map +1 -1
- package/components/qr-code/qr-code.d.ts +28 -1
- package/components/qr-code/qr-code.js +56 -13
- package/components/qr-code/qr-code.js.map +1 -1
- package/components/qr-code/renderer/export.d.ts +28 -0
- package/components/qr-code/renderer/export.js +120 -0
- package/components/qr-code/renderer/export.js.map +1 -0
- package/components/qr-code/types.d.ts +26 -0
- package/components/qr-code/types.js.map +1 -1
- package/components/radio/themes/radio.base.css.js +1 -1
- package/components/radio/themes/radio.base.css.js.map +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
- package/components/resize-container/themes/resize-container.base.css.js +1 -1
- package/components/resize-container/themes/resize-container.base.css.js.map +1 -1
- package/components/select/themes/select.base.css.js +1 -1
- package/components/select/themes/select.base.css.js.map +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
- package/components/slider/themes/shared/slider.material.css.js +1 -1
- package/components/slider/themes/shared/slider.material.css.js.map +1 -1
- package/components/slider/themes/slider.base.css.js +1 -1
- package/components/slider/themes/slider.base.css.js.map +1 -1
- package/components/snackbar/themes/snackbar.base.css.js +1 -1
- package/components/snackbar/themes/snackbar.base.css.js.map +1 -1
- package/components/splitter/themes/splitter.base.css.js +1 -1
- package/components/splitter/themes/splitter.base.css.js.map +1 -1
- package/components/stepper/themes/step/step.base.css.js +1 -1
- package/components/stepper/themes/step/step.base.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
- package/components/tabs/themes/shared/tabs/tabs.fluent.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.fluent.css.js.map +1 -1
- package/components/tabs/themes/shared/tabs/tabs.indigo.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.indigo.css.js.map +1 -1
- package/components/tabs/themes/shared/tabs/tabs.material.css.js +1 -1
- package/components/tabs/themes/shared/tabs/tabs.material.css.js.map +1 -1
- package/components/tabs/themes/tab.base.css.js +1 -1
- package/components/tabs/themes/tab.base.css.js.map +1 -1
- package/components/textarea/textarea.d.ts +2 -15
- package/components/textarea/textarea.js +48 -93
- package/components/textarea/textarea.js.map +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
- package/components/tile-manager/position.d.ts +2 -9
- package/components/tile-manager/position.js +27 -42
- package/components/tile-manager/position.js.map +1 -1
- package/components/tile-manager/resize-state.d.ts +11 -22
- package/components/tile-manager/resize-state.js +60 -119
- package/components/tile-manager/resize-state.js.map +1 -1
- package/components/tile-manager/resize-util.d.ts +3 -7
- package/components/tile-manager/resize-util.js +65 -72
- package/components/tile-manager/resize-util.js.map +1 -1
- package/components/tile-manager/serializer.d.ts +1 -1
- package/components/tile-manager/serializer.js +9 -10
- package/components/tile-manager/serializer.js.map +1 -1
- package/components/tile-manager/themes/shared/tile/tile.common.css.js +1 -1
- package/components/tile-manager/themes/shared/tile/tile.common.css.js.map +1 -1
- package/components/tile-manager/themes/tile.base.css.js +1 -1
- package/components/tile-manager/themes/tile.base.css.js.map +1 -1
- package/components/tile-manager/tile-ghost-util.js +16 -20
- package/components/tile-manager/tile-ghost-util.js.map +1 -1
- package/components/tile-manager/tile-manager.d.ts +5 -2
- package/components/tile-manager/tile-manager.js +27 -23
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.d.ts +32 -18
- package/components/tile-manager/tile.js +181 -161
- package/components/tile-manager/tile.js.map +1 -1
- package/components/tile-manager/types.d.ts +1 -5
- package/components/tile-manager/types.js.map +1 -1
- package/components/toast/themes/toast.base.css.js +1 -1
- package/components/toast/themes/toast.base.css.js.map +1 -1
- package/components/tooltip/themes/tooltip.base.css.js +1 -1
- package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
- package/components/tree/themes/item.base.css.js +1 -1
- package/components/tree/themes/item.base.css.js.map +1 -1
- package/components/validation-container/themes/validator.base.css.js +1 -1
- package/components/validation-container/themes/validator.base.css.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +10 -12
- package/components/validation-container/validation-container.js +14 -17
- package/components/validation-container/validation-container.js.map +1 -1
- package/custom-elements.json +1061 -946
- package/igniteui-webcomponents.css-data.json +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +2 -1
- package/index.js.map +1 -1
- package/internals/definitions/defineAllComponents.js +4 -0
- package/internals/definitions/defineAllComponents.js.map +1 -1
- package/internals/directives/drag.d.ts +144 -0
- package/internals/directives/drag.js +278 -0
- package/internals/directives/drag.js.map +1 -0
- package/internals/directives/resize.d.ts +109 -0
- package/internals/directives/resize.js +214 -0
- package/internals/directives/resize.js.map +1 -0
- package/internals/templates/input-shell.d.ts +12 -1
- package/internals/templates/input-shell.js +17 -10
- package/internals/templates/input-shell.js.map +1 -1
- package/internals/utils/dom.d.ts +2 -0
- package/internals/utils/dom.js +3 -0
- package/internals/utils/dom.js.map +1 -1
- package/internals/utils/events.d.ts +2 -0
- package/internals/utils/events.js +3 -0
- package/internals/utils/events.js.map +1 -1
- package/package.json +1 -1
- package/skills/README.md +1 -0
- package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +21 -0
- package/skills/igniteui-wc-integrate-with-framework/SKILL.md +4 -3
- package/skills/igniteui-wc-integrate-with-framework/references/vanilla-js.md +14 -0
- package/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +12 -2
- package/web-types.json +2 -2
- package/components/resize-container/default-ghost.d.ts +0 -5
- package/components/resize-container/default-ghost.js +0 -20
- package/components/resize-container/default-ghost.js.map +0 -1
- package/components/resize-container/resize-container.d.ts +0 -60
- package/components/resize-container/resize-container.js +0 -156
- package/components/resize-container/resize-container.js.map +0 -1
- package/components/resize-container/resize-controller.d.ts +0 -46
- package/components/resize-container/resize-controller.js +0 -195
- package/components/resize-container/resize-controller.js.map +0 -1
- package/components/resize-container/themes/dark/resize-indicator.bootstrap.css.js +0 -3
- package/components/resize-container/themes/dark/resize-indicator.bootstrap.css.js.map +0 -1
- package/components/resize-container/themes/dark/resize-indicator.fluent.css.d.ts +0 -1
- package/components/resize-container/themes/dark/resize-indicator.fluent.css.js +0 -3
- package/components/resize-container/themes/dark/resize-indicator.fluent.css.js.map +0 -1
- package/components/resize-container/themes/dark/resize-indicator.indigo.css.d.ts +0 -1
- package/components/resize-container/themes/dark/resize-indicator.indigo.css.js +0 -3
- package/components/resize-container/themes/dark/resize-indicator.indigo.css.js.map +0 -1
- package/components/resize-container/themes/dark/resize-indicator.material.css.d.ts +0 -1
- package/components/resize-container/themes/dark/resize-indicator.material.css.js +0 -3
- package/components/resize-container/themes/dark/resize-indicator.material.css.js.map +0 -1
- package/components/resize-container/themes/dark/resize-indicator.shared.css.d.ts +0 -1
- package/components/resize-container/themes/dark/resize-indicator.shared.css.js +0 -3
- package/components/resize-container/themes/dark/resize-indicator.shared.css.js.map +0 -1
- package/components/resize-container/themes/light/resize-indicator.bootstrap.css.d.ts +0 -1
- package/components/resize-container/themes/light/resize-indicator.bootstrap.css.js +0 -3
- package/components/resize-container/themes/light/resize-indicator.bootstrap.css.js.map +0 -1
- package/components/resize-container/themes/light/resize-indicator.fluent.css.d.ts +0 -1
- package/components/resize-container/themes/light/resize-indicator.fluent.css.js +0 -3
- package/components/resize-container/themes/light/resize-indicator.fluent.css.js.map +0 -1
- package/components/resize-container/themes/light/resize-indicator.indigo.css.d.ts +0 -1
- package/components/resize-container/themes/light/resize-indicator.indigo.css.js +0 -3
- package/components/resize-container/themes/light/resize-indicator.indigo.css.js.map +0 -1
- package/components/resize-container/themes/light/resize-indicator.material.css.d.ts +0 -1
- package/components/resize-container/themes/light/resize-indicator.material.css.js +0 -3
- package/components/resize-container/themes/light/resize-indicator.material.css.js.map +0 -1
- package/components/resize-container/themes/light/resize-indicator.shared.css.d.ts +0 -1
- package/components/resize-container/themes/light/resize-indicator.shared.css.js +0 -3
- package/components/resize-container/themes/light/resize-indicator.shared.css.js.map +0 -1
- package/components/resize-container/themes/shared/resize-container.common.css.d.ts +0 -1
- package/components/resize-container/themes/shared/resize-container.common.css.js +0 -3
- package/components/resize-container/themes/shared/resize-container.common.css.js.map +0 -1
- package/components/resize-container/themes/themes.d.ts +0 -2
- package/components/resize-container/themes/themes.js +0 -47
- package/components/resize-container/themes/themes.js.map +0 -1
- package/components/resize-container/types.d.ts +0 -40
- package/components/resize-container/types.js +0 -2
- package/components/resize-container/types.js.map +0 -1
- package/internals/controllers/drag.d.ts +0 -166
- package/internals/controllers/drag.js +0 -283
- package/internals/controllers/drag.js.map +0 -1
- /package/components/{resize-container/themes/dark/resize-indicator.bootstrap.css.d.ts → progress/themes/linear/shared/linear.progress.bootstrap.css.d.ts} +0 -0
|
@@ -9,13 +9,14 @@ import { property, state } from 'lit/decorators.js';
|
|
|
9
9
|
import { createAbortHandle } from '#internals/abort-handler.js';
|
|
10
10
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
11
11
|
import { bindIf } from '#internals/utils/lit.js';
|
|
12
|
-
import { clamp } from '#internals/utils/math.js';
|
|
12
|
+
import { clamp, numberInRangeInclusive } from '#internals/utils/math.js';
|
|
13
13
|
import { createIdGenerator } from '#internals/utils/strings.js';
|
|
14
14
|
import { addThemingController } from '#theming/theming-controller.js';
|
|
15
15
|
import { generateQRCodeMatrix } from './model/matrix.js';
|
|
16
16
|
import { DEFAULT_SIZE_RATIO, MAX_SAFE_AREA, SAFE_AREAS, } from './renderer/constants.js';
|
|
17
17
|
import { renderQrFinders } from './renderer/corner.js';
|
|
18
18
|
import { renderQrDots } from './renderer/dots.js';
|
|
19
|
+
import { createSvgSnapshot, downloadFile, ensureExtension, isExportFormat, MAX_EXPORT_DIMENSION, MIME_TYPES, rasterizeSvg, serializeSvg, } from './renderer/export.js';
|
|
19
20
|
import { renderQrMaskAndImage } from './renderer/image.js';
|
|
20
21
|
import { styles } from './themes/qr-code.base.css.js';
|
|
21
22
|
import { styles as shared } from './themes/shared/qr-code.common.css.js';
|
|
@@ -32,6 +33,7 @@ export default class IgcQrCodeComponent extends LitElement {
|
|
|
32
33
|
this._abortHandle = createAbortHandle();
|
|
33
34
|
this._maskId = nextMaskId();
|
|
34
35
|
this._maskUrl = `url(#${this._maskId})`;
|
|
36
|
+
this._logoReady = Promise.resolve();
|
|
35
37
|
this._logoAspectRatio = 1;
|
|
36
38
|
this._logoLoadFailed = false;
|
|
37
39
|
this.errorLevel = 'M';
|
|
@@ -52,32 +54,34 @@ export default class IgcQrCodeComponent extends LitElement {
|
|
|
52
54
|
this._abortHandle.abort();
|
|
53
55
|
this._logoLoadFailed = false;
|
|
54
56
|
this._logoAspectRatio = 1;
|
|
57
|
+
this._logoReady = Promise.resolve();
|
|
55
58
|
if (!this._hasValidLogoSrc()) {
|
|
56
59
|
return;
|
|
57
60
|
}
|
|
58
61
|
const signal = this._abortHandle.signal;
|
|
59
62
|
const img = new Image();
|
|
60
63
|
img.src = this.logoSrc;
|
|
61
|
-
|
|
64
|
+
const settle = () => {
|
|
62
65
|
if (img.naturalWidth && img.naturalHeight) {
|
|
63
66
|
this._logoAspectRatio = img.naturalWidth / img.naturalHeight;
|
|
64
67
|
}
|
|
65
68
|
else {
|
|
66
69
|
this._logoLoadFailed = true;
|
|
67
70
|
}
|
|
71
|
+
};
|
|
72
|
+
if (img.complete) {
|
|
73
|
+
settle();
|
|
68
74
|
return;
|
|
69
75
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
this._logoLoadFailed = true;
|
|
80
|
-
}, { once: true, signal });
|
|
76
|
+
this._logoReady = new Promise((resolve) => {
|
|
77
|
+
const done = () => {
|
|
78
|
+
settle();
|
|
79
|
+
resolve();
|
|
80
|
+
};
|
|
81
|
+
img.addEventListener('load', done, { once: true, signal });
|
|
82
|
+
img.addEventListener('error', done, { once: true, signal });
|
|
83
|
+
signal.addEventListener('abort', () => resolve(), { once: true });
|
|
84
|
+
});
|
|
81
85
|
}
|
|
82
86
|
_hasValidLogoSrc() {
|
|
83
87
|
if (!this.logoSrc)
|
|
@@ -131,6 +135,45 @@ export default class IgcQrCodeComponent extends LitElement {
|
|
|
131
135
|
this._matrixCache = { value, errorLevel, version: this.version, result };
|
|
132
136
|
return result;
|
|
133
137
|
}
|
|
138
|
+
async _createSnapshot() {
|
|
139
|
+
await this.updateComplete;
|
|
140
|
+
await this._logoReady;
|
|
141
|
+
await this.updateComplete;
|
|
142
|
+
const svg = this.renderRoot.querySelector('svg');
|
|
143
|
+
if (!svg) {
|
|
144
|
+
throw new Error('Cannot export an igc-qr-code without a value.');
|
|
145
|
+
}
|
|
146
|
+
return createSvgSnapshot(svg);
|
|
147
|
+
}
|
|
148
|
+
async toBlob() {
|
|
149
|
+
return serializeSvg(await this._createSnapshot());
|
|
150
|
+
}
|
|
151
|
+
async toImage(options) {
|
|
152
|
+
const { fileName, format = 'png', scale = 1, download } = options ?? {};
|
|
153
|
+
if (!isExportFormat(format)) {
|
|
154
|
+
throw new TypeError(`Unsupported export format: ${format}.`);
|
|
155
|
+
}
|
|
156
|
+
if (!Number.isFinite(scale) || scale <= 0) {
|
|
157
|
+
throw new RangeError('The export scale must be a positive finite number.');
|
|
158
|
+
}
|
|
159
|
+
const dimension = Math.round(this.size * scale);
|
|
160
|
+
if (!numberInRangeInclusive(dimension, 1, MAX_EXPORT_DIMENSION)) {
|
|
161
|
+
throw new RangeError(`The exported image side must be between 1 and ${MAX_EXPORT_DIMENSION} pixels.`);
|
|
162
|
+
}
|
|
163
|
+
const svg = await this._createSnapshot();
|
|
164
|
+
svg.setAttribute('width', `${dimension}`);
|
|
165
|
+
svg.setAttribute('height', `${dimension}`);
|
|
166
|
+
const svgBlob = serializeSvg(svg);
|
|
167
|
+
const blob = format === 'svg'
|
|
168
|
+
? svgBlob
|
|
169
|
+
: await rasterizeSvg(svgBlob, dimension, format);
|
|
170
|
+
const name = ensureExtension(fileName?.trim() || 'qr-code', format);
|
|
171
|
+
const file = new File([blob], name, { type: MIME_TYPES[format] });
|
|
172
|
+
if (download) {
|
|
173
|
+
downloadFile(file);
|
|
174
|
+
}
|
|
175
|
+
return file;
|
|
176
|
+
}
|
|
134
177
|
render() {
|
|
135
178
|
if (!this.value)
|
|
136
179
|
return nothing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qr-code.js","sourceRoot":"","sources":["../../../src/components/qr-code/qr-code.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createAbortHandle } from '#internals/abort-handler.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { clamp } from '#internals/utils/math.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type { QRCodeMatrixResult } from './model/matrix.js';\nimport { generateQRCodeMatrix } from './model/matrix.js';\nimport {\n DEFAULT_SIZE_RATIO,\n MAX_SAFE_AREA,\n SAFE_AREAS,\n} from './renderer/constants.js';\nimport { renderQrFinders } from './renderer/corner.js';\nimport { renderQrDots } from './renderer/dots.js';\nimport { renderQrMaskAndImage } from './renderer/image.js';\nimport { styles } from './themes/qr-code.base.css.js';\nimport { styles as shared } from './themes/shared/qr-code.common.css.js';\nimport { all } from './themes/themes.js';\nimport type {\n QrCornerSquareStyle,\n QrDotStyle,\n QrErrorCorrectionLevel,\n} from './types.js';\n\nconst nextMaskId = createIdGenerator('igc-qr-code-mask');\n\n/**\n *\n * Generates a QR code based on the provided value and options.\n * The component renders an SVG representation of the QR code, which can be customized using various properties.\n *\n * @element igc-qr-code\n *\n * @cssproperty --ig-qr-code-background - The background color of the QR code. Default is `white`.\n * @cssproperty --ig-qr-code-dark-color - The color of the data modules (dots), and the corner square/dot colors unless overridden below. Default is `black`.\n * @cssproperty --ig-qr-code-corner-square-color - The color of the outer finder-pattern corner squares. Defaults to `--ig-qr-code-dark-color`.\n * @cssproperty --ig-qr-code-corner-dot-color - The color of the inner finder-pattern corner dots. Defaults to `--ig-qr-code-dark-color`.\n *\n * @csspart background - The background rect of the QR code.\n * @csspart dots - The data modules (dots) of the QR code.\n * @csspart corner-square - The outer corner (finder-pattern) squares of the QR code.\n * @csspart corner-dot - The inner corner (finder-pattern) dots of the QR code.\n */\nexport default class IgcQrCodeComponent extends LitElement {\n public static readonly tagName = 'igc-qr-code';\n\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcQrCodeComponent);\n }\n\n private readonly _abortHandle = createAbortHandle();\n private readonly _maskId = nextMaskId();\n private readonly _maskUrl = `url(#${this._maskId})`;\n private _matrixCache?: {\n value: string;\n errorLevel: QrErrorCorrectionLevel;\n version?: number;\n result: QRCodeMatrixResult;\n };\n\n @state()\n private _logoAspectRatio = 1;\n\n @state()\n private _logoLoadFailed = false;\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n /**\n * The value to be encoded in the QR code. This can be any string, such as a URL, text, or other data.\n * When this property is set, the component will generate a QR code representing the provided value.\n *\n * @attr value\n */\n @property()\n public value?: string;\n\n /**\n * The version of the QR code to generate, which determines the size and data capacity of the QR code.\n * Valid values are integers from 1 to 40, where each version corresponds to a specific module size and data capacity.\n *\n * If not specified, the component will automatically select the smallest version that can accommodate the provided value.\n *\n * @attr version\n */\n @property({ type: Number })\n public version?: number;\n\n /**\n * The error correction level for the QR code, which determines the QR code's ability to be read if it is partially obscured or damaged.\n * Valid values are 'L', 'M', 'Q', and 'H', where 'L' provides the lowest level of error correction and 'H' provides the highest level.\n *\n * @attr error-level\n * @default 'M'\n */\n @property({ attribute: 'error-level' })\n public errorLevel?: QrErrorCorrectionLevel = 'M';\n\n /**\n * The size of the QR code in pixels. This determines the width and height of the generated QR code. The default value is 128 pixels.\n *\n * @attr size\n * @default 128\n */\n @property({ type: Number })\n public size = 128;\n\n /**\n * The margin (quiet zone) around the QR code, expressed as a number of QR code modules rather\n * than pixels. This is the blank border area surrounding the code, which helps ensure that it\n * can be properly scanned.\n *\n * @attr margin\n * @default 4\n */\n @property({ type: Number })\n public margin = 4;\n\n /**\n * The source URL of an optional logo image to be displayed at the center of the QR code. The logo can help with branding and recognition.\n * If provided, the component will attempt to render the logo within the QR code while maintaining scannability.\n *\n * @attr logo-src\n */\n @property({ attribute: 'logo-src' })\n public logoSrc?: string;\n\n /**\n * The size of the logo, as a ratio of the maximum area that can safely be obscured by a logo\n * while the QR code remains scannable (up to 9% of the code's area, at the highest error\n * correction level). The value should be a number between 0 and 1, where 0 means no logo and 1\n * means the logo will cover the full safe area (not the entire QR code).\n * The default value is 0.4, meaning the logo covers 40% of that safe area (~3.6% of the QR code).\n *\n * When `error-level` is not explicitly set, the smallest error correction level that can\n * accommodate the requested logo size is chosen automatically.\n *\n * @attr logo-size\n * @default 0.4\n */\n @property({ type: Number, attribute: 'logo-size' })\n public logoSize = 0.4;\n\n /**\n * The margin around the logo in pixels. This is the whitespace area surrounding the logo within the QR code,\n * which helps ensure that the logo does not interfere with the QR code's scannability.\n *\n * @attr logo-margin\n */\n @property({ type: Number, attribute: 'logo-margin' })\n public logoMargin?: number;\n\n /**\n * The style of the data modules (dots) in the QR code, and of the inner dot of each finder-pattern\n * corner. This can be 'square', 'circle', or 'rounded'.\n *\n * @attr dot-style\n * @default 'square'\n */\n @property({ attribute: 'dot-style' })\n public dotStyle: QrDotStyle = 'square';\n\n /**\n * The style of the corner squares in the QR code. This can be 'square', 'circle', or 'rounded'.\n *\n * @attr square-style\n * @default 'square'\n */\n @property({ attribute: 'square-style' })\n public squareStyle: QrCornerSquareStyle = 'square';\n\n /** @internal */\n protected override update(props: PropertyValues<this>): void {\n if (props.has('logoSrc')) {\n this._resolveAspectRatio();\n }\n\n super.update(props);\n }\n\n private _resolveAspectRatio(): void {\n this._abortHandle.abort();\n this._logoLoadFailed = false;\n this._logoAspectRatio = 1;\n\n if (!this._hasValidLogoSrc()) {\n return;\n }\n\n const signal = this._abortHandle.signal;\n const img = new Image();\n img.src = this.logoSrc!;\n\n if (img.complete) {\n if (img.naturalWidth && img.naturalHeight) {\n this._logoAspectRatio = img.naturalWidth / img.naturalHeight;\n } else {\n this._logoLoadFailed = true;\n }\n return;\n }\n\n img.addEventListener(\n 'load',\n () => {\n if (img.naturalWidth && img.naturalHeight) {\n this._logoAspectRatio = img.naturalWidth / img.naturalHeight;\n } else {\n this._logoLoadFailed = true;\n }\n },\n { once: true, signal }\n );\n\n img.addEventListener(\n 'error',\n () => {\n this._logoLoadFailed = true;\n },\n { once: true, signal }\n );\n }\n\n /**\n * Determines whether a valid logo source is provided.\n *\n * The method checks if the `logoSrc` property is set and if it does not start with potentially unsafe schemes like 'javascript:' or 'vbscript:'.\n * It also ensures that if the source is a data URI, it must be an image type.\n * This validation helps prevent security risks associated with rendering untrusted content in the QR code.\n */\n private _hasValidLogoSrc(): boolean {\n if (!this.logoSrc) return false;\n const s = this.logoSrc.trim().toLowerCase();\n if (s.startsWith('javascript:') || s.startsWith('vbscript:')) return false;\n if (s.startsWith('data:') && !s.startsWith('data:image/')) return false;\n return true;\n }\n\n private _pickErrorLevel(area: number): QrErrorCorrectionLevel {\n if (area <= SAFE_AREAS.L) return 'L';\n if (area <= SAFE_AREAS.M) return 'M';\n if (area <= SAFE_AREAS.Q) return 'Q';\n return 'H';\n }\n\n private _getErrorLevelAndArea(hasLogo: boolean) {\n const userErrorLevel = this.errorLevel;\n const size = this.logoSize;\n const sizeRatio = hasLogo ? clamp(size ?? DEFAULT_SIZE_RATIO, 0, 1) : 0;\n const targetArea = sizeRatio * MAX_SAFE_AREA;\n\n let errorLevel: QrErrorCorrectionLevel;\n let area: number;\n\n if (userErrorLevel) {\n errorLevel = userErrorLevel;\n area = Math.min(targetArea, SAFE_AREAS[userErrorLevel]);\n } else if (targetArea > 0) {\n errorLevel = this._pickErrorLevel(targetArea);\n area = targetArea;\n } else {\n errorLevel = 'M';\n area = 0;\n }\n\n return { errorLevel, area };\n }\n\n private _getMatrix(\n value: string,\n errorLevel: QrErrorCorrectionLevel\n ): QRCodeMatrixResult {\n const cached = this._matrixCache;\n if (\n cached &&\n cached.value === value &&\n cached.errorLevel === errorLevel &&\n cached.version === this.version\n ) {\n return cached.result;\n }\n\n const result = generateQRCodeMatrix(value, errorLevel, this.version);\n this._matrixCache = { value, errorLevel, version: this.version, result };\n return result;\n }\n\n protected override render() {\n if (!this.value) return nothing;\n\n const hasLogo = this._hasValidLogoSrc() && !this._logoLoadFailed;\n const { errorLevel, area } = this._getErrorLevelAndArea(hasLogo);\n\n const { matrix, size } = this._getMatrix(this.value, errorLevel);\n\n const totalModules = size + this.margin * 2;\n const moduleSize = size / totalModules;\n const marginPx = this.margin * moduleSize;\n const svgSize = moduleSize * (size + this.margin * 2);\n\n const { mask, image, shouldApplyMask } = renderQrMaskAndImage({\n hasLogo,\n src: this.logoSrc!,\n aspectRatio: this._logoAspectRatio,\n area,\n size: this.size,\n margin: this.logoMargin,\n svgSize,\n maskId: this._maskId,\n });\n\n return html`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n width=${this.size}\n height=${this.size}\n viewBox=\"0 0 ${svgSize} ${svgSize}\"\n >\n <title>${this.ariaLabel ?? `QR code: ${this.value}`}</title>\n\n <rect part=\"background\" width=${svgSize} height=${svgSize} />\n ${mask}\n <g mask=${bindIf(shouldApplyMask, this._maskUrl)}>\n ${renderQrDots({\n matrix,\n moduleSize,\n marginPx,\n dotStyle: this.dotStyle,\n })}\n ${renderQrFinders({\n size,\n moduleSize,\n marginPx,\n dotStyle: this.dotStyle,\n squareStyle: this.squareStyle,\n })}\n </g>\n ${image}\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-qr-code': IgcQrCodeComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"qr-code.js","sourceRoot":"","sources":["../../../src/components/qr-code/qr-code.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createAbortHandle } from '#internals/abort-handler.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { clamp, numberInRangeInclusive } from '#internals/utils/math.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type { QRCodeMatrixResult } from './model/matrix.js';\nimport { generateQRCodeMatrix } from './model/matrix.js';\nimport {\n DEFAULT_SIZE_RATIO,\n MAX_SAFE_AREA,\n SAFE_AREAS,\n} from './renderer/constants.js';\nimport { renderQrFinders } from './renderer/corner.js';\nimport { renderQrDots } from './renderer/dots.js';\nimport {\n createSvgSnapshot,\n downloadFile,\n ensureExtension,\n isExportFormat,\n MAX_EXPORT_DIMENSION,\n MIME_TYPES,\n rasterizeSvg,\n serializeSvg,\n} from './renderer/export.js';\nimport { renderQrMaskAndImage } from './renderer/image.js';\nimport { styles } from './themes/qr-code.base.css.js';\nimport { styles as shared } from './themes/shared/qr-code.common.css.js';\nimport { all } from './themes/themes.js';\nimport type {\n QrCodeExportOptions,\n QrCornerSquareStyle,\n QrDotStyle,\n QrErrorCorrectionLevel,\n} from './types.js';\n\nconst nextMaskId = createIdGenerator('igc-qr-code-mask');\n\n/**\n *\n * Generates a QR code based on the provided value and options.\n * The component renders an SVG representation of the QR code, which can be customized using various properties.\n *\n * @element igc-qr-code\n *\n * @cssproperty --ig-qr-code-background - The background color of the QR code. Default is `white`.\n * @cssproperty --ig-qr-code-dark-color - The color of the data modules (dots), and the corner square/dot colors unless overridden below. Default is `black`.\n * @cssproperty --ig-qr-code-corner-square-color - The color of the outer finder-pattern corner squares. Defaults to `--ig-qr-code-dark-color`.\n * @cssproperty --ig-qr-code-corner-dot-color - The color of the inner finder-pattern corner dots. Defaults to `--ig-qr-code-dark-color`.\n *\n * @csspart background - The background rect of the QR code.\n * @csspart dots - The data modules (dots) of the QR code.\n * @csspart corner-square - The outer corner (finder-pattern) squares of the QR code.\n * @csspart corner-dot - The inner corner (finder-pattern) dots of the QR code.\n */\nexport default class IgcQrCodeComponent extends LitElement {\n public static readonly tagName = 'igc-qr-code';\n\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcQrCodeComponent);\n }\n\n private readonly _abortHandle = createAbortHandle();\n private readonly _maskId = nextMaskId();\n private readonly _maskUrl = `url(#${this._maskId})`;\n private _logoReady: Promise<void> = Promise.resolve();\n private _matrixCache?: {\n value: string;\n errorLevel: QrErrorCorrectionLevel;\n version?: number;\n result: QRCodeMatrixResult;\n };\n\n @state()\n private _logoAspectRatio = 1;\n\n @state()\n private _logoLoadFailed = false;\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n /**\n * The value to be encoded in the QR code. This can be any string, such as a URL, text, or other data.\n * When this property is set, the component will generate a QR code representing the provided value.\n *\n * @attr value\n */\n @property()\n public value?: string;\n\n /**\n * The version of the QR code to generate, which determines the size and data capacity of the QR code.\n * Valid values are integers from 1 to 40, where each version corresponds to a specific module size and data capacity.\n *\n * If not specified, the component will automatically select the smallest version that can accommodate the provided value.\n *\n * @attr version\n */\n @property({ type: Number })\n public version?: number;\n\n /**\n * The error correction level for the QR code, which determines the QR code's ability to be read if it is partially obscured or damaged.\n * Valid values are 'L', 'M', 'Q', and 'H', where 'L' provides the lowest level of error correction and 'H' provides the highest level.\n *\n * @attr error-level\n * @default 'M'\n */\n @property({ attribute: 'error-level' })\n public errorLevel?: QrErrorCorrectionLevel = 'M';\n\n /**\n * The size of the QR code in pixels. This determines the width and height of the generated QR code. The default value is 128 pixels.\n *\n * @attr size\n * @default 128\n */\n @property({ type: Number })\n public size = 128;\n\n /**\n * The margin (quiet zone) around the QR code, expressed as a number of QR code modules rather\n * than pixels. This is the blank border area surrounding the code, which helps ensure that it\n * can be properly scanned.\n *\n * @attr margin\n * @default 4\n */\n @property({ type: Number })\n public margin = 4;\n\n /**\n * The source URL of an optional logo image to be displayed at the center of the QR code. The logo can help with branding and recognition.\n * If provided, the component will attempt to render the logo within the QR code while maintaining scannability.\n *\n * @attr logo-src\n */\n @property({ attribute: 'logo-src' })\n public logoSrc?: string;\n\n /**\n * The size of the logo, as a ratio of the maximum area that can safely be obscured by a logo\n * while the QR code remains scannable (up to 9% of the code's area, at the highest error\n * correction level). The value should be a number between 0 and 1, where 0 means no logo and 1\n * means the logo will cover the full safe area (not the entire QR code).\n * The default value is 0.4, meaning the logo covers 40% of that safe area (~3.6% of the QR code).\n *\n * When `error-level` is not explicitly set, the smallest error correction level that can\n * accommodate the requested logo size is chosen automatically.\n *\n * @attr logo-size\n * @default 0.4\n */\n @property({ type: Number, attribute: 'logo-size' })\n public logoSize = 0.4;\n\n /**\n * The margin around the logo in pixels. This is the whitespace area surrounding the logo within the QR code,\n * which helps ensure that the logo does not interfere with the QR code's scannability.\n *\n * @attr logo-margin\n */\n @property({ type: Number, attribute: 'logo-margin' })\n public logoMargin?: number;\n\n /**\n * The style of the data modules (dots) in the QR code, and of the inner dot of each finder-pattern\n * corner. This can be 'square', 'circle', or 'rounded'.\n *\n * @attr dot-style\n * @default 'square'\n */\n @property({ attribute: 'dot-style' })\n public dotStyle: QrDotStyle = 'square';\n\n /**\n * The style of the corner squares in the QR code. This can be 'square', 'circle', or 'rounded'.\n *\n * @attr square-style\n * @default 'square'\n */\n @property({ attribute: 'square-style' })\n public squareStyle: QrCornerSquareStyle = 'square';\n\n /** @internal */\n protected override update(props: PropertyValues<this>): void {\n if (props.has('logoSrc')) {\n this._resolveAspectRatio();\n }\n\n super.update(props);\n }\n\n private _resolveAspectRatio(): void {\n this._abortHandle.abort();\n this._logoLoadFailed = false;\n this._logoAspectRatio = 1;\n this._logoReady = Promise.resolve();\n\n if (!this._hasValidLogoSrc()) {\n return;\n }\n\n const signal = this._abortHandle.signal;\n const img = new Image();\n img.src = this.logoSrc!;\n\n // On error the natural dimensions are 0, so one rule covers load and error.\n const settle = () => {\n if (img.naturalWidth && img.naturalHeight) {\n this._logoAspectRatio = img.naturalWidth / img.naturalHeight;\n } else {\n this._logoLoadFailed = true;\n }\n };\n\n if (img.complete) {\n settle();\n return;\n }\n\n this._logoReady = new Promise<void>((resolve) => {\n const done = () => {\n settle();\n resolve();\n };\n\n img.addEventListener('load', done, { once: true, signal });\n img.addEventListener('error', done, { once: true, signal });\n signal.addEventListener('abort', () => resolve(), { once: true });\n });\n }\n\n /**\n * Determines whether a valid logo source is provided.\n *\n * The method checks if the `logoSrc` property is set and if it does not start with potentially unsafe schemes like 'javascript:' or 'vbscript:'.\n * It also ensures that if the source is a data URI, it must be an image type.\n * This validation helps prevent security risks associated with rendering untrusted content in the QR code.\n */\n private _hasValidLogoSrc(): boolean {\n if (!this.logoSrc) return false;\n const s = this.logoSrc.trim().toLowerCase();\n if (s.startsWith('javascript:') || s.startsWith('vbscript:')) return false;\n if (s.startsWith('data:') && !s.startsWith('data:image/')) return false;\n return true;\n }\n\n private _pickErrorLevel(area: number): QrErrorCorrectionLevel {\n if (area <= SAFE_AREAS.L) return 'L';\n if (area <= SAFE_AREAS.M) return 'M';\n if (area <= SAFE_AREAS.Q) return 'Q';\n return 'H';\n }\n\n private _getErrorLevelAndArea(hasLogo: boolean) {\n const userErrorLevel = this.errorLevel;\n const size = this.logoSize;\n const sizeRatio = hasLogo ? clamp(size ?? DEFAULT_SIZE_RATIO, 0, 1) : 0;\n const targetArea = sizeRatio * MAX_SAFE_AREA;\n\n let errorLevel: QrErrorCorrectionLevel;\n let area: number;\n\n if (userErrorLevel) {\n errorLevel = userErrorLevel;\n area = Math.min(targetArea, SAFE_AREAS[userErrorLevel]);\n } else if (targetArea > 0) {\n errorLevel = this._pickErrorLevel(targetArea);\n area = targetArea;\n } else {\n errorLevel = 'M';\n area = 0;\n }\n\n return { errorLevel, area };\n }\n\n private _getMatrix(\n value: string,\n errorLevel: QrErrorCorrectionLevel\n ): QRCodeMatrixResult {\n const cached = this._matrixCache;\n if (\n cached &&\n cached.value === value &&\n cached.errorLevel === errorLevel &&\n cached.version === this.version\n ) {\n return cached.result;\n }\n\n const result = generateQRCodeMatrix(value, errorLevel, this.version);\n this._matrixCache = { value, errorLevel, version: this.version, result };\n return result;\n }\n\n /**\n * Returns a self-contained copy of the rendered SVG with theme colors resolved\n * and the logo inlined. Waits for a pending logo load and render first.\n */\n private async _createSnapshot(): Promise<SVGSVGElement> {\n // The logo load starts in `update()`, so flush a pending update before waiting\n // on it and then let the settled aspect ratio render.\n await this.updateComplete;\n await this._logoReady;\n await this.updateComplete;\n\n // The SVG is rendered only when there is a value.\n const svg = this.renderRoot.querySelector('svg');\n if (!svg) {\n throw new Error('Cannot export an igc-qr-code without a value.');\n }\n\n return createSvgSnapshot(svg);\n }\n\n /* blazorSuppress */\n /**\n * Serializes the QR code to an `image/svg+xml` blob.\n *\n * Theme colors are resolved to plain `fill` attributes and a logo that is not a data URI\n * is fetched and inlined, so the blob renders identically outside the component.\n * A logo that cannot be fetched (for example a cross-origin URL without CORS headers) is omitted.\n *\n * Rejects when the component has no `value`.\n */\n public async toBlob(): Promise<Blob> {\n return serializeSvg(await this._createSnapshot());\n }\n\n /* blazorSuppress */\n /**\n * Exports the QR code as an image file.\n *\n * The `scale` option multiplies the `size` of the component: a 256px QR code exported\n * with `scale: 2` produces a 512x512 image. When `download` is `true` the browser\n * download dialog opens for the file.\n *\n * Rejects when the component has no `value`, when `format` is not supported, when `scale`\n * is not a positive finite number, or when the resulting image exceeds the maximum canvas size.\n */\n public async toImage(options?: QrCodeExportOptions): Promise<File> {\n const { fileName, format = 'png', scale = 1, download } = options ?? {};\n\n if (!isExportFormat(format)) {\n throw new TypeError(`Unsupported export format: ${format}.`);\n }\n\n if (!Number.isFinite(scale) || scale <= 0) {\n throw new RangeError(\n 'The export scale must be a positive finite number.'\n );\n }\n\n const dimension = Math.round(this.size * scale);\n if (!numberInRangeInclusive(dimension, 1, MAX_EXPORT_DIMENSION)) {\n throw new RangeError(\n `The exported image side must be between 1 and ${MAX_EXPORT_DIMENSION} pixels.`\n );\n }\n\n const svg = await this._createSnapshot();\n svg.setAttribute('width', `${dimension}`);\n svg.setAttribute('height', `${dimension}`);\n\n const svgBlob = serializeSvg(svg);\n const blob =\n format === 'svg'\n ? svgBlob\n : await rasterizeSvg(svgBlob, dimension, format);\n\n const name = ensureExtension(fileName?.trim() || 'qr-code', format);\n const file = new File([blob], name, { type: MIME_TYPES[format] });\n\n if (download) {\n downloadFile(file);\n }\n\n return file;\n }\n\n protected override render() {\n if (!this.value) return nothing;\n\n const hasLogo = this._hasValidLogoSrc() && !this._logoLoadFailed;\n const { errorLevel, area } = this._getErrorLevelAndArea(hasLogo);\n\n const { matrix, size } = this._getMatrix(this.value, errorLevel);\n\n const totalModules = size + this.margin * 2;\n const moduleSize = size / totalModules;\n const marginPx = this.margin * moduleSize;\n const svgSize = moduleSize * (size + this.margin * 2);\n\n const { mask, image, shouldApplyMask } = renderQrMaskAndImage({\n hasLogo,\n src: this.logoSrc!,\n aspectRatio: this._logoAspectRatio,\n area,\n size: this.size,\n margin: this.logoMargin,\n svgSize,\n maskId: this._maskId,\n });\n\n return html`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n width=${this.size}\n height=${this.size}\n viewBox=\"0 0 ${svgSize} ${svgSize}\"\n >\n <title>${this.ariaLabel ?? `QR code: ${this.value}`}</title>\n\n <rect part=\"background\" width=${svgSize} height=${svgSize} />\n ${mask}\n <g mask=${bindIf(shouldApplyMask, this._maskUrl)}>\n ${renderQrDots({\n matrix,\n moduleSize,\n marginPx,\n dotStyle: this.dotStyle,\n })}\n ${renderQrFinders({\n size,\n moduleSize,\n marginPx,\n dotStyle: this.dotStyle,\n squareStyle: this.squareStyle,\n })}\n </g>\n ${image}\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-qr-code': IgcQrCodeComponent;\n }\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { QrCodeExportFormat } from '../types.js';
|
|
2
|
+
type QrRasterFormat = Exclude<QrCodeExportFormat, 'svg'>;
|
|
3
|
+
/** MIME type of each export format. */
|
|
4
|
+
export declare const MIME_TYPES: Readonly<Record<QrCodeExportFormat, string>>;
|
|
5
|
+
/**
|
|
6
|
+
* Maximum side length in pixels of an exported raster image.
|
|
7
|
+
* Browsers fail to allocate or encode canvases past this bound.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_EXPORT_DIMENSION = 16384;
|
|
10
|
+
/** Whether `format` is one of the supported export formats. */
|
|
11
|
+
export declare function isExportFormat(format: string): format is QrCodeExportFormat;
|
|
12
|
+
/** Appends the extension of `format` to `fileName` unless it already ends with a matching one. */
|
|
13
|
+
export declare function ensureExtension(fileName: string, format: QrCodeExportFormat): string;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a self-contained copy of the component SVG: theme colors are resolved
|
|
16
|
+
* to presentation attributes and the logo is inlined as a data URI.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createSvgSnapshot(source: SVGSVGElement): Promise<SVGSVGElement>;
|
|
19
|
+
/** Serializes an SVG element into an `image/svg+xml` blob. */
|
|
20
|
+
export declare function serializeSvg(svg: SVGSVGElement): Blob;
|
|
21
|
+
/**
|
|
22
|
+
* Rasterize an SVG blob into a square bitmap of `dimension` pixels per side
|
|
23
|
+
* and encodes it in the requested format.
|
|
24
|
+
*/
|
|
25
|
+
export declare function rasterizeSvg(svgBlob: Blob, dimension: number, format: QrRasterFormat): Promise<Blob>;
|
|
26
|
+
/** Triggers the browser download dialog for the given file. */
|
|
27
|
+
export declare function downloadFile(file: File): void;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export const MIME_TYPES = {
|
|
2
|
+
svg: 'image/svg+xml',
|
|
3
|
+
png: 'image/png',
|
|
4
|
+
jpeg: 'image/jpeg',
|
|
5
|
+
webp: 'image/webp',
|
|
6
|
+
};
|
|
7
|
+
export const MAX_EXPORT_DIMENSION = 16384;
|
|
8
|
+
const EXTENSIONS = {
|
|
9
|
+
svg: /\.svg$/i,
|
|
10
|
+
png: /\.png$/i,
|
|
11
|
+
jpeg: /\.jpe?g$/i,
|
|
12
|
+
webp: /\.webp$/i,
|
|
13
|
+
};
|
|
14
|
+
export function isExportFormat(format) {
|
|
15
|
+
return Object.hasOwn(MIME_TYPES, format);
|
|
16
|
+
}
|
|
17
|
+
export function ensureExtension(fileName, format) {
|
|
18
|
+
return EXTENSIONS[format].test(fileName) ? fileName : `${fileName}.${format}`;
|
|
19
|
+
}
|
|
20
|
+
function readBlobAsDataUrl(blob) {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
const reader = new FileReader();
|
|
23
|
+
reader.addEventListener('load', () => resolve(reader.result), {
|
|
24
|
+
once: true,
|
|
25
|
+
});
|
|
26
|
+
reader.addEventListener('error', () => reject(reader.error), {
|
|
27
|
+
once: true,
|
|
28
|
+
});
|
|
29
|
+
reader.readAsDataURL(blob);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async function fetchImageAsDataUrl(url) {
|
|
33
|
+
try {
|
|
34
|
+
const response = await fetch(url);
|
|
35
|
+
const blob = response.ok ? await response.blob() : null;
|
|
36
|
+
return blob?.type.startsWith('image/') ? readBlobAsDataUrl(blob) : null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function resolveStyles(source, clone) {
|
|
43
|
+
const liveParts = source.querySelectorAll('[part]');
|
|
44
|
+
const cloneParts = clone.querySelectorAll('[part]');
|
|
45
|
+
for (const [index, element] of liveParts.entries()) {
|
|
46
|
+
const target = cloneParts[index];
|
|
47
|
+
const { fill } = getComputedStyle(element);
|
|
48
|
+
if (fill) {
|
|
49
|
+
target.setAttribute('fill', fill);
|
|
50
|
+
}
|
|
51
|
+
target.removeAttribute('part');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function inlineLogo(clone) {
|
|
55
|
+
const image = clone.querySelector('image');
|
|
56
|
+
const href = image?.getAttribute('href');
|
|
57
|
+
if (!image || !href || href.startsWith('data:')) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const dataUrl = await fetchImageAsDataUrl(href);
|
|
61
|
+
if (dataUrl) {
|
|
62
|
+
image.setAttribute('href', dataUrl);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
image.remove();
|
|
66
|
+
clone.querySelector('[mask]')?.removeAttribute('mask');
|
|
67
|
+
clone.querySelector('defs')?.remove();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export async function createSvgSnapshot(source) {
|
|
71
|
+
const clone = source.cloneNode(true);
|
|
72
|
+
resolveStyles(source, clone);
|
|
73
|
+
await inlineLogo(clone);
|
|
74
|
+
return clone;
|
|
75
|
+
}
|
|
76
|
+
export function serializeSvg(svg) {
|
|
77
|
+
const markup = new XMLSerializer().serializeToString(svg);
|
|
78
|
+
return new Blob([markup], { type: `${MIME_TYPES.svg};charset=utf-8` });
|
|
79
|
+
}
|
|
80
|
+
function loadImage(url) {
|
|
81
|
+
return new Promise((resolve, reject) => {
|
|
82
|
+
const image = new Image();
|
|
83
|
+
image.addEventListener('load', () => resolve(image), { once: true });
|
|
84
|
+
image.addEventListener('error', () => reject(new Error('Failed to load the QR code SVG for export.')), { once: true });
|
|
85
|
+
image.src = url;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
export async function rasterizeSvg(svgBlob, dimension, format) {
|
|
89
|
+
const url = URL.createObjectURL(svgBlob);
|
|
90
|
+
try {
|
|
91
|
+
const image = await loadImage(url);
|
|
92
|
+
const canvas = document.createElement('canvas');
|
|
93
|
+
canvas.width = dimension;
|
|
94
|
+
canvas.height = dimension;
|
|
95
|
+
const context = canvas.getContext('2d');
|
|
96
|
+
if (format === 'jpeg') {
|
|
97
|
+
context.fillStyle = '#fff';
|
|
98
|
+
context.fillRect(0, 0, dimension, dimension);
|
|
99
|
+
}
|
|
100
|
+
context.drawImage(image, 0, 0, dimension, dimension);
|
|
101
|
+
const type = MIME_TYPES[format];
|
|
102
|
+
const blob = await new Promise((resolve) => canvas.toBlob(resolve, type));
|
|
103
|
+
if (!blob || blob.type !== type) {
|
|
104
|
+
throw new Error(`The browser cannot encode ${type} images.`);
|
|
105
|
+
}
|
|
106
|
+
return blob;
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
URL.revokeObjectURL(url);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function downloadFile(file) {
|
|
113
|
+
const url = URL.createObjectURL(file);
|
|
114
|
+
const anchor = document.createElement('a');
|
|
115
|
+
anchor.href = url;
|
|
116
|
+
anchor.download = file.name;
|
|
117
|
+
anchor.click();
|
|
118
|
+
setTimeout(() => URL.revokeObjectURL(url));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../../src/components/qr-code/renderer/export.ts"],"names":[],"mappings":"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","sourcesContent":["import type { QrCodeExportFormat } from '../types.js';\n\ntype QrRasterFormat = Exclude<QrCodeExportFormat, 'svg'>;\n\n/** MIME type of each export format. */\nexport const MIME_TYPES: Readonly<Record<QrCodeExportFormat, string>> = {\n svg: 'image/svg+xml',\n png: 'image/png',\n jpeg: 'image/jpeg',\n webp: 'image/webp',\n};\n\n/**\n * Maximum side length in pixels of an exported raster image.\n * Browsers fail to allocate or encode canvases past this bound.\n */\nexport const MAX_EXPORT_DIMENSION = 16384;\n\nconst EXTENSIONS: Readonly<Record<QrCodeExportFormat, RegExp>> = {\n svg: /\\.svg$/i,\n png: /\\.png$/i,\n jpeg: /\\.jpe?g$/i,\n webp: /\\.webp$/i,\n};\n\n/** Whether `format` is one of the supported export formats. */\nexport function isExportFormat(format: string): format is QrCodeExportFormat {\n return Object.hasOwn(MIME_TYPES, format);\n}\n\n/** Appends the extension of `format` to `fileName` unless it already ends with a matching one. */\nexport function ensureExtension(\n fileName: string,\n format: QrCodeExportFormat\n): string {\n return EXTENSIONS[format].test(fileName) ? fileName : `${fileName}.${format}`;\n}\n\nfunction readBlobAsDataUrl(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('load', () => resolve(reader.result as string), {\n once: true,\n });\n reader.addEventListener('error', () => reject(reader.error), {\n once: true,\n });\n reader.readAsDataURL(blob);\n });\n}\n\n/** Fetches an image URL and returns it as a data URI, or `null` when it cannot be fetched. */\nasync function fetchImageAsDataUrl(url: string): Promise<string | null> {\n try {\n const response = await fetch(url);\n const blob = response.ok ? await response.blob() : null;\n return blob?.type.startsWith('image/') ? readBlobAsDataUrl(blob) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Copies the computed `fill` of every `part` element from the live SVG onto the\n * matching element of the clone as a presentation attribute, and strips the `part`\n * attributes. The clone renders identically outside the shadow root, where the\n * component stylesheet and its CSS custom properties are not available.\n *\n * `fill` is the only property the component theme sets on its parts; extend this\n * when `themes/shared/qr-code.common.scss` starts to style more.\n */\nfunction resolveStyles(source: SVGSVGElement, clone: SVGSVGElement): void {\n const liveParts = source.querySelectorAll<SVGElement>('[part]');\n const cloneParts = clone.querySelectorAll<SVGElement>('[part]');\n\n for (const [index, element] of liveParts.entries()) {\n const target = cloneParts[index];\n const { fill } = getComputedStyle(element);\n\n if (fill) {\n target.setAttribute('fill', fill);\n }\n target.removeAttribute('part');\n }\n}\n\n/**\n * Replaces a non data-URI logo `href` with an inlined data URI. An SVG loaded as an image\n * cannot fetch external resources, so the logo must be embedded for the export to render it.\n *\n * When the logo cannot be fetched (for example, a cross-origin URL without CORS headers),\n * the logo, its mask and the mask definition are removed so the exported code has no hole.\n */\nasync function inlineLogo(clone: SVGSVGElement): Promise<void> {\n const image = clone.querySelector('image');\n const href = image?.getAttribute('href');\n\n if (!image || !href || href.startsWith('data:')) {\n return;\n }\n\n const dataUrl = await fetchImageAsDataUrl(href);\n\n if (dataUrl) {\n image.setAttribute('href', dataUrl);\n } else {\n image.remove();\n clone.querySelector('[mask]')?.removeAttribute('mask');\n clone.querySelector('defs')?.remove();\n }\n}\n\n/**\n * Creates a self-contained copy of the component SVG: theme colors are resolved\n * to presentation attributes and the logo is inlined as a data URI.\n */\nexport async function createSvgSnapshot(\n source: SVGSVGElement\n): Promise<SVGSVGElement> {\n const clone = source.cloneNode(true) as SVGSVGElement;\n resolveStyles(source, clone);\n await inlineLogo(clone);\n return clone;\n}\n\n/** Serializes an SVG element into an `image/svg+xml` blob. */\nexport function serializeSvg(svg: SVGSVGElement): Blob {\n const markup = new XMLSerializer().serializeToString(svg);\n return new Blob([markup], { type: `${MIME_TYPES.svg};charset=utf-8` });\n}\n\nfunction loadImage(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.addEventListener('load', () => resolve(image), { once: true });\n image.addEventListener(\n 'error',\n () => reject(new Error('Failed to load the QR code SVG for export.')),\n { once: true }\n );\n image.src = url;\n });\n}\n\n/**\n * Rasterize an SVG blob into a square bitmap of `dimension` pixels per side\n * and encodes it in the requested format.\n */\nexport async function rasterizeSvg(\n svgBlob: Blob,\n dimension: number,\n format: QrRasterFormat\n): Promise<Blob> {\n const url = URL.createObjectURL(svgBlob);\n\n try {\n const image = await loadImage(url);\n const canvas = document.createElement('canvas');\n canvas.width = dimension;\n canvas.height = dimension;\n\n const context = canvas.getContext('2d')!;\n\n if (format === 'jpeg') {\n // JPEG has no alpha channel; paint white under transparent backgrounds.\n context.fillStyle = '#fff';\n context.fillRect(0, 0, dimension, dimension);\n }\n\n context.drawImage(image, 0, 0, dimension, dimension);\n\n const type = MIME_TYPES[format];\n const blob = await new Promise<Blob | null>((resolve) =>\n canvas.toBlob(resolve, type)\n );\n\n // Browsers that cannot encode a format silently fall back to PNG.\n if (!blob || blob.type !== type) {\n throw new Error(`The browser cannot encode ${type} images.`);\n }\n\n return blob;\n } finally {\n URL.revokeObjectURL(url);\n }\n}\n\n/** Triggers the browser download dialog for the given file. */\nexport function downloadFile(file: File): void {\n const url = URL.createObjectURL(file);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = file.name;\n anchor.click();\n\n // Revoke after the current task so the navigation has captured the URL.\n setTimeout(() => URL.revokeObjectURL(url));\n}\n"]}
|
|
@@ -14,3 +14,29 @@ export type QrErrorCorrectionLevel = 'L' | 'M' | 'Q' | 'H';
|
|
|
14
14
|
* - `numeric` - digits only; `alphanumeric` - digits + uppercase letters + a few symbols; `byte` - arbitrary UTF-8.
|
|
15
15
|
*/
|
|
16
16
|
export type QrEncodingMode = 'numeric' | 'alphanumeric' | 'byte';
|
|
17
|
+
/** Output format of an exported QR code. */
|
|
18
|
+
export type QrCodeExportFormat = 'svg' | 'png' | 'jpeg' | 'webp';
|
|
19
|
+
/** Options for exporting the QR code to a file. */
|
|
20
|
+
export interface QrCodeExportOptions {
|
|
21
|
+
/**
|
|
22
|
+
* The name of the exported file. The extension of the format is appended when the name does not end with it.
|
|
23
|
+
* @default 'qr-code'
|
|
24
|
+
*/
|
|
25
|
+
fileName?: string;
|
|
26
|
+
/**
|
|
27
|
+
* The output format.
|
|
28
|
+
* @default 'png'
|
|
29
|
+
*/
|
|
30
|
+
format?: QrCodeExportFormat;
|
|
31
|
+
/**
|
|
32
|
+
* Multiplier applied to the `size` of the component. A 256px QR code with a `scale` of 2 exports as a 512x512 image.
|
|
33
|
+
* For `svg`, the multiplier applies to the `width` and `height` attributes while the `viewBox` is unchanged.
|
|
34
|
+
* @default 1
|
|
35
|
+
*/
|
|
36
|
+
scale?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Whether to open the browser download dialog for the exported file.
|
|
39
|
+
* @default false
|
|
40
|
+
*/
|
|
41
|
+
download?: boolean;
|
|
42
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/qr-code/types.ts"],"names":[],"mappings":"","sourcesContent":["/** Shape of individual data modules in the QR code body. */\nexport type QrDotStyle = 'square' | 'circle' | 'rounded';\n\n/** Shape of the inner dot inside each finder-pattern corner. */\nexport type QrCornerDotStyle = 'square' | 'circle' | 'rounded';\n\n/** Shape of the outer square of each finder-pattern corner. */\nexport type QrCornerSquareStyle = 'square' | 'circle' | 'rounded';\n\n/**\n * QR error correction level. Higher levels recover more data but reduce capacity.\n * - `L` ~7%, `M` ~15%, `Q` ~25%, `H` ~30%.\n */\nexport type QrErrorCorrectionLevel = 'L' | 'M' | 'Q' | 'H';\n\n/**\n * QR data encoding mode, selected automatically based on the input string.\n * - `numeric` - digits only; `alphanumeric` - digits + uppercase letters + a few symbols; `byte` - arbitrary UTF-8.\n */\nexport type QrEncodingMode = 'numeric' | 'alphanumeric' | 'byte';\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/qr-code/types.ts"],"names":[],"mappings":"","sourcesContent":["/** Shape of individual data modules in the QR code body. */\nexport type QrDotStyle = 'square' | 'circle' | 'rounded';\n\n/** Shape of the inner dot inside each finder-pattern corner. */\nexport type QrCornerDotStyle = 'square' | 'circle' | 'rounded';\n\n/** Shape of the outer square of each finder-pattern corner. */\nexport type QrCornerSquareStyle = 'square' | 'circle' | 'rounded';\n\n/**\n * QR error correction level. Higher levels recover more data but reduce capacity.\n * - `L` ~7%, `M` ~15%, `Q` ~25%, `H` ~30%.\n */\nexport type QrErrorCorrectionLevel = 'L' | 'M' | 'Q' | 'H';\n\n/**\n * QR data encoding mode, selected automatically based on the input string.\n * - `numeric` - digits only; `alphanumeric` - digits + uppercase letters + a few symbols; `byte` - arbitrary UTF-8.\n */\nexport type QrEncodingMode = 'numeric' | 'alphanumeric' | 'byte';\n\n/** Output format of an exported QR code. */\nexport type QrCodeExportFormat = 'svg' | 'png' | 'jpeg' | 'webp';\n\n/** Options for exporting the QR code to a file. */\nexport interface QrCodeExportOptions {\n /**\n * The name of the exported file. The extension of the format is appended when the name does not end with it.\n * @default 'qr-code'\n */\n fileName?: string;\n /**\n * The output format.\n * @default 'png'\n */\n format?: QrCodeExportFormat;\n /**\n * Multiplier applied to the `size` of the component. A 256px QR code with a `scale` of 2 exports as a 512x512 image.\n * For `svg`, the multiplier applies to the `width` and `height` attributes while the `viewBox` is unchanged.\n * @default 1\n */\n scale?: number;\n /**\n * Whether to open the browser download dialog for the exported file.\n * @default false\n */\n download?: boolean;\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:var(--radio-base-display, inline-flex);flex-direction:column;font-family:var(--ig-font-family)}:host([label-position=before]) [part~=label]{order:-1}input[type=radio]{position:absolute;width:1px;height:1px;margin:-1px;border:none;clip:rect(0, 0, 0, 0);outline:0;pointer-events:none;overflow:hidden;-webkit-appearance:none;-moz-appearance:none;appearance:none}[part~=base]{display:flex;align-items:center;cursor:pointer;transition:color .15s ease-in}[part~=label]{font-family:var(--ig-subtitle-1-font-family, var(--ig-font-family));font-size:var(--ig-subtitle-1-font-size);font-weight:var(--ig-subtitle-1-font-weight);font-style:var(--ig-subtitle-1-font-style);line-height:var(--ig-subtitle-1-line-height);letter-spacing:var(--ig-subtitle-1-letter-spacing);text-transform:var(--ig-subtitle-1-text-transform);margin-top:var(--ig-subtitle-1-margin-top);margin-bottom:var(--ig-subtitle-1-margin-bottom)}[part~=control]{--size: 1.25rem;position:relative;display:inline-flex;width:calc(var(--size)*2);height:calc(var(--size)*2);min-width:calc(var(--size)*2);-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s ease-in}[part~=control]::before,[part~=control]::after{position:absolute;content:"";width:var(--size);height:var(--size);left:50%;top:50%;transform:translate(-50%, -50%);transition:all .15s ease-in}[part~=control]::before{backface-visibility:hidden;transform:translate(-50%, -50%) scale(0.1);transform-origin:center;z-index:1}[part="control checked"]::before{transform:translate(-50%, -50%) scale(0.5)}:host([disabled]),:host(:disabled){pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}`;
|
|
2
|
+
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:var(--radio-base-display, inline-flex);flex-direction:column;font-family:var(--ig-font-family)}:host([label-position=before]) [part~=label]{order:-1}input[type=radio]{position:absolute;width:1px;height:1px;margin:-1px;border:none;clip:rect(0, 0, 0, 0);outline:0;pointer-events:none;overflow:hidden;-webkit-appearance:none;-moz-appearance:none;appearance:none}[part~=base]{display:flex;align-items:center;cursor:pointer;transition:color .15s ease-in}[part~=label]{font-family:var(--ig-subtitle-1-font-family, var(--ig-font-family));font-size:var(--ig-subtitle-1-font-size);font-weight:var(--ig-subtitle-1-font-weight);font-style:var(--ig-subtitle-1-font-style);line-height:var(--ig-subtitle-1-line-height);letter-spacing:var(--ig-subtitle-1-letter-spacing);text-transform:var(--ig-subtitle-1-text-transform);margin-top:var(--ig-subtitle-1-margin-top);margin-bottom:var(--ig-subtitle-1-margin-bottom)}[part~=control]{--size: 1.25rem;position:relative;display:inline-flex;width:calc(var(--size)*2);height:calc(var(--size)*2);min-width:calc(var(--size)*2);-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s ease-in}[part~=control]::before,[part~=control]::after{position:absolute;content:"";width:var(--size);height:var(--size);left:50%;top:50%;transform:translate(-50%, -50%);transition:all .15s ease-in}[part~=control]::before{backface-visibility:hidden;transform:translate(-50%, -50%) scale(0.1);transform-origin:center;z-index:1}[part="control checked"]::before{transform:translate(-50%, -50%) scale(0.5)}:host([disabled]),:host(:disabled){pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media(forced-colors: active){[part="control checked"]::before{border:.625rem solid CanvasText}:host(:hover) [part~=base] [part="control checked"]::before{border:.25rem solid CanvasText}[part="base checked focused"]{outline:.0625rem solid Highlight;outline-offset:.25rem}:host([disabled]) [part~=base],:host(:disabled) [part~=base]{--disabled-label-color: GrayText;--disabled-color: GrayText}:host([disabled]) [part~=base] [part="control checked"]::after,:host([disabled]) [part~=base] [part="control checked"]::before,:host(:disabled) [part~=base] [part="control checked"]::after,:host(:disabled) [part~=base] [part="control checked"]::before{border-color:GrayText}}`;
|
|
3
3
|
//# sourceMappingURL=radio.base.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.base.css.js","sourceRoot":"","sources":["../../../../src/components/radio/themes/radio.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"radio.base.css.js","sourceRoot":"","sources":["../../../../src/components/radio/themes/radio.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,mvGAAmvG,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:var(--radio-base-display, inline-flex);flex-direction:column;font-family:var(--ig-font-family)}:host([label-position=before]) [part~=label]{order:-1}input[type=radio]{position:absolute;width:1px;height:1px;margin:-1px;border:none;clip:rect(0, 0, 0, 0);outline:0;pointer-events:none;overflow:hidden;-webkit-appearance:none;-moz-appearance:none;appearance:none}[part~=base]{display:flex;align-items:center;cursor:pointer;transition:color .15s ease-in}[part~=label]{font-family:var(--ig-subtitle-1-font-family, var(--ig-font-family));font-size:var(--ig-subtitle-1-font-size);font-weight:var(--ig-subtitle-1-font-weight);font-style:var(--ig-subtitle-1-font-style);line-height:var(--ig-subtitle-1-line-height);letter-spacing:var(--ig-subtitle-1-letter-spacing);text-transform:var(--ig-subtitle-1-text-transform);margin-top:var(--ig-subtitle-1-margin-top);margin-bottom:var(--ig-subtitle-1-margin-bottom)}[part~=control]{--size: 1.25rem;position:relative;display:inline-flex;width:calc(var(--size)*2);height:calc(var(--size)*2);min-width:calc(var(--size)*2);-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:background .15s ease-in}[part~=control]::before,[part~=control]::after{position:absolute;content:\"\";width:var(--size);height:var(--size);left:50%;top:50%;transform:translate(-50%, -50%);transition:all .15s ease-in}[part~=control]::before{backface-visibility:hidden;transform:translate(-50%, -50%) scale(0.1);transform-origin:center;z-index:1}[part=\"control checked\"]::before{transform:translate(-50%, -50%) scale(0.5)}:host([disabled]),:host(:disabled){pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media(forced-colors: active){[part=\"control checked\"]::before{border:.625rem solid CanvasText}:host(:hover) [part~=base] [part=\"control checked\"]::before{border:.25rem solid CanvasText}[part=\"base checked focused\"]{outline:.0625rem solid Highlight;outline-offset:.25rem}:host([disabled]) [part~=base],:host(:disabled) [part~=base]{--disabled-label-color: GrayText;--disabled-color: GrayText}:host([disabled]) [part~=base] [part=\"control checked\"]::after,:host([disabled]) [part~=base] [part=\"control checked\"]::before,:host(:disabled) [part~=base] [part=\"control checked\"]::after,:host(:disabled) [part~=base] [part=\"control checked\"]::before{border-color:GrayText}}`;\n "]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host::part(base){transition:none}:host ::part(helper-text){font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom);margin-block-start:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));grid-auto-rows:minmax(1.25rem, auto)}[part~=label]{font-family:var(--ig-body-1-font-family, var(--ig-font-family));font-size:var(--ig-body-1-font-size);font-weight:var(--ig-body-1-font-weight);font-style:var(--ig-body-1-font-style);line-height:var(--ig-body-1-line-height);letter-spacing:var(--ig-body-1-letter-spacing);text-transform:var(--ig-body-1-text-transform);margin-top:var(--ig-body-1-margin-top);margin-bottom:var(--ig-body-1-margin-bottom)}[part~=base]{gap:.5rem}[part~=control]{--size: 1rem;border-radius:var(--size);width:var(--size);height:var(--size);min-width:var(--size);transition:rgba(0,0,0,0)}[part~=control]::before,[part~=control]::after{transition:none;border-radius:calc(var(--size)/2)}[part~=control]::before{transform:translate(-50%, -50%) scale(0.4375)}[part~=control]::after{width:inherit;height:inherit;min-width:inherit;border:.0625rem solid var(--empty-color)}[part~=focused] [part~=control]{box-shadow:0 0 0 .25rem var(--focus-outline-color)}[part~=focused] [part=control]::after{border-color:var(--focus-border-color)}[part="control checked"]::after{background:var(--fill-color);border-color:var(--fill-color)}[part="control checked"]::before{border-color:var(--fill-hover-border-color);background:var(--fill-hover-border-color)}:host(:hover) [part=control]::after{border-color:var(--hover-color)}:host(:hover) [part="control checked"]::after{background:var(--fill-color-hover);border-color:var(--fill-color-hover)}:host(:hover) [part="control checked"]::before{background:var(--fill-hover-border-color)}:host(:hover) [part~=focused] [part=control]::after{border-color:hsl(from var(--focus-border-color) h calc(s * 1.12) calc(l * 0.82))}:host(:not([disabled]):state(ig-invalid)) [part~=control]::after,:host(:not(:disabled):state(ig-invalid)) [part~=control]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part="control checked"]::after,:host(:not(:disabled):state(ig-invalid)) [part="control checked"]::after{background:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part~=control],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part~=control]{box-shadow:0 0 0 .25rem var(--focus-outline-color-error)}:host(:not([disabled]):state(ig-invalid):hover) [part="control checked"]::after,:host(:not(:disabled):state(ig-invalid):hover) [part="control checked"]::after{background:var(--error-color-hover)}:host([disabled]) [part="control checked"]::before,:host(:disabled) [part="control checked"]::before{background:var(--fill-hover-border-color);border-color:var(--fill-hover-border-color)}:host([disabled]) [part="control checked"]::after,:host(:disabled) [part="control checked"]::after{background:var(--disabled-fill-color)}`;
|
|
2
|
+
export const styles = css `:host::part(base){transition:none}:host ::part(helper-text){font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom);margin-block-start:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));grid-auto-rows:minmax(1.25rem, auto)}[part~=label]{font-family:var(--ig-body-1-font-family, var(--ig-font-family));font-size:var(--ig-body-1-font-size);font-weight:var(--ig-body-1-font-weight);font-style:var(--ig-body-1-font-style);line-height:var(--ig-body-1-line-height);letter-spacing:var(--ig-body-1-letter-spacing);text-transform:var(--ig-body-1-text-transform);margin-top:var(--ig-body-1-margin-top);margin-bottom:var(--ig-body-1-margin-bottom)}[part~=base]{gap:.5rem}[part~=control]{--size: 1rem;border-radius:var(--size);width:var(--size);height:var(--size);min-width:var(--size);transition:rgba(0,0,0,0)}[part~=control]::before,[part~=control]::after{transition:none;border-radius:calc(var(--size)/2)}[part~=control]::before{transform:translate(-50%, -50%) scale(0.4375)}[part~=control]::after{width:inherit;height:inherit;min-width:inherit;border:.0625rem solid var(--empty-color)}[part~=focused] [part~=control]{box-shadow:0 0 0 .25rem var(--focus-outline-color)}[part~=focused] [part=control]::after{border-color:var(--focus-border-color)}[part="control checked"]::after{background:var(--fill-color);border-color:var(--fill-color)}[part="control checked"]::before{border-color:var(--fill-hover-border-color);background:var(--fill-hover-border-color)}:host(:hover) [part=control]::after{border-color:var(--hover-color)}:host(:hover) [part="control checked"]::after{background:var(--fill-color-hover);border-color:var(--fill-color-hover)}:host(:hover) [part="control checked"]::before{background:var(--fill-hover-border-color)}:host(:hover) [part~=focused] [part=control]::after{border-color:hsl(from var(--focus-border-color) h calc(s * 1.12) calc(l * 0.82))}:host(:not([disabled]):state(ig-invalid)) [part~=control]::after,:host(:not(:disabled):state(ig-invalid)) [part~=control]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part="control checked"]::after,:host(:not(:disabled):state(ig-invalid)) [part="control checked"]::after{background:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part~=control],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part~=control]{box-shadow:0 0 0 .25rem var(--focus-outline-color-error)}:host(:not([disabled]):state(ig-invalid):hover) [part="control checked"]::after,:host(:not(:disabled):state(ig-invalid):hover) [part="control checked"]::after{background:var(--error-color-hover)}:host([disabled]) [part="control checked"]::before,:host(:disabled) [part="control checked"]::before{background:var(--fill-hover-border-color);border-color:var(--fill-hover-border-color)}:host([disabled]) [part="control checked"]::after,:host(:disabled) [part="control checked"]::after{background:var(--disabled-fill-color)}@media(forced-colors: active){[part="control checked"]::before{border-width:.5rem}}`;
|
|
3
3
|
//# sourceMappingURL=radio.bootstrap.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.bootstrap.css.js","sourceRoot":"","sources":["../../../../../src/components/radio/themes/shared/radio.bootstrap.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"radio.bootstrap.css.js","sourceRoot":"","sources":["../../../../../src/components/radio/themes/shared/radio.bootstrap.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,4jHAA4jH,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host::part(base){transition:none}:host ::part(helper-text){font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom);margin-block-start:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));grid-auto-rows:minmax(1.25rem, auto)}[part~=label]{font-family:var(--ig-body-1-font-family, var(--ig-font-family));font-size:var(--ig-body-1-font-size);font-weight:var(--ig-body-1-font-weight);font-style:var(--ig-body-1-font-style);line-height:var(--ig-body-1-line-height);letter-spacing:var(--ig-body-1-letter-spacing);text-transform:var(--ig-body-1-text-transform);margin-top:var(--ig-body-1-margin-top);margin-bottom:var(--ig-body-1-margin-bottom)}[part~=base]{gap:.5rem}[part~=control]{--size: 1rem;border-radius:var(--size);width:var(--size);height:var(--size);min-width:var(--size);transition:rgba(0,0,0,0)}[part~=control]::before,[part~=control]::after{transition:none;border-radius:calc(var(--size)/2)}[part~=control]::before{transform:translate(-50%, -50%) scale(0.4375)}[part~=control]::after{width:inherit;height:inherit;min-width:inherit;border:.0625rem solid var(--empty-color)}[part~=focused] [part~=control]{box-shadow:0 0 0 .25rem var(--focus-outline-color)}[part~=focused] [part=control]::after{border-color:var(--focus-border-color)}[part=\"control checked\"]::after{background:var(--fill-color);border-color:var(--fill-color)}[part=\"control checked\"]::before{border-color:var(--fill-hover-border-color);background:var(--fill-hover-border-color)}:host(:hover) [part=control]::after{border-color:var(--hover-color)}:host(:hover) [part=\"control checked\"]::after{background:var(--fill-color-hover);border-color:var(--fill-color-hover)}:host(:hover) [part=\"control checked\"]::before{background:var(--fill-hover-border-color)}:host(:hover) [part~=focused] [part=control]::after{border-color:hsl(from var(--focus-border-color) h calc(s * 1.12) calc(l * 0.82))}:host(:not([disabled]):state(ig-invalid)) [part~=control]::after,:host(:not(:disabled):state(ig-invalid)) [part~=control]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part=\"control checked\"]::after,:host(:not(:disabled):state(ig-invalid)) [part=\"control checked\"]::after{background:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part~=control],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part~=control]{box-shadow:0 0 0 .25rem var(--focus-outline-color-error)}:host(:not([disabled]):state(ig-invalid):hover) [part=\"control checked\"]::after,:host(:not(:disabled):state(ig-invalid):hover) [part=\"control checked\"]::after{background:var(--error-color-hover)}:host([disabled]) [part=\"control checked\"]::before,:host(:disabled) [part=\"control checked\"]::before{background:var(--fill-hover-border-color);border-color:var(--fill-hover-border-color)}:host([disabled]) [part=\"control checked\"]::after,:host(:disabled) [part=\"control checked\"]::after{background:var(--disabled-fill-color)}@media(forced-colors: active){[part=\"control checked\"]::before{border-width:.5rem}}`;\n "]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host ::part(helper-text){font-family:var(--ig-caption-font-family, var(--ig-font-family));font-size:var(--ig-caption-font-size);font-weight:var(--ig-caption-font-weight);font-style:var(--ig-caption-font-style);line-height:var(--ig-caption-line-height);letter-spacing:var(--ig-caption-letter-spacing);text-transform:var(--ig-caption-text-transform);margin-top:var(--ig-caption-margin-top);margin-bottom:var(--ig-caption-margin-bottom);margin-block-start:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));grid-auto-rows:minmax(1.125rem, auto)}:host(:hover) [part~=control]::after{border:.125rem solid var(--hover-color)}:host(:hover) [part="control checked"]::after{border-color:var(--fill-hover-border-color)}[part~=base]{gap:.5rem}[part~=label]{font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom)}[part~=control]{--size: 1rem;border-radius:var(--size);width:var(--size, 1.25rem);height:var(--size, 1.25rem);min-width:var(--size, 1.25rem);transition:none}[part~=control]::before,[part~=control]::after{border-radius:calc(var(--size)/2)}[part~=control]::after{border:.125rem solid var(--empty-color)}[part="control checked"]::after{border-color:var(--fill-color)}[part="control checked"]::before{background:var(--fill-color);border-color:var(--fill-color)}[part="control checked"]:hover::after{border-color:var(--fill-hover-border-color)}[part="control checked"]:hover::before{background:var(--fill-color-hover);border-color:var(--fill-hover-border-color)}[part~=focused] [part=control]{box-shadow:0 0 0 .1875rem var(--focus-outline-color)}[part~=focused] [part="control checked"]{box-shadow:0 0 0 .1875rem var(--focus-outline-color-filled)}:host(:not([disabled]):state(ig-invalid)) [part~=base]:hover [part~=label],:host(:not(:disabled):state(ig-invalid)) [part~=base]:hover [part~=label]{color:var(--label-color-hover)}:host(:not([disabled]):state(ig-invalid)) [part~=label],:host(:not(:disabled):state(ig-invalid)) [part~=label]{color:var(--label-color)}:host(:not([disabled]):state(ig-invalid)) [part=control]::after,:host(:not(:disabled):state(ig-invalid)) [part=control]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part="control checked"]::after,:host(:not(:disabled):state(ig-invalid)) [part="control checked"]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part="control checked"]::before,:host(:not(:disabled):state(ig-invalid)) [part="control checked"]::before{background:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part~=control],:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part="control checked"],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part~=control],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part="control checked"]{box-shadow:0 0 0 .1875rem var(--focus-outline-color-error)}:host(:not([disabled]):state(ig-invalid):hover) [part="control checked"]::before,:host(:not(:disabled):state(ig-invalid):hover) [part="control checked"]::before{background:var(--error-color-hover);border-color:var(--error-color-hover)}`;
|
|
2
|
+
export const styles = css `:host ::part(helper-text){font-family:var(--ig-caption-font-family, var(--ig-font-family));font-size:var(--ig-caption-font-size);font-weight:var(--ig-caption-font-weight);font-style:var(--ig-caption-font-style);line-height:var(--ig-caption-line-height);letter-spacing:var(--ig-caption-letter-spacing);text-transform:var(--ig-caption-text-transform);margin-top:var(--ig-caption-margin-top);margin-bottom:var(--ig-caption-margin-bottom);margin-block-start:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));grid-auto-rows:minmax(1.125rem, auto)}:host(:hover) [part~=control]::after{border:.125rem solid var(--hover-color)}:host(:hover) [part="control checked"]::after{border-color:var(--fill-hover-border-color)}[part~=base]{gap:.5rem}[part~=label]{font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom)}[part~=control]{--size: 1rem;border-radius:var(--size);width:var(--size, 1.25rem);height:var(--size, 1.25rem);min-width:var(--size, 1.25rem);transition:none}[part~=control]::before,[part~=control]::after{border-radius:calc(var(--size)/2)}[part~=control]::after{border:.125rem solid var(--empty-color)}[part="control checked"]::after{border-color:var(--fill-color)}[part="control checked"]::before{background:var(--fill-color);border-color:var(--fill-color)}[part="control checked"]:hover::after{border-color:var(--fill-hover-border-color)}[part="control checked"]:hover::before{background:var(--fill-color-hover);border-color:var(--fill-hover-border-color)}[part~=focused] [part=control]{box-shadow:0 0 0 .1875rem var(--focus-outline-color)}[part~=focused] [part="control checked"]{box-shadow:0 0 0 .1875rem var(--focus-outline-color-filled)}:host(:not([disabled]):state(ig-invalid)) [part~=base]:hover [part~=label],:host(:not(:disabled):state(ig-invalid)) [part~=base]:hover [part~=label]{color:var(--label-color-hover)}:host(:not([disabled]):state(ig-invalid)) [part~=label],:host(:not(:disabled):state(ig-invalid)) [part~=label]{color:var(--label-color)}:host(:not([disabled]):state(ig-invalid)) [part=control]::after,:host(:not(:disabled):state(ig-invalid)) [part=control]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part="control checked"]::after,:host(:not(:disabled):state(ig-invalid)) [part="control checked"]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part="control checked"]::before,:host(:not(:disabled):state(ig-invalid)) [part="control checked"]::before{background:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part~=control],:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part="control checked"],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part~=control],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part="control checked"]{box-shadow:0 0 0 .1875rem var(--focus-outline-color-error)}:host(:not([disabled]):state(ig-invalid):hover) [part="control checked"]::before,:host(:not(:disabled):state(ig-invalid):hover) [part="control checked"]::before{background:var(--error-color-hover);border-color:var(--error-color-hover)}@media(forced-colors: active){[part="control checked"]::before{border-width:.5rem}}`;
|
|
3
3
|
//# sourceMappingURL=radio.indigo.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.indigo.css.js","sourceRoot":"","sources":["../../../../../src/components/radio/themes/shared/radio.indigo.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"radio.indigo.css.js","sourceRoot":"","sources":["../../../../../src/components/radio/themes/shared/radio.indigo.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,muHAAmuH,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host ::part(helper-text){font-family:var(--ig-caption-font-family, var(--ig-font-family));font-size:var(--ig-caption-font-size);font-weight:var(--ig-caption-font-weight);font-style:var(--ig-caption-font-style);line-height:var(--ig-caption-line-height);letter-spacing:var(--ig-caption-letter-spacing);text-transform:var(--ig-caption-text-transform);margin-top:var(--ig-caption-margin-top);margin-bottom:var(--ig-caption-margin-bottom);margin-block-start:max(var(--is-large, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(1rem, -1 * 1rem)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))));grid-auto-rows:minmax(1.125rem, auto)}:host(:hover) [part~=control]::after{border:.125rem solid var(--hover-color)}:host(:hover) [part=\"control checked\"]::after{border-color:var(--fill-hover-border-color)}[part~=base]{gap:.5rem}[part~=label]{font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom)}[part~=control]{--size: 1rem;border-radius:var(--size);width:var(--size, 1.25rem);height:var(--size, 1.25rem);min-width:var(--size, 1.25rem);transition:none}[part~=control]::before,[part~=control]::after{border-radius:calc(var(--size)/2)}[part~=control]::after{border:.125rem solid var(--empty-color)}[part=\"control checked\"]::after{border-color:var(--fill-color)}[part=\"control checked\"]::before{background:var(--fill-color);border-color:var(--fill-color)}[part=\"control checked\"]:hover::after{border-color:var(--fill-hover-border-color)}[part=\"control checked\"]:hover::before{background:var(--fill-color-hover);border-color:var(--fill-hover-border-color)}[part~=focused] [part=control]{box-shadow:0 0 0 .1875rem var(--focus-outline-color)}[part~=focused] [part=\"control checked\"]{box-shadow:0 0 0 .1875rem var(--focus-outline-color-filled)}:host(:not([disabled]):state(ig-invalid)) [part~=base]:hover [part~=label],:host(:not(:disabled):state(ig-invalid)) [part~=base]:hover [part~=label]{color:var(--label-color-hover)}:host(:not([disabled]):state(ig-invalid)) [part~=label],:host(:not(:disabled):state(ig-invalid)) [part~=label]{color:var(--label-color)}:host(:not([disabled]):state(ig-invalid)) [part=control]::after,:host(:not(:disabled):state(ig-invalid)) [part=control]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part=\"control checked\"]::after,:host(:not(:disabled):state(ig-invalid)) [part=\"control checked\"]::after{border-color:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part=\"control checked\"]::before,:host(:not(:disabled):state(ig-invalid)) [part=\"control checked\"]::before{background:var(--error-color)}:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part~=control],:host(:not([disabled]):state(ig-invalid)) [part~=focused] [part=\"control checked\"],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part~=control],:host(:not(:disabled):state(ig-invalid)) [part~=focused] [part=\"control checked\"]{box-shadow:0 0 0 .1875rem var(--focus-outline-color-error)}:host(:not([disabled]):state(ig-invalid):hover) [part=\"control checked\"]::before,:host(:not(:disabled):state(ig-invalid):hover) [part=\"control checked\"]::before{background:var(--error-color-hover);border-color:var(--error-color-hover)}@media(forced-colors: active){[part=\"control checked\"]::before{border-width:.5rem}}`;\n "]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}[part=trigger-side],[part=trigger],[part=trigger-bottom]{--_size: 0.6875rem;display:inline-flex;visibility:var(--resize-visibility);position:absolute;z-index:1}:host{display:contents}[part~=resize-base]{position:relative;height:100%}[part=trigger-side]{top:calc(50% - var(--_size));right:calc(var(--_size)/2*-1);cursor:e-resize}[part=trigger]{bottom:calc(var(--_size)/2*-1);right:calc(var(--_size)/2*-1);cursor:se-resize}[part=trigger-bottom]{left:calc(50% - var(--_size));bottom:calc(var(--_size)/2*-1);cursor:s-resize}[part=trigger]:focus{outline:none}`;
|
|
2
|
+
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}[part=trigger-side],[part=trigger],[part=trigger-bottom]{--_size: 0.6875rem;display:inline-flex;visibility:var(--resize-visibility);position:absolute;z-index:1}:host{display:contents}[part~=resize-base]{position:relative;height:100%}[part=trigger-side]{top:calc(50% - var(--_size));right:calc(var(--_size)/2*-1);cursor:e-resize}[part=trigger]{bottom:calc(var(--_size)/2*-1);right:calc(var(--_size)/2*-1);cursor:se-resize}[part=trigger-bottom]{left:calc(50% - var(--_size));bottom:calc(var(--_size)/2*-1);cursor:s-resize}[part=trigger]:focus{outline:none}@media(forced-colors: active){[part~=trigger-side],[part~=trigger],[part~=trigger-bottom]{border:.0625rem solid Highlight}[part~=resize-base][part~=active]::after{--resize-indicator: Highlight}}`;
|
|
3
3
|
//# sourceMappingURL=resize-container.base.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize-container.base.css.js","sourceRoot":"","sources":["../../../../src/components/resize-container/themes/resize-container.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"resize-container.base.css.js","sourceRoot":"","sources":["../../../../src/components/resize-container/themes/resize-container.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,srDAAsrD,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}[part=trigger-side],[part=trigger],[part=trigger-bottom]{--_size: 0.6875rem;display:inline-flex;visibility:var(--resize-visibility);position:absolute;z-index:1}:host{display:contents}[part~=resize-base]{position:relative;height:100%}[part=trigger-side]{top:calc(50% - var(--_size));right:calc(var(--_size)/2*-1);cursor:e-resize}[part=trigger]{bottom:calc(var(--_size)/2*-1);right:calc(var(--_size)/2*-1);cursor:se-resize}[part=trigger-bottom]{left:calc(50% - var(--_size));bottom:calc(var(--_size)/2*-1);cursor:s-resize}[part=trigger]:focus{outline:none}@media(forced-colors: active){[part~=trigger-side],[part~=trigger],[part~=trigger-bottom]{border:.0625rem solid Highlight}[part~=resize-base][part~=active]::after{--resize-indicator: Highlight}}`;\n "]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
|
-
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:flex;font-family:var(--ig-font-family)}[part=base]{overflow:hidden auto;min-width:7rem;z-index:10005}:host{display:block}:host ::part(helper-text){font-family:var(--ig-caption-font-family, var(--ig-font-family));font-size:var(--ig-caption-font-size);font-weight:var(--ig-caption-font-weight);font-style:var(--ig-caption-font-style);line-height:var(--ig-caption-line-height);letter-spacing:var(--ig-caption-letter-spacing);text-transform:var(--ig-caption-text-transform);margin-top:var(--ig-caption-margin-top);margin-bottom:var(--ig-caption-margin-bottom);display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}:host slot[name=value-missing]{display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}[data-role=combobox]{outline-style:none}:host([disabled]) [data-role=combobox]{pointer-events:none}igc-input,igc-icon{--component-size: var(--select-size) !important;cursor:pointer}igc-input::part(input){cursor:pointer}igc-input::part(input)::-moz-selection{background:rgba(0,0,0,0)}igc-input::part(input)::selection{background:rgba(0,0,0,0)}igc-validator{font-family:var(--ig-caption-font-family, var(--ig-font-family));font-size:var(--ig-caption-font-size);font-weight:var(--ig-caption-font-weight);font-style:var(--ig-caption-font-style);line-height:var(--ig-caption-line-height);letter-spacing:var(--ig-caption-letter-spacing);text-transform:var(--ig-caption-text-transform);margin-top:var(--ig-caption-margin-top);margin-bottom:var(--ig-caption-margin-bottom);line-height:1}[name=prefix]::slotted(*),[name=suffix]::slotted(*){display:flex}`;
|
|
2
|
+
export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{display:flex;font-family:var(--ig-font-family)}[part=base]{overflow:hidden auto;min-width:7rem;z-index:10005}@media(forced-colors: active){:host [part=base]{border:.0625rem solid CanvasText}}:host{display:block}:host ::part(helper-text){font-family:var(--ig-caption-font-family, var(--ig-font-family));font-size:var(--ig-caption-font-size);font-weight:var(--ig-caption-font-weight);font-style:var(--ig-caption-font-style);line-height:var(--ig-caption-line-height);letter-spacing:var(--ig-caption-letter-spacing);text-transform:var(--ig-caption-text-transform);margin-top:var(--ig-caption-margin-top);margin-bottom:var(--ig-caption-margin-bottom);display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}:host slot[name=value-missing]{display:-webkit-inline-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}[data-role=combobox]{outline-style:none}:host([disabled]) [data-role=combobox]{pointer-events:none}igc-input,igc-icon{--component-size: var(--select-size) !important;cursor:pointer}igc-input::part(input){cursor:pointer}igc-input::part(input)::-moz-selection{background:rgba(0,0,0,0)}igc-input::part(input)::selection{background:rgba(0,0,0,0)}igc-validator{font-family:var(--ig-caption-font-family, var(--ig-font-family));font-size:var(--ig-caption-font-size);font-weight:var(--ig-caption-font-weight);font-style:var(--ig-caption-font-style);line-height:var(--ig-caption-line-height);letter-spacing:var(--ig-caption-letter-spacing);text-transform:var(--ig-caption-text-transform);margin-top:var(--ig-caption-margin-top);margin-bottom:var(--ig-caption-margin-bottom);line-height:1}[name=prefix]::slotted(*),[name=suffix]::slotted(*){display:flex}@media(forced-colors: active){[part~=list-wrapper]{border:.0625rem solid CanvasText}:host(:disabled) igc-validator::part(helper-text),:host([disabled]) igc-validator::part(helper-text){color:GrayText}:host(:disabled),:host([disabled]),:host(:disabled) igc-input,:host([disabled]) igc-input{--disabled-text-color: GrayText;--toggle-button-foreground-disabled: GrayText}:host(:disabled) igc-input::part(container),:host([disabled]) igc-input::part(container){border-color:GrayText}}`;
|
|
3
3
|
//# sourceMappingURL=select.base.css.js.map
|