@vuu-ui/vuu-ui-controls 0.8.41 → 0.8.43
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/cjs/expando-input/ExpandoInput.css.js +6 -0
- package/cjs/expando-input/ExpandoInput.css.js.map +1 -0
- package/cjs/expando-input/ExpandoInput.js +9 -0
- package/cjs/expando-input/ExpandoInput.js.map +1 -1
- package/cjs/tabstrip/Tab.css.js +6 -0
- package/cjs/tabstrip/Tab.css.js.map +1 -0
- package/cjs/tabstrip/Tab.js +9 -0
- package/cjs/tabstrip/Tab.js.map +1 -1
- package/cjs/tabstrip/Tabstrip.css.js +6 -0
- package/cjs/tabstrip/Tabstrip.css.js.map +1 -0
- package/cjs/tabstrip/Tabstrip.js +9 -0
- package/cjs/tabstrip/Tabstrip.js.map +1 -1
- package/esm/expando-input/ExpandoInput.css.js +4 -0
- package/esm/expando-input/ExpandoInput.css.js.map +1 -0
- package/esm/expando-input/ExpandoInput.js +9 -0
- package/esm/expando-input/ExpandoInput.js.map +1 -1
- package/esm/tabstrip/Tab.css.js +4 -0
- package/esm/tabstrip/Tab.css.js.map +1 -0
- package/esm/tabstrip/Tab.js +9 -0
- package/esm/tabstrip/Tab.js.map +1 -1
- package/esm/tabstrip/Tabstrip.css.js +4 -0
- package/esm/tabstrip/Tabstrip.css.js.map +1 -0
- package/esm/tabstrip/Tabstrip.js +9 -0
- package/esm/tabstrip/Tabstrip.js.map +1 -1
- package/package.json +7 -7
- package/types/expando-input/ExpandoInput.d.ts +0 -1
- package/types/tabstrip/Tab.d.ts +0 -1
- package/types/tabstrip/Tabstrip.d.ts +0 -1
- package/cjs/expando-input/ExpandoInput.css +0 -64
- package/cjs/tabstrip/Tab.css +0 -159
- package/cjs/tabstrip/Tabstrip.css +0 -135
- package/esm/expando-input/ExpandoInput.css +0 -64
- package/esm/tabstrip/Tab.css +0 -159
- package/esm/tabstrip/Tabstrip.css +0 -135
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var expandoInputCss = ".vuuExpandoInput {\n\n --salt-editable-secondary-background: white;\n --expandoInput-height: var(--vuuExpandoInput-height, 26px);\n --expandoInput-padding: var(--vuuExpandoInput-padding, 6px);\n\n --saltInput-height: var(--expandoInput-height);\n --saltInput-minHeight: var(--saltInput-height);\n --saltInput-minWidth: var(--vuuExpandoInput-minWidth, 8px);\n \n border: var(--vuuExpandoInput-border, none);\n border-radius: var(--vuuExpandoInput-borderRadius, 0);\n color: inherit;\n cursor: default;\n display: inline-block;\n font-size: var(--salt-text-fontSize);\n height: var(--expandoInput-height);\n min-width: calc(var(--saltInput-minWidth) + 2 * var(--expandoInput-padding));\n outline: none;\n padding: 0 var(--expandoInput-padding);\n position: relative;\n\n}\n\n.vuuExpandoInput:before {\n content: attr(data-text);\n display: block;\n height: 0px;\n visibility: hidden;\n white-space: pre-wrap;\n }\n .vuuExpandoInput-error {\n border-color: var(--vuu-color-red-50);\n }\n\n .vuuExpandoInput .saltInput {\n font-weight: var(--salt-text-fontWeight);\n left: var(--expandoInput-padding, 0);\n padding: 0;\n outline-style: none;\n position: absolute;\n right: var(--expandoInput-padding, 0);\n top: var(--vuuExpandoInput-top, 2px);\n width: auto;\n }\n \n .vuuExpandoInput .saltInput-activationIndicator {\n display: none;\n }\n \n .vuuExpandoInput-input {\n background-color: transparent;\n border: none;\n box-sizing: content-box;\n display: block;\n flex: 1;\n font: inherit;\n height: 20px;\n margin:0;\n min-width:0;\n outline: none;\n padding: 0;\n }\n ";
|
|
4
|
+
|
|
5
|
+
module.exports = expandoInputCss;
|
|
6
|
+
//# sourceMappingURL=ExpandoInput.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpandoInput.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var cx = require('clsx');
|
|
5
|
+
var styles = require('@salt-ds/styles');
|
|
6
|
+
var window = require('@salt-ds/window');
|
|
5
7
|
var React = require('react');
|
|
6
8
|
var VuuInput = require('../vuu-input/VuuInput.js');
|
|
9
|
+
var ExpandoInput$1 = require('./ExpandoInput.css.js');
|
|
7
10
|
|
|
8
11
|
const classBase = "vuuExpandoInput";
|
|
9
12
|
const noop = () => void 0;
|
|
@@ -15,6 +18,12 @@ const ExpandoInput = React.forwardRef(function ExpandoInput2({
|
|
|
15
18
|
onCommit = noop,
|
|
16
19
|
...props
|
|
17
20
|
}, forwardedRef) {
|
|
21
|
+
const targetWindow = window.useWindow();
|
|
22
|
+
styles.useComponentCssInjection({
|
|
23
|
+
testId: "vuu-expando-input",
|
|
24
|
+
css: ExpandoInput$1,
|
|
25
|
+
window: targetWindow
|
|
26
|
+
});
|
|
18
27
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
19
28
|
"div",
|
|
20
29
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpandoInput.js","sources":["../../src/expando-input/ExpandoInput.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { ForwardedRef, forwardRef } from \"react\";\nimport { VuuInput, VuuInputProps } from \"../vuu-input\";\n\nimport \"./ExpandoInput.css\";\n\nconst classBase = \"vuuExpandoInput\";\n\nconst noop = () => undefined;\n\nexport interface ExpandoInputProps extends Omit<VuuInputProps, \"onCommit\"> {\n onCommit?: VuuInputProps[\"onCommit\"];\n}\n\nexport const ExpandoInput = forwardRef(function ExpandoInput(\n {\n className: classNameProp,\n errorMessage,\n value,\n inputProps,\n onCommit = noop,\n ...props\n }: ExpandoInputProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-error`]: errorMessage,\n })}\n data-text={value}\n >\n <VuuInput\n {...props}\n errorMessage={errorMessage}\n inputProps={{ ...inputProps, className: `${classBase}-input` }}\n onCommit={onCommit}\n ref={forwardedRef}\n style={{ padding: 0 }}\n textAlign=\"left\"\n value={value}\n variant=\"secondary\"\n />\n </div>\n );\n});\n"],"names":["forwardRef","ExpandoInput","jsx","VuuInput"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExpandoInput.js","sources":["../../src/expando-input/ExpandoInput.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ForwardedRef, forwardRef } from \"react\";\nimport { VuuInput, VuuInputProps } from \"../vuu-input\";\n\nimport expandoInputCss from \"./ExpandoInput.css\";\n\nconst classBase = \"vuuExpandoInput\";\n\nconst noop = () => undefined;\n\nexport interface ExpandoInputProps extends Omit<VuuInputProps, \"onCommit\"> {\n onCommit?: VuuInputProps[\"onCommit\"];\n}\n\nexport const ExpandoInput = forwardRef(function ExpandoInput(\n {\n className: classNameProp,\n errorMessage,\n value,\n inputProps,\n onCommit = noop,\n ...props\n }: ExpandoInputProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-expando-input\",\n css: expandoInputCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-error`]: errorMessage,\n })}\n data-text={value}\n >\n <VuuInput\n {...props}\n errorMessage={errorMessage}\n inputProps={{ ...inputProps, className: `${classBase}-input` }}\n onCommit={onCommit}\n ref={forwardedRef}\n style={{ padding: 0 }}\n textAlign=\"left\"\n value={value}\n variant=\"secondary\"\n />\n </div>\n );\n});\n"],"names":["forwardRef","ExpandoInput","useWindow","useComponentCssInjection","expandoInputCss","jsx","VuuInput"],"mappings":";;;;;;;;;;AAQA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAElB,MAAM,OAAO,MAAM,KAAA,CAAA,CAAA;AAMN,MAAA,YAAA,GAAeA,gBAAW,CAAA,SAASC,aAC9C,CAAA;AAAA,EACE,SAAW,EAAA,aAAA;AAAA,EACX,YAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAW,GAAA,IAAA;AAAA,EACX,GAAG,KAAA;AACL,CAAA,EACA,YACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,cAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,aAAe,EAAA;AAAA,QACtC,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,YAAA;AAAA,OACzB,CAAA;AAAA,MACD,WAAW,EAAA,KAAA;AAAA,MAEX,QAAA,kBAAAA,cAAA;AAAA,QAACC,iBAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,YAAA;AAAA,UACA,YAAY,EAAE,GAAG,YAAY,SAAW,EAAA,CAAA,EAAG,SAAS,CAAS,MAAA,CAAA,EAAA;AAAA,UAC7D,QAAA;AAAA,UACA,GAAK,EAAA,YAAA;AAAA,UACL,KAAA,EAAO,EAAE,OAAA,EAAS,CAAE,EAAA;AAAA,UACpB,SAAU,EAAA,MAAA;AAAA,UACV,KAAA;AAAA,UACA,OAAQ,EAAA,WAAA;AAAA,SAAA;AAAA,OACV;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tabCss = "/* Class applied to root Tab element */\n.vuuTab {\n --saltEditableLabel-padding: 0;\n --saltEditableLabel-height: calc(var(--tabstrip-height) - 2px);\n --saltInputLegacy-minWidth: 4em;\n --saltEditableLabel-top: 2px;\n\n --tab-background: var(--vuuTab-background, transparent);\n --tab-cursor: pointer;\n --tab-position: relative;\n\n\n align-items: center;\n align-self: stretch;\n background: var(--tab-background);\n border-color: var(--vuuTab-borderColor, transparent);\n border-style: var(--vuuTab-borderStyle, none);\n border-width: var(--vuuTab-borderWidth, 0px);\n border-radius: var(--vuuTab-borderRadius, 0);\n color: var(--salt-content-primary-foreground);\n cursor: var(--vuuTab-cursor, var(--tab-cursor));\n display: var(--tabstrip-display);\n gap: 8px;\n height: var(--vuuTabHeight, var(--tab-height));\n letter-spacing: var(--vuuTab-letterSpacing, var(--tab-letterSpacing, 0));\n margin: 0 var(--tab-spacing) 0 0;\n min-width: var(--vuuTab-minWidth, 40px);\n outline: none;\n padding: var(--vuuTab-padding, 0 var(--salt-spacing-200));\n position: var(--vuuTab-position, var(--tab-position));\n user-select: none;\n width: var(--tab-width)\n}\n\n.vuuTab-selected {\n background: var(--vuuTab-background-selected, var(--tab-background));\n color: var(--salt-content-primary-foreground);\n font-weight: var(--salt-navigable-fontWeight-active);\n}\n\n/* main content aria of Tab */\n.vuuTab-main {\n align-items: center;;\n border: none;\n color: inherit;\n cursor: inherit;\n display: flex;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n height: calc(var(--tab-height) - var(--tab-thumb-height));\n margin-bottom: var(--tab-thumb-height);\n outline: none;\n position: relative;\n}\n\n.vuuTab-closeable .vuuTab-main {\n border-right: solid transparent var(--salt-size-unit);\n}\n\n.vuuTab .vuuTab-closeButton {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* the close Button on a closeable Tab*/\n.vuuTab-close-icon {\n display: none;\n}\n\n.salt-density-touch .vuuTab-close-icon,\n.salt-density-low .vuuTab-close-icon {\n display: block;\n}\n\n.salt-density-touch .vuuTab-close-icon-small,\n.salt-density-low .vuuTab-close-icon-small {\n display: none;\n}\n\n.vuuTab .vuuTab-text {\n display: inline-block;\n position: relative;\n overflow: hidden;\n text-align: var(--salt-text-textAlign-embedded);\n text-overflow: ellipsis;\n top: var(--vuuTab-top, var(--tab-top, auto));\n white-space: nowrap;\n /* ensure content sits above focus ring */\n z-index: var(--salt-zIndex-default);\n}\n\n.vuuTab .vuuTab-text:before {\n height: 0;\n content: attr(data-text);\n display: block;\n visibility: hidden;\n font-weight: var(--salt-navigable-fontWeight-active);\n}\n\n/* FIXME: these are all focusVisible styles, but with a bespoke inset */\n.vuuTab-editing:after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 2px;\n outline-color: var(--salt-focused-outlineColor);\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-offset: -2px;\n}\n\n.vuuTab.vuuFocusVisible {\n background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));\n outline-color: var(--vuuTab-focusVisible-color, var(--salt-focused-outlineColor));\n outline-style: dashed;\n outline-width: 1px;\n outline-offset: -1px;\n}\n\n.vuuTab:before {\n content: var(--tab-before-content, none);\n content: \"\";\n background: var(--tab-before-background);\n height: var(--tab-before-height);\n inset: var(--tab-before-inset);\n position: absolute;\n width: var(--tab-before-width);\n z-index: 1;\n}\n\n.vuuTabstrip-draggingTab .vuuTab-selected:before {\n --tab-before-content: \"\";\n --tab-before-background: var(--salt-navigable-indicator-color-active);\n --tab-before-height: var(--tab-thumb-height);\n --tab-before-inset: var(--tab-activationIndicator-inset);\n --tab-before-width: var(--tab-activationIndicator-thumb-width);\n}\n\n\n.vuuTab-selected:before {\n --tab-before-content: \"\";\n background: var(--salt-navigable-indicator-active);\n height: var(--tab-thumb-height);\n position: absolute;\n left: var(--tab-thumb-left);\n bottom: 0px; \n top: var(--tab-thumb-top, auto);\n transition: var(--tab-thumb-transition, none);\n width: var(--tab-thumb-width, 100%);\n}\n\n.vuuTab:hover:not(.vuuTab-closeHover, .vuuTab-selected) {\n background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));\n}\n\n";
|
|
4
|
+
|
|
5
|
+
module.exports = tabCss;
|
|
6
|
+
//# sourceMappingURL=Tab.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tab.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/cjs/tabstrip/Tab.js
CHANGED
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var core = require('@salt-ds/core');
|
|
5
|
+
var styles = require('@salt-ds/styles');
|
|
6
|
+
var window = require('@salt-ds/window');
|
|
5
7
|
var cx = require('clsx');
|
|
6
8
|
var React = require('react');
|
|
7
9
|
var EditableLabel = require('../editable-label/EditableLabel.js');
|
|
8
10
|
var TabMenu = require('./TabMenu.js');
|
|
11
|
+
var Tab$1 = require('./Tab.css.js');
|
|
9
12
|
|
|
10
13
|
const classBase = "vuuTab";
|
|
11
14
|
const noop = () => void 0;
|
|
@@ -38,6 +41,12 @@ const Tab = React.forwardRef(function Tab2({
|
|
|
38
41
|
if (showMenuButton && typeof onMenuAction !== "function") {
|
|
39
42
|
throw Error("Tab onMenuAction must be provided if showMenuButton is set");
|
|
40
43
|
}
|
|
44
|
+
const targetWindow = window.useWindow();
|
|
45
|
+
styles.useComponentCssInjection({
|
|
46
|
+
testId: "vuu-tabstrip-tab",
|
|
47
|
+
css: Tab$1,
|
|
48
|
+
window: targetWindow
|
|
49
|
+
});
|
|
41
50
|
const rootRef = React.useRef(null);
|
|
42
51
|
const editableRef = React.useRef(null);
|
|
43
52
|
const setForkRef = core.useForkRef(ref, rootRef);
|
package/cjs/tabstrip/Tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","sources":["../../src/tabstrip/Tab.tsx"],"sourcesContent":["// TODO close button needs to be a button. Hence tab needs to include 2 buttons\nimport { useForkRef } from \"@salt-ds/core\";\nimport
|
|
1
|
+
{"version":3,"file":"Tab.js","sources":["../../src/tabstrip/Tab.tsx"],"sourcesContent":["// TODO close button needs to be a button. Hence tab needs to include 2 buttons\nimport { MenuActionHandler } from \"@vuu-ui/vuu-data-types\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n FocusEvent,\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n useCallback,\n useRef,\n} from \"react\";\nimport { EditableLabel, EditableLabelProps } from \"../editable-label\";\nimport { TabMenu } from \"./TabMenu\";\nimport { TabProps } from \"./TabsTypes\";\n\nimport tabCss from \"./Tab.css\";\n\nconst classBase = \"vuuTab\";\n\nconst noop = () => undefined;\n\nexport const Tab = forwardRef(function Tab(\n {\n ariaControls,\n children,\n className,\n closeable = false,\n dragging,\n editable = false,\n editing,\n focusVisible,\n index = -1,\n label,\n location,\n onClick,\n onClose,\n onEnterEditMode = noop,\n onExitEditMode = noop,\n onFocus: onFocusProp,\n onKeyUp,\n onMenuAction,\n onMenuClose,\n orientation,\n selected,\n showMenuButton = closeable || editable || Boolean(location),\n tabIndex,\n ...props\n }: TabProps,\n ref: ForwardedRef<HTMLDivElement>\n): ReactElement<TabProps> {\n if (showMenuButton && typeof onMenuAction !== \"function\") {\n throw Error(\"Tab onMenuAction must be provided if showMenuButton is set\");\n }\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-tabstrip-tab\",\n css: tabCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const editableRef = useRef<HTMLDivElement>(null);\n const setForkRef = useForkRef(ref, rootRef);\n const handleClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n if (!editing) {\n e.preventDefault();\n onClick?.(e, index);\n }\n },\n [editing, index, onClick]\n );\n\n const handleOnExitEditMode: EditableLabelProps[\"onExitEditMode\"] = (\n originalValue = \"\",\n editedValue = \"\",\n allowDeactivation = true\n ) => onExitEditMode(originalValue, editedValue, allowDeactivation, index);\n\n const handleKeyUp = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"Backspace\":\n case \"Delete\":\n if (closeable) {\n e.stopPropagation();\n onClose && onClose(index);\n }\n break;\n default:\n onKeyUp && onKeyUp(e, index);\n }\n };\n\n const getLabel = () => {\n if (editable) {\n return (\n <EditableLabel\n editing={editing}\n defaultValue={label}\n // Create a fresh instance after each edit, so it can be uncontrolled ...\n key={label}\n onEnterEditMode={onEnterEditMode}\n onExitEditMode={handleOnExitEditMode}\n ref={editableRef}\n />\n );\n } else {\n return label;\n }\n };\n\n const handleFocus = (evt: FocusEvent<HTMLElement>) => {\n if (editableRef.current) {\n const editable = editableRef.current as HTMLElement;\n const input = editable.querySelector(\n \".vuuEditableLabel-input\"\n ) as HTMLInputElement;\n input?.focus();\n }\n onFocusProp?.(evt);\n };\n\n return (\n <div\n {...props}\n aria-controls={ariaControls}\n aria-selected={selected}\n className={cx(classBase, className, {\n [`${classBase}-closeable`]: closeable,\n \"vuuDraggable-dragAway\": dragging,\n [`${classBase}-editing`]: editing,\n [`${classBase}-selected`]: selected || undefined,\n [`${classBase}-vertical`]: orientation === \"vertical\",\n [`vuuFocusVisible`]: focusVisible,\n })}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyUp={handleKeyUp}\n ref={setForkRef}\n role=\"tab\"\n tabIndex={tabIndex}\n >\n <div className={`${classBase}-main`}>\n <span\n className={`${classBase}-text`}\n // data-text is important, it determines the width of the tab. A pseudo\n // element assigns data-text as content. This is styled as selected tab\n // text. That means width of tab always corresponds to its selected state,\n // so tabs do not change size when selected (ie when the text is bolded).\n // Do not include if we have editable content, EditableLabel will determine\n // the width\n data-text={editable ? undefined : label}\n >\n {children ?? getLabel()}\n </span>\n </div>\n {showMenuButton ? (\n <TabMenu\n allowClose={closeable}\n allowRename={editable}\n controlledComponentId={ariaControls}\n controlledComponentTitle={label}\n location={location}\n onMenuAction={onMenuAction as MenuActionHandler}\n onMenuClose={onMenuClose}\n index={index}\n />\n ) : null}\n </div>\n );\n});\n"],"names":["forwardRef","Tab","useWindow","useComponentCssInjection","tabCss","useRef","useForkRef","useCallback","jsx","EditableLabel","editable","jsxs","TabMenu"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tabstripCss = "/* Component class applied to the root element */\n.vuuTabstrip {\n --vuuOverflowContainer-background: transparent;\n --vuuOverflowContainer-borderColor: var(--salt-container-primary-borderColor);\n --vuuOverflowContainer-width: var(--tabstrip-width);\n --tabstrip-dragging-display: none;\n --tabstrip-display: inline-flex;\n --tabstrip-background: transparent;\n\n align-self: var(--saltTabs-tabstrip-alignSelf, stretch);\n display: flex;\n font-size: var(--salt-text-fontSize);\n font-weight: var(--vuuTabstrip-fontWeight, var(--salt-text-fontWeight));\n min-width: 28px;\n position: relative;\n overflow: visible;\n}\n\n/* Tabstrip orientation is horizontal */\n.vuuTabstrip.vuuOrientation-horizontal {\n --vuuOverflowContainer-borderStyle: none none solid none;\n --vuuOverflowContainer-borderBottomWidth: 1px;\n\n --tabstrip-height: var(--vuuTabstrip-height, var(--overflow-wrapper-height,28px));\n --tabstrip-width: var(--vuuTabstrip-width, 100%);\n --tab-height: var(--tabstrip-height);\n --tab-width: auto;\n --tab-thumb-height: 2px;\n --tab-thumb-left: var(--tab-thumb-offset, 0);\n --tab-thumb-top: auto;\n --tab-thumb-width: var(--tab-thumb-size, 100%);\n align-items: flex-start;\n /* border-bottom: var(--vuuTabstrip-borderBottom, solid 1px var(--salt-container-primary-borderColor)); */\n}\n\n/* Tabstrip orientation is vertical */\n.vuuTabstrip.vuuOrientation-vertical {\n --tabstrip-height: var(--vuuTabstrip-height, 100%);\n --tabstrip-width: var(--vuuTabstrip-width, 100px);\n --tab-height: 50px;\n --tab-width: 100%;\n --tab-thumb-height: 0;\n --tab-thumb-left: 0;\n --tab-thumb-top: var(--tab-thumb-offset, 0);\n --tab-thumb-width: 2px;\n\n align-self: flex-start;\n display: inline-flex;\n}\n\n.vuuTabstrip-draggingTab .vuuTab {\n pointer-events: none;\n}\n\n\n.vuuTabstrip-overflowMenu.vuuDropdown {\n --saltIcon-margin: 2px 0 0 0px;\n}\n\n.vuuTabstrip-overflowMenu-open {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --saltButton-text-color: var(--salt-actionable-secondary-text-color-active);\n}\n\n.vuuTabstrip-overflowMenu-open .saltButton {\n --saltIcon-color: var(--salt-actionable-secondary-foreground-active);\n}\n\n.vuuTabstrip-inner {\n width: 100%;\n align-items: center;\n display: flex;\n flex-basis: auto;\n flex-grow: 0;\n flex-shrink: 1;\n flex-wrap: wrap;\n justify-content: flex-start;\n line-height: var(--tabstrip-height);\n}\n\n.vuuTabstrip.vuuOrientation-vertical .vuuTabstrip-inner {\n flex-direction: column;\n height: auto;\n}\n\n.vuuTabstrip-centered .vuuTabstrip-inner {\n justify-content: center;\n}\n\n/* Styling applied to Draggable wrapper when used to drag a Tab */\n.vuuDraggable[class*=\"vuuTabstrip\"] {\n --tabstrip-display: flex;\n --tabstrip-height: 100%;\n --tabstrip-dragging-display: block;\n\n --tabs-tab-background: var(--salt-navigable-primary-background-hover);\n --tabs-tab-before-content: \"\";\n --tabs-tab-before-background: var(--salt-navigable-indicator-hover);\n --tabs-tab-before-height: var(--tab-activationIndicator-thumb-height);\n --tabs-tab-before-inset: var(--tab-activationIndicator-inset);\n --tabs-tab-before-width: var(--tab-activationIndicator-thumb-width);\n --tabs-tab-cursor: var(--salt-draggable-grab-cursor-active);\n --tabs-tab-position: static;\n\n font-size: 12px;\n}\n\n.vuuDraggable-tabstrip-horizontal {\n --overflow-item-height: var(--tabstrip-height);\n --tab-thumb-height: 2px;\n --tab-thumb-left: 0px;\n --tabstrip-display: inline-flex;\n --tabstrip-height: 28px;\n line-height: var(--tabstrip-height);\n}\n\n\n.vuuDraggable[class*=\"tabstrip\"] .vuuTab[aria-selected=\"true\"]:before {\n --tabs-tab-before-background: var(--salt-navigable-indicator-active);\n}\n\n/* [data-overflowed] {\n order: 99;\n visibility: hidden;\n} */\n\n.vuuTabstrip-overflowMenu-dropTarget:after {\n background: var(--salt-selectable-background-selected);\n content: \"\";\n position: absolute;\n height: 2px;\n left: 0;\n right: 0;\n bottom: 0;\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = tabstripCss;
|
|
6
|
+
//# sourceMappingURL=Tabstrip.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabstrip.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/cjs/tabstrip/Tabstrip.js
CHANGED
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
|
+
var styles = require('@salt-ds/styles');
|
|
7
|
+
var window = require('@salt-ds/window');
|
|
6
8
|
var cx = require('clsx');
|
|
7
9
|
var useTabstrip = require('./useTabstrip.js');
|
|
8
10
|
var IconButton = require('../icon-button/IconButton.js');
|
|
9
11
|
var OverflowContainer = require('../overflow-container/OverflowContainer.js');
|
|
12
|
+
var Tabstrip$1 = require('./Tabstrip.css.js');
|
|
10
13
|
|
|
11
14
|
const classBase = "vuuTabstrip";
|
|
12
15
|
const Tabstrip = ({
|
|
@@ -33,6 +36,12 @@ const Tabstrip = ({
|
|
|
33
36
|
variant = "secondary",
|
|
34
37
|
...htmlAttributes
|
|
35
38
|
}) => {
|
|
39
|
+
const targetWindow = window.useWindow();
|
|
40
|
+
styles.useComponentCssInjection({
|
|
41
|
+
testId: "vuu-tabstrip",
|
|
42
|
+
css: Tabstrip$1,
|
|
43
|
+
window: targetWindow
|
|
44
|
+
});
|
|
36
45
|
const rootRef = React.useRef(null);
|
|
37
46
|
const {
|
|
38
47
|
activeTabIndex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabstrip.js","sources":["../../src/tabstrip/Tabstrip.tsx"],"sourcesContent":["import { asReactElements, useId } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport React, { useMemo, useRef } from \"react\";\nimport { TabProps, TabstripProps } from \"./TabsTypes\";\nimport { useTabstrip } from \"./useTabstrip\";\
|
|
1
|
+
{"version":3,"file":"Tabstrip.js","sources":["../../src/tabstrip/Tabstrip.tsx"],"sourcesContent":["import { asReactElements, useId } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport React, { useMemo, useRef } from \"react\";\nimport { TabProps, TabstripProps } from \"./TabsTypes\";\nimport { useTabstrip } from \"./useTabstrip\";\nimport { IconButton } from \"../icon-button\";\nimport { OverflowContainer } from \"../overflow-container\";\n\nimport tabstripCss from \"./Tabstrip.css\";\n\nconst classBase = \"vuuTabstrip\";\n\nexport const Tabstrip = ({\n activeTabIndex: activeTabIndexProp,\n allowAddTab,\n allowCloseTab,\n allowDragDrop = false,\n allowRenameTab = false,\n animateSelectionThumb = false,\n children,\n className: classNameProp,\n id: idProp,\n keyBoardActivation = \"manual\",\n location,\n onActiveChange,\n onAddTab,\n onCloseTab,\n onExitEditMode,\n onMoveTab,\n orientation = \"horizontal\",\n showTabMenuButton,\n style: styleProp,\n tabClassName,\n variant = \"secondary\",\n ...htmlAttributes\n}: TabstripProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-tabstrip\",\n css: tabstripCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n activeTabIndex,\n focusVisible,\n containerStyle,\n draggedItemIndex,\n onClickAddTab,\n tabProps,\n ...tabstripHook\n } = useTabstrip({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop,\n animateSelectionThumb,\n containerRef: rootRef,\n keyBoardActivation,\n onActiveChange,\n onAddTab,\n onCloseTab,\n onExitEditMode,\n onMoveTab,\n orientation,\n });\n const id = useId(idProp);\n const className = cx(classBase, classNameProp);\n const style =\n styleProp || containerStyle\n ? {\n ...styleProp,\n ...containerStyle,\n }\n : undefined;\n\n const tabs = useMemo(\n () =>\n asReactElements(children)\n .map((child, index) => {\n const {\n id: tabId = `${id}-tab-${index}`,\n className,\n closeable = allowCloseTab,\n editable = allowRenameTab,\n location: tabLocation,\n showMenuButton = showTabMenuButton,\n } = child.props;\n const selected = index === activeTabIndex;\n return React.cloneElement(child, {\n ...tabProps,\n ...tabstripHook.navigationProps,\n className: cx(className, tabClassName),\n closeable,\n \"data-overflow-priority\": selected ? \"1\" : undefined,\n dragging: draggedItemIndex === index,\n editable,\n focusVisible: focusVisible === index,\n id: tabId,\n index,\n key: index,\n location: cx(location, tabLocation),\n selected,\n showMenuButton,\n tabIndex: selected ? 0 : -1,\n } as Partial<TabProps>);\n })\n .concat(\n allowAddTab ? (\n <IconButton\n {...tabstripHook.navigationProps}\n aria-label=\"Create Tab\"\n className={`${classBase}-addTabButton`}\n data-embedded\n icon=\"add\"\n data-overflow-priority=\"1\"\n key=\"addButton\"\n onClick={onClickAddTab}\n variant=\"secondary\"\n tabIndex={-1}\n />\n ) : (\n []\n )\n ),\n [\n children,\n allowAddTab,\n tabstripHook.navigationProps,\n onClickAddTab,\n id,\n allowCloseTab,\n allowRenameTab,\n showTabMenuButton,\n activeTabIndex,\n tabProps,\n tabClassName,\n draggedItemIndex,\n focusVisible,\n location,\n ]\n );\n\n return (\n <>\n <OverflowContainer\n {...htmlAttributes}\n {...tabstripHook.containerProps}\n className={cx(className, `${classBase}-${variant}`)}\n id={id}\n orientation={orientation}\n overflowIcon=\"more-horiz\"\n ref={rootRef}\n style={style}\n role=\"tablist\"\n >\n {tabs}\n </OverflowContainer>\n {tabstripHook.draggable}\n </>\n );\n};\n"],"names":["useWindow","useComponentCssInjection","tabstripCss","useRef","useTabstrip","useId","useMemo","asReactElements","className","createElement","IconButton","jsxs","Fragment","jsx","OverflowContainer"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var expandoInputCss = ".vuuExpandoInput {\n\n --salt-editable-secondary-background: white;\n --expandoInput-height: var(--vuuExpandoInput-height, 26px);\n --expandoInput-padding: var(--vuuExpandoInput-padding, 6px);\n\n --saltInput-height: var(--expandoInput-height);\n --saltInput-minHeight: var(--saltInput-height);\n --saltInput-minWidth: var(--vuuExpandoInput-minWidth, 8px);\n \n border: var(--vuuExpandoInput-border, none);\n border-radius: var(--vuuExpandoInput-borderRadius, 0);\n color: inherit;\n cursor: default;\n display: inline-block;\n font-size: var(--salt-text-fontSize);\n height: var(--expandoInput-height);\n min-width: calc(var(--saltInput-minWidth) + 2 * var(--expandoInput-padding));\n outline: none;\n padding: 0 var(--expandoInput-padding);\n position: relative;\n\n}\n\n.vuuExpandoInput:before {\n content: attr(data-text);\n display: block;\n height: 0px;\n visibility: hidden;\n white-space: pre-wrap;\n }\n .vuuExpandoInput-error {\n border-color: var(--vuu-color-red-50);\n }\n\n .vuuExpandoInput .saltInput {\n font-weight: var(--salt-text-fontWeight);\n left: var(--expandoInput-padding, 0);\n padding: 0;\n outline-style: none;\n position: absolute;\n right: var(--expandoInput-padding, 0);\n top: var(--vuuExpandoInput-top, 2px);\n width: auto;\n }\n \n .vuuExpandoInput .saltInput-activationIndicator {\n display: none;\n }\n \n .vuuExpandoInput-input {\n background-color: transparent;\n border: none;\n box-sizing: content-box;\n display: block;\n flex: 1;\n font: inherit;\n height: 20px;\n margin:0;\n min-width:0;\n outline: none;\n padding: 0;\n }\n ";
|
|
2
|
+
|
|
3
|
+
export { expandoInputCss as default };
|
|
4
|
+
//# sourceMappingURL=ExpandoInput.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpandoInput.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import cx from 'clsx';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
3
5
|
import { forwardRef } from 'react';
|
|
4
6
|
import { VuuInput } from '../vuu-input/VuuInput.js';
|
|
7
|
+
import expandoInputCss from './ExpandoInput.css.js';
|
|
5
8
|
|
|
6
9
|
const classBase = "vuuExpandoInput";
|
|
7
10
|
const noop = () => void 0;
|
|
@@ -13,6 +16,12 @@ const ExpandoInput = forwardRef(function ExpandoInput2({
|
|
|
13
16
|
onCommit = noop,
|
|
14
17
|
...props
|
|
15
18
|
}, forwardedRef) {
|
|
19
|
+
const targetWindow = useWindow();
|
|
20
|
+
useComponentCssInjection({
|
|
21
|
+
testId: "vuu-expando-input",
|
|
22
|
+
css: expandoInputCss,
|
|
23
|
+
window: targetWindow
|
|
24
|
+
});
|
|
16
25
|
return /* @__PURE__ */ jsx(
|
|
17
26
|
"div",
|
|
18
27
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpandoInput.js","sources":["../../src/expando-input/ExpandoInput.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { ForwardedRef, forwardRef } from \"react\";\nimport { VuuInput, VuuInputProps } from \"../vuu-input\";\n\nimport \"./ExpandoInput.css\";\n\nconst classBase = \"vuuExpandoInput\";\n\nconst noop = () => undefined;\n\nexport interface ExpandoInputProps extends Omit<VuuInputProps, \"onCommit\"> {\n onCommit?: VuuInputProps[\"onCommit\"];\n}\n\nexport const ExpandoInput = forwardRef(function ExpandoInput(\n {\n className: classNameProp,\n errorMessage,\n value,\n inputProps,\n onCommit = noop,\n ...props\n }: ExpandoInputProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-error`]: errorMessage,\n })}\n data-text={value}\n >\n <VuuInput\n {...props}\n errorMessage={errorMessage}\n inputProps={{ ...inputProps, className: `${classBase}-input` }}\n onCommit={onCommit}\n ref={forwardedRef}\n style={{ padding: 0 }}\n textAlign=\"left\"\n value={value}\n variant=\"secondary\"\n />\n </div>\n );\n});\n"],"names":["ExpandoInput"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExpandoInput.js","sources":["../../src/expando-input/ExpandoInput.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ForwardedRef, forwardRef } from \"react\";\nimport { VuuInput, VuuInputProps } from \"../vuu-input\";\n\nimport expandoInputCss from \"./ExpandoInput.css\";\n\nconst classBase = \"vuuExpandoInput\";\n\nconst noop = () => undefined;\n\nexport interface ExpandoInputProps extends Omit<VuuInputProps, \"onCommit\"> {\n onCommit?: VuuInputProps[\"onCommit\"];\n}\n\nexport const ExpandoInput = forwardRef(function ExpandoInput(\n {\n className: classNameProp,\n errorMessage,\n value,\n inputProps,\n onCommit = noop,\n ...props\n }: ExpandoInputProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-expando-input\",\n css: expandoInputCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-error`]: errorMessage,\n })}\n data-text={value}\n >\n <VuuInput\n {...props}\n errorMessage={errorMessage}\n inputProps={{ ...inputProps, className: `${classBase}-input` }}\n onCommit={onCommit}\n ref={forwardedRef}\n style={{ padding: 0 }}\n textAlign=\"left\"\n value={value}\n variant=\"secondary\"\n />\n </div>\n );\n});\n"],"names":["ExpandoInput"],"mappings":";;;;;;;;AAQA,MAAM,SAAY,GAAA,iBAAA,CAAA;AAElB,MAAM,OAAO,MAAM,KAAA,CAAA,CAAA;AAMN,MAAA,YAAA,GAAe,UAAW,CAAA,SAASA,aAC9C,CAAA;AAAA,EACE,SAAW,EAAA,aAAA;AAAA,EACX,YAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAW,GAAA,IAAA;AAAA,EACX,GAAG,KAAA;AACL,CAAA,EACA,YACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAA,eAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,aAAe,EAAA;AAAA,QACtC,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,YAAA;AAAA,OACzB,CAAA;AAAA,MACD,WAAW,EAAA,KAAA;AAAA,MAEX,QAAA,kBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,YAAA;AAAA,UACA,YAAY,EAAE,GAAG,YAAY,SAAW,EAAA,CAAA,EAAG,SAAS,CAAS,MAAA,CAAA,EAAA;AAAA,UAC7D,QAAA;AAAA,UACA,GAAK,EAAA,YAAA;AAAA,UACL,KAAA,EAAO,EAAE,OAAA,EAAS,CAAE,EAAA;AAAA,UACpB,SAAU,EAAA,MAAA;AAAA,UACV,KAAA;AAAA,UACA,OAAQ,EAAA,WAAA;AAAA,SAAA;AAAA,OACV;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var tabCss = "/* Class applied to root Tab element */\n.vuuTab {\n --saltEditableLabel-padding: 0;\n --saltEditableLabel-height: calc(var(--tabstrip-height) - 2px);\n --saltInputLegacy-minWidth: 4em;\n --saltEditableLabel-top: 2px;\n\n --tab-background: var(--vuuTab-background, transparent);\n --tab-cursor: pointer;\n --tab-position: relative;\n\n\n align-items: center;\n align-self: stretch;\n background: var(--tab-background);\n border-color: var(--vuuTab-borderColor, transparent);\n border-style: var(--vuuTab-borderStyle, none);\n border-width: var(--vuuTab-borderWidth, 0px);\n border-radius: var(--vuuTab-borderRadius, 0);\n color: var(--salt-content-primary-foreground);\n cursor: var(--vuuTab-cursor, var(--tab-cursor));\n display: var(--tabstrip-display);\n gap: 8px;\n height: var(--vuuTabHeight, var(--tab-height));\n letter-spacing: var(--vuuTab-letterSpacing, var(--tab-letterSpacing, 0));\n margin: 0 var(--tab-spacing) 0 0;\n min-width: var(--vuuTab-minWidth, 40px);\n outline: none;\n padding: var(--vuuTab-padding, 0 var(--salt-spacing-200));\n position: var(--vuuTab-position, var(--tab-position));\n user-select: none;\n width: var(--tab-width)\n}\n\n.vuuTab-selected {\n background: var(--vuuTab-background-selected, var(--tab-background));\n color: var(--salt-content-primary-foreground);\n font-weight: var(--salt-navigable-fontWeight-active);\n}\n\n/* main content aria of Tab */\n.vuuTab-main {\n align-items: center;;\n border: none;\n color: inherit;\n cursor: inherit;\n display: flex;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n height: calc(var(--tab-height) - var(--tab-thumb-height));\n margin-bottom: var(--tab-thumb-height);\n outline: none;\n position: relative;\n}\n\n.vuuTab-closeable .vuuTab-main {\n border-right: solid transparent var(--salt-size-unit);\n}\n\n.vuuTab .vuuTab-closeButton {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* the close Button on a closeable Tab*/\n.vuuTab-close-icon {\n display: none;\n}\n\n.salt-density-touch .vuuTab-close-icon,\n.salt-density-low .vuuTab-close-icon {\n display: block;\n}\n\n.salt-density-touch .vuuTab-close-icon-small,\n.salt-density-low .vuuTab-close-icon-small {\n display: none;\n}\n\n.vuuTab .vuuTab-text {\n display: inline-block;\n position: relative;\n overflow: hidden;\n text-align: var(--salt-text-textAlign-embedded);\n text-overflow: ellipsis;\n top: var(--vuuTab-top, var(--tab-top, auto));\n white-space: nowrap;\n /* ensure content sits above focus ring */\n z-index: var(--salt-zIndex-default);\n}\n\n.vuuTab .vuuTab-text:before {\n height: 0;\n content: attr(data-text);\n display: block;\n visibility: hidden;\n font-weight: var(--salt-navigable-fontWeight-active);\n}\n\n/* FIXME: these are all focusVisible styles, but with a bespoke inset */\n.vuuTab-editing:after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 2px;\n outline-color: var(--salt-focused-outlineColor);\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-offset: -2px;\n}\n\n.vuuTab.vuuFocusVisible {\n background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));\n outline-color: var(--vuuTab-focusVisible-color, var(--salt-focused-outlineColor));\n outline-style: dashed;\n outline-width: 1px;\n outline-offset: -1px;\n}\n\n.vuuTab:before {\n content: var(--tab-before-content, none);\n content: \"\";\n background: var(--tab-before-background);\n height: var(--tab-before-height);\n inset: var(--tab-before-inset);\n position: absolute;\n width: var(--tab-before-width);\n z-index: 1;\n}\n\n.vuuTabstrip-draggingTab .vuuTab-selected:before {\n --tab-before-content: \"\";\n --tab-before-background: var(--salt-navigable-indicator-color-active);\n --tab-before-height: var(--tab-thumb-height);\n --tab-before-inset: var(--tab-activationIndicator-inset);\n --tab-before-width: var(--tab-activationIndicator-thumb-width);\n}\n\n\n.vuuTab-selected:before {\n --tab-before-content: \"\";\n background: var(--salt-navigable-indicator-active);\n height: var(--tab-thumb-height);\n position: absolute;\n left: var(--tab-thumb-left);\n bottom: 0px; \n top: var(--tab-thumb-top, auto);\n transition: var(--tab-thumb-transition, none);\n width: var(--tab-thumb-width, 100%);\n}\n\n.vuuTab:hover:not(.vuuTab-closeHover, .vuuTab-selected) {\n background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));\n}\n\n";
|
|
2
|
+
|
|
3
|
+
export { tabCss as default };
|
|
4
|
+
//# sourceMappingURL=Tab.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tab.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/esm/tabstrip/Tab.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useForkRef } from '@salt-ds/core';
|
|
3
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
|
+
import { useWindow } from '@salt-ds/window';
|
|
3
5
|
import cx from 'clsx';
|
|
4
6
|
import { forwardRef, useRef, useCallback } from 'react';
|
|
5
7
|
import { EditableLabel } from '../editable-label/EditableLabel.js';
|
|
6
8
|
import { TabMenu } from './TabMenu.js';
|
|
9
|
+
import tabCss from './Tab.css.js';
|
|
7
10
|
|
|
8
11
|
const classBase = "vuuTab";
|
|
9
12
|
const noop = () => void 0;
|
|
@@ -36,6 +39,12 @@ const Tab = forwardRef(function Tab2({
|
|
|
36
39
|
if (showMenuButton && typeof onMenuAction !== "function") {
|
|
37
40
|
throw Error("Tab onMenuAction must be provided if showMenuButton is set");
|
|
38
41
|
}
|
|
42
|
+
const targetWindow = useWindow();
|
|
43
|
+
useComponentCssInjection({
|
|
44
|
+
testId: "vuu-tabstrip-tab",
|
|
45
|
+
css: tabCss,
|
|
46
|
+
window: targetWindow
|
|
47
|
+
});
|
|
39
48
|
const rootRef = useRef(null);
|
|
40
49
|
const editableRef = useRef(null);
|
|
41
50
|
const setForkRef = useForkRef(ref, rootRef);
|
package/esm/tabstrip/Tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","sources":["../../src/tabstrip/Tab.tsx"],"sourcesContent":["// TODO close button needs to be a button. Hence tab needs to include 2 buttons\nimport { useForkRef } from \"@salt-ds/core\";\nimport
|
|
1
|
+
{"version":3,"file":"Tab.js","sources":["../../src/tabstrip/Tab.tsx"],"sourcesContent":["// TODO close button needs to be a button. Hence tab needs to include 2 buttons\nimport { MenuActionHandler } from \"@vuu-ui/vuu-data-types\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n FocusEvent,\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n useCallback,\n useRef,\n} from \"react\";\nimport { EditableLabel, EditableLabelProps } from \"../editable-label\";\nimport { TabMenu } from \"./TabMenu\";\nimport { TabProps } from \"./TabsTypes\";\n\nimport tabCss from \"./Tab.css\";\n\nconst classBase = \"vuuTab\";\n\nconst noop = () => undefined;\n\nexport const Tab = forwardRef(function Tab(\n {\n ariaControls,\n children,\n className,\n closeable = false,\n dragging,\n editable = false,\n editing,\n focusVisible,\n index = -1,\n label,\n location,\n onClick,\n onClose,\n onEnterEditMode = noop,\n onExitEditMode = noop,\n onFocus: onFocusProp,\n onKeyUp,\n onMenuAction,\n onMenuClose,\n orientation,\n selected,\n showMenuButton = closeable || editable || Boolean(location),\n tabIndex,\n ...props\n }: TabProps,\n ref: ForwardedRef<HTMLDivElement>\n): ReactElement<TabProps> {\n if (showMenuButton && typeof onMenuAction !== \"function\") {\n throw Error(\"Tab onMenuAction must be provided if showMenuButton is set\");\n }\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-tabstrip-tab\",\n css: tabCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const editableRef = useRef<HTMLDivElement>(null);\n const setForkRef = useForkRef(ref, rootRef);\n const handleClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n if (!editing) {\n e.preventDefault();\n onClick?.(e, index);\n }\n },\n [editing, index, onClick]\n );\n\n const handleOnExitEditMode: EditableLabelProps[\"onExitEditMode\"] = (\n originalValue = \"\",\n editedValue = \"\",\n allowDeactivation = true\n ) => onExitEditMode(originalValue, editedValue, allowDeactivation, index);\n\n const handleKeyUp = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"Backspace\":\n case \"Delete\":\n if (closeable) {\n e.stopPropagation();\n onClose && onClose(index);\n }\n break;\n default:\n onKeyUp && onKeyUp(e, index);\n }\n };\n\n const getLabel = () => {\n if (editable) {\n return (\n <EditableLabel\n editing={editing}\n defaultValue={label}\n // Create a fresh instance after each edit, so it can be uncontrolled ...\n key={label}\n onEnterEditMode={onEnterEditMode}\n onExitEditMode={handleOnExitEditMode}\n ref={editableRef}\n />\n );\n } else {\n return label;\n }\n };\n\n const handleFocus = (evt: FocusEvent<HTMLElement>) => {\n if (editableRef.current) {\n const editable = editableRef.current as HTMLElement;\n const input = editable.querySelector(\n \".vuuEditableLabel-input\"\n ) as HTMLInputElement;\n input?.focus();\n }\n onFocusProp?.(evt);\n };\n\n return (\n <div\n {...props}\n aria-controls={ariaControls}\n aria-selected={selected}\n className={cx(classBase, className, {\n [`${classBase}-closeable`]: closeable,\n \"vuuDraggable-dragAway\": dragging,\n [`${classBase}-editing`]: editing,\n [`${classBase}-selected`]: selected || undefined,\n [`${classBase}-vertical`]: orientation === \"vertical\",\n [`vuuFocusVisible`]: focusVisible,\n })}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyUp={handleKeyUp}\n ref={setForkRef}\n role=\"tab\"\n tabIndex={tabIndex}\n >\n <div className={`${classBase}-main`}>\n <span\n className={`${classBase}-text`}\n // data-text is important, it determines the width of the tab. A pseudo\n // element assigns data-text as content. This is styled as selected tab\n // text. That means width of tab always corresponds to its selected state,\n // so tabs do not change size when selected (ie when the text is bolded).\n // Do not include if we have editable content, EditableLabel will determine\n // the width\n data-text={editable ? undefined : label}\n >\n {children ?? getLabel()}\n </span>\n </div>\n {showMenuButton ? (\n <TabMenu\n allowClose={closeable}\n allowRename={editable}\n controlledComponentId={ariaControls}\n controlledComponentTitle={label}\n location={location}\n onMenuAction={onMenuAction as MenuActionHandler}\n onMenuClose={onMenuClose}\n index={index}\n />\n ) : null}\n </div>\n );\n});\n"],"names":["Tab","editable"],"mappings":";;;;;;;;;;AAsBA,MAAM,SAAY,GAAA,QAAA,CAAA;AAElB,MAAM,OAAO,MAAM,KAAA,CAAA,CAAA;AAEN,MAAA,GAAA,GAAM,UAAW,CAAA,SAASA,IACrC,CAAA;AAAA,EACE,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAY,GAAA,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,QAAW,GAAA,KAAA;AAAA,EACX,OAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAQ,GAAA,CAAA,CAAA;AAAA,EACR,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAkB,GAAA,IAAA;AAAA,EAClB,cAAiB,GAAA,IAAA;AAAA,EACjB,OAAS,EAAA,WAAA;AAAA,EACT,OAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAiB,GAAA,SAAA,IAAa,QAAY,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAC1D,QAAA;AAAA,EACA,GAAG,KAAA;AACL,CAAA,EACA,GACwB,EAAA;AACxB,EAAI,IAAA,cAAA,IAAkB,OAAO,YAAA,KAAiB,UAAY,EAAA;AACxD,IAAA,MAAM,MAAM,4DAA4D,CAAA,CAAA;AAAA,GAC1E;AAEA,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,kBAAA;AAAA,IACR,GAAK,EAAA,MAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,OAAuB,IAAI,CAAA,CAAA;AAC3C,EAAM,MAAA,WAAA,GAAc,OAAuB,IAAI,CAAA,CAAA;AAC/C,EAAM,MAAA,UAAA,GAAa,UAAW,CAAA,GAAA,EAAK,OAAO,CAAA,CAAA;AAC1C,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,CAA+B,KAAA;AAC9B,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,QAAA,OAAA,GAAU,GAAG,KAAK,CAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAAA,IACA,CAAC,OAAS,EAAA,KAAA,EAAO,OAAO,CAAA;AAAA,GAC1B,CAAA;AAEA,EAAA,MAAM,oBAA6D,GAAA,CACjE,aAAgB,GAAA,EAAA,EAChB,WAAc,GAAA,EAAA,EACd,iBAAoB,GAAA,IAAA,KACjB,cAAe,CAAA,aAAA,EAAe,WAAa,EAAA,iBAAA,EAAmB,KAAK,CAAA,CAAA;AAExE,EAAM,MAAA,WAAA,GAAc,CAAC,CAAqB,KAAA;AACxC,IAAA,QAAQ,EAAE,GAAK;AAAA,MACb,KAAK,WAAA,CAAA;AAAA,MACL,KAAK,QAAA;AACH,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,CAAA,CAAE,eAAgB,EAAA,CAAA;AAClB,UAAA,OAAA,IAAW,QAAQ,KAAK,CAAA,CAAA;AAAA,SAC1B;AACA,QAAA,MAAA;AAAA,MACF;AACE,QAAW,OAAA,IAAA,OAAA,CAAQ,GAAG,KAAK,CAAA,CAAA;AAAA,KAC/B;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,QAAU,EAAA;AACZ,MACE,uBAAA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,YAAc,EAAA,KAAA;AAAA,UAGd,eAAA;AAAA,UACA,cAAgB,EAAA,oBAAA;AAAA,UAChB,GAAK,EAAA,WAAA;AAAA,SAAA;AAAA,QAHA,KAAA;AAAA,OAIP,CAAA;AAAA,KAEG,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,GAAiC,KAAA;AACpD,IAAA,IAAI,YAAY,OAAS,EAAA;AACvB,MAAA,MAAMC,YAAW,WAAY,CAAA,OAAA,CAAA;AAC7B,MAAA,MAAM,QAAQA,SAAS,CAAA,aAAA;AAAA,QACrB,yBAAA;AAAA,OACF,CAAA;AACA,MAAA,KAAA,EAAO,KAAM,EAAA,CAAA;AAAA,KACf;AACA,IAAA,WAAA,GAAc,GAAG,CAAA,CAAA;AAAA,GACnB,CAAA;AAEA,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,eAAe,EAAA,YAAA;AAAA,MACf,eAAe,EAAA,QAAA;AAAA,MACf,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,SAAW,EAAA;AAAA,QAClC,CAAC,CAAA,EAAG,SAAS,CAAA,UAAA,CAAY,GAAG,SAAA;AAAA,QAC5B,uBAAyB,EAAA,QAAA;AAAA,QACzB,CAAC,CAAA,EAAG,SAAS,CAAA,QAAA,CAAU,GAAG,OAAA;AAAA,QAC1B,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,QAAY,IAAA,KAAA,CAAA;AAAA,QACvC,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,WAAgB,KAAA,UAAA;AAAA,QAC3C,CAAC,iBAAiB,GAAG,YAAA;AAAA,OACtB,CAAA;AAAA,MACD,OAAS,EAAA,WAAA;AAAA,MACT,OAAS,EAAA,WAAA;AAAA,MACT,OAAS,EAAA,WAAA;AAAA,MACT,GAAK,EAAA,UAAA;AAAA,MACL,IAAK,EAAA,KAAA;AAAA,MACL,QAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAC1B,KAAA,CAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,GAAG,SAAS,CAAA,KAAA,CAAA;AAAA,YAOvB,WAAA,EAAW,WAAW,KAAY,CAAA,GAAA,KAAA;AAAA,YAEjC,sBAAY,QAAS,EAAA;AAAA,WAAA;AAAA,SAE1B,EAAA,CAAA;AAAA,QACC,cACC,mBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,UAAY,EAAA,SAAA;AAAA,YACZ,WAAa,EAAA,QAAA;AAAA,YACb,qBAAuB,EAAA,YAAA;AAAA,YACvB,wBAA0B,EAAA,KAAA;AAAA,YAC1B,QAAA;AAAA,YACA,YAAA;AAAA,YACA,WAAA;AAAA,YACA,KAAA;AAAA,WAAA;AAAA,SAEA,GAAA,IAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GACN,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var tabstripCss = "/* Component class applied to the root element */\n.vuuTabstrip {\n --vuuOverflowContainer-background: transparent;\n --vuuOverflowContainer-borderColor: var(--salt-container-primary-borderColor);\n --vuuOverflowContainer-width: var(--tabstrip-width);\n --tabstrip-dragging-display: none;\n --tabstrip-display: inline-flex;\n --tabstrip-background: transparent;\n\n align-self: var(--saltTabs-tabstrip-alignSelf, stretch);\n display: flex;\n font-size: var(--salt-text-fontSize);\n font-weight: var(--vuuTabstrip-fontWeight, var(--salt-text-fontWeight));\n min-width: 28px;\n position: relative;\n overflow: visible;\n}\n\n/* Tabstrip orientation is horizontal */\n.vuuTabstrip.vuuOrientation-horizontal {\n --vuuOverflowContainer-borderStyle: none none solid none;\n --vuuOverflowContainer-borderBottomWidth: 1px;\n\n --tabstrip-height: var(--vuuTabstrip-height, var(--overflow-wrapper-height,28px));\n --tabstrip-width: var(--vuuTabstrip-width, 100%);\n --tab-height: var(--tabstrip-height);\n --tab-width: auto;\n --tab-thumb-height: 2px;\n --tab-thumb-left: var(--tab-thumb-offset, 0);\n --tab-thumb-top: auto;\n --tab-thumb-width: var(--tab-thumb-size, 100%);\n align-items: flex-start;\n /* border-bottom: var(--vuuTabstrip-borderBottom, solid 1px var(--salt-container-primary-borderColor)); */\n}\n\n/* Tabstrip orientation is vertical */\n.vuuTabstrip.vuuOrientation-vertical {\n --tabstrip-height: var(--vuuTabstrip-height, 100%);\n --tabstrip-width: var(--vuuTabstrip-width, 100px);\n --tab-height: 50px;\n --tab-width: 100%;\n --tab-thumb-height: 0;\n --tab-thumb-left: 0;\n --tab-thumb-top: var(--tab-thumb-offset, 0);\n --tab-thumb-width: 2px;\n\n align-self: flex-start;\n display: inline-flex;\n}\n\n.vuuTabstrip-draggingTab .vuuTab {\n pointer-events: none;\n}\n\n\n.vuuTabstrip-overflowMenu.vuuDropdown {\n --saltIcon-margin: 2px 0 0 0px;\n}\n\n.vuuTabstrip-overflowMenu-open {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --saltButton-text-color: var(--salt-actionable-secondary-text-color-active);\n}\n\n.vuuTabstrip-overflowMenu-open .saltButton {\n --saltIcon-color: var(--salt-actionable-secondary-foreground-active);\n}\n\n.vuuTabstrip-inner {\n width: 100%;\n align-items: center;\n display: flex;\n flex-basis: auto;\n flex-grow: 0;\n flex-shrink: 1;\n flex-wrap: wrap;\n justify-content: flex-start;\n line-height: var(--tabstrip-height);\n}\n\n.vuuTabstrip.vuuOrientation-vertical .vuuTabstrip-inner {\n flex-direction: column;\n height: auto;\n}\n\n.vuuTabstrip-centered .vuuTabstrip-inner {\n justify-content: center;\n}\n\n/* Styling applied to Draggable wrapper when used to drag a Tab */\n.vuuDraggable[class*=\"vuuTabstrip\"] {\n --tabstrip-display: flex;\n --tabstrip-height: 100%;\n --tabstrip-dragging-display: block;\n\n --tabs-tab-background: var(--salt-navigable-primary-background-hover);\n --tabs-tab-before-content: \"\";\n --tabs-tab-before-background: var(--salt-navigable-indicator-hover);\n --tabs-tab-before-height: var(--tab-activationIndicator-thumb-height);\n --tabs-tab-before-inset: var(--tab-activationIndicator-inset);\n --tabs-tab-before-width: var(--tab-activationIndicator-thumb-width);\n --tabs-tab-cursor: var(--salt-draggable-grab-cursor-active);\n --tabs-tab-position: static;\n\n font-size: 12px;\n}\n\n.vuuDraggable-tabstrip-horizontal {\n --overflow-item-height: var(--tabstrip-height);\n --tab-thumb-height: 2px;\n --tab-thumb-left: 0px;\n --tabstrip-display: inline-flex;\n --tabstrip-height: 28px;\n line-height: var(--tabstrip-height);\n}\n\n\n.vuuDraggable[class*=\"tabstrip\"] .vuuTab[aria-selected=\"true\"]:before {\n --tabs-tab-before-background: var(--salt-navigable-indicator-active);\n}\n\n/* [data-overflowed] {\n order: 99;\n visibility: hidden;\n} */\n\n.vuuTabstrip-overflowMenu-dropTarget:after {\n background: var(--salt-selectable-background-selected);\n content: \"\";\n position: absolute;\n height: 2px;\n left: 0;\n right: 0;\n bottom: 0;\n}\n";
|
|
2
|
+
|
|
3
|
+
export { tabstripCss as default };
|
|
4
|
+
//# sourceMappingURL=Tabstrip.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabstrip.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/esm/tabstrip/Tabstrip.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import React, { useRef, useMemo, createElement } from 'react';
|
|
3
3
|
import { useId, asReactElements } from '@vuu-ui/vuu-utils';
|
|
4
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
|
+
import { useWindow } from '@salt-ds/window';
|
|
4
6
|
import cx from 'clsx';
|
|
5
7
|
import { useTabstrip } from './useTabstrip.js';
|
|
6
8
|
import { IconButton } from '../icon-button/IconButton.js';
|
|
7
9
|
import { OverflowContainer } from '../overflow-container/OverflowContainer.js';
|
|
10
|
+
import tabstripCss from './Tabstrip.css.js';
|
|
8
11
|
|
|
9
12
|
const classBase = "vuuTabstrip";
|
|
10
13
|
const Tabstrip = ({
|
|
@@ -31,6 +34,12 @@ const Tabstrip = ({
|
|
|
31
34
|
variant = "secondary",
|
|
32
35
|
...htmlAttributes
|
|
33
36
|
}) => {
|
|
37
|
+
const targetWindow = useWindow();
|
|
38
|
+
useComponentCssInjection({
|
|
39
|
+
testId: "vuu-tabstrip",
|
|
40
|
+
css: tabstripCss,
|
|
41
|
+
window: targetWindow
|
|
42
|
+
});
|
|
34
43
|
const rootRef = useRef(null);
|
|
35
44
|
const {
|
|
36
45
|
activeTabIndex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabstrip.js","sources":["../../src/tabstrip/Tabstrip.tsx"],"sourcesContent":["import { asReactElements, useId } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport React, { useMemo, useRef } from \"react\";\nimport { TabProps, TabstripProps } from \"./TabsTypes\";\nimport { useTabstrip } from \"./useTabstrip\";\
|
|
1
|
+
{"version":3,"file":"Tabstrip.js","sources":["../../src/tabstrip/Tabstrip.tsx"],"sourcesContent":["import { asReactElements, useId } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport React, { useMemo, useRef } from \"react\";\nimport { TabProps, TabstripProps } from \"./TabsTypes\";\nimport { useTabstrip } from \"./useTabstrip\";\nimport { IconButton } from \"../icon-button\";\nimport { OverflowContainer } from \"../overflow-container\";\n\nimport tabstripCss from \"./Tabstrip.css\";\n\nconst classBase = \"vuuTabstrip\";\n\nexport const Tabstrip = ({\n activeTabIndex: activeTabIndexProp,\n allowAddTab,\n allowCloseTab,\n allowDragDrop = false,\n allowRenameTab = false,\n animateSelectionThumb = false,\n children,\n className: classNameProp,\n id: idProp,\n keyBoardActivation = \"manual\",\n location,\n onActiveChange,\n onAddTab,\n onCloseTab,\n onExitEditMode,\n onMoveTab,\n orientation = \"horizontal\",\n showTabMenuButton,\n style: styleProp,\n tabClassName,\n variant = \"secondary\",\n ...htmlAttributes\n}: TabstripProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-tabstrip\",\n css: tabstripCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n activeTabIndex,\n focusVisible,\n containerStyle,\n draggedItemIndex,\n onClickAddTab,\n tabProps,\n ...tabstripHook\n } = useTabstrip({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop,\n animateSelectionThumb,\n containerRef: rootRef,\n keyBoardActivation,\n onActiveChange,\n onAddTab,\n onCloseTab,\n onExitEditMode,\n onMoveTab,\n orientation,\n });\n const id = useId(idProp);\n const className = cx(classBase, classNameProp);\n const style =\n styleProp || containerStyle\n ? {\n ...styleProp,\n ...containerStyle,\n }\n : undefined;\n\n const tabs = useMemo(\n () =>\n asReactElements(children)\n .map((child, index) => {\n const {\n id: tabId = `${id}-tab-${index}`,\n className,\n closeable = allowCloseTab,\n editable = allowRenameTab,\n location: tabLocation,\n showMenuButton = showTabMenuButton,\n } = child.props;\n const selected = index === activeTabIndex;\n return React.cloneElement(child, {\n ...tabProps,\n ...tabstripHook.navigationProps,\n className: cx(className, tabClassName),\n closeable,\n \"data-overflow-priority\": selected ? \"1\" : undefined,\n dragging: draggedItemIndex === index,\n editable,\n focusVisible: focusVisible === index,\n id: tabId,\n index,\n key: index,\n location: cx(location, tabLocation),\n selected,\n showMenuButton,\n tabIndex: selected ? 0 : -1,\n } as Partial<TabProps>);\n })\n .concat(\n allowAddTab ? (\n <IconButton\n {...tabstripHook.navigationProps}\n aria-label=\"Create Tab\"\n className={`${classBase}-addTabButton`}\n data-embedded\n icon=\"add\"\n data-overflow-priority=\"1\"\n key=\"addButton\"\n onClick={onClickAddTab}\n variant=\"secondary\"\n tabIndex={-1}\n />\n ) : (\n []\n )\n ),\n [\n children,\n allowAddTab,\n tabstripHook.navigationProps,\n onClickAddTab,\n id,\n allowCloseTab,\n allowRenameTab,\n showTabMenuButton,\n activeTabIndex,\n tabProps,\n tabClassName,\n draggedItemIndex,\n focusVisible,\n location,\n ]\n );\n\n return (\n <>\n <OverflowContainer\n {...htmlAttributes}\n {...tabstripHook.containerProps}\n className={cx(className, `${classBase}-${variant}`)}\n id={id}\n orientation={orientation}\n overflowIcon=\"more-horiz\"\n ref={rootRef}\n style={style}\n role=\"tablist\"\n >\n {tabs}\n </OverflowContainer>\n {tabstripHook.draggable}\n </>\n );\n};\n"],"names":["className"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.8.
|
|
2
|
+
"version": "0.8.43",
|
|
3
3
|
"description": "VUU UI Controls",
|
|
4
4
|
"author": "heswell",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@vuu-ui/vuu-data-types": "0.8.
|
|
8
|
-
"@vuu-ui/vuu-table-types": "0.8.
|
|
7
|
+
"@vuu-ui/vuu-data-types": "0.8.43",
|
|
8
|
+
"@vuu-ui/vuu-table-types": "0.8.43"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@vuu-ui/vuu-layout": "0.8.
|
|
12
|
-
"@vuu-ui/vuu-popups": "0.8.
|
|
13
|
-
"@vuu-ui/vuu-table": "0.8.
|
|
14
|
-
"@vuu-ui/vuu-utils": "0.8.
|
|
11
|
+
"@vuu-ui/vuu-layout": "0.8.43",
|
|
12
|
+
"@vuu-ui/vuu-popups": "0.8.43",
|
|
13
|
+
"@vuu-ui/vuu-table": "0.8.43",
|
|
14
|
+
"@vuu-ui/vuu-utils": "0.8.43",
|
|
15
15
|
"@salt-ds/core": "1.17.0",
|
|
16
16
|
"@salt-ds/icons": "1.9.1",
|
|
17
17
|
"@salt-ds/styles": "0.2.1",
|
package/types/tabstrip/Tab.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { MenuActionHandler } from "@vuu-ui/vuu-data-types";
|
|
2
2
|
import { KeyboardEvent, MouseEvent } from "react";
|
|
3
|
-
import "./Tab.css";
|
|
4
3
|
export declare const Tab: import("react").ForwardRefExoticComponent<Omit<import("react").HTMLAttributes<HTMLElement>, "onKeyUp" | "onClick"> & {
|
|
5
4
|
ariaControls?: string | undefined;
|
|
6
5
|
closeable?: boolean | undefined;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { TabstripProps } from "./TabsTypes";
|
|
3
|
-
import "./Tabstrip.css";
|
|
4
3
|
export declare const Tabstrip: ({ activeTabIndex: activeTabIndexProp, allowAddTab, allowCloseTab, allowDragDrop, allowRenameTab, animateSelectionThumb, children, className: classNameProp, id: idProp, keyBoardActivation, location, onActiveChange, onAddTab, onCloseTab, onExitEditMode, onMoveTab, orientation, showTabMenuButton, style: styleProp, tabClassName, variant, ...htmlAttributes }: TabstripProps) => JSX.Element;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
.vuuExpandoInput {
|
|
2
|
-
|
|
3
|
-
--salt-editable-secondary-background: white;
|
|
4
|
-
--expandoInput-height: var(--vuuExpandoInput-height, 26px);
|
|
5
|
-
--expandoInput-padding: var(--vuuExpandoInput-padding, 6px);
|
|
6
|
-
|
|
7
|
-
--saltInput-height: var(--expandoInput-height);
|
|
8
|
-
--saltInput-minHeight: var(--saltInput-height);
|
|
9
|
-
--saltInput-minWidth: var(--vuuExpandoInput-minWidth, 8px);
|
|
10
|
-
|
|
11
|
-
border: var(--vuuExpandoInput-border, none);
|
|
12
|
-
border-radius: var(--vuuExpandoInput-borderRadius, 0);
|
|
13
|
-
color: inherit;
|
|
14
|
-
cursor: default;
|
|
15
|
-
display: inline-block;
|
|
16
|
-
font-size: var(--salt-text-fontSize);
|
|
17
|
-
height: var(--expandoInput-height);
|
|
18
|
-
min-width: calc(var(--saltInput-minWidth) + 2 * var(--expandoInput-padding));
|
|
19
|
-
outline: none;
|
|
20
|
-
padding: 0 var(--expandoInput-padding);
|
|
21
|
-
position: relative;
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.vuuExpandoInput:before {
|
|
26
|
-
content: attr(data-text);
|
|
27
|
-
display: block;
|
|
28
|
-
height: 0px;
|
|
29
|
-
visibility: hidden;
|
|
30
|
-
white-space: pre-wrap;
|
|
31
|
-
}
|
|
32
|
-
.vuuExpandoInput-error {
|
|
33
|
-
border-color: var(--vuu-color-red-50);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.vuuExpandoInput .saltInput {
|
|
37
|
-
font-weight: var(--salt-text-fontWeight);
|
|
38
|
-
left: var(--expandoInput-padding, 0);
|
|
39
|
-
padding: 0;
|
|
40
|
-
outline-style: none;
|
|
41
|
-
position: absolute;
|
|
42
|
-
right: var(--expandoInput-padding, 0);
|
|
43
|
-
top: var(--vuuExpandoInput-top, 2px);
|
|
44
|
-
width: auto;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.vuuExpandoInput .saltInput-activationIndicator {
|
|
48
|
-
display: none;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.vuuExpandoInput-input {
|
|
52
|
-
background-color: transparent;
|
|
53
|
-
border: none;
|
|
54
|
-
box-sizing: content-box;
|
|
55
|
-
display: block;
|
|
56
|
-
flex: 1;
|
|
57
|
-
font: inherit;
|
|
58
|
-
height: 20px;
|
|
59
|
-
margin:0;
|
|
60
|
-
min-width:0;
|
|
61
|
-
outline: none;
|
|
62
|
-
padding: 0;
|
|
63
|
-
}
|
|
64
|
-
|
package/cjs/tabstrip/Tab.css
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/* Class applied to root Tab element */
|
|
2
|
-
.vuuTab {
|
|
3
|
-
--saltEditableLabel-padding: 0;
|
|
4
|
-
--saltEditableLabel-height: calc(var(--tabstrip-height) - 2px);
|
|
5
|
-
--saltInputLegacy-minWidth: 4em;
|
|
6
|
-
--saltEditableLabel-top: 2px;
|
|
7
|
-
|
|
8
|
-
--tab-background: var(--vuuTab-background, transparent);
|
|
9
|
-
--tab-cursor: pointer;
|
|
10
|
-
--tab-position: relative;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
align-items: center;
|
|
14
|
-
align-self: stretch;
|
|
15
|
-
background: var(--tab-background);
|
|
16
|
-
border-color: var(--vuuTab-borderColor, transparent);
|
|
17
|
-
border-style: var(--vuuTab-borderStyle, none);
|
|
18
|
-
border-width: var(--vuuTab-borderWidth, 0px);
|
|
19
|
-
border-radius: var(--vuuTab-borderRadius, 0);
|
|
20
|
-
color: var(--salt-content-primary-foreground);
|
|
21
|
-
cursor: var(--vuuTab-cursor, var(--tab-cursor));
|
|
22
|
-
display: var(--tabstrip-display);
|
|
23
|
-
gap: 8px;
|
|
24
|
-
height: var(--vuuTabHeight, var(--tab-height));
|
|
25
|
-
letter-spacing: var(--vuuTab-letterSpacing, var(--tab-letterSpacing, 0));
|
|
26
|
-
margin: 0 var(--tab-spacing) 0 0;
|
|
27
|
-
min-width: var(--vuuTab-minWidth, 40px);
|
|
28
|
-
outline: none;
|
|
29
|
-
padding: var(--vuuTab-padding, 0 var(--salt-spacing-200));
|
|
30
|
-
position: var(--vuuTab-position, var(--tab-position));
|
|
31
|
-
user-select: none;
|
|
32
|
-
width: var(--tab-width)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.vuuTab-selected {
|
|
36
|
-
background: var(--vuuTab-background-selected, var(--tab-background));
|
|
37
|
-
color: var(--salt-content-primary-foreground);
|
|
38
|
-
font-weight: var(--salt-navigable-fontWeight-active);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/* main content aria of Tab */
|
|
42
|
-
.vuuTab-main {
|
|
43
|
-
align-items: center;;
|
|
44
|
-
border: none;
|
|
45
|
-
color: inherit;
|
|
46
|
-
cursor: inherit;
|
|
47
|
-
display: flex;
|
|
48
|
-
font-family: inherit;
|
|
49
|
-
font-size: inherit;
|
|
50
|
-
font-weight: inherit;
|
|
51
|
-
height: calc(var(--tab-height) - var(--tab-thumb-height));
|
|
52
|
-
margin-bottom: var(--tab-thumb-height);
|
|
53
|
-
outline: none;
|
|
54
|
-
position: relative;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.vuuTab-closeable .vuuTab-main {
|
|
58
|
-
border-right: solid transparent var(--salt-size-unit);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.vuuTab .vuuTab-closeButton {
|
|
62
|
-
display: flex;
|
|
63
|
-
align-items: center;
|
|
64
|
-
justify-content: center;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/* the close Button on a closeable Tab*/
|
|
68
|
-
.vuuTab-close-icon {
|
|
69
|
-
display: none;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.salt-density-touch .vuuTab-close-icon,
|
|
73
|
-
.salt-density-low .vuuTab-close-icon {
|
|
74
|
-
display: block;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.salt-density-touch .vuuTab-close-icon-small,
|
|
78
|
-
.salt-density-low .vuuTab-close-icon-small {
|
|
79
|
-
display: none;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.vuuTab .vuuTab-text {
|
|
83
|
-
display: inline-block;
|
|
84
|
-
position: relative;
|
|
85
|
-
overflow: hidden;
|
|
86
|
-
text-align: var(--salt-text-textAlign-embedded);
|
|
87
|
-
text-overflow: ellipsis;
|
|
88
|
-
top: var(--vuuTab-top, var(--tab-top, auto));
|
|
89
|
-
white-space: nowrap;
|
|
90
|
-
/* ensure content sits above focus ring */
|
|
91
|
-
z-index: var(--salt-zIndex-default);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.vuuTab .vuuTab-text:before {
|
|
95
|
-
height: 0;
|
|
96
|
-
content: attr(data-text);
|
|
97
|
-
display: block;
|
|
98
|
-
visibility: hidden;
|
|
99
|
-
font-weight: var(--salt-navigable-fontWeight-active);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* FIXME: these are all focusVisible styles, but with a bespoke inset */
|
|
103
|
-
.vuuTab-editing:after {
|
|
104
|
-
content: "";
|
|
105
|
-
position: absolute;
|
|
106
|
-
top: 0;
|
|
107
|
-
left: 0;
|
|
108
|
-
right: 0;
|
|
109
|
-
bottom: 2px;
|
|
110
|
-
outline-color: var(--salt-focused-outlineColor);
|
|
111
|
-
outline-style: var(--salt-focused-outlineStyle);
|
|
112
|
-
outline-width: var(--salt-focused-outlineWidth);
|
|
113
|
-
outline-offset: -2px;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.vuuTab.vuuFocusVisible {
|
|
117
|
-
background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));
|
|
118
|
-
outline-color: var(--vuuTab-focusVisible-color, var(--salt-focused-outlineColor));
|
|
119
|
-
outline-style: dashed;
|
|
120
|
-
outline-width: 1px;
|
|
121
|
-
outline-offset: -1px;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.vuuTab:before {
|
|
125
|
-
content: var(--tab-before-content, none);
|
|
126
|
-
content: "";
|
|
127
|
-
background: var(--tab-before-background);
|
|
128
|
-
height: var(--tab-before-height);
|
|
129
|
-
inset: var(--tab-before-inset);
|
|
130
|
-
position: absolute;
|
|
131
|
-
width: var(--tab-before-width);
|
|
132
|
-
z-index: 1;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.vuuTabstrip-draggingTab .vuuTab-selected:before {
|
|
136
|
-
--tab-before-content: "";
|
|
137
|
-
--tab-before-background: var(--salt-navigable-indicator-color-active);
|
|
138
|
-
--tab-before-height: var(--tab-thumb-height);
|
|
139
|
-
--tab-before-inset: var(--tab-activationIndicator-inset);
|
|
140
|
-
--tab-before-width: var(--tab-activationIndicator-thumb-width);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
.vuuTab-selected:before {
|
|
145
|
-
--tab-before-content: "";
|
|
146
|
-
background: var(--salt-navigable-indicator-active);
|
|
147
|
-
height: var(--tab-thumb-height);
|
|
148
|
-
position: absolute;
|
|
149
|
-
left: var(--tab-thumb-left);
|
|
150
|
-
bottom: 0px;
|
|
151
|
-
top: var(--tab-thumb-top, auto);
|
|
152
|
-
transition: var(--tab-thumb-transition, none);
|
|
153
|
-
width: var(--tab-thumb-width, 100%);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
.vuuTab:hover:not(.vuuTab-closeHover, .vuuTab-selected) {
|
|
157
|
-
background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));
|
|
158
|
-
}
|
|
159
|
-
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/* Component class applied to the root element */
|
|
2
|
-
.vuuTabstrip {
|
|
3
|
-
--vuuOverflowContainer-background: transparent;
|
|
4
|
-
--vuuOverflowContainer-borderColor: var(--salt-container-primary-borderColor);
|
|
5
|
-
--vuuOverflowContainer-width: var(--tabstrip-width);
|
|
6
|
-
--tabstrip-dragging-display: none;
|
|
7
|
-
--tabstrip-display: inline-flex;
|
|
8
|
-
--tabstrip-background: transparent;
|
|
9
|
-
|
|
10
|
-
align-self: var(--saltTabs-tabstrip-alignSelf, stretch);
|
|
11
|
-
display: flex;
|
|
12
|
-
font-size: var(--salt-text-fontSize);
|
|
13
|
-
font-weight: var(--vuuTabstrip-fontWeight, var(--salt-text-fontWeight));
|
|
14
|
-
min-width: 28px;
|
|
15
|
-
position: relative;
|
|
16
|
-
overflow: visible;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/* Tabstrip orientation is horizontal */
|
|
20
|
-
.vuuTabstrip.vuuOrientation-horizontal {
|
|
21
|
-
--vuuOverflowContainer-borderStyle: none none solid none;
|
|
22
|
-
--vuuOverflowContainer-borderBottomWidth: 1px;
|
|
23
|
-
|
|
24
|
-
--tabstrip-height: var(--vuuTabstrip-height, var(--overflow-wrapper-height,28px));
|
|
25
|
-
--tabstrip-width: var(--vuuTabstrip-width, 100%);
|
|
26
|
-
--tab-height: var(--tabstrip-height);
|
|
27
|
-
--tab-width: auto;
|
|
28
|
-
--tab-thumb-height: 2px;
|
|
29
|
-
--tab-thumb-left: var(--tab-thumb-offset, 0);
|
|
30
|
-
--tab-thumb-top: auto;
|
|
31
|
-
--tab-thumb-width: var(--tab-thumb-size, 100%);
|
|
32
|
-
align-items: flex-start;
|
|
33
|
-
/* border-bottom: var(--vuuTabstrip-borderBottom, solid 1px var(--salt-container-primary-borderColor)); */
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/* Tabstrip orientation is vertical */
|
|
37
|
-
.vuuTabstrip.vuuOrientation-vertical {
|
|
38
|
-
--tabstrip-height: var(--vuuTabstrip-height, 100%);
|
|
39
|
-
--tabstrip-width: var(--vuuTabstrip-width, 100px);
|
|
40
|
-
--tab-height: 50px;
|
|
41
|
-
--tab-width: 100%;
|
|
42
|
-
--tab-thumb-height: 0;
|
|
43
|
-
--tab-thumb-left: 0;
|
|
44
|
-
--tab-thumb-top: var(--tab-thumb-offset, 0);
|
|
45
|
-
--tab-thumb-width: 2px;
|
|
46
|
-
|
|
47
|
-
align-self: flex-start;
|
|
48
|
-
display: inline-flex;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.vuuTabstrip-draggingTab .vuuTab {
|
|
52
|
-
pointer-events: none;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.vuuTabstrip-overflowMenu.vuuDropdown {
|
|
57
|
-
--saltIcon-margin: 2px 0 0 0px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.vuuTabstrip-overflowMenu-open {
|
|
61
|
-
--saltButton-background: var(--salt-actionable-secondary-background-active);
|
|
62
|
-
--saltButton-text-color: var(--salt-actionable-secondary-text-color-active);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.vuuTabstrip-overflowMenu-open .saltButton {
|
|
66
|
-
--saltIcon-color: var(--salt-actionable-secondary-foreground-active);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.vuuTabstrip-inner {
|
|
70
|
-
width: 100%;
|
|
71
|
-
align-items: center;
|
|
72
|
-
display: flex;
|
|
73
|
-
flex-basis: auto;
|
|
74
|
-
flex-grow: 0;
|
|
75
|
-
flex-shrink: 1;
|
|
76
|
-
flex-wrap: wrap;
|
|
77
|
-
justify-content: flex-start;
|
|
78
|
-
line-height: var(--tabstrip-height);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.vuuTabstrip.vuuOrientation-vertical .vuuTabstrip-inner {
|
|
82
|
-
flex-direction: column;
|
|
83
|
-
height: auto;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.vuuTabstrip-centered .vuuTabstrip-inner {
|
|
87
|
-
justify-content: center;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/* Styling applied to Draggable wrapper when used to drag a Tab */
|
|
91
|
-
.vuuDraggable[class*="vuuTabstrip"] {
|
|
92
|
-
--tabstrip-display: flex;
|
|
93
|
-
--tabstrip-height: 100%;
|
|
94
|
-
--tabstrip-dragging-display: block;
|
|
95
|
-
|
|
96
|
-
--tabs-tab-background: var(--salt-navigable-primary-background-hover);
|
|
97
|
-
--tabs-tab-before-content: "";
|
|
98
|
-
--tabs-tab-before-background: var(--salt-navigable-indicator-hover);
|
|
99
|
-
--tabs-tab-before-height: var(--tab-activationIndicator-thumb-height);
|
|
100
|
-
--tabs-tab-before-inset: var(--tab-activationIndicator-inset);
|
|
101
|
-
--tabs-tab-before-width: var(--tab-activationIndicator-thumb-width);
|
|
102
|
-
--tabs-tab-cursor: var(--salt-draggable-grab-cursor-active);
|
|
103
|
-
--tabs-tab-position: static;
|
|
104
|
-
|
|
105
|
-
font-size: 12px;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.vuuDraggable-tabstrip-horizontal {
|
|
109
|
-
--overflow-item-height: var(--tabstrip-height);
|
|
110
|
-
--tab-thumb-height: 2px;
|
|
111
|
-
--tab-thumb-left: 0px;
|
|
112
|
-
--tabstrip-display: inline-flex;
|
|
113
|
-
--tabstrip-height: 28px;
|
|
114
|
-
line-height: var(--tabstrip-height);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
.vuuDraggable[class*="tabstrip"] .vuuTab[aria-selected="true"]:before {
|
|
119
|
-
--tabs-tab-before-background: var(--salt-navigable-indicator-active);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/* [data-overflowed] {
|
|
123
|
-
order: 99;
|
|
124
|
-
visibility: hidden;
|
|
125
|
-
} */
|
|
126
|
-
|
|
127
|
-
.vuuTabstrip-overflowMenu-dropTarget:after {
|
|
128
|
-
background: var(--salt-selectable-background-selected);
|
|
129
|
-
content: "";
|
|
130
|
-
position: absolute;
|
|
131
|
-
height: 2px;
|
|
132
|
-
left: 0;
|
|
133
|
-
right: 0;
|
|
134
|
-
bottom: 0;
|
|
135
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
.vuuExpandoInput {
|
|
2
|
-
|
|
3
|
-
--salt-editable-secondary-background: white;
|
|
4
|
-
--expandoInput-height: var(--vuuExpandoInput-height, 26px);
|
|
5
|
-
--expandoInput-padding: var(--vuuExpandoInput-padding, 6px);
|
|
6
|
-
|
|
7
|
-
--saltInput-height: var(--expandoInput-height);
|
|
8
|
-
--saltInput-minHeight: var(--saltInput-height);
|
|
9
|
-
--saltInput-minWidth: var(--vuuExpandoInput-minWidth, 8px);
|
|
10
|
-
|
|
11
|
-
border: var(--vuuExpandoInput-border, none);
|
|
12
|
-
border-radius: var(--vuuExpandoInput-borderRadius, 0);
|
|
13
|
-
color: inherit;
|
|
14
|
-
cursor: default;
|
|
15
|
-
display: inline-block;
|
|
16
|
-
font-size: var(--salt-text-fontSize);
|
|
17
|
-
height: var(--expandoInput-height);
|
|
18
|
-
min-width: calc(var(--saltInput-minWidth) + 2 * var(--expandoInput-padding));
|
|
19
|
-
outline: none;
|
|
20
|
-
padding: 0 var(--expandoInput-padding);
|
|
21
|
-
position: relative;
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.vuuExpandoInput:before {
|
|
26
|
-
content: attr(data-text);
|
|
27
|
-
display: block;
|
|
28
|
-
height: 0px;
|
|
29
|
-
visibility: hidden;
|
|
30
|
-
white-space: pre-wrap;
|
|
31
|
-
}
|
|
32
|
-
.vuuExpandoInput-error {
|
|
33
|
-
border-color: var(--vuu-color-red-50);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.vuuExpandoInput .saltInput {
|
|
37
|
-
font-weight: var(--salt-text-fontWeight);
|
|
38
|
-
left: var(--expandoInput-padding, 0);
|
|
39
|
-
padding: 0;
|
|
40
|
-
outline-style: none;
|
|
41
|
-
position: absolute;
|
|
42
|
-
right: var(--expandoInput-padding, 0);
|
|
43
|
-
top: var(--vuuExpandoInput-top, 2px);
|
|
44
|
-
width: auto;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.vuuExpandoInput .saltInput-activationIndicator {
|
|
48
|
-
display: none;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.vuuExpandoInput-input {
|
|
52
|
-
background-color: transparent;
|
|
53
|
-
border: none;
|
|
54
|
-
box-sizing: content-box;
|
|
55
|
-
display: block;
|
|
56
|
-
flex: 1;
|
|
57
|
-
font: inherit;
|
|
58
|
-
height: 20px;
|
|
59
|
-
margin:0;
|
|
60
|
-
min-width:0;
|
|
61
|
-
outline: none;
|
|
62
|
-
padding: 0;
|
|
63
|
-
}
|
|
64
|
-
|
package/esm/tabstrip/Tab.css
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/* Class applied to root Tab element */
|
|
2
|
-
.vuuTab {
|
|
3
|
-
--saltEditableLabel-padding: 0;
|
|
4
|
-
--saltEditableLabel-height: calc(var(--tabstrip-height) - 2px);
|
|
5
|
-
--saltInputLegacy-minWidth: 4em;
|
|
6
|
-
--saltEditableLabel-top: 2px;
|
|
7
|
-
|
|
8
|
-
--tab-background: var(--vuuTab-background, transparent);
|
|
9
|
-
--tab-cursor: pointer;
|
|
10
|
-
--tab-position: relative;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
align-items: center;
|
|
14
|
-
align-self: stretch;
|
|
15
|
-
background: var(--tab-background);
|
|
16
|
-
border-color: var(--vuuTab-borderColor, transparent);
|
|
17
|
-
border-style: var(--vuuTab-borderStyle, none);
|
|
18
|
-
border-width: var(--vuuTab-borderWidth, 0px);
|
|
19
|
-
border-radius: var(--vuuTab-borderRadius, 0);
|
|
20
|
-
color: var(--salt-content-primary-foreground);
|
|
21
|
-
cursor: var(--vuuTab-cursor, var(--tab-cursor));
|
|
22
|
-
display: var(--tabstrip-display);
|
|
23
|
-
gap: 8px;
|
|
24
|
-
height: var(--vuuTabHeight, var(--tab-height));
|
|
25
|
-
letter-spacing: var(--vuuTab-letterSpacing, var(--tab-letterSpacing, 0));
|
|
26
|
-
margin: 0 var(--tab-spacing) 0 0;
|
|
27
|
-
min-width: var(--vuuTab-minWidth, 40px);
|
|
28
|
-
outline: none;
|
|
29
|
-
padding: var(--vuuTab-padding, 0 var(--salt-spacing-200));
|
|
30
|
-
position: var(--vuuTab-position, var(--tab-position));
|
|
31
|
-
user-select: none;
|
|
32
|
-
width: var(--tab-width)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.vuuTab-selected {
|
|
36
|
-
background: var(--vuuTab-background-selected, var(--tab-background));
|
|
37
|
-
color: var(--salt-content-primary-foreground);
|
|
38
|
-
font-weight: var(--salt-navigable-fontWeight-active);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/* main content aria of Tab */
|
|
42
|
-
.vuuTab-main {
|
|
43
|
-
align-items: center;;
|
|
44
|
-
border: none;
|
|
45
|
-
color: inherit;
|
|
46
|
-
cursor: inherit;
|
|
47
|
-
display: flex;
|
|
48
|
-
font-family: inherit;
|
|
49
|
-
font-size: inherit;
|
|
50
|
-
font-weight: inherit;
|
|
51
|
-
height: calc(var(--tab-height) - var(--tab-thumb-height));
|
|
52
|
-
margin-bottom: var(--tab-thumb-height);
|
|
53
|
-
outline: none;
|
|
54
|
-
position: relative;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.vuuTab-closeable .vuuTab-main {
|
|
58
|
-
border-right: solid transparent var(--salt-size-unit);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.vuuTab .vuuTab-closeButton {
|
|
62
|
-
display: flex;
|
|
63
|
-
align-items: center;
|
|
64
|
-
justify-content: center;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/* the close Button on a closeable Tab*/
|
|
68
|
-
.vuuTab-close-icon {
|
|
69
|
-
display: none;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.salt-density-touch .vuuTab-close-icon,
|
|
73
|
-
.salt-density-low .vuuTab-close-icon {
|
|
74
|
-
display: block;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.salt-density-touch .vuuTab-close-icon-small,
|
|
78
|
-
.salt-density-low .vuuTab-close-icon-small {
|
|
79
|
-
display: none;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.vuuTab .vuuTab-text {
|
|
83
|
-
display: inline-block;
|
|
84
|
-
position: relative;
|
|
85
|
-
overflow: hidden;
|
|
86
|
-
text-align: var(--salt-text-textAlign-embedded);
|
|
87
|
-
text-overflow: ellipsis;
|
|
88
|
-
top: var(--vuuTab-top, var(--tab-top, auto));
|
|
89
|
-
white-space: nowrap;
|
|
90
|
-
/* ensure content sits above focus ring */
|
|
91
|
-
z-index: var(--salt-zIndex-default);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.vuuTab .vuuTab-text:before {
|
|
95
|
-
height: 0;
|
|
96
|
-
content: attr(data-text);
|
|
97
|
-
display: block;
|
|
98
|
-
visibility: hidden;
|
|
99
|
-
font-weight: var(--salt-navigable-fontWeight-active);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* FIXME: these are all focusVisible styles, but with a bespoke inset */
|
|
103
|
-
.vuuTab-editing:after {
|
|
104
|
-
content: "";
|
|
105
|
-
position: absolute;
|
|
106
|
-
top: 0;
|
|
107
|
-
left: 0;
|
|
108
|
-
right: 0;
|
|
109
|
-
bottom: 2px;
|
|
110
|
-
outline-color: var(--salt-focused-outlineColor);
|
|
111
|
-
outline-style: var(--salt-focused-outlineStyle);
|
|
112
|
-
outline-width: var(--salt-focused-outlineWidth);
|
|
113
|
-
outline-offset: -2px;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.vuuTab.vuuFocusVisible {
|
|
117
|
-
background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));
|
|
118
|
-
outline-color: var(--vuuTab-focusVisible-color, var(--salt-focused-outlineColor));
|
|
119
|
-
outline-style: dashed;
|
|
120
|
-
outline-width: 1px;
|
|
121
|
-
outline-offset: -1px;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.vuuTab:before {
|
|
125
|
-
content: var(--tab-before-content, none);
|
|
126
|
-
content: "";
|
|
127
|
-
background: var(--tab-before-background);
|
|
128
|
-
height: var(--tab-before-height);
|
|
129
|
-
inset: var(--tab-before-inset);
|
|
130
|
-
position: absolute;
|
|
131
|
-
width: var(--tab-before-width);
|
|
132
|
-
z-index: 1;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.vuuTabstrip-draggingTab .vuuTab-selected:before {
|
|
136
|
-
--tab-before-content: "";
|
|
137
|
-
--tab-before-background: var(--salt-navigable-indicator-color-active);
|
|
138
|
-
--tab-before-height: var(--tab-thumb-height);
|
|
139
|
-
--tab-before-inset: var(--tab-activationIndicator-inset);
|
|
140
|
-
--tab-before-width: var(--tab-activationIndicator-thumb-width);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
.vuuTab-selected:before {
|
|
145
|
-
--tab-before-content: "";
|
|
146
|
-
background: var(--salt-navigable-indicator-active);
|
|
147
|
-
height: var(--tab-thumb-height);
|
|
148
|
-
position: absolute;
|
|
149
|
-
left: var(--tab-thumb-left);
|
|
150
|
-
bottom: 0px;
|
|
151
|
-
top: var(--tab-thumb-top, auto);
|
|
152
|
-
transition: var(--tab-thumb-transition, none);
|
|
153
|
-
width: var(--tab-thumb-width, 100%);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
.vuuTab:hover:not(.vuuTab-closeHover, .vuuTab-selected) {
|
|
157
|
-
background: var(--vuuTab-hover-background, var(--salt-navigable-primary-background-hover));
|
|
158
|
-
}
|
|
159
|
-
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/* Component class applied to the root element */
|
|
2
|
-
.vuuTabstrip {
|
|
3
|
-
--vuuOverflowContainer-background: transparent;
|
|
4
|
-
--vuuOverflowContainer-borderColor: var(--salt-container-primary-borderColor);
|
|
5
|
-
--vuuOverflowContainer-width: var(--tabstrip-width);
|
|
6
|
-
--tabstrip-dragging-display: none;
|
|
7
|
-
--tabstrip-display: inline-flex;
|
|
8
|
-
--tabstrip-background: transparent;
|
|
9
|
-
|
|
10
|
-
align-self: var(--saltTabs-tabstrip-alignSelf, stretch);
|
|
11
|
-
display: flex;
|
|
12
|
-
font-size: var(--salt-text-fontSize);
|
|
13
|
-
font-weight: var(--vuuTabstrip-fontWeight, var(--salt-text-fontWeight));
|
|
14
|
-
min-width: 28px;
|
|
15
|
-
position: relative;
|
|
16
|
-
overflow: visible;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/* Tabstrip orientation is horizontal */
|
|
20
|
-
.vuuTabstrip.vuuOrientation-horizontal {
|
|
21
|
-
--vuuOverflowContainer-borderStyle: none none solid none;
|
|
22
|
-
--vuuOverflowContainer-borderBottomWidth: 1px;
|
|
23
|
-
|
|
24
|
-
--tabstrip-height: var(--vuuTabstrip-height, var(--overflow-wrapper-height,28px));
|
|
25
|
-
--tabstrip-width: var(--vuuTabstrip-width, 100%);
|
|
26
|
-
--tab-height: var(--tabstrip-height);
|
|
27
|
-
--tab-width: auto;
|
|
28
|
-
--tab-thumb-height: 2px;
|
|
29
|
-
--tab-thumb-left: var(--tab-thumb-offset, 0);
|
|
30
|
-
--tab-thumb-top: auto;
|
|
31
|
-
--tab-thumb-width: var(--tab-thumb-size, 100%);
|
|
32
|
-
align-items: flex-start;
|
|
33
|
-
/* border-bottom: var(--vuuTabstrip-borderBottom, solid 1px var(--salt-container-primary-borderColor)); */
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/* Tabstrip orientation is vertical */
|
|
37
|
-
.vuuTabstrip.vuuOrientation-vertical {
|
|
38
|
-
--tabstrip-height: var(--vuuTabstrip-height, 100%);
|
|
39
|
-
--tabstrip-width: var(--vuuTabstrip-width, 100px);
|
|
40
|
-
--tab-height: 50px;
|
|
41
|
-
--tab-width: 100%;
|
|
42
|
-
--tab-thumb-height: 0;
|
|
43
|
-
--tab-thumb-left: 0;
|
|
44
|
-
--tab-thumb-top: var(--tab-thumb-offset, 0);
|
|
45
|
-
--tab-thumb-width: 2px;
|
|
46
|
-
|
|
47
|
-
align-self: flex-start;
|
|
48
|
-
display: inline-flex;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.vuuTabstrip-draggingTab .vuuTab {
|
|
52
|
-
pointer-events: none;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.vuuTabstrip-overflowMenu.vuuDropdown {
|
|
57
|
-
--saltIcon-margin: 2px 0 0 0px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.vuuTabstrip-overflowMenu-open {
|
|
61
|
-
--saltButton-background: var(--salt-actionable-secondary-background-active);
|
|
62
|
-
--saltButton-text-color: var(--salt-actionable-secondary-text-color-active);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.vuuTabstrip-overflowMenu-open .saltButton {
|
|
66
|
-
--saltIcon-color: var(--salt-actionable-secondary-foreground-active);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.vuuTabstrip-inner {
|
|
70
|
-
width: 100%;
|
|
71
|
-
align-items: center;
|
|
72
|
-
display: flex;
|
|
73
|
-
flex-basis: auto;
|
|
74
|
-
flex-grow: 0;
|
|
75
|
-
flex-shrink: 1;
|
|
76
|
-
flex-wrap: wrap;
|
|
77
|
-
justify-content: flex-start;
|
|
78
|
-
line-height: var(--tabstrip-height);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.vuuTabstrip.vuuOrientation-vertical .vuuTabstrip-inner {
|
|
82
|
-
flex-direction: column;
|
|
83
|
-
height: auto;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.vuuTabstrip-centered .vuuTabstrip-inner {
|
|
87
|
-
justify-content: center;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/* Styling applied to Draggable wrapper when used to drag a Tab */
|
|
91
|
-
.vuuDraggable[class*="vuuTabstrip"] {
|
|
92
|
-
--tabstrip-display: flex;
|
|
93
|
-
--tabstrip-height: 100%;
|
|
94
|
-
--tabstrip-dragging-display: block;
|
|
95
|
-
|
|
96
|
-
--tabs-tab-background: var(--salt-navigable-primary-background-hover);
|
|
97
|
-
--tabs-tab-before-content: "";
|
|
98
|
-
--tabs-tab-before-background: var(--salt-navigable-indicator-hover);
|
|
99
|
-
--tabs-tab-before-height: var(--tab-activationIndicator-thumb-height);
|
|
100
|
-
--tabs-tab-before-inset: var(--tab-activationIndicator-inset);
|
|
101
|
-
--tabs-tab-before-width: var(--tab-activationIndicator-thumb-width);
|
|
102
|
-
--tabs-tab-cursor: var(--salt-draggable-grab-cursor-active);
|
|
103
|
-
--tabs-tab-position: static;
|
|
104
|
-
|
|
105
|
-
font-size: 12px;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.vuuDraggable-tabstrip-horizontal {
|
|
109
|
-
--overflow-item-height: var(--tabstrip-height);
|
|
110
|
-
--tab-thumb-height: 2px;
|
|
111
|
-
--tab-thumb-left: 0px;
|
|
112
|
-
--tabstrip-display: inline-flex;
|
|
113
|
-
--tabstrip-height: 28px;
|
|
114
|
-
line-height: var(--tabstrip-height);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
.vuuDraggable[class*="tabstrip"] .vuuTab[aria-selected="true"]:before {
|
|
119
|
-
--tabs-tab-before-background: var(--salt-navigable-indicator-active);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/* [data-overflowed] {
|
|
123
|
-
order: 99;
|
|
124
|
-
visibility: hidden;
|
|
125
|
-
} */
|
|
126
|
-
|
|
127
|
-
.vuuTabstrip-overflowMenu-dropTarget:after {
|
|
128
|
-
background: var(--salt-selectable-background-selected);
|
|
129
|
-
content: "";
|
|
130
|
-
position: absolute;
|
|
131
|
-
height: 2px;
|
|
132
|
-
left: 0;
|
|
133
|
-
right: 0;
|
|
134
|
-
bottom: 0;
|
|
135
|
-
}
|