@deephaven/components 1.21.0 → 1.22.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/dist/AutoResizeTextarea.d.ts +1 -1
- package/dist/AutoResizeTextarea.d.ts.map +1 -1
- package/dist/AutoResizeTextarea.js +89 -17
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.d.ts +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.d.ts.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
- package/dist/popper/Popper.css +7 -0
- package/dist/popper/Popper.css.map +1 -1
- package/dist/popper/Popper.d.ts +5 -0
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js +16 -2
- package/dist/popper/Popper.js.map +1 -1
- package/dist/spectrum/overlays.d.ts +1 -1
- package/dist/spectrum/overlays.d.ts.map +1 -1
- package/dist/spectrum/overlays.js.map +1 -1
- package/dist/spectrum/utils/themeUtils.d.ts +3 -3
- package/package.json +18 -18
|
@@ -12,7 +12,7 @@ interface AutoResizeTextareaProps {
|
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* Makes a textarea that auto resizes based on contents, its height grows with new lines.
|
|
15
|
-
* If a
|
|
15
|
+
* If a delimiter is set, such as " -" or " ", as used by jvm args or env vars
|
|
16
16
|
* then the field will also "explode" the value by the delimiter over new lines
|
|
17
17
|
* on focus, and implode on blur. By default, it doesn't word wrap.
|
|
18
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoResizeTextarea.d.ts","sourceRoot":"","sources":["../src/AutoResizeTextarea.tsx"],"names":[],"mappings":"AAGA,OAAO,2BAA2B,CAAC;AAEnC,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"AutoResizeTextarea.d.ts","sourceRoot":"","sources":["../src/AutoResizeTextarea.tsx"],"names":[],"mappings":"AAGA,OAAO,2BAA2B,CAAC;AAEnC,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA+ED;;;;;GAKG;AACH,iBAAS,kBAAkB,CAAC,EAC1B,SAAc,EACd,KAAK,EAAE,UAAU,EACjB,QAAQ,EACR,UAAkB,EAClB,WAAgB,EAChB,QAAgB,EAChB,SAAc,EACd,EAAO,EACP,aAAa,EAAE,UAAU,GAC1B,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAyGvC;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -2,9 +2,78 @@ import React, { useState, useRef, useEffect } from 'react';
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import "./AutoResizeTextarea.css";
|
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
function implode(input) {
|
|
6
|
+
return input.split('\n').map(string => string.trim()).filter(string => string) // remove empty strings (e.g. from trailing newlines)
|
|
7
|
+
.join(' ');
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Splits a string on a delimiter, respecting quoted spans.
|
|
12
|
+
* Delimiters that appear inside `"..."` or `'...'` are treated as literal
|
|
13
|
+
* characters and do not cause a split. Quotes are preserved in the returned
|
|
14
|
+
* tokens so the operation is lossless (suitable for display-only transformations
|
|
15
|
+
* where the original text must be recoverable).
|
|
16
|
+
*
|
|
17
|
+
* An unbalanced opening quote (no matching closing quote found ahead) is treated
|
|
18
|
+
* as a literal character and splitting proceeds normally.
|
|
19
|
+
*
|
|
20
|
+
* @param input The string to split.
|
|
21
|
+
* @param delimiter The delimiter to split on.
|
|
22
|
+
* @returns An array of tokens. Always contains at least one element.
|
|
23
|
+
*/
|
|
24
|
+
function splitOnDelimiter(input, delimiter) {
|
|
25
|
+
// Walk the string character by character, tracking quoted spans so that
|
|
26
|
+
// delimiters inside "..." or '...' are not treated as split points.
|
|
27
|
+
// Quotes are preserved in the output (not stripped) so the round-trip is lossless.
|
|
28
|
+
// An unbalanced quote is treated as a literal character — splitting continues normally.
|
|
29
|
+
var tokens = [];
|
|
30
|
+
var current = '';
|
|
31
|
+
var quoteChar = null;
|
|
32
|
+
var i = 0;
|
|
33
|
+
while (i < input.length) {
|
|
34
|
+
var ch = input[i];
|
|
35
|
+
if (quoteChar !== null) {
|
|
36
|
+
// Inside a quoted span — accumulate until we hit the matching closing quote
|
|
37
|
+
current += ch;
|
|
38
|
+
if (ch === quoteChar) {
|
|
39
|
+
quoteChar = null;
|
|
40
|
+
}
|
|
41
|
+
i += 1;
|
|
42
|
+
} else if (ch === '"' || ch === "'") {
|
|
43
|
+
// Only treat as a quoted span if there is a matching closing quote ahead.
|
|
44
|
+
// An unbalanced quote is treated as a literal character so the delimiter
|
|
45
|
+
// logic continues to work normally.
|
|
46
|
+
var closingIdx = input.indexOf(ch, i + 1);
|
|
47
|
+
if (closingIdx !== -1) {
|
|
48
|
+
quoteChar = ch;
|
|
49
|
+
}
|
|
50
|
+
current += ch;
|
|
51
|
+
i += 1;
|
|
52
|
+
} else if (input.startsWith(delimiter, i)) {
|
|
53
|
+
// Delimiter found outside a quoted span — emit the current token and advance
|
|
54
|
+
tokens.push(current);
|
|
55
|
+
current = '';
|
|
56
|
+
i += delimiter.length;
|
|
57
|
+
} else {
|
|
58
|
+
// Plain character outside any quoted span and not part of the delimiter — accumulate it
|
|
59
|
+
current += ch;
|
|
60
|
+
i += 1;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
tokens.push(current);
|
|
64
|
+
return tokens;
|
|
65
|
+
}
|
|
66
|
+
function explode(input, delimiter) {
|
|
67
|
+
// Split by delimiter (commonly " " or " -") respecting quoted spans, then
|
|
68
|
+
// join with newline + trimmed delimiter so each token appears on its own line.
|
|
69
|
+
// Empty tokens (e.g. from multiple consecutive delimiters) are filtered out.
|
|
70
|
+
return splitOnDelimiter(input.trim(), delimiter).filter(token => token !== '') // remove empty strings
|
|
71
|
+
.join("\n".concat(delimiter.trim()));
|
|
72
|
+
}
|
|
73
|
+
|
|
5
74
|
/**
|
|
6
75
|
* Makes a textarea that auto resizes based on contents, its height grows with new lines.
|
|
7
|
-
* If a
|
|
76
|
+
* If a delimiter is set, such as " -" or " ", as used by jvm args or env vars
|
|
8
77
|
* then the field will also "explode" the value by the delimiter over new lines
|
|
9
78
|
* on focus, and implode on blur. By default, it doesn't word wrap.
|
|
10
79
|
*/
|
|
@@ -23,20 +92,18 @@ function AutoResizeTextarea(_ref) {
|
|
|
23
92
|
var [value, setValue] = useState(propsValue);
|
|
24
93
|
var [isPastedChange, setIsPastedChange] = useState(false);
|
|
25
94
|
var element = useRef(null);
|
|
95
|
+
var isFocused = useRef(false);
|
|
96
|
+
var valueRef = useRef(value);
|
|
97
|
+
valueRef.current = value;
|
|
26
98
|
useEffect(function syncStateWithProp() {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
.join("\n".concat(delimiter.trim()));
|
|
36
|
-
}
|
|
37
|
-
function implode(input) {
|
|
38
|
-
return input.split('\n').map(string => string.trim()).join(' ');
|
|
39
|
-
}
|
|
99
|
+
if (!isFocused.current || !delimiter) {
|
|
100
|
+
// When not focused (or no delimiter), always sync to the new prop value.
|
|
101
|
+
setValue(propsValue);
|
|
102
|
+
} else if (implode(valueRef.current) !== implode(propsValue)) {
|
|
103
|
+
// When focused with delimiter, only update if the imploded value changed to prevent clobbering delimiters
|
|
104
|
+
setValue(explode(propsValue, delimiter));
|
|
105
|
+
}
|
|
106
|
+
}, [propsValue, delimiter]);
|
|
40
107
|
function reCalculateLayout() {
|
|
41
108
|
if (!element.current) {
|
|
42
109
|
return;
|
|
@@ -49,18 +116,22 @@ function AutoResizeTextarea(_ref) {
|
|
|
49
116
|
function handleChange(event) {
|
|
50
117
|
var newValue = event.target.value;
|
|
51
118
|
if (isPastedChange) {
|
|
52
|
-
if (delimiter) newValue = explode(newValue);
|
|
119
|
+
if (delimiter) newValue = explode(newValue, delimiter);
|
|
53
120
|
setIsPastedChange(false);
|
|
54
121
|
}
|
|
55
122
|
setValue(newValue);
|
|
56
|
-
onChange
|
|
123
|
+
// If there is a delimiter, the onChange value should always be the imploded version
|
|
124
|
+
// to prevent mismatch when exiting without triggering onBlur
|
|
125
|
+
// The exploded version is display only
|
|
126
|
+
onChange(delimiter ? implode(newValue) : newValue);
|
|
57
127
|
}
|
|
58
128
|
function handleFocus() {
|
|
59
129
|
if (!element.current) {
|
|
60
130
|
return;
|
|
61
131
|
}
|
|
132
|
+
isFocused.current = true;
|
|
62
133
|
if (delimiter) {
|
|
63
|
-
setValue(explode(value));
|
|
134
|
+
setValue(explode(value, delimiter));
|
|
64
135
|
reCalculateLayout();
|
|
65
136
|
}
|
|
66
137
|
element.current.scrollLeft = 0;
|
|
@@ -76,6 +147,7 @@ function AutoResizeTextarea(_ref) {
|
|
|
76
147
|
element.current.focus();
|
|
77
148
|
}
|
|
78
149
|
function handleBlur() {
|
|
150
|
+
isFocused.current = false;
|
|
79
151
|
if (delimiter) {
|
|
80
152
|
setValue(implode(value));
|
|
81
153
|
onChange(implode(value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoResizeTextarea.js","names":["React","useState","useRef","useEffect","classNames","jsx","_jsx","AutoResizeTextarea","_ref","className","value","propsValue","onChange","spellCheck","placeholder","disabled","delimiter","id","dataTestId","setValue","isPastedChange","setIsPastedChange","element","syncStateWithProp","explode","input","trim","split","filter","string","join","concat","implode","map","reCalculateLayout","current","style","height","resizedHeight","scrollHeight","offsetHeight","clientHeight","handleChange","event","newValue","target","handleFocus","scrollLeft","handleMouseDown","document","activeElement","focus","handleBlur","handlePaste","reCalculate","ref","rows","onFocus","onMouseDown","onBlur","onPaste"],"sources":["../src/AutoResizeTextarea.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\n\nimport './AutoResizeTextarea.scss';\n\ninterface AutoResizeTextareaProps {\n value: string;\n onChange: (val: string) => void;\n className?: string;\n spellCheck?: boolean;\n placeholder?: string;\n disabled?: boolean;\n delimiter?: string;\n id?: string;\n 'data-testid'?: string;\n}\n\n/**\n * Makes a textarea that auto resizes based on contents, its height grows with new lines.\n * If a delimeter is set, such as \" -\" or \" \", as used by jvm args or env vars\n * then the field will also \"explode\" the value by the delimiter over new lines\n * on focus, and implode on blur. By default, it doesn't word wrap.\n */\nfunction AutoResizeTextarea({\n className = '',\n value: propsValue,\n onChange,\n spellCheck = false,\n placeholder = '',\n disabled = false,\n delimiter = '',\n id = '',\n 'data-testid': dataTestId,\n}: AutoResizeTextareaProps): JSX.Element {\n const [value, setValue] = useState(propsValue);\n const [isPastedChange, setIsPastedChange] = useState(false);\n const element = useRef<HTMLTextAreaElement>(null);\n\n useEffect(\n function syncStateWithProp() {\n // keep state value in sync with prop changes\n setValue(propsValue);\n },\n [propsValue]\n );\n\n function explode(input: string): string {\n // split by delimiter, commonly \" \" or \" -\"\n // strip empty strings (if delimiter is space, and there are multiple spaces in a row)\n // and join with new line and a trimmed delimeter (get rid of leading spaces)\n return input\n .trim()\n .split(delimiter)\n .filter(string => string) // remove empty strings\n .join(`\\n${delimiter.trim()}`);\n }\n\n function implode(input: string): string {\n return input\n .split('\\n')\n .map(string => string.trim())\n .join(' ');\n }\n\n function reCalculateLayout(): void {\n if (!element.current) {\n return;\n }\n element.current.style.height = '0'; // shrink component to get scrollHeight\n const resizedHeight =\n element.current.scrollHeight +\n (element.current.offsetHeight - element.current.clientHeight);\n // accounts for border, padding is captured by scroll height\n if (resizedHeight > 0) element.current.style.height = `${resizedHeight}px`;\n }\n\n function handleChange(event: React.ChangeEvent<HTMLTextAreaElement>): void {\n let newValue = event.target.value;\n if (isPastedChange) {\n if (delimiter) newValue = explode(newValue);\n setIsPastedChange(false);\n }\n setValue(newValue);\n onChange(newValue);\n }\n\n function handleFocus(): void {\n if (!element.current) {\n return;\n }\n if (delimiter) {\n setValue(explode(value));\n reCalculateLayout();\n }\n element.current.scrollLeft = 0;\n // scroll left as it can be disorienting if you click on a long line\n }\n\n // make it explode when dragging the resize handle\n // by making it trigger focus (which normally doesn't\n // trigger when just resizing).\n function handleMouseDown(): void {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur(): void {\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste(): void {\n setIsPastedChange(true);\n }\n\n useEffect(\n function reCalculate() {\n reCalculateLayout();\n },\n [value]\n );\n\n return (\n <textarea\n ref={element}\n id={id}\n className={classNames(className, 'auto-resize-textarea form-control')}\n placeholder={placeholder}\n value={value}\n rows={1}\n onChange={handleChange}\n onFocus={handleFocus}\n onMouseDown={handleMouseDown}\n onBlur={handleBlur}\n onPaste={handlePaste}\n spellCheck={spellCheck}\n disabled={disabled}\n data-testid={dataTestId}\n />\n );\n}\n\nexport default AutoResizeTextarea;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"AutoResizeTextarea.js","names":["React","useState","useRef","useEffect","classNames","jsx","_jsx","implode","input","split","map","string","trim","filter","join","splitOnDelimiter","delimiter","tokens","current","quoteChar","i","length","ch","closingIdx","indexOf","startsWith","push","explode","token","concat","AutoResizeTextarea","_ref","className","value","propsValue","onChange","spellCheck","placeholder","disabled","id","dataTestId","setValue","isPastedChange","setIsPastedChange","element","isFocused","valueRef","syncStateWithProp","reCalculateLayout","style","height","resizedHeight","scrollHeight","offsetHeight","clientHeight","handleChange","event","newValue","target","handleFocus","scrollLeft","handleMouseDown","document","activeElement","focus","handleBlur","handlePaste","reCalculate","ref","rows","onFocus","onMouseDown","onBlur","onPaste"],"sources":["../src/AutoResizeTextarea.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\n\nimport './AutoResizeTextarea.scss';\n\ninterface AutoResizeTextareaProps {\n value: string;\n onChange: (val: string) => void;\n className?: string;\n spellCheck?: boolean;\n placeholder?: string;\n disabled?: boolean;\n delimiter?: string;\n id?: string;\n 'data-testid'?: string;\n}\n\nfunction implode(input: string): string {\n return input\n .split('\\n')\n .map(string => string.trim())\n .filter(string => string) // remove empty strings (e.g. from trailing newlines)\n .join(' ');\n}\n\n/**\n * Splits a string on a delimiter, respecting quoted spans.\n * Delimiters that appear inside `\"...\"` or `'...'` are treated as literal\n * characters and do not cause a split. Quotes are preserved in the returned\n * tokens so the operation is lossless (suitable for display-only transformations\n * where the original text must be recoverable).\n *\n * An unbalanced opening quote (no matching closing quote found ahead) is treated\n * as a literal character and splitting proceeds normally.\n *\n * @param input The string to split.\n * @param delimiter The delimiter to split on.\n * @returns An array of tokens. Always contains at least one element.\n */\nfunction splitOnDelimiter(input: string, delimiter: string): string[] {\n // Walk the string character by character, tracking quoted spans so that\n // delimiters inside \"...\" or '...' are not treated as split points.\n // Quotes are preserved in the output (not stripped) so the round-trip is lossless.\n // An unbalanced quote is treated as a literal character — splitting continues normally.\n const tokens: string[] = [];\n let current = '';\n let quoteChar: '\"' | \"'\" | null = null;\n let i = 0;\n\n while (i < input.length) {\n const ch = input[i];\n\n if (quoteChar !== null) {\n // Inside a quoted span — accumulate until we hit the matching closing quote\n current += ch;\n if (ch === quoteChar) {\n quoteChar = null;\n }\n i += 1;\n } else if (ch === '\"' || ch === \"'\") {\n // Only treat as a quoted span if there is a matching closing quote ahead.\n // An unbalanced quote is treated as a literal character so the delimiter\n // logic continues to work normally.\n const closingIdx = input.indexOf(ch, i + 1);\n if (closingIdx !== -1) {\n quoteChar = ch;\n }\n current += ch;\n i += 1;\n } else if (input.startsWith(delimiter, i)) {\n // Delimiter found outside a quoted span — emit the current token and advance\n tokens.push(current);\n current = '';\n i += delimiter.length;\n } else {\n // Plain character outside any quoted span and not part of the delimiter — accumulate it\n current += ch;\n i += 1;\n }\n }\n\n tokens.push(current);\n return tokens;\n}\n\nfunction explode(input: string, delimiter: string): string {\n // Split by delimiter (commonly \" \" or \" -\") respecting quoted spans, then\n // join with newline + trimmed delimiter so each token appears on its own line.\n // Empty tokens (e.g. from multiple consecutive delimiters) are filtered out.\n return splitOnDelimiter(input.trim(), delimiter)\n .filter(token => token !== '') // remove empty strings\n .join(`\\n${delimiter.trim()}`);\n}\n\n/**\n * Makes a textarea that auto resizes based on contents, its height grows with new lines.\n * If a delimiter is set, such as \" -\" or \" \", as used by jvm args or env vars\n * then the field will also \"explode\" the value by the delimiter over new lines\n * on focus, and implode on blur. By default, it doesn't word wrap.\n */\nfunction AutoResizeTextarea({\n className = '',\n value: propsValue,\n onChange,\n spellCheck = false,\n placeholder = '',\n disabled = false,\n delimiter = '',\n id = '',\n 'data-testid': dataTestId,\n}: AutoResizeTextareaProps): JSX.Element {\n const [value, setValue] = useState(propsValue);\n const [isPastedChange, setIsPastedChange] = useState(false);\n const element = useRef<HTMLTextAreaElement>(null);\n const isFocused = useRef(false);\n const valueRef = useRef(value);\n valueRef.current = value;\n\n useEffect(\n function syncStateWithProp() {\n if (!isFocused.current || !delimiter) {\n // When not focused (or no delimiter), always sync to the new prop value.\n setValue(propsValue);\n } else if (implode(valueRef.current) !== implode(propsValue)) {\n // When focused with delimiter, only update if the imploded value changed to prevent clobbering delimiters\n setValue(explode(propsValue, delimiter));\n }\n },\n [propsValue, delimiter]\n );\n\n function reCalculateLayout(): void {\n if (!element.current) {\n return;\n }\n element.current.style.height = '0'; // shrink component to get scrollHeight\n const resizedHeight =\n element.current.scrollHeight +\n (element.current.offsetHeight - element.current.clientHeight);\n // accounts for border, padding is captured by scroll height\n if (resizedHeight > 0) element.current.style.height = `${resizedHeight}px`;\n }\n\n function handleChange(event: React.ChangeEvent<HTMLTextAreaElement>): void {\n let newValue = event.target.value;\n if (isPastedChange) {\n if (delimiter) newValue = explode(newValue, delimiter);\n setIsPastedChange(false);\n }\n setValue(newValue);\n // If there is a delimiter, the onChange value should always be the imploded version\n // to prevent mismatch when exiting without triggering onBlur\n // The exploded version is display only\n onChange(delimiter ? implode(newValue) : newValue);\n }\n\n function handleFocus(): void {\n if (!element.current) {\n return;\n }\n isFocused.current = true;\n if (delimiter) {\n setValue(explode(value, delimiter));\n reCalculateLayout();\n }\n element.current.scrollLeft = 0;\n // scroll left as it can be disorienting if you click on a long line\n }\n\n // make it explode when dragging the resize handle\n // by making it trigger focus (which normally doesn't\n // trigger when just resizing).\n function handleMouseDown(): void {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur(): void {\n isFocused.current = false;\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste(): void {\n setIsPastedChange(true);\n }\n\n useEffect(\n function reCalculate() {\n reCalculateLayout();\n },\n [value]\n );\n\n return (\n <textarea\n ref={element}\n id={id}\n className={classNames(className, 'auto-resize-textarea form-control')}\n placeholder={placeholder}\n value={value}\n rows={1}\n onChange={handleChange}\n onFocus={handleFocus}\n onMouseDown={handleMouseDown}\n onBlur={handleBlur}\n onPaste={handlePaste}\n spellCheck={spellCheck}\n disabled={disabled}\n data-testid={dataTestId}\n />\n );\n}\n\nexport default AutoResizeTextarea;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactElement } from 'react';
|
|
2
|
-
import type { SpectrumDialogClose } from '@react-types/dialog';
|
|
3
2
|
import type { StyleProps } from '@react-types/shared';
|
|
4
3
|
import type { IconDefinition } from '@fortawesome/fontawesome-common-types';
|
|
4
|
+
import { type SpectrumDialogClose } from '../spectrum';
|
|
5
5
|
export interface ActionButtonDialogTriggerProps extends StyleProps {
|
|
6
6
|
icon: IconDefinition;
|
|
7
7
|
isQuiet?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionButtonDialogTrigger.d.ts","sourceRoot":"","sources":["../../src/dialogs/ActionButtonDialogTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ActionButtonDialogTrigger.d.ts","sourceRoot":"","sources":["../../src/dialogs/ActionButtonDialogTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,8BAA+B,SAAQ,UAAU;IAChE,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,mBAAmB,GAAG,YAAY,CAAC;IAC7C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,SAAS,EACT,IAAI,EACJ,OAAO,EACP,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,GAAG,UAAU,EACd,EAAE,8BAA8B,GAAG,GAAG,CAAC,OAAO,CAuB9C;AAED,eAAe,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionButtonDialogTrigger.js","names":["FontAwesomeIcon","ActionButton","DialogTrigger","Icon","Text","Tooltip","jsx","_jsx","jsxs","_jsxs","ActionButtonDialogTrigger","_ref","ariaLabel","icon","isQuiet","labelText","children","onOpenChange","tooltip","styleProps","_objectWithoutProperties","_excluded","iconClassName","undefined","type","_objectSpread","UNSAFE_className"],"sources":["../../src/dialogs/ActionButtonDialogTrigger.tsx"],"sourcesContent":["import { type ReactElement } from 'react';\nimport type {
|
|
1
|
+
{"version":3,"file":"ActionButtonDialogTrigger.js","names":["FontAwesomeIcon","ActionButton","DialogTrigger","Icon","Text","Tooltip","jsx","_jsx","jsxs","_jsxs","ActionButtonDialogTrigger","_ref","ariaLabel","icon","isQuiet","labelText","children","onOpenChange","tooltip","styleProps","_objectWithoutProperties","_excluded","iconClassName","undefined","type","_objectSpread","UNSAFE_className"],"sources":["../../src/dialogs/ActionButtonDialogTrigger.tsx"],"sourcesContent":["import { type ReactElement } from 'react';\nimport type { StyleProps } from '@react-types/shared';\nimport type { IconDefinition } from '@fortawesome/fontawesome-common-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n ActionButton,\n DialogTrigger,\n Icon,\n Text,\n type SpectrumDialogClose,\n} from '../spectrum';\nimport { Tooltip } from '../popper';\n\nexport interface ActionButtonDialogTriggerProps extends StyleProps {\n icon: IconDefinition;\n isQuiet?: boolean;\n labelText?: string;\n ariaLabel?: string;\n tooltip?: string;\n children: SpectrumDialogClose | ReactElement;\n onOpenChange?: (isOpen: boolean) => void;\n}\n\n/**\n * Dialog trigger based on an ActionButton.\n */\nexport function ActionButtonDialogTrigger({\n ariaLabel,\n icon,\n isQuiet,\n labelText,\n children,\n onOpenChange,\n tooltip,\n ...styleProps\n}: ActionButtonDialogTriggerProps): JSX.Element {\n const iconClassName =\n labelText == null && tooltip != null\n ? 'action-button-icon-with-tooltip'\n : undefined;\n\n return (\n <DialogTrigger type=\"popover\" onOpenChange={onOpenChange}>\n <ActionButton\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n aria-label={ariaLabel ?? labelText}\n isQuiet={isQuiet}\n >\n <Icon UNSAFE_className={iconClassName}>\n <FontAwesomeIcon icon={icon} />\n </Icon>\n {labelText == null ? null : <Text>{labelText}</Text>}\n {tooltip == null ? null : <Tooltip>{tooltip}</Tooltip>}\n </ActionButton>\n {children}\n </DialogTrigger>\n );\n}\n\nexport default ActionButtonDialogTrigger;\n"],"mappings":";;;;;;;;AAGA,SAASA,eAAe,QAAQ,gCAAgC;AAAC,SAE/DC,YAAY,EACZC,aAAa,EACbC,IAAI,EACJC,IAAI;AAAA,SAGGC,OAAO;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAYhB;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CAAAC,IAAA,EASO;EAAA,IATN;MACxCC,SAAS;MACTC,IAAI;MACJC,OAAO;MACPC,SAAS;MACTC,QAAQ;MACRC,YAAY;MACZC;IAE8B,CAAC,GAAAP,IAAA;IAD5BQ,UAAU,GAAAC,wBAAA,CAAAT,IAAA,EAAAU,SAAA;EAEb,IAAMC,aAAa,GACjBP,SAAS,IAAI,IAAI,IAAIG,OAAO,IAAI,IAAI,GAChC,iCAAiC,GACjCK,SAAS;EAEf,oBACEd,KAAA,CAACP,aAAa;IAACsB,IAAI,EAAC,SAAS;IAACP,YAAY,EAAEA,YAAa;IAAAD,QAAA,gBACvDP,KAAA,CAACR;IACC;IAAA,EAAAwB,aAAA,CAAAA,aAAA,KACIN,UAAU;MACd,cAAYP,SAAS,aAATA,SAAS,cAATA,SAAS,GAAIG,SAAU;MACnCD,OAAO,EAAEA,OAAQ;MAAAE,QAAA,gBAEjBT,IAAA,CAACJ,IAAI;QAACuB,gBAAgB,EAAEJ,aAAc;QAAAN,QAAA,eACpCT,IAAA,CAACP,eAAe;UAACa,IAAI,EAAEA;QAAK,CAAE;MAAC,CAC3B,CAAC,EACNE,SAAS,IAAI,IAAI,GAAG,IAAI,gBAAGR,IAAA,CAACH,IAAI;QAAAY,QAAA,EAAED;MAAS,CAAO,CAAC,EACnDG,OAAO,IAAI,IAAI,GAAG,IAAI,gBAAGX,IAAA,CAACF,OAAO;QAAAW,QAAA,EAAEE;MAAO,CAAU,CAAC;IAAA,EAC1C,CAAC,EACdF,QAAQ;EAAA,CACI,CAAC;AAEpB;AAEA,eAAeN,yBAAyB","ignoreList":[]}
|
package/dist/popper/Popper.css
CHANGED
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
max-height: inherit;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
.popper-container.maximized {
|
|
12
|
+
position: fixed !important;
|
|
13
|
+
top: 50% !important;
|
|
14
|
+
left: 50% !important;
|
|
15
|
+
transform: translate(-50%, -50%) !important;
|
|
16
|
+
}
|
|
17
|
+
|
|
11
18
|
.popper.popper-tooltip {
|
|
12
19
|
--background-color: var(--dh-color-tooltip-bg);
|
|
13
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../scss/custom.scss","../../scss/bootstrap_overrides.scss","../../src/popper/Popper.scss"],"names":[],"mappings":"AAAA;AC6LA;ACvLA;EACE;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EAEA;EACA;EACA,eDmIc;EClId,YDmIW;EClIX,YACE;EAEF;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA,QA9CU;EA+CV;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;EAME;;;AAGF;AAAA;EAME;;;AAGF;AAAA;EAME;;;AAGF;AAAA;EAME;;;AAGF;AAAA;AAAA;AAAA;EAYE;EACA;EACA;;;AAGF;EACE,eAvHY;;AAyHZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE,YArIY;;AAuIZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE,aAnJY;;AAqJZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE,cAjKY;;AAmKZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA","file":"Popper.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n@import './util.scss';\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n// Fallback colors are used if theme isn't loaded\n// this is required for error messages if the API doesn't load\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg, #1a171a);\n$foreground: var(--dh-color-fg, #f0f0ee);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: color-mix(\n in srgb,\n var(--dh-color-accent) 35%,\n transparent\n);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units as it is a SASS calc.\n// Using 0.42145rem with 1.3 line height gets us to spectrum's 32px.\n/* stylelint-disable-next-line number-max-precision */\n$input-btn-padding-y: 0.42145rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: var(--dh-color-item-list-hover-bg);\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-text-disabled);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n","@import '../../scss/custom.scss';\n\n$arrow-width: 5px;\n$animation-scale: 0.92;\n$animation-offset: 10px;\n\n.popper-container {\n position: absolute;\n z-index: 5000;\n\n .spectrum-theme-provider {\n max-height: inherit;\n }\n}\n\n.popper.popper-tooltip {\n --background-color: var(--dh-color-tooltip-bg);\n}\n\n.popper {\n --background-color: var(--dh-color-popover-bg);\n\n background: var(--background-color);\n color: var(--dh-color-tooltip-fg);\n border-radius: $border-radius;\n box-shadow: $box-shadow;\n transition:\n visibility $transition,\n opacity $transition;\n pointer-events: none;\n outline: 0;\n max-height: inherit;\n\n .popper-content {\n position: relative;\n max-height: inherit;\n\n .tooltip-content {\n text-align: center;\n padding: $tooltip-padding-y $tooltip-padding-x;\n }\n }\n\n .popper-arrow {\n width: 0;\n height: 0;\n border-style: solid;\n position: absolute;\n margin: $arrow-width;\n border-color: var(--background-color);\n }\n}\n\n.popper.interactive {\n pointer-events: auto;\n}\n\n.popper-transition-enter {\n opacity: 0;\n transition: none;\n}\n\n.popper-transition-exit {\n opacity: 0;\n transition: all $transition;\n}\n\n.popper-container[x-placement^='top']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='top']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate(0, $animation-offset);\n}\n\n.popper-container[x-placement^='right']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='right']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate(-$animation-offset, 0);\n}\n\n.popper-container[x-placement^='bottom']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='bottom']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate(0, -$animation-offset);\n}\n\n.popper-container[x-placement^='left']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='left']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate($animation-offset, 0);\n}\n\n.popper-container[x-placement^='top']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper,\n.popper-container[x-placement^='right']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper,\n.popper-container[x-placement^='bottom']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper,\n.popper-container[x-placement^='left']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper {\n opacity: 1;\n transform: none;\n transition: all $transition ease-out;\n}\n\n.popper-container[x-placement^='top'] > .spectrum-theme-provider .popper {\n margin-bottom: $arrow-width;\n\n .popper-arrow {\n border-width: $arrow-width $arrow-width 0 $arrow-width;\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n bottom: -$arrow-width;\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n\n.popper-container[x-placement^='bottom'] > .spectrum-theme-provider .popper {\n margin-top: $arrow-width;\n\n .popper-arrow {\n border-width: 0 $arrow-width $arrow-width $arrow-width;\n border-left-color: transparent;\n border-right-color: transparent;\n border-top-color: transparent;\n top: -$arrow-width;\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n\n.popper-container[x-placement^='right'] > .spectrum-theme-provider .popper {\n margin-left: $arrow-width;\n\n .popper-arrow {\n border-width: $arrow-width $arrow-width $arrow-width 0;\n border-left-color: transparent;\n border-top-color: transparent;\n border-bottom-color: transparent;\n left: -$arrow-width;\n margin-left: 0;\n margin-right: 0;\n }\n}\n\n.popper-container[x-placement^='left'] > .spectrum-theme-provider .popper {\n margin-right: $arrow-width;\n\n .popper-arrow {\n border-width: $arrow-width 0 $arrow-width $arrow-width;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n right: -$arrow-width;\n margin-left: 0;\n margin-right: 0;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../scss/custom.scss","../../scss/bootstrap_overrides.scss","../../src/popper/Popper.scss"],"names":[],"mappings":"AAAA;AC6LA;ACvLA;EACE;EACA;;AAEA;EACE;;;AAMJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EAEA;EACA;EACA,eD0Hc;ECzHd,YD0HW;ECzHX,YACE;EAEF;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA,QAvDU;EAwDV;;;AAIJ;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;EAME;;;AAGF;AAAA;EAME;;;AAGF;AAAA;EAME;;;AAGF;AAAA;EAME;;;AAGF;AAAA;AAAA;AAAA;EAYE;EACA;EACA;;;AAGF;EACE,eAhIY;;AAkIZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE,YA9IY;;AAgJZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE,aA5JY;;AA8JZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE,cA1KY;;AA4KZ;EACE;EACA;EACA;EACA;EACA;EACA;EACA","file":"Popper.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n@import './util.scss';\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n// Fallback colors are used if theme isn't loaded\n// this is required for error messages if the API doesn't load\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg, #1a171a);\n$foreground: var(--dh-color-fg, #f0f0ee);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: color-mix(\n in srgb,\n var(--dh-color-accent) 35%,\n transparent\n);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units as it is a SASS calc.\n// Using 0.42145rem with 1.3 line height gets us to spectrum's 32px.\n/* stylelint-disable-next-line number-max-precision */\n$input-btn-padding-y: 0.42145rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: var(--dh-color-item-list-hover-bg);\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-text-disabled);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n","@import '../../scss/custom.scss';\n\n$arrow-width: 5px;\n$animation-scale: 0.92;\n$animation-offset: 10px;\n\n.popper-container {\n position: absolute;\n z-index: 5000;\n\n .spectrum-theme-provider {\n max-height: inherit;\n }\n}\n\n// Override popper.js inline positioning when a maximized popper should be\n// centered and fixed in the viewport.\n.popper-container.maximized {\n position: fixed !important;\n top: 50% !important;\n left: 50% !important;\n transform: translate(-50%, -50%) !important;\n}\n\n.popper.popper-tooltip {\n --background-color: var(--dh-color-tooltip-bg);\n}\n\n.popper {\n --background-color: var(--dh-color-popover-bg);\n\n background: var(--background-color);\n color: var(--dh-color-tooltip-fg);\n border-radius: $border-radius;\n box-shadow: $box-shadow;\n transition:\n visibility $transition,\n opacity $transition;\n pointer-events: none;\n outline: 0;\n max-height: inherit;\n\n .popper-content {\n position: relative;\n max-height: inherit;\n\n .tooltip-content {\n text-align: center;\n padding: $tooltip-padding-y $tooltip-padding-x;\n }\n }\n\n .popper-arrow {\n width: 0;\n height: 0;\n border-style: solid;\n position: absolute;\n margin: $arrow-width;\n border-color: var(--background-color);\n }\n}\n\n.popper.interactive {\n pointer-events: auto;\n}\n\n.popper-transition-enter {\n opacity: 0;\n transition: none;\n}\n\n.popper-transition-exit {\n opacity: 0;\n transition: all $transition;\n}\n\n.popper-container[x-placement^='top']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='top']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate(0, $animation-offset);\n}\n\n.popper-container[x-placement^='right']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='right']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate(-$animation-offset, 0);\n}\n\n.popper-container[x-placement^='bottom']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='bottom']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate(0, -$animation-offset);\n}\n\n.popper-container[x-placement^='left']\n > .spectrum-theme-provider\n .popper-transition-enter,\n.popper-container[x-placement^='left']\n > .spectrum-theme-provider\n .popper-transition-exit {\n transform: scale($animation-scale) translate($animation-offset, 0);\n}\n\n.popper-container[x-placement^='top']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper,\n.popper-container[x-placement^='right']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper,\n.popper-container[x-placement^='bottom']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper,\n.popper-container[x-placement^='left']\n > .spectrum-theme-provider\n .popper-transition-enter-active.popper {\n opacity: 1;\n transform: none;\n transition: all $transition ease-out;\n}\n\n.popper-container[x-placement^='top'] > .spectrum-theme-provider .popper {\n margin-bottom: $arrow-width;\n\n .popper-arrow {\n border-width: $arrow-width $arrow-width 0 $arrow-width;\n border-left-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n bottom: -$arrow-width;\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n\n.popper-container[x-placement^='bottom'] > .spectrum-theme-provider .popper {\n margin-top: $arrow-width;\n\n .popper-arrow {\n border-width: 0 $arrow-width $arrow-width $arrow-width;\n border-left-color: transparent;\n border-right-color: transparent;\n border-top-color: transparent;\n top: -$arrow-width;\n margin-top: 0;\n margin-bottom: 0;\n }\n}\n\n.popper-container[x-placement^='right'] > .spectrum-theme-provider .popper {\n margin-left: $arrow-width;\n\n .popper-arrow {\n border-width: $arrow-width $arrow-width $arrow-width 0;\n border-left-color: transparent;\n border-top-color: transparent;\n border-bottom-color: transparent;\n left: -$arrow-width;\n margin-left: 0;\n margin-right: 0;\n }\n}\n\n.popper-container[x-placement^='left'] > .spectrum-theme-provider .popper {\n margin-right: $arrow-width;\n\n .popper-arrow {\n border-width: $arrow-width 0 $arrow-width $arrow-width;\n border-top-color: transparent;\n border-right-color: transparent;\n border-bottom-color: transparent;\n right: -$arrow-width;\n margin-left: 0;\n margin-right: 0;\n }\n}\n"]}
|
package/dist/popper/Popper.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ interface PopperProps {
|
|
|
21
21
|
children: React.ReactNode;
|
|
22
22
|
options: PopperOptions;
|
|
23
23
|
className: string;
|
|
24
|
+
containerClassName: string;
|
|
25
|
+
isMaximized: boolean;
|
|
24
26
|
timeout: number;
|
|
25
27
|
onEntered: () => void;
|
|
26
28
|
onExited: () => void;
|
|
@@ -40,6 +42,8 @@ declare class Popper extends Component<PopperProps, PopperState> {
|
|
|
40
42
|
static defaultProps: {
|
|
41
43
|
options: {};
|
|
42
44
|
className: string;
|
|
45
|
+
containerClassName: string;
|
|
46
|
+
isMaximized: boolean;
|
|
43
47
|
timeout: 150;
|
|
44
48
|
onEntered(): void;
|
|
45
49
|
onExited(): void;
|
|
@@ -58,6 +62,7 @@ declare class Popper extends Component<PopperProps, PopperState> {
|
|
|
58
62
|
container: React.RefObject<HTMLDivElement>;
|
|
59
63
|
nodeRef: React.RefObject<HTMLDivElement>;
|
|
60
64
|
rAF: number;
|
|
65
|
+
private updateContainerClassName;
|
|
61
66
|
/** Goes through an element and it's parents until the first visible element is found */
|
|
62
67
|
getVisibleElement(element: HTMLElement | null): HTMLElement | null;
|
|
63
68
|
initPopper(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../src/popper/Popper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,QAAQ,EAAE,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAE/E,OAAO,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../src/popper/Popper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,QAAQ,EAAE,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAE/E,OAAO,eAAe,CAAC;AAoCvB,UAAU,WAAW;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAED,cAAM,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACtD,MAAM,CAAC,YAAY;;;;;;qBAMJ,IAAI;oBAGL,IAAI;kBAGN,IAAI;;;;;;;MASd;gBAEU,KAAK,EAAE,WAAW;IAsB9B,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IA2BhD,oBAAoB,IAAI,IAAI;IAI5B,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3C,OAAO,kCAAqC;IAG5C,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,wBAAwB;IAahC,wFAAwF;IACxF,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAYlE,UAAU,IAAI,IAAI;IAuElB,aAAa,CAAC,WAAW,UAAO,GAAG,IAAI;IAsBvC,IAAI,IAAI,IAAI;IASZ,IAAI,IAAI,IAAI;IAIZ,cAAc,IAAI,IAAI;IAKtB,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAarC,WAAW,IAAI,IAAI;IAKnB,UAAU,IAAI,IAAI;IASlB,aAAa,IAAI,GAAG,CAAC,OAAO;IA4C5B,MAAM,IAAI,GAAG,CAAC,OAAO;CActB;AAED,eAAe,MAAM,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/popper/Popper.js
CHANGED
|
@@ -30,6 +30,7 @@ import "./Popper.css";
|
|
|
30
30
|
import { SpectrumThemeProvider } from "../theme/SpectrumThemeProvider.js";
|
|
31
31
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
32
32
|
var POPPER_CLASS_NAME = 'popper';
|
|
33
|
+
var POPPER_CONTAINER_CLASS_NAME = 'popper-container';
|
|
33
34
|
var KEEP_IN_PARENT_OPTIONS = {
|
|
34
35
|
placement: 'bottom-end',
|
|
35
36
|
modifiers: {
|
|
@@ -64,7 +65,7 @@ class Popper extends Component {
|
|
|
64
65
|
this.handleExit = this.handleExit.bind(this);
|
|
65
66
|
this.handleBlur = this.handleBlur.bind(this);
|
|
66
67
|
this.element = document.createElement('div');
|
|
67
|
-
this.
|
|
68
|
+
this.updateContainerClassName(props.containerClassName, props.isMaximized);
|
|
68
69
|
this.container = /*#__PURE__*/React.createRef();
|
|
69
70
|
|
|
70
71
|
// cancelAnimationFrame does nothing if the handle isn't recognized
|
|
@@ -80,11 +81,16 @@ class Popper extends Component {
|
|
|
80
81
|
}
|
|
81
82
|
componentDidUpdate(prevProps) {
|
|
82
83
|
var {
|
|
83
|
-
isShown
|
|
84
|
+
isShown,
|
|
85
|
+
containerClassName,
|
|
86
|
+
isMaximized
|
|
84
87
|
} = this.props;
|
|
85
88
|
var {
|
|
86
89
|
popper
|
|
87
90
|
} = this.state;
|
|
91
|
+
if (prevProps.containerClassName !== containerClassName || prevProps.isMaximized !== isMaximized) {
|
|
92
|
+
this.updateContainerClassName(containerClassName, isMaximized);
|
|
93
|
+
}
|
|
88
94
|
if (prevProps.isShown !== isShown) {
|
|
89
95
|
cancelAnimationFrame(this.rAF);
|
|
90
96
|
this.rAF = window.requestAnimationFrame(() => {
|
|
@@ -102,6 +108,12 @@ class Popper extends Component {
|
|
|
102
108
|
componentWillUnmount() {
|
|
103
109
|
this.destroyPopper(false);
|
|
104
110
|
}
|
|
111
|
+
updateContainerClassName(containerClassName, isMaximized) {
|
|
112
|
+
this.element.className = classNames(POPPER_CONTAINER_CLASS_NAME, containerClassName, {
|
|
113
|
+
maximized: isMaximized
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
105
117
|
/** Goes through an element and it's parents until the first visible element is found */
|
|
106
118
|
getVisibleElement(element) {
|
|
107
119
|
if (element == null || element.clientHeight > 0 || element.clientWidth > 0) {
|
|
@@ -314,6 +326,8 @@ class Popper extends Component {
|
|
|
314
326
|
_defineProperty(Popper, "defaultProps", {
|
|
315
327
|
options: {},
|
|
316
328
|
className: '',
|
|
329
|
+
containerClassName: '',
|
|
330
|
+
isMaximized: false,
|
|
317
331
|
timeout: ThemeExport.transitionMs,
|
|
318
332
|
onEntered() {
|
|
319
333
|
// no-op
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popper.js","names":["React","Component","ReactDOM","flushSync","classNames","CSSTransition","PopperJs","ThemeExport","SpectrumThemeProvider","jsx","_jsx","jsxs","_jsxs","POPPER_CLASS_NAME","KEEP_IN_PARENT_OPTIONS","placement","modifiers","preventOverflow","boundariesElement","fn","data","options","_PopperJs$Defaults$mo","_PopperJs$Defaults$mo2","modified","Defaults","call","styles","maxHeight","concat","document","documentElement","clientHeight","offsets","popper","top","padding","flip","enabled","Popper","constructor","props","_defineProperty","createRef","handleEnter","bind","handleExit","handleBlur","element","createElement","className","container","rAF","isShown","state","show","componentDidUpdate","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","scheduleUpdate","componentWillUnmount","destroyPopper","getVisibleElement","clientWidth","parentElement","initPopper","_defaultOptions$modif","_optionsProp$modifier","statePopper","closeOnBlur","referenceObject","current","optionsProp","keepInParent","defaultOptions","_objectSpread","body","appendChild","parent","popperEl","querySelector","HTMLElement","contains","activeElement","focus","setState","updateState","arguments","length","undefined","destroy","removeChild","e","onBlur","relatedTarget","onEntered","onExited","renderContent","children","timeout","interactive","isPortal","in","nodeRef","ref","onClick","stopPropagation","onKeyDown","key","tabIndex","role","render","dataTestId","style","display","createPortal","transitionMs"],"sources":["../../src/popper/Popper.tsx"],"sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { type PopperOptions, type ReferenceObject } from 'popper.js';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\nimport { SpectrumThemeProvider } from '../theme/SpectrumThemeProvider';\n\nconst POPPER_CLASS_NAME = 'popper';\n\nconst KEEP_IN_PARENT_OPTIONS: PopperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: {\n boundariesElement: 'scrollParent',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fn: (data, options: any) => {\n const modified = PopperJs.Defaults.modifiers?.preventOverflow?.fn?.(\n data,\n options\n );\n\n if (modified == null) {\n return data;\n }\n\n modified.styles.maxHeight = `${\n document.documentElement.clientHeight -\n data.offsets.popper.top -\n 2 * options.padding // Double padding because there is top and bottom to account for\n }px`;\n return modified ?? data;\n },\n },\n flip: {\n enabled: false,\n },\n },\n};\n\ninterface PopperProps {\n children: React.ReactNode;\n options: PopperOptions;\n className: string;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n onBlur: (e: React.FocusEvent) => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n keepInParent: boolean;\n referenceObject: ReferenceObject | null;\n 'data-testid'?: string;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static defaultProps = {\n options: {},\n className: '',\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n keepInParent: false,\n referenceObject: null,\n 'data-testid': undefined,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.element.className = 'popper-container';\n this.container = React.createRef<HTMLDivElement>();\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown } = this.props;\n const { popper } = this.state;\n\n if (prevProps.isShown !== isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n if (isShown) {\n this.show();\n } else {\n this.hide();\n }\n });\n }\n\n if (popper) {\n popper.scheduleUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n nodeRef = React.createRef<HTMLDivElement>();\n\n // This is the request animation frame handle number\n rAF: number;\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n const { popper: statePopper } = this.state;\n const { closeOnBlur, referenceObject } = this.props;\n\n if (statePopper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n const { options: optionsProp, keepInParent } = this.props;\n const defaultOptions = keepInParent\n ? KEEP_IN_PARENT_OPTIONS\n : ({\n placement: 'auto',\n modifiers: { preventOverflow: { boundariesElement: 'viewport' } },\n } satisfies PopperOptions);\n\n const options = {\n ...defaultOptions,\n ...optionsProp,\n modifiers: {\n ...defaultOptions.modifiers,\n ...optionsProp.modifiers,\n preventOverflow: {\n ...defaultOptions.modifiers?.preventOverflow,\n ...optionsProp.modifiers?.preventOverflow,\n },\n },\n } satisfies PopperOptions;\n\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n const popper = new PopperJs(\n referenceObject || parent,\n this.element,\n options\n );\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // If the current focus is not on the .popper or one of its descendants,\n // set the focus to the .popper element. This is necessary for close on\n // blur to work.\n if (closeOnBlur) {\n const popperEl = this.element.querySelector(`.${POPPER_CLASS_NAME}`);\n\n if (\n popperEl instanceof HTMLElement &&\n !popperEl.contains(document.activeElement)\n ) {\n popperEl.focus();\n }\n }\n });\n\n // Needed to make the animation work\n flushSync(() => {\n this.setState({ popper });\n });\n }\n\n destroyPopper(updateState = true): void {\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n // If component is exiting and unmounted in\n // the same frame, destroy can be called twice.\n // Check to make sure removeChild isn't called twice.\n if (document.body.contains(this.element)) {\n document.body.removeChild(this.element);\n }\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n\n // Needed to make the animation work\n flushSync(() => {\n this.setState({ show: true });\n });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n const { closeOnBlur, onBlur } = this.props;\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n onBlur?.(e);\n if (closeOnBlur) {\n this.hide();\n }\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n onExited(); // trigger any parent component waiting for exited handler\n }\n\n renderContent(): JSX.Element {\n const { className, children, timeout, interactive, closeOnBlur } =\n this.props;\n const { show } = this.state;\n\n return (\n <SpectrumThemeProvider isPortal>\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExited={this.handleExit}\n nodeRef={this.nodeRef}\n >\n <div\n ref={this.nodeRef}\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames(\n POPPER_CLASS_NAME,\n { interactive },\n className\n )}\n onBlur={this.handleBlur}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n {/* eslint-disable-next-line react/no-unknown-property */}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n </SpectrumThemeProvider>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n const { 'data-testid': dataTestId } = this.props;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n data-testid={dataTestId}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions, ReferenceObject };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Popper.js","names":["React","Component","ReactDOM","flushSync","classNames","CSSTransition","PopperJs","ThemeExport","SpectrumThemeProvider","jsx","_jsx","jsxs","_jsxs","POPPER_CLASS_NAME","POPPER_CONTAINER_CLASS_NAME","KEEP_IN_PARENT_OPTIONS","placement","modifiers","preventOverflow","boundariesElement","fn","data","options","_PopperJs$Defaults$mo","_PopperJs$Defaults$mo2","modified","Defaults","call","styles","maxHeight","concat","document","documentElement","clientHeight","offsets","popper","top","padding","flip","enabled","Popper","constructor","props","_defineProperty","createRef","handleEnter","bind","handleExit","handleBlur","element","createElement","updateContainerClassName","containerClassName","isMaximized","container","rAF","isShown","state","show","componentDidUpdate","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","scheduleUpdate","componentWillUnmount","destroyPopper","className","maximized","getVisibleElement","clientWidth","parentElement","initPopper","_defaultOptions$modif","_optionsProp$modifier","statePopper","closeOnBlur","referenceObject","current","optionsProp","keepInParent","defaultOptions","_objectSpread","body","appendChild","parent","popperEl","querySelector","HTMLElement","contains","activeElement","focus","setState","updateState","arguments","length","undefined","destroy","removeChild","e","onBlur","relatedTarget","onEntered","onExited","renderContent","children","timeout","interactive","isPortal","in","nodeRef","ref","onClick","stopPropagation","onKeyDown","key","tabIndex","role","render","dataTestId","style","display","createPortal","transitionMs"],"sources":["../../src/popper/Popper.tsx"],"sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { type PopperOptions, type ReferenceObject } from 'popper.js';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\nimport { SpectrumThemeProvider } from '../theme/SpectrumThemeProvider';\n\nconst POPPER_CLASS_NAME = 'popper';\nconst POPPER_CONTAINER_CLASS_NAME = 'popper-container';\n\nconst KEEP_IN_PARENT_OPTIONS: PopperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: {\n boundariesElement: 'scrollParent',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fn: (data, options: any) => {\n const modified = PopperJs.Defaults.modifiers?.preventOverflow?.fn?.(\n data,\n options\n );\n\n if (modified == null) {\n return data;\n }\n\n modified.styles.maxHeight = `${\n document.documentElement.clientHeight -\n data.offsets.popper.top -\n 2 * options.padding // Double padding because there is top and bottom to account for\n }px`;\n return modified ?? data;\n },\n },\n flip: {\n enabled: false,\n },\n },\n};\n\ninterface PopperProps {\n children: React.ReactNode;\n options: PopperOptions;\n className: string;\n containerClassName: string;\n isMaximized: boolean;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n onBlur: (e: React.FocusEvent) => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n keepInParent: boolean;\n referenceObject: ReferenceObject | null;\n 'data-testid'?: string;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static defaultProps = {\n options: {},\n className: '',\n containerClassName: '',\n isMaximized: false,\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n keepInParent: false,\n referenceObject: null,\n 'data-testid': undefined,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.updateContainerClassName(props.containerClassName, props.isMaximized);\n this.container = React.createRef<HTMLDivElement>();\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown, containerClassName, isMaximized } = this.props;\n const { popper } = this.state;\n\n if (\n prevProps.containerClassName !== containerClassName ||\n prevProps.isMaximized !== isMaximized\n ) {\n this.updateContainerClassName(containerClassName, isMaximized);\n }\n\n if (prevProps.isShown !== isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n if (isShown) {\n this.show();\n } else {\n this.hide();\n }\n });\n }\n\n if (popper) {\n popper.scheduleUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n nodeRef = React.createRef<HTMLDivElement>();\n\n // This is the request animation frame handle number\n rAF: number;\n\n private updateContainerClassName(\n containerClassName: string,\n isMaximized: boolean\n ): void {\n this.element.className = classNames(\n POPPER_CONTAINER_CLASS_NAME,\n containerClassName,\n {\n maximized: isMaximized,\n }\n );\n }\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n const { popper: statePopper } = this.state;\n const { closeOnBlur, referenceObject } = this.props;\n\n if (statePopper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n const { options: optionsProp, keepInParent } = this.props;\n const defaultOptions = keepInParent\n ? KEEP_IN_PARENT_OPTIONS\n : ({\n placement: 'auto',\n modifiers: { preventOverflow: { boundariesElement: 'viewport' } },\n } satisfies PopperOptions);\n\n const options = {\n ...defaultOptions,\n ...optionsProp,\n modifiers: {\n ...defaultOptions.modifiers,\n ...optionsProp.modifiers,\n preventOverflow: {\n ...defaultOptions.modifiers?.preventOverflow,\n ...optionsProp.modifiers?.preventOverflow,\n },\n },\n } satisfies PopperOptions;\n\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n const popper = new PopperJs(\n referenceObject || parent,\n this.element,\n options\n );\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // If the current focus is not on the .popper or one of its descendants,\n // set the focus to the .popper element. This is necessary for close on\n // blur to work.\n if (closeOnBlur) {\n const popperEl = this.element.querySelector(`.${POPPER_CLASS_NAME}`);\n\n if (\n popperEl instanceof HTMLElement &&\n !popperEl.contains(document.activeElement)\n ) {\n popperEl.focus();\n }\n }\n });\n\n // Needed to make the animation work\n flushSync(() => {\n this.setState({ popper });\n });\n }\n\n destroyPopper(updateState = true): void {\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n // If component is exiting and unmounted in\n // the same frame, destroy can be called twice.\n // Check to make sure removeChild isn't called twice.\n if (document.body.contains(this.element)) {\n document.body.removeChild(this.element);\n }\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n\n // Needed to make the animation work\n flushSync(() => {\n this.setState({ show: true });\n });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n const { closeOnBlur, onBlur } = this.props;\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n onBlur?.(e);\n if (closeOnBlur) {\n this.hide();\n }\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n onExited(); // trigger any parent component waiting for exited handler\n }\n\n renderContent(): JSX.Element {\n const { className, children, timeout, interactive, closeOnBlur } =\n this.props;\n const { show } = this.state;\n\n return (\n <SpectrumThemeProvider isPortal>\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExited={this.handleExit}\n nodeRef={this.nodeRef}\n >\n <div\n ref={this.nodeRef}\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames(\n POPPER_CLASS_NAME,\n { interactive },\n className\n )}\n onBlur={this.handleBlur}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n {/* eslint-disable-next-line react/no-unknown-property */}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n </SpectrumThemeProvider>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n const { 'data-testid': dataTestId } = this.props;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n data-testid={dataTestId}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions, ReferenceObject };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AlertDialog, type SpectrumAlertDialogProps as AlertDialogProps, ContextualHelp, type SpectrumContextualHelpProps as ContextualHelpProps, Dialog, type SpectrumDialogProps as DialogProps, DialogContainer, type SpectrumDialogContainerProps as DialogContainerProps, DialogTrigger, type SpectrumDialogTriggerProps as DialogTriggerProps, } from '@adobe/react-spectrum';
|
|
1
|
+
export { AlertDialog, type SpectrumAlertDialogProps as AlertDialogProps, ContextualHelp, type SpectrumContextualHelpProps as ContextualHelpProps, Dialog, type SpectrumDialogClose, type SpectrumDialogProps as DialogProps, DialogContainer, type SpectrumDialogContainerProps as DialogContainerProps, DialogTrigger, type SpectrumDialogTriggerProps as DialogTriggerProps, } from '@adobe/react-spectrum';
|
|
2
2
|
//# sourceMappingURL=overlays.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/spectrum/overlays.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,wBAAwB,IAAI,gBAAgB,EACjD,cAAc,EACd,KAAK,2BAA2B,IAAI,mBAAmB,EACvD,MAAM,EACN,KAAK,mBAAmB,IAAI,WAAW,EACvC,eAAe,EACf,KAAK,4BAA4B,IAAI,oBAAoB,EACzD,aAAa,EACb,KAAK,0BAA0B,IAAI,kBAAkB,GACtD,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/spectrum/overlays.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,wBAAwB,IAAI,gBAAgB,EACjD,cAAc,EACd,KAAK,2BAA2B,IAAI,mBAAmB,EACvD,MAAM,EACN,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,IAAI,WAAW,EACvC,eAAe,EACf,KAAK,4BAA4B,IAAI,oBAAoB,EACzD,aAAa,EACb,KAAK,0BAA0B,IAAI,kBAAkB,GACtD,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.js","names":["AlertDialog","ContextualHelp","Dialog","DialogContainer","DialogTrigger"],"sources":["../../src/spectrum/overlays.ts"],"sourcesContent":["export {\n AlertDialog,\n type SpectrumAlertDialogProps as AlertDialogProps,\n ContextualHelp,\n type SpectrumContextualHelpProps as ContextualHelpProps,\n Dialog,\n type SpectrumDialogProps as DialogProps,\n DialogContainer,\n type SpectrumDialogContainerProps as DialogContainerProps,\n DialogTrigger,\n type SpectrumDialogTriggerProps as DialogTriggerProps,\n} from '@adobe/react-spectrum';\n"],"mappings":"AAAA,SACEA,WAAW,EAEXC,cAAc,EAEdC,MAAM,
|
|
1
|
+
{"version":3,"file":"overlays.js","names":["AlertDialog","ContextualHelp","Dialog","DialogContainer","DialogTrigger"],"sources":["../../src/spectrum/overlays.ts"],"sourcesContent":["export {\n AlertDialog,\n type SpectrumAlertDialogProps as AlertDialogProps,\n ContextualHelp,\n type SpectrumContextualHelpProps as ContextualHelpProps,\n Dialog,\n type SpectrumDialogClose,\n type SpectrumDialogProps as DialogProps,\n DialogContainer,\n type SpectrumDialogContainerProps as DialogContainerProps,\n DialogTrigger,\n type SpectrumDialogTriggerProps as DialogTriggerProps,\n} from '@adobe/react-spectrum';\n"],"mappings":"AAAA,SACEA,WAAW,EAEXC,cAAc,EAEdC,MAAM,EAGNC,eAAe,EAEfC,aAAa,QAER,uBAAuB","ignoreList":[]}
|
|
@@ -33,14 +33,14 @@ export { useStyleProps, baseStyleProps, viewStyleProps, } from '@react-spectrum/
|
|
|
33
33
|
* }
|
|
34
34
|
*/
|
|
35
35
|
export declare const themeDHDefault: {
|
|
36
|
-
global: import("@react-types/provider").CSSModule | undefined;
|
|
36
|
+
global: import("@adobe/react-spectrum/dist/types/src/provider/types").CSSModule | undefined;
|
|
37
37
|
light: {
|
|
38
38
|
[x: string]: string;
|
|
39
39
|
};
|
|
40
40
|
dark: {
|
|
41
41
|
[x: string]: string;
|
|
42
42
|
};
|
|
43
|
-
medium: import("@react-types/provider").CSSModule | undefined;
|
|
44
|
-
large: import("@react-types/provider").CSSModule | undefined;
|
|
43
|
+
medium: import("@adobe/react-spectrum/dist/types/src/provider/types").CSSModule | undefined;
|
|
44
|
+
large: import("@adobe/react-spectrum/dist/types/src/provider/types").CSSModule | undefined;
|
|
45
45
|
};
|
|
46
46
|
//# sourceMappingURL=themeUtils.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/components",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0",
|
|
4
4
|
"description": "Deephaven React component library",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"build:theme": "sass --embed-sources --style=compressed --load-path=../../node_modules ./src/theme:./dist/theme"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@adobe/react-spectrum": "3.
|
|
27
|
+
"@adobe/react-spectrum": "3.47.0",
|
|
28
28
|
"@deephaven/icons": "^1.2.0",
|
|
29
29
|
"@deephaven/log": "^1.8.0",
|
|
30
|
-
"@deephaven/react-hooks": "^1.
|
|
30
|
+
"@deephaven/react-hooks": "^1.21.1",
|
|
31
31
|
"@deephaven/utils": "^1.10.0",
|
|
32
32
|
"@fontsource/fira-mono": "5.0.13",
|
|
33
33
|
"@fontsource/fira-sans": "5.0.20",
|
|
@@ -35,20 +35,20 @@
|
|
|
35
35
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
36
36
|
"@hello-pangea/dnd": "^18.0.1",
|
|
37
37
|
"@internationalized/date": "^3.5.5",
|
|
38
|
-
"@react-aria/focus": "
|
|
39
|
-
"@react-aria/i18n": "
|
|
40
|
-
"@react-spectrum/label": "
|
|
41
|
-
"@react-spectrum/overlays": "
|
|
42
|
-
"@react-spectrum/theme-default": "
|
|
43
|
-
"@react-spectrum/toast": "
|
|
44
|
-
"@react-spectrum/utils": "
|
|
45
|
-
"@react-stately/overlays": "
|
|
46
|
-
"@react-stately/utils": "
|
|
47
|
-
"@react-types/combobox": "3.
|
|
48
|
-
"@react-types/radio": "
|
|
49
|
-
"@react-types/shared": "
|
|
50
|
-
"@react-types/textfield": "
|
|
51
|
-
"@spectrum-icons/ui": "
|
|
38
|
+
"@react-aria/focus": "3.22.0",
|
|
39
|
+
"@react-aria/i18n": "3.13.0",
|
|
40
|
+
"@react-spectrum/label": "3.17.0",
|
|
41
|
+
"@react-spectrum/overlays": "5.10.0",
|
|
42
|
+
"@react-spectrum/theme-default": "3.6.0",
|
|
43
|
+
"@react-spectrum/toast": "3.2.0",
|
|
44
|
+
"@react-spectrum/utils": "3.13.0",
|
|
45
|
+
"@react-stately/overlays": "3.7.0",
|
|
46
|
+
"@react-stately/utils": "3.12.0",
|
|
47
|
+
"@react-types/combobox": "3.15.0",
|
|
48
|
+
"@react-types/radio": "3.10.0",
|
|
49
|
+
"@react-types/shared": "3.34.0",
|
|
50
|
+
"@react-types/textfield": "3.13.0",
|
|
51
|
+
"@spectrum-icons/ui": "3.7.0",
|
|
52
52
|
"bootstrap": "4.6.2",
|
|
53
53
|
"classnames": "^2.3.1",
|
|
54
54
|
"event-target-shim": "^6.0.2",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"publishConfig": {
|
|
86
86
|
"access": "public"
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "caeabb02f0abc824a07c505d0a7ca8693dd63cbb"
|
|
89
89
|
}
|