@shortfuse/materialdesignweb 0.4.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -79
- package/bin/generate-css.js +12 -0
- package/components/Badge.css +30 -0
- package/components/Badge.js +15 -0
- package/components/Body.css +14 -0
- package/components/Body.js +7 -0
- package/components/BottomAppBar.css +23 -0
- package/components/BottomAppBar.js +25 -0
- package/components/Box.css +31 -0
- package/components/Box.js +24 -0
- package/components/Button.css +146 -0
- package/components/Button.js +95 -0
- package/components/Button.md +61 -0
- package/components/Card.css +109 -0
- package/components/Card.js +82 -0
- package/components/Checkbox.css +77 -0
- package/components/Checkbox.js +59 -0
- package/components/CheckboxIcon.css +89 -0
- package/components/CheckboxIcon.js +41 -0
- package/components/Chip.css +35 -0
- package/components/Chip.js +22 -0
- package/components/Dialog.css +235 -0
- package/components/Dialog.js +327 -0
- package/components/DialogActions.js +13 -0
- package/components/Divider.css +41 -0
- package/components/Divider.js +13 -0
- package/components/ExtendedFab.css +24 -0
- package/components/ExtendedFab.js +11 -0
- package/components/Fab.css +23 -0
- package/components/Fab.js +26 -0
- package/components/FilterChip.css +80 -0
- package/components/FilterChip.js +51 -0
- package/components/Headline.css +14 -0
- package/components/Headline.js +33 -0
- package/components/Icon.css +76 -0
- package/components/Icon.js +174 -0
- package/components/IconButton.css +151 -0
- package/components/IconButton.js +65 -0
- package/components/Input.js +16 -0
- package/components/Label.css +14 -0
- package/components/Label.js +7 -0
- package/components/Layout.css +19 -0
- package/components/Layout.js +12 -0
- package/components/List.css +12 -0
- package/components/List.js +17 -0
- package/components/ListItem.css +224 -0
- package/components/ListItem.js +112 -0
- package/components/ListOption.css +34 -0
- package/components/ListOption.js +122 -0
- package/components/ListSelect.css +9 -0
- package/components/ListSelect.js +206 -0
- package/components/Menu.css +171 -0
- package/components/Menu.js +470 -0
- package/components/MenuItem.css +53 -0
- package/components/MenuItem.js +215 -0
- package/components/Nav.css +17 -0
- package/components/Nav.js +23 -0
- package/components/NavBar.css +34 -0
- package/components/NavBar.js +88 -0
- package/components/NavBarItem.css +41 -0
- package/components/NavBarItem.js +7 -0
- package/components/NavDrawer.css +31 -0
- package/components/NavDrawer.js +13 -0
- package/components/NavDrawerItem.css +42 -0
- package/components/NavDrawerItem.js +12 -0
- package/components/NavItem.css +181 -0
- package/components/NavItem.js +83 -0
- package/components/NavRail.css +47 -0
- package/components/NavRail.js +17 -0
- package/components/NavRailItem.css +25 -0
- package/components/NavRailItem.js +7 -0
- package/components/Option.js +91 -0
- package/components/Outline.css +138 -0
- package/components/Pane.css +261 -0
- package/components/Pane.js +21 -0
- package/components/Progress.css +74 -0
- package/components/Progress.js +67 -0
- package/components/ProgressCircle.css +226 -0
- package/components/ProgressLine.css +155 -0
- package/components/Radio.css +83 -0
- package/components/Radio.js +42 -0
- package/components/RadioIcon.css +73 -0
- package/components/RadioIcon.js +37 -0
- package/components/Ripple.css +74 -0
- package/components/Ripple.js +114 -0
- package/components/SegmentedButton.css +94 -0
- package/components/SegmentedButton.js +49 -0
- package/components/SegmentedButtonGroup.css +12 -0
- package/components/SegmentedButtonGroup.js +44 -0
- package/components/Select.css +52 -0
- package/components/Select.js +71 -0
- package/components/Shape.css +132 -0
- package/components/Shape.js +25 -0
- package/components/Slider.css +306 -0
- package/components/Slider.js +206 -0
- package/components/Snackbar.css +80 -0
- package/components/Snackbar.js +75 -0
- package/components/Surface.css +10 -0
- package/components/Surface.js +23 -0
- package/components/Switch.css +63 -0
- package/components/Switch.js +127 -0
- package/components/SwitchIcon.css +177 -0
- package/components/SwitchIcon.js +89 -0
- package/components/SwitchIconAnimations.css +89 -0
- package/components/Tab.css +85 -0
- package/components/Tab.js +103 -0
- package/components/TabContent.js +151 -0
- package/components/TabList.css +129 -0
- package/components/TabList.js +309 -0
- package/components/TabPanel.js +37 -0
- package/components/TextArea.css +93 -0
- package/components/TextArea.js +229 -0
- package/components/Title.css +14 -0
- package/components/Title.js +15 -0
- package/components/Tooltip.css +40 -0
- package/components/Tooltip.js +22 -0
- package/components/TopAppBar.css +209 -0
- package/components/TopAppBar.js +201 -0
- package/core/Composition.js +988 -0
- package/core/CustomElement.js +844 -0
- package/core/ICustomElement.d.ts +288 -0
- package/core/ICustomElement.js +1 -0
- package/core/css.js +51 -0
- package/core/customTypes.js +125 -0
- package/core/dom.js +56 -245
- package/core/identify.js +40 -0
- package/core/observe.js +410 -0
- package/core/template.js +121 -0
- package/core/typings.d.ts +135 -0
- package/core/typings.js +1 -0
- package/mixins/AriaReflectorMixin.js +42 -0
- package/mixins/AriaToolbarMixin.js +13 -0
- package/mixins/ControlMixin.css +57 -0
- package/mixins/ControlMixin.js +212 -0
- package/mixins/DensityMixin.css +40 -0
- package/mixins/DensityMixin.js +11 -0
- package/mixins/FlexableMixin.css +79 -0
- package/mixins/FlexableMixin.js +32 -0
- package/mixins/FormAssociatedMixin.js +170 -0
- package/mixins/InputMixin.js +335 -0
- package/mixins/KeyboardNavMixin.js +244 -0
- package/mixins/RTLObserverMixin.js +35 -0
- package/mixins/ResizeObserverMixin.js +38 -0
- package/mixins/RippleMixin.css +12 -0
- package/mixins/RippleMixin.js +115 -0
- package/mixins/ScrollListenerMixin.js +100 -0
- package/mixins/ShapeMixin.css +135 -0
- package/mixins/ShapeMixin.js +31 -0
- package/mixins/StateMixin.css +82 -0
- package/mixins/StateMixin.js +114 -0
- package/mixins/SurfaceMixin.css +150 -0
- package/mixins/SurfaceMixin.js +32 -0
- package/mixins/TextFieldMixin.css +657 -0
- package/mixins/TextFieldMixin.js +121 -0
- package/mixins/ThemableMixin.css +204 -0
- package/mixins/ThemableMixin.js +16 -0
- package/mixins/TooltipTriggerMixin.css +27 -0
- package/mixins/TooltipTriggerMixin.js +366 -0
- package/mixins/TouchTargetMixin.css +26 -0
- package/mixins/TouchTargetMixin.js +9 -0
- package/package.json +57 -41
- package/theming/index.js +594 -0
- package/theming/loader.js +24 -0
- package/utils/cli.js +11 -0
- package/utils/color_keywords.js +151 -0
- package/utils/hct/Cam16.js +298 -0
- package/utils/hct/CorePalette.js +84 -0
- package/utils/hct/Hct.js +172 -0
- package/utils/hct/Scheme.js +587 -0
- package/utils/hct/TonalPalette.js +68 -0
- package/utils/hct/ViewingConditions.js +136 -0
- package/utils/hct/blend.js +93 -0
- package/utils/hct/colorUtils.js +302 -0
- package/utils/hct/hctSolver.js +559 -0
- package/utils/hct/helper.js +182 -0
- package/utils/hct/mathUtils.js +153 -0
- package/utils/jsonMergePatch.js +100 -0
- package/utils/jsx-runtime.js +101 -0
- package/utils/popup.js +117 -0
- package/utils/svg.js +129 -0
- package/.browserslistrc +0 -3
- package/.eslintrc.json +0 -153
- package/.stylelintrc.json +0 -600
- package/.vscode/launch.json +0 -31
- package/.vscode/settings.json +0 -3
- package/.vscode/tasks.json +0 -32
- package/CHANGELOG.md +0 -24
- package/CODE_OF_CONDUCT.md +0 -46
- package/adapters/datatable/column.js +0 -203
- package/adapters/datatable/index.js +0 -972
- package/adapters/dom/index.js +0 -601
- package/adapters/list/index.js +0 -69
- package/adapters/search/index.js +0 -521
- package/components/appbar/_spec.scss +0 -225
- package/components/appbar/_theme.scss +0 -0
- package/components/appbar/index.scss +0 -2
- package/components/banner/_spec.scss +0 -118
- package/components/banner/_theme.scss +0 -0
- package/components/banner/index.scss +0 -2
- package/components/bottomnav/README.md +0 -85
- package/components/bottomnav/_spec.scss +0 -157
- package/components/bottomnav/_theme.scss +0 -0
- package/components/bottomnav/index.js +0 -122
- package/components/bottomnav/index.scss +0 -2
- package/components/bottomnav/item.js +0 -89
- package/components/button/README.md +0 -61
- package/components/button/_spec.scss +0 -161
- package/components/button/_theme.scss +0 -65
- package/components/button/index.eta +0 -32
- package/components/button/index.js +0 -43
- package/components/button/index.pug +0 -18
- package/components/button/index.scss +0 -2
- package/components/card/_spec.scss +0 -249
- package/components/card/_theme.scss +0 -0
- package/components/card/index.scss +0 -2
- package/components/chip/_spec.scss +0 -134
- package/components/chip/_theme.scss +0 -177
- package/components/chip/index.js +0 -21
- package/components/chip/index.scss +0 -2
- package/components/chip/item.js +0 -20
- package/components/datatable/_spec.scss +0 -288
- package/components/datatable/_theme.scss +0 -154
- package/components/datatable/cell.js +0 -45
- package/components/datatable/columnheader.js +0 -47
- package/components/datatable/index.js +0 -388
- package/components/datatable/index.scss +0 -2
- package/components/datatable/row.js +0 -49
- package/components/datatable/rowheader.js +0 -18
- package/components/dialog/_spec.scss +0 -213
- package/components/dialog/_theme.scss +0 -0
- package/components/dialog/index.js +0 -627
- package/components/dialog/index.scss +0 -2
- package/components/divider/_spec.scss +0 -13
- package/components/divider/_theme.scss +0 -0
- package/components/divider/index.scss +0 -2
- package/components/elevation/_spec.scss +0 -9
- package/components/elevation/_theme.scss +0 -0
- package/components/elevation/index.scss +0 -2
- package/components/fab/_spec.scss +0 -222
- package/components/fab/_theme.scss +0 -0
- package/components/fab/index.js +0 -103
- package/components/fab/index.scss +0 -2
- package/components/grid/_spec.scss +0 -312
- package/components/grid/_theme.scss +0 -0
- package/components/grid/index.scss +0 -2
- package/components/layout/_mixins.scss +0 -33
- package/components/layout/_spec.scss +0 -1012
- package/components/layout/_theme.scss +0 -44
- package/components/layout/index.js +0 -464
- package/components/layout/index.scss +0 -2
- package/components/list/_spec.scss +0 -397
- package/components/list/_theme.scss +0 -111
- package/components/list/content.js +0 -110
- package/components/list/index.js +0 -260
- package/components/list/index.scss +0 -2
- package/components/list/item.js +0 -170
- package/components/list/secondary.js +0 -46
- package/components/menu/_spec.scss +0 -362
- package/components/menu/_theme.scss +0 -0
- package/components/menu/index.js +0 -721
- package/components/menu/index.scss +0 -2
- package/components/menu/item.js +0 -239
- package/components/progress/_spec.scss +0 -147
- package/components/progress/_theme.scss +0 -0
- package/components/progress/index.js +0 -36
- package/components/progress/index.scss +0 -2
- package/components/selection/_spec.scss +0 -386
- package/components/selection/_theme.scss +0 -166
- package/components/selection/index.eta +0 -60
- package/components/selection/index.js +0 -76
- package/components/selection/index.pug +0 -30
- package/components/selection/index.scss +0 -2
- package/components/selection/input.js +0 -56
- package/components/selection/radiogroup.js +0 -47
- package/components/slider/_spec.scss +0 -64
- package/components/slider/_theme.scss +0 -0
- package/components/slider/index.scss +0 -2
- package/components/snackbar/_spec.scss +0 -195
- package/components/snackbar/_theme.scss +0 -0
- package/components/snackbar/index.js +0 -344
- package/components/snackbar/index.scss +0 -2
- package/components/tab/_spec.scss +0 -235
- package/components/tab/_theme.scss +0 -0
- package/components/tab/content.js +0 -205
- package/components/tab/index.js +0 -260
- package/components/tab/index.scss +0 -2
- package/components/tab/item.js +0 -89
- package/components/tab/list.js +0 -210
- package/components/tab/panel.js +0 -54
- package/components/template/_theme.scss +0 -27
- package/components/textfield/README.md +0 -179
- package/components/textfield/_mixins.scss +0 -52
- package/components/textfield/_spec.scss +0 -809
- package/components/textfield/_theme.scss +0 -299
- package/components/textfield/index.eta +0 -74
- package/components/textfield/index.js +0 -168
- package/components/textfield/index.pug +0 -30
- package/components/textfield/index.scss +0 -2
- package/components/tooltip/_spec.scss +0 -188
- package/components/tooltip/_theme.scss +0 -0
- package/components/tooltip/index.scss +0 -2
- package/components/type/_spec.scss +0 -224
- package/components/type/_theme.scss +0 -0
- package/components/type/index.scss +0 -2
- package/core/_breakpoint.scss +0 -189
- package/core/_elevation.scss +0 -38
- package/core/_length.scss +0 -9
- package/core/_motion.scss +0 -31
- package/core/_platform.scss +0 -34
- package/core/_type.scss +0 -127
- package/core/aria/attributes.js +0 -141
- package/core/aria/button.js +0 -50
- package/core/aria/keyboard.js +0 -93
- package/core/aria/rovingtabindex.js +0 -178
- package/core/aria/tab.js +0 -60
- package/core/color/_spec.scss +0 -0
- package/core/color/_theme.scss +0 -390
- package/core/color/index.scss +0 -2
- package/core/document/index.js +0 -39
- package/core/overlay/_spec.scss +0 -31
- package/core/overlay/_theme.scss +0 -171
- package/core/overlay/index.js +0 -108
- package/core/overlay/index.scss +0 -2
- package/core/ripple/_spec.scss +0 -197
- package/core/ripple/_theme.scss +0 -40
- package/core/ripple/index.js +0 -294
- package/core/ripple/index.scss +0 -2
- package/core/theme/_config.scss +0 -2
- package/core/theme/_mixins.scss +0 -172
- package/core/theme/_palettes.scss +0 -406
- package/core/theme/_variables.scss +0 -24
- package/core/theme/index.js +0 -50
- package/core/throttler.js +0 -42
- package/core/transition/index.js +0 -468
- package/docs/_flex.scss +0 -22
- package/docs/_menuoptions.js +0 -183
- package/docs/_mixins.pug +0 -155
- package/docs/_partials/_androidnavbar.eta +0 -5
- package/docs/_partials/_androidstatusbar.eta +0 -13
- package/docs/_partials/_appbar.eta +0 -29
- package/docs/_partials/_buttontest.eta +0 -31
- package/docs/_partials/_header.eta +0 -149
- package/docs/_partials/_navlistitem.eta +0 -16
- package/docs/_partials/_target.eta +0 -1
- package/docs/_sample-utils.js +0 -93
- package/docs/_storage.js +0 -33
- package/docs/docs.scss +0 -295
- package/docs/index.eta +0 -16
- package/docs/index.js +0 -0
- package/docs/pages/appbar.eta +0 -114
- package/docs/pages/appbar.js +0 -0
- package/docs/pages/appbar.pug +0 -78
- package/docs/pages/bottomnav.eta +0 -188
- package/docs/pages/bottomnav.js +0 -115
- package/docs/pages/bottomnav.pug +0 -137
- package/docs/pages/button.eta +0 -124
- package/docs/pages/button.js +0 -224
- package/docs/pages/button.pug +0 -121
- package/docs/pages/card.eta +0 -90
- package/docs/pages/card.js +0 -177
- package/docs/pages/card.pug +0 -74
- package/docs/pages/chip.eta +0 -122
- package/docs/pages/chip.js +0 -82
- package/docs/pages/chip.pug +0 -91
- package/docs/pages/color.eta +0 -143
- package/docs/pages/color.js +0 -262
- package/docs/pages/color.pug +0 -121
- package/docs/pages/datatable.eta +0 -323
- package/docs/pages/datatable.js +0 -164
- package/docs/pages/datatable.pug +0 -283
- package/docs/pages/dialog.eta +0 -186
- package/docs/pages/dialog.js +0 -177
- package/docs/pages/dialog.pug +0 -132
- package/docs/pages/dom.eta +0 -26
- package/docs/pages/dom.js +0 -143
- package/docs/pages/dom.pug +0 -22
- package/docs/pages/elevation.eta +0 -35
- package/docs/pages/elevation.js +0 -0
- package/docs/pages/elevation.pug +0 -25
- package/docs/pages/fab.eta +0 -99
- package/docs/pages/fab.js +0 -44
- package/docs/pages/fab.pug +0 -66
- package/docs/pages/grid.eta +0 -135
- package/docs/pages/grid.js +0 -128
- package/docs/pages/grid.pug +0 -95
- package/docs/pages/layout.eta +0 -8
- package/docs/pages/layout.js +0 -0
- package/docs/pages/layout.pug +0 -7
- package/docs/pages/list.eta +0 -465
- package/docs/pages/list.js +0 -9
- package/docs/pages/list.pug +0 -326
- package/docs/pages/menu.eta +0 -276
- package/docs/pages/menu.js +0 -217
- package/docs/pages/menu.pug +0 -205
- package/docs/pages/overlay.eta +0 -69
- package/docs/pages/overlay.js +0 -4
- package/docs/pages/overlay.pug +0 -55
- package/docs/pages/progress.eta +0 -23
- package/docs/pages/progress.js +0 -12
- package/docs/pages/progress.pug +0 -16
- package/docs/pages/ripple.eta +0 -27
- package/docs/pages/ripple.js +0 -4
- package/docs/pages/ripple.pug +0 -21
- package/docs/pages/search.eta +0 -246
- package/docs/pages/search.js +0 -243
- package/docs/pages/search.pug +0 -165
- package/docs/pages/selection.eta +0 -111
- package/docs/pages/selection.js +0 -13
- package/docs/pages/selection.pug +0 -74
- package/docs/pages/slider.eta +0 -23
- package/docs/pages/slider.js +0 -0
- package/docs/pages/slider.pug +0 -17
- package/docs/pages/snackbar.eta +0 -83
- package/docs/pages/snackbar.js +0 -158
- package/docs/pages/snackbar.pug +0 -60
- package/docs/pages/tab.eta +0 -421
- package/docs/pages/tab.js +0 -151
- package/docs/pages/tab.pug +0 -304
- package/docs/pages/textfield.eta +0 -486
- package/docs/pages/textfield.js +0 -254
- package/docs/pages/textfield.pug +0 -360
- package/docs/pages/tooltip.eta +0 -94
- package/docs/pages/tooltip.js +0 -0
- package/docs/pages/tooltip.pug +0 -78
- package/docs/pages/transition.eta +0 -117
- package/docs/pages/transition.js +0 -54
- package/docs/pages/transition.pug +0 -76
- package/docs/pages/type.eta +0 -31
- package/docs/pages/type.js +0 -0
- package/docs/pages/type.pug +0 -29
- package/docs/postrender.js +0 -39
- package/docs/prerender.js +0 -16
- package/docs/pwa/_dialogs.eta +0 -143
- package/docs/pwa/_dialogs.pug +0 -96
- package/docs/pwa/_menus.eta +0 -16
- package/docs/pwa/_menus.pug +0 -11
- package/docs/pwa/pwa-prerender.js +0 -3
- package/docs/pwa/pwa.eta +0 -480
- package/docs/pwa/pwa.js +0 -306
- package/docs/pwa/pwa.pug +0 -325
- package/docs/pwa/pwa.scss +0 -26
- package/docs/spec.scss +0 -26
- package/docs/themes/_component-themes.scss +0 -26
- package/docs/themes/theme-colored-fallbacks.scss +0 -17
- package/docs/themes/theme-colored.scss +0 -17
- package/docs/themes/theme-default-fallbacks.scss +0 -17
- package/docs/themes/theme-default.scss +0 -17
- package/jsconfig.json +0 -12
- package/scripts/deploy-docs.sh +0 -9
- package/templates/index.eta +0 -2
- package/templates/index.pug +0 -3
- package/webpack.config.cjs +0 -257
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as utils from './colorUtils.js';
|
|
19
|
+
import * as math from './mathUtils.js';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* In traditional color spaces, a color can be identified solely by the
|
|
23
|
+
* observer's measurement of the color. Color appearance models such as CAM16
|
|
24
|
+
* also use information about the environment where the color was
|
|
25
|
+
* observed, known as the viewing conditions.
|
|
26
|
+
*
|
|
27
|
+
* For example, white under the traditional assumption of a midday sun white
|
|
28
|
+
* point is accurately measured as a slightly chromatic blue by CAM16. (roughly,
|
|
29
|
+
* hue 203, chroma 3, lightness 100)
|
|
30
|
+
*
|
|
31
|
+
* This class caches intermediate values of the CAM16 conversion process that
|
|
32
|
+
* depend only on viewing conditions, enabling speed ups.
|
|
33
|
+
*/
|
|
34
|
+
export default class ViewingConditions {
|
|
35
|
+
/** sRGB-like viewing conditions. */
|
|
36
|
+
static DEFAULT = ViewingConditions.make();
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Create ViewingConditions from a simple, physically relevant, set of
|
|
40
|
+
* parameters.
|
|
41
|
+
* @param whitePoint White point, measured in the XYZ color space.
|
|
42
|
+
* default = D65, or sunny day afternoon
|
|
43
|
+
* @param {number} adaptingLuminance The luminance of the adapting field. Informally,
|
|
44
|
+
* how bright it is in the room where the color is viewed. Can be
|
|
45
|
+
* calculated from lux by multiplying lux by 0.0586. default = 11.72,
|
|
46
|
+
* or 200 lux.
|
|
47
|
+
* @param {number} backgroundLstar The lightness of the area surrounding the color.
|
|
48
|
+
* measured by L* in L*a*b*. default = 50.0
|
|
49
|
+
* @param {number} surround A general description of the lighting surrounding the
|
|
50
|
+
* color. 0 is pitch dark, like watching a movie in a theater. 1.0 is a
|
|
51
|
+
* dimly light room, like watching TV at home at night. 2.0 means there
|
|
52
|
+
* is no difference between the lighting on the color and around it.
|
|
53
|
+
* default = 2.0
|
|
54
|
+
* @param {boolean} discountingIlluminant Whether the eye accounts for the tint of the
|
|
55
|
+
* ambient lighting, such as knowing an apple is still red in green light.
|
|
56
|
+
* default = false, the eye does not perform this process on
|
|
57
|
+
* self-luminous objects like displays.
|
|
58
|
+
* @return {ViewingConditions}
|
|
59
|
+
*/
|
|
60
|
+
static make(
|
|
61
|
+
whitePoint = utils.whitePointD65(),
|
|
62
|
+
adaptingLuminance = ((200 / Math.PI) * utils.yFromLstar(50)) / 100,
|
|
63
|
+
backgroundLstar = 50,
|
|
64
|
+
surround = 2,
|
|
65
|
+
discountingIlluminant = false,
|
|
66
|
+
) {
|
|
67
|
+
const xyz = whitePoint;
|
|
68
|
+
const rW = xyz[0] * 0.401_288 + xyz[1] * 0.650_173 + xyz[2] * -0.051_461;
|
|
69
|
+
const gW = xyz[0] * -0.250_268 + xyz[1] * 1.204_414 + xyz[2] * 0.045_854;
|
|
70
|
+
const bW = xyz[0] * -0.002_079 + xyz[1] * 0.048_952 + xyz[2] * 0.953_127;
|
|
71
|
+
const f = 0.8 + surround / 10;
|
|
72
|
+
const c = f >= 0.9 ? math.lerp(0.59, 0.69, (f - 0.9) * 10)
|
|
73
|
+
: math.lerp(0.525, 0.59, (f - 0.8) * 10);
|
|
74
|
+
let d = discountingIlluminant
|
|
75
|
+
? 1
|
|
76
|
+
: f * (1 - (1 / 3.6) * Math.exp((-adaptingLuminance - 42) / 92));
|
|
77
|
+
d = d > 1 ? 1 : (d < 0 ? 0 : d);
|
|
78
|
+
const nc = f;
|
|
79
|
+
const rgbD = [
|
|
80
|
+
d * (100 / rW) + 1 - d,
|
|
81
|
+
d * (100 / gW) + 1 - d,
|
|
82
|
+
d * (100 / bW) + 1 - d,
|
|
83
|
+
];
|
|
84
|
+
const k = 1 / (5 * adaptingLuminance + 1);
|
|
85
|
+
const k4 = k * k * k * k;
|
|
86
|
+
const k4F = 1 - k4;
|
|
87
|
+
const fl = k4 * adaptingLuminance
|
|
88
|
+
+ 0.1 * k4F * k4F * Math.cbrt(5 * adaptingLuminance);
|
|
89
|
+
const n = utils.yFromLstar(backgroundLstar) / whitePoint[1];
|
|
90
|
+
const z = 1.48 + Math.sqrt(n);
|
|
91
|
+
const nbb = 0.725 / n ** 0.2;
|
|
92
|
+
const ncb = nbb;
|
|
93
|
+
const rgbAFactors = [
|
|
94
|
+
((fl * rgbD[0] * rW) / 100) ** 0.42,
|
|
95
|
+
((fl * rgbD[1] * gW) / 100) ** 0.42,
|
|
96
|
+
((fl * rgbD[2] * bW) / 100) ** 0.42,
|
|
97
|
+
];
|
|
98
|
+
const rgbA = [
|
|
99
|
+
(400 * rgbAFactors[0]) / (rgbAFactors[0] + 27.13),
|
|
100
|
+
(400 * rgbAFactors[1]) / (rgbAFactors[1] + 27.13),
|
|
101
|
+
(400 * rgbAFactors[2]) / (rgbAFactors[2] + 27.13),
|
|
102
|
+
];
|
|
103
|
+
const aw = (2 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;
|
|
104
|
+
return new ViewingConditions(n, aw, nbb, ncb, c, nc, rgbD, fl, fl ** 0.25, z);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Parameters are intermediate values of the CAM16 conversion process. Their
|
|
109
|
+
* names are shorthand for technical color science terminology, this class
|
|
110
|
+
* would not benefit from documenting them individually. A brief overview
|
|
111
|
+
* is available in the CAM16 specification, and a complete overview requires
|
|
112
|
+
* a color science textbook, such as Fairchild's Color Appearance Models.
|
|
113
|
+
* @param {number} n
|
|
114
|
+
* @param {number} aw
|
|
115
|
+
* @param {number} nbb
|
|
116
|
+
* @param {number} ncb
|
|
117
|
+
* @param {number} c
|
|
118
|
+
* @param {number} nc
|
|
119
|
+
* @param {number[]} rgbD
|
|
120
|
+
* @param {number} fl
|
|
121
|
+
* @param {number} fLRoot
|
|
122
|
+
* @param {number} z
|
|
123
|
+
*/
|
|
124
|
+
constructor(n, aw, nbb, ncb, c, nc, rgbD, fl, fLRoot, z) {
|
|
125
|
+
this.n = n;
|
|
126
|
+
this.aw = aw;
|
|
127
|
+
this.nbb = nbb;
|
|
128
|
+
this.ncb = ncb;
|
|
129
|
+
this.c = c;
|
|
130
|
+
this.nc = nc;
|
|
131
|
+
this.rgbD = rgbD;
|
|
132
|
+
this.fl = fl;
|
|
133
|
+
this.fLRoot = fLRoot;
|
|
134
|
+
this.z = z;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
// libmonet is designed to have a consistent API across platforms
|
|
19
|
+
// and modular components that can be moved around easily. Using a class as a
|
|
20
|
+
// namespace facilitates this.
|
|
21
|
+
//
|
|
22
|
+
// tslint:disable:class-as-namespace
|
|
23
|
+
|
|
24
|
+
import Cam16 from './Cam16.js';
|
|
25
|
+
import Hct from './Hct.js';
|
|
26
|
+
import * as colorUtils from './colorUtils.js';
|
|
27
|
+
import * as mathUtils from './mathUtils.js';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Blend the design color's HCT hue towards the key color's HCT
|
|
31
|
+
* hue, in a way that leaves the original color recognizable and
|
|
32
|
+
* recognizably shifted towards the key color.
|
|
33
|
+
* @param {number} designColor ARGB representation of an arbitrary color.
|
|
34
|
+
* @param {number} sourceColor ARGB representation of the main theme color.
|
|
35
|
+
* @return {number} The design color with a hue shifted towards the
|
|
36
|
+
* system's color, a slightly warmer/cooler variant of the design
|
|
37
|
+
* color's hue.
|
|
38
|
+
*/
|
|
39
|
+
export function harmonize(designColor, sourceColor) {
|
|
40
|
+
const fromHct = Hct.fromInt(designColor);
|
|
41
|
+
const toHct = Hct.fromInt(sourceColor);
|
|
42
|
+
const differenceDegrees = mathUtils.differenceDegrees(fromHct.hue, toHct.hue);
|
|
43
|
+
const rotationDegrees = Math.min(differenceDegrees * 0.5, 15);
|
|
44
|
+
const outputHue = mathUtils.sanitizeDegreesDouble(
|
|
45
|
+
fromHct.hue
|
|
46
|
+
+ rotationDegrees * mathUtils.rotationDirection(fromHct.hue, toHct.hue),
|
|
47
|
+
);
|
|
48
|
+
return Hct.from(outputHue, fromHct.chroma, fromHct.tone).toInt();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Blend in CAM16-UCS space.
|
|
53
|
+
* @param {number} from ARGB representation of color
|
|
54
|
+
* @param {number} to ARGB representation of color
|
|
55
|
+
* @param {number} amount how much blending to perform; 0.0 >= and <= 1.0
|
|
56
|
+
* @return {number} from, blended towards to. Hue, chroma, and tone will
|
|
57
|
+
* change.
|
|
58
|
+
*/
|
|
59
|
+
export function cam16Ucs(from, to, amount) {
|
|
60
|
+
const fromCam = Cam16.fromInt(from);
|
|
61
|
+
const toCam = Cam16.fromInt(to);
|
|
62
|
+
const fromJ = fromCam.jstar;
|
|
63
|
+
const fromA = fromCam.astar;
|
|
64
|
+
const fromB = fromCam.bstar;
|
|
65
|
+
const toJ = toCam.jstar;
|
|
66
|
+
const toA = toCam.astar;
|
|
67
|
+
const toB = toCam.bstar;
|
|
68
|
+
const jstar = fromJ + (toJ - fromJ) * amount;
|
|
69
|
+
const astar = fromA + (toA - fromA) * amount;
|
|
70
|
+
const bstar = fromB + (toB - fromB) * amount;
|
|
71
|
+
return Cam16.fromUcs(jstar, astar, bstar).toInt();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Blends hue from one color into another. The chroma and tone of
|
|
76
|
+
* the original color are maintained.
|
|
77
|
+
* @param {number} from ARGB representation of color
|
|
78
|
+
* @param {number} to ARGB representation of color
|
|
79
|
+
* @param {number} amount how much blending to perform; 0.0 >= and <= 1.0
|
|
80
|
+
* @return {number} from, with a hue blended towards to. Chroma and tone
|
|
81
|
+
* are constant.
|
|
82
|
+
*/
|
|
83
|
+
export function hctHue(from, to, amount) {
|
|
84
|
+
const ucs = cam16Ucs(from, to, amount);
|
|
85
|
+
const ucsCam = Cam16.fromInt(ucs);
|
|
86
|
+
const fromCam = Cam16.fromInt(from);
|
|
87
|
+
const blended = Hct.from(
|
|
88
|
+
ucsCam.hue,
|
|
89
|
+
fromCam.chroma,
|
|
90
|
+
colorUtils.lstarFromArgb(from),
|
|
91
|
+
);
|
|
92
|
+
return blended.toInt();
|
|
93
|
+
}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2021 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
// This file is automatically generated. Do not modify it.
|
|
19
|
+
|
|
20
|
+
import * as mathUtils from './mathUtils.js';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Color science utilities.
|
|
24
|
+
*
|
|
25
|
+
* Utility methods for color science constants and color space
|
|
26
|
+
* conversions that aren't HCT or CAM16.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
const SRGB_TO_XYZ = [
|
|
30
|
+
[0.412_338_95, 0.357_620_64, 0.180_510_42],
|
|
31
|
+
[0.2126, 0.7152, 0.0722],
|
|
32
|
+
[0.019_321_41, 0.119_163_82, 0.950_344_78],
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const XYZ_TO_SRGB = [
|
|
36
|
+
[
|
|
37
|
+
3.241_377_479_238_868_5,
|
|
38
|
+
-1.537_665_240_285_185_1,
|
|
39
|
+
-0.498_853_668_462_680_53,
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
-0.969_145_251_300_532_1,
|
|
43
|
+
1.875_885_345_106_787_2,
|
|
44
|
+
0.041_565_856_169_120_61,
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
0.055_620_936_896_913_05,
|
|
48
|
+
-0.203_955_245_647_421_23,
|
|
49
|
+
1.057_179_911_122_033_5,
|
|
50
|
+
],
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
const WHITE_POINT_D65 = [95.047, 100, 108.883];
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Converts a color from RGB components to ARGB format.
|
|
57
|
+
* @param {number} red
|
|
58
|
+
* @param {number} green
|
|
59
|
+
* @param {number} blue
|
|
60
|
+
* @return {number}
|
|
61
|
+
*/
|
|
62
|
+
export function argbFromRgb(red, green, blue) {
|
|
63
|
+
return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255)
|
|
64
|
+
>>> 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Converts a color from linear RGB components to ARGB format.
|
|
69
|
+
* @param {number[]} linrgb
|
|
70
|
+
* @return {number}
|
|
71
|
+
*/
|
|
72
|
+
export function argbFromLinrgb(linrgb) {
|
|
73
|
+
const r = delinearized(linrgb[0]);
|
|
74
|
+
const g = delinearized(linrgb[1]);
|
|
75
|
+
const b = delinearized(linrgb[2]);
|
|
76
|
+
return argbFromRgb(r, g, b);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Returns the alpha component of a color in ARGB format.
|
|
81
|
+
* @param {number} argb
|
|
82
|
+
* @return {number}
|
|
83
|
+
*/
|
|
84
|
+
export function alphaFromArgb(argb) {
|
|
85
|
+
return argb >> 24 & 255;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Returns the red component of a color in ARGB format.
|
|
90
|
+
* @param {number} argb
|
|
91
|
+
* @return {number}
|
|
92
|
+
*/
|
|
93
|
+
export function redFromArgb(argb) {
|
|
94
|
+
return argb >> 16 & 255;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Returns the green component of a color in ARGB format.
|
|
99
|
+
* @param {number} argb
|
|
100
|
+
* @return {number}
|
|
101
|
+
*/
|
|
102
|
+
export function greenFromArgb(argb) {
|
|
103
|
+
return argb >> 8 & 255;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Returns the blue component of a color in ARGB format.
|
|
108
|
+
* @param {number} argb
|
|
109
|
+
* @return {number}
|
|
110
|
+
*/
|
|
111
|
+
export function blueFromArgb(argb) {
|
|
112
|
+
return argb & 255;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Returns whether a color in ARGB format is opaque.
|
|
117
|
+
* @param {number} argb
|
|
118
|
+
* @return {boolean}
|
|
119
|
+
*/
|
|
120
|
+
export function isOpaque(argb) {
|
|
121
|
+
return alphaFromArgb(argb) >= 255;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Converts a color from ARGB to XYZ.
|
|
126
|
+
* @param {number} x
|
|
127
|
+
* @param {number} y
|
|
128
|
+
* @param {number} z
|
|
129
|
+
* @return {number}
|
|
130
|
+
*/
|
|
131
|
+
export function argbFromXyz(x, y, z) {
|
|
132
|
+
const matrix = XYZ_TO_SRGB;
|
|
133
|
+
const linearR = matrix[0][0] * x + matrix[0][1] * y + matrix[0][2] * z;
|
|
134
|
+
const linearG = matrix[1][0] * x + matrix[1][1] * y + matrix[1][2] * z;
|
|
135
|
+
const linearB = matrix[2][0] * x + matrix[2][1] * y + matrix[2][2] * z;
|
|
136
|
+
const r = delinearized(linearR);
|
|
137
|
+
const g = delinearized(linearG);
|
|
138
|
+
const b = delinearized(linearB);
|
|
139
|
+
return argbFromRgb(r, g, b);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Converts a color from XYZ to ARGB.
|
|
144
|
+
* @param {number} argb
|
|
145
|
+
* @return {number[]}
|
|
146
|
+
*/
|
|
147
|
+
export function xyzFromArgb(argb) {
|
|
148
|
+
const r = linearized(redFromArgb(argb));
|
|
149
|
+
const g = linearized(greenFromArgb(argb));
|
|
150
|
+
const b = linearized(blueFromArgb(argb));
|
|
151
|
+
return mathUtils.matrixMultiply([r, g, b], SRGB_TO_XYZ);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Converts a color represented in Lab color space into an ARGB
|
|
156
|
+
* integer.
|
|
157
|
+
* @param {number} l
|
|
158
|
+
* @param {number} a
|
|
159
|
+
* @param {number} b
|
|
160
|
+
* @return {number}
|
|
161
|
+
*/
|
|
162
|
+
export function argbFromLab(l, a, b) {
|
|
163
|
+
const whitePoint = WHITE_POINT_D65;
|
|
164
|
+
const fy = (l + 16) / 116;
|
|
165
|
+
const fx = a / 500 + fy;
|
|
166
|
+
const fz = fy - b / 200;
|
|
167
|
+
const xNormalized = labInvf(fx);
|
|
168
|
+
const yNormalized = labInvf(fy);
|
|
169
|
+
const zNormalized = labInvf(fz);
|
|
170
|
+
const x = xNormalized * whitePoint[0];
|
|
171
|
+
const y = yNormalized * whitePoint[1];
|
|
172
|
+
const z = zNormalized * whitePoint[2];
|
|
173
|
+
return argbFromXyz(x, y, z);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Converts a color from ARGB representation to L*a*b*
|
|
178
|
+
* representation.
|
|
179
|
+
* @param {number} argb the ARGB representation of a color
|
|
180
|
+
* @return {number[]} a Lab object representing the color
|
|
181
|
+
*/
|
|
182
|
+
export function labFromArgb(argb) {
|
|
183
|
+
const linearR = linearized(redFromArgb(argb));
|
|
184
|
+
const linearG = linearized(greenFromArgb(argb));
|
|
185
|
+
const linearB = linearized(blueFromArgb(argb));
|
|
186
|
+
const matrix = SRGB_TO_XYZ;
|
|
187
|
+
const x = matrix[0][0] * linearR + matrix[0][1] * linearG + matrix[0][2] * linearB;
|
|
188
|
+
const y = matrix[1][0] * linearR + matrix[1][1] * linearG + matrix[1][2] * linearB;
|
|
189
|
+
const z = matrix[2][0] * linearR + matrix[2][1] * linearG + matrix[2][2] * linearB;
|
|
190
|
+
const whitePoint = WHITE_POINT_D65;
|
|
191
|
+
const xNormalized = x / whitePoint[0];
|
|
192
|
+
const yNormalized = y / whitePoint[1];
|
|
193
|
+
const zNormalized = z / whitePoint[2];
|
|
194
|
+
const fx = labF(xNormalized);
|
|
195
|
+
const fy = labF(yNormalized);
|
|
196
|
+
const fz = labF(zNormalized);
|
|
197
|
+
const l = 116 * fy - 16;
|
|
198
|
+
const a = 500 * (fx - fy);
|
|
199
|
+
const b = 200 * (fy - fz);
|
|
200
|
+
return [l, a, b];
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Converts an L* value to an ARGB representation.
|
|
205
|
+
* @param {number} lstar L* in L*a*b*
|
|
206
|
+
* @return {number} ARGB representation of grayscale color with lightness
|
|
207
|
+
* matching L*
|
|
208
|
+
*/
|
|
209
|
+
export function argbFromLstar(lstar) {
|
|
210
|
+
const y = yFromLstar(lstar);
|
|
211
|
+
const component = delinearized(y);
|
|
212
|
+
return argbFromRgb(component, component, component);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Computes the L* value of a color in ARGB representation.
|
|
217
|
+
* @param {number} argb ARGB representation of a color
|
|
218
|
+
* @return {number} L*, from L*a*b*, coordinate of the color
|
|
219
|
+
*/
|
|
220
|
+
export function lstarFromArgb(argb) {
|
|
221
|
+
const y = xyzFromArgb(argb)[1];
|
|
222
|
+
return 116 * labF(y / 100) - 16;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Converts an L* value to a Y value.
|
|
227
|
+
*
|
|
228
|
+
* L* in L*a*b* and Y in XYZ measure the same quantity, luminance.
|
|
229
|
+
*
|
|
230
|
+
* L* measures perceptual luminance, a linear scale. Y in XYZ
|
|
231
|
+
* measures relative luminance, a logarithmic scale.
|
|
232
|
+
* @param {number} lstar L* in L*a*b*
|
|
233
|
+
* @return {number} Y in XYZ
|
|
234
|
+
*/
|
|
235
|
+
export function yFromLstar(lstar) {
|
|
236
|
+
return 100 * labInvf((lstar + 16) / 116);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Linearizes an RGB component.
|
|
241
|
+
* @param {number} rgbComponent 0 <= rgb_component <= 255, represents R/G/B
|
|
242
|
+
* channel
|
|
243
|
+
* @return {number} 0.0 <= output <= 100.0, color channel converted to
|
|
244
|
+
* linear RGB space
|
|
245
|
+
*/
|
|
246
|
+
export function linearized(rgbComponent) {
|
|
247
|
+
const normalized = rgbComponent / 255;
|
|
248
|
+
if (normalized <= 0.040_449_936) {
|
|
249
|
+
return (normalized / 12.92) * 100;
|
|
250
|
+
}
|
|
251
|
+
return ((normalized + 0.055) / 1.055) ** 2.4 * 100;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Delinearizes an RGB component.
|
|
256
|
+
* @param {number} rgbComponent 0.0 <= rgb_component <= 100.0, represents
|
|
257
|
+
* linear R/G/B channel
|
|
258
|
+
* @return {number} 0 <= output <= 255, color channel converted to regular
|
|
259
|
+
* RGB space
|
|
260
|
+
*/
|
|
261
|
+
export function delinearized(rgbComponent) {
|
|
262
|
+
const normalized = rgbComponent / 100;
|
|
263
|
+
let delinearized = 0;
|
|
264
|
+
delinearized = normalized <= 0.003_130_8 ? normalized * 12.92 : 1.055 * normalized ** (1 / 2.4) - 0.055;
|
|
265
|
+
return mathUtils.clampInt(0, 255, Math.round(delinearized * 255));
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Returns the standard white point; white on a sunny day.
|
|
270
|
+
* @return {number[]} The white point
|
|
271
|
+
*/
|
|
272
|
+
export function whitePointD65() {
|
|
273
|
+
return WHITE_POINT_D65;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* @param {number} t
|
|
278
|
+
* @return {number}
|
|
279
|
+
*/
|
|
280
|
+
function labF(t) {
|
|
281
|
+
const e = 216 / 24_389;
|
|
282
|
+
const kappa = 24_389 / 27;
|
|
283
|
+
if (t > e) {
|
|
284
|
+
return t ** (1 / 3);
|
|
285
|
+
}
|
|
286
|
+
return (kappa * t + 16) / 116;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
*
|
|
291
|
+
* @param {number} ft
|
|
292
|
+
* @return {number}
|
|
293
|
+
*/
|
|
294
|
+
function labInvf(ft) {
|
|
295
|
+
const e = 216 / 24_389;
|
|
296
|
+
const kappa = 24_389 / 27;
|
|
297
|
+
const ft3 = ft * ft * ft;
|
|
298
|
+
if (ft3 > e) {
|
|
299
|
+
return ft3;
|
|
300
|
+
}
|
|
301
|
+
return (116 * ft - 16) / kappa;
|
|
302
|
+
}
|