@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.
Files changed (34) hide show
  1. package/cjs/expando-input/ExpandoInput.css.js +6 -0
  2. package/cjs/expando-input/ExpandoInput.css.js.map +1 -0
  3. package/cjs/expando-input/ExpandoInput.js +9 -0
  4. package/cjs/expando-input/ExpandoInput.js.map +1 -1
  5. package/cjs/tabstrip/Tab.css.js +6 -0
  6. package/cjs/tabstrip/Tab.css.js.map +1 -0
  7. package/cjs/tabstrip/Tab.js +9 -0
  8. package/cjs/tabstrip/Tab.js.map +1 -1
  9. package/cjs/tabstrip/Tabstrip.css.js +6 -0
  10. package/cjs/tabstrip/Tabstrip.css.js.map +1 -0
  11. package/cjs/tabstrip/Tabstrip.js +9 -0
  12. package/cjs/tabstrip/Tabstrip.js.map +1 -1
  13. package/esm/expando-input/ExpandoInput.css.js +4 -0
  14. package/esm/expando-input/ExpandoInput.css.js.map +1 -0
  15. package/esm/expando-input/ExpandoInput.js +9 -0
  16. package/esm/expando-input/ExpandoInput.js.map +1 -1
  17. package/esm/tabstrip/Tab.css.js +4 -0
  18. package/esm/tabstrip/Tab.css.js.map +1 -0
  19. package/esm/tabstrip/Tab.js +9 -0
  20. package/esm/tabstrip/Tab.js.map +1 -1
  21. package/esm/tabstrip/Tabstrip.css.js +4 -0
  22. package/esm/tabstrip/Tabstrip.css.js.map +1 -0
  23. package/esm/tabstrip/Tabstrip.js +9 -0
  24. package/esm/tabstrip/Tabstrip.js.map +1 -1
  25. package/package.json +7 -7
  26. package/types/expando-input/ExpandoInput.d.ts +0 -1
  27. package/types/tabstrip/Tab.d.ts +0 -1
  28. package/types/tabstrip/Tabstrip.d.ts +0 -1
  29. package/cjs/expando-input/ExpandoInput.css +0 -64
  30. package/cjs/tabstrip/Tab.css +0 -159
  31. package/cjs/tabstrip/Tabstrip.css +0 -135
  32. package/esm/expando-input/ExpandoInput.css +0 -64
  33. package/esm/tabstrip/Tab.css +0 -159
  34. 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":";;;;;;;AAMA,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,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;;;;"}
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":";;;;;;"}
@@ -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);
@@ -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 cx from \"clsx\";\nimport { MenuActionHandler } from \"@vuu-ui/vuu-data-types\";\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 \"./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 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","useRef","useForkRef","useCallback","jsx","EditableLabel","editable","jsxs","TabMenu"],"mappings":"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"}
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":";;;;;;"}
@@ -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\";\n\nimport \"./Tabstrip.css\";\nimport { IconButton } from \"../icon-button\";\nimport { OverflowContainer } from \"../overflow-container\";\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 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":["useRef","useTabstrip","useId","useMemo","asReactElements","className","createElement","IconButton","jsxs","Fragment","jsx","OverflowContainer"],"mappings":"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"}
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":";;;;;AAMA,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,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;;;;"}
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":";;;;"}
@@ -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);
@@ -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 cx from \"clsx\";\nimport { MenuActionHandler } from \"@vuu-ui/vuu-data-types\";\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 \"./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 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":";;;;;;;AAoBA,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,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;;;;"}
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":"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"}
@@ -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":";;;;"}
@@ -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\";\n\nimport \"./Tabstrip.css\";\nimport { IconButton } from \"../icon-button\";\nimport { OverflowContainer } from \"../overflow-container\";\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 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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"}
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.41",
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.41",
8
- "@vuu-ui/vuu-table-types": "0.8.41"
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.41",
12
- "@vuu-ui/vuu-popups": "0.8.41",
13
- "@vuu-ui/vuu-table": "0.8.41",
14
- "@vuu-ui/vuu-utils": "0.8.41",
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",
@@ -1,6 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { VuuInputProps } from "../vuu-input";
3
- import "./ExpandoInput.css";
4
3
  export interface ExpandoInputProps extends Omit<VuuInputProps, "onCommit"> {
5
4
  onCommit?: VuuInputProps["onCommit"];
6
5
  }
@@ -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
-
@@ -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
-
@@ -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
- }