From 35a118495068b6284c53a114dea9ed0f0955fa3c Mon Sep 17 00:00:00 2001 From: Hadas Swimmer Date: Tue, 11 Nov 2025 23:36:55 +0200 Subject: [PATCH 1/9] scrollable tabs --- .github/workflows/main.yml | 70 ++++++++ .npmignore | 32 ++++ VERSION | 1 + docs/README.md | 33 ++++ docs/changes/2025-10-28-tabs-scrollable.md | 63 +++++++ docs/changes/README.md | 71 ++++++++ package.json | 29 +++- src/components/TabsHeader/Tab/Tab.scss | 5 + src/components/TabsHeader/TabsHeader.js | 185 +++++++++++++++------ src/components/TabsHeader/TabsHeader.scss | 61 ++++++- webpack.config.prod.js | 12 +- 11 files changed, 497 insertions(+), 65 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 .npmignore create mode 100644 VERSION create mode 100644 docs/README.md create mode 100644 docs/changes/2025-10-28-tabs-scrollable.md create mode 100644 docs/changes/README.md diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..6f6ee03d1 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,70 @@ +name: NPM Publish. + +on: + push: + branches: + - 11.3.scrollable-tabs + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Configure Git identity + run: | + git config user.email "$(git log -1 --pretty=format:'%ae')" + git config user.name "$(git log -1 --pretty=format:'%an')" + + - name: Install dependencies + run: npm ci + + - name: Bump version + continue-on-error: true + uses: remorses/bump-version@js + with: + version_file: ./VERSION + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Read VERSION + id: package + uses: juliangruber/read-file-action@v1 + with: + path: ./VERSION + - name: Echo VERSION + run: echo "${{ steps.package.outputs.content }}" + + - name: Install jq + run: sudo apt-get install jq + + + + - name: Set env vars + id: setEnvVars + run: | + echo "VERSION=${{ steps.package.outputs.content }}" >> $GITHUB_ENV; + + + - name: Bump version in package.json + run: | + current_version=$(jq -r .version package.json) + new_version=$(node -p "require('semver').inc('$current_version', 'patch')") + jq ".version |= \"$VERSION\"" package.json > package.json.tmp + mv package.json.tmp package.json + + + - name: Publish to GitHub Packages + run: npm publish + env: + AUTH_GITHUB_TOKEN: ${{ secrets.AUTH_GITHUB_TOKEN }} + + - name: Push tags to GitHub + run: git push origin --tags diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000..992f290f0 --- /dev/null +++ b/.npmignore @@ -0,0 +1,32 @@ +# Source files - we only want to publish the build folder +src/ +assets/ +docs/ +eslint-plugin-custom/ +i18n/ +jest/ +lib/ +scripts/ +storybook-static/ + +# Config files +.eslintrc +.gitignore +.prettierrc +jest.config.js +jsconfig.json +webpack.config*.js +dev-server.js +postcss.config.js +*.md +!build/ + +# Development dependencies +node_modules/ +.git/ +.vscode/ + +# Test files +**/*.test.js +**/*.spec.js +__tests__/ diff --git a/VERSION b/VERSION new file mode 100644 index 000000000..fcfed5b06 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +11.3.0 \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..09681feca --- /dev/null +++ b/docs/README.md @@ -0,0 +1,33 @@ +# Documentation + +This directory contains project documentation. + +## Structure + +``` +docs/ +├── changes/ # Documentation for all project changes +│ ├── README.md # Guidelines and index +│ └── YYYY-MM-DD-*.md # Individual change documents +└── README.md # This file +``` + +## Directories + +### changes/ +Contains detailed documentation for all significant changes made to the project. Each change is documented in a separate markdown file with a date prefix. + +See [changes/README.md](./changes/README.md) for guidelines and the full index. + +## Contributing + +When making significant changes to the project: + +1. Create a new markdown file in `docs/changes/` with the format `YYYY-MM-DD-brief-description.md` +2. Follow the template provided in `docs/changes/README.md` +3. Update the index in `docs/changes/README.md` +4. Commit the documentation with your changes + +--- + +**Last Updated:** October 28, 2025 diff --git a/docs/changes/2025-10-28-tabs-scrollable.md b/docs/changes/2025-10-28-tabs-scrollable.md new file mode 100644 index 000000000..8041866af --- /dev/null +++ b/docs/changes/2025-10-28-tabs-scrollable.md @@ -0,0 +1,63 @@ +# TabsHeader Component Changes - Adding Scrollable Tabs with Navigation Buttons + +## Summary of Changes +Added horizontal scrolling functionality to tabs with automatic navigation buttons. + +## Changes Made + +### 1. **TabsHeader.js** +- ✅ Added state to track button visibility: `showLeftButton`, `showRightButton` +- ✅ Added `useEffect` that checks when to display buttons (when there's overflow) +- ✅ `scrollTabs(direction)` function that scrolls by 200px +- ✅ Auto-scroll to active tab using `scrollIntoView` +- ✅ New wrapper `.TabsHeader-wrapper` with scroll buttons on both sides +- ✅ Dynamic className: `has-left-button`, `has-right-button` + +### 2. **TabsHeader.scss** +- ✅ `.TabsHeader-wrapper` - container with position relative +- ✅ `.scroll-button` - buttons with absolute positioning and high z-index +- ✅ `overflow-x: auto` + `scroll-behavior: smooth` on `.TabsHeader` +- ✅ Hidden scrollbar (webkit, firefox, IE) +- ✅ `margin-left/right: 32px` when buttons are displayed (to prevent overlap) +- ✅ box-shadow matching tabs: `inset 0 -1px 0 0 var(--multi-tab-divider)` + +### 3. **Tab.scss** +- ✅ `flex-shrink: 0` - prevents tab shrinking during scrolling +- ✅ `margin-left: 8px` for first tab - prevents clipping +- ✅ `.divider { display: none }` - removed dividers (don't work well with scrolling) + +## New Features + +### Auto-Scroll +When a new tab is opened or switching to another tab, it automatically scrolls to the center of the view. + +### Smart Navigation Buttons +- **Left button (◀)** - appears only when there's content to scroll left +- **Right button (▶)** - appears only when there's content to scroll right +- Each click scrolls 200px +- Automatically updates with scrolling or window resize + +## Usage Example +No code changes needed - the functionality works automatically: +1. Open multiple tabs until they exceed the screen width +2. Scroll buttons will appear automatically +3. Click the buttons or use the mouse wheel to scroll +4. Open a new tab - it will automatically scroll into view + +## Browser Compatibility +- ✅ Chrome/Edge - Full +- ✅ Firefox - Full +- ✅ Safari - Full +- ✅ IE11 - Full (with fallback) + +## Performance +- Overflow checking occurs only when: + - Tab list changes + - Scrolling + - Window resize +- Scrolling with `smooth` behavior for a pleasant experience +- Optimized z-index to prevent layer issues + +--- +**Date:** October 28, 2025 +**Branch:** 11.3 diff --git a/docs/changes/README.md b/docs/changes/README.md new file mode 100644 index 000000000..bec440265 --- /dev/null +++ b/docs/changes/README.md @@ -0,0 +1,71 @@ +# Project Changes Documentation + +This directory contains documentation for all significant changes made to the webviewer-ui project. + +## Structure + +Each change should be documented in a separate markdown file with the following naming convention: +``` +YYYY-MM-DD-brief-description.md +``` + +For example: +- `2025-10-28-tabs-scrollable.md` +- `2025-11-05-new-feature-name.md` + +## Template for New Changes + +When documenting a new change, create a new file using this template: + +```markdown +# [Feature/Component Name] - [Brief Description] + +## Summary of Changes +Brief overview of what was changed and why. + +## Changes Made + +### 1. **File/Component Name** +- ✅ Change 1 +- ✅ Change 2 +- ✅ Change 3 + +### 2. **Another File/Component** +- ✅ Change 1 +- ✅ Change 2 + +## New Features (if applicable) + +### Feature Name +Description of the feature and how it works. + +## Usage Example (if applicable) +How to use the new feature or how the changes affect existing usage. + +## Browser Compatibility (if applicable) +List of supported browsers and any known issues. + +## Performance Considerations (if applicable) +Any performance impacts or optimizations. + +--- +**Date:** [Date] +**Branch:** [Branch Name] +**Author:** [Your Name] +``` + +## Guidelines + +1. **Be Specific**: Include file names, function names, and line numbers where relevant. +2. **Include Code Examples**: Show before/after code when it helps clarify the change. +3. **Document Breaking Changes**: Clearly mark any breaking changes. +4. **Add Visual Examples**: Include screenshots or diagrams if they help explain the change. +5. **Link to Issues/PRs**: Reference related issues or pull requests. + +## Index of Changes + +- [2025-10-28: Tabs Scrollable with Navigation Buttons](./2025-10-28-tabs-scrollable.md) + +--- + +**Note:** Always update this index when adding a new change document. diff --git a/package.json b/package.json index e02bcbb46..edfe3684d 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,28 @@ { - "name": "webviewer-ui", + "name": "@madisoncres/webviewer-ui", "author": "Apryse Software Inc.", "version": "11.3.0", - "description": "WebViewer UI built in React", - "main": "src/index.js", + "description": "WebViewer UI built in React (bundled with all dependencies for Web Component use)", + "main": "build/webviewer-ui.min.js", + "license": "SEE LICENSE IN LICENSE", + "keywords": [ + "webviewer", + "pdf", + "viewer", + "ui", + "react", + "document" + ], + "files": [ + "build/**/*", + "LICENSE", + "README.md" + ], "scripts": { + "prepublishOnly": "npm run build", "start": "npx babel-node ./dev-server.js", "download-webviewer": "npx @pdftron/webviewer-downloader --core-only --path ./lib", - "postinstall": "cp ./node_modules/@storybook/react-dom-shim/dist/react-16.js ./node_modules/@storybook/react-dom-shim/dist/react-18.js && cp ./node_modules/@storybook/react-dom-shim/dist/react-16.mjs ./node_modules/@storybook/react-dom-shim/dist/react-18.mjs", + "//postinstall": "cp ./node_modules/@storybook/react-dom-shim/dist/react-16.js ./node_modules/@storybook/react-dom-shim/dist/react-18.js && cp ./node_modules/@storybook/react-dom-shim/dist/react-16.mjs ./node_modules/@storybook/react-dom-shim/dist/react-18.mjs", "lint": "eslint ./src --fix --ext .js,.jsx,.ts,.tsx", "lint:ci": "eslint ./src --quiet --ext .js,.jsx,.ts,.tsx", "clean": "rimraf build", @@ -20,7 +35,7 @@ "jest:watch": "jest --watch", "lint:styles": "stylelint '**/*.scss'" }, - "dependencies": { + "devDependencies": { "@pdftron/webviewer-react-toolkit": "^0.7.11", "autolinker": "^3.11.1", "blob-stream": "^0.1.3", @@ -54,9 +69,7 @@ "redux": "^4.0.5", "redux-persist": "^6.0.0", "redux-thunk": "^2.3.0", - "uuid": "^9.0.0" - }, - "devDependencies": { + "uuid": "^9.0.0", "@babel/cli": "^7.8.3", "@babel/core": "^7.8.3", "@babel/eslint-parser": "^7.16.0", diff --git a/src/components/TabsHeader/Tab/Tab.scss b/src/components/TabsHeader/Tab/Tab.scss index b6e74701f..b33850e88 100644 --- a/src/components/TabsHeader/Tab/Tab.scss +++ b/src/components/TabsHeader/Tab/Tab.scss @@ -5,6 +5,11 @@ display: flex; align-items: center; padding-top: 2px; + flex-shrink: 0; + + &:first-child { + margin-left: 8px; + } .Tab { height: 30px; diff --git a/src/components/TabsHeader/TabsHeader.js b/src/components/TabsHeader/TabsHeader.js index 0d75d5c9d..1dc5b7012 100644 --- a/src/components/TabsHeader/TabsHeader.js +++ b/src/components/TabsHeader/TabsHeader.js @@ -29,6 +29,9 @@ const TabsHeader = () => { const [hovering, setHovering] = useState(); const [currentFocusIndex, setCurrentFocusIndex] = useState(-1); const [focusableElements, setFocusableElements] = useState([]); + const [showLeftButton, setShowLeftButton] = useState(false); + const [showRightButton, setShowRightButton] = useState(false); + const [isHeaderMounted, setIsHeaderMounted] = useState(false); const prevFocusableElementsRef = useRef([]); const hoveredTab = useRef(); const tabsHeaderRef = useRef(); @@ -71,14 +74,56 @@ const TabsHeader = () => { hoveredTab.current = div; }, []); - const breakpoint = Math.floor((width - 80) / 180); // Browser width minus a space for the add button, divided by max-width of tab + const breakpoint = 100//Math.floor((width - 80) / 180); // Browser width minus a space for the add button, divided by max-width of tab const activeIndex = currTabs?.findIndex((t) => t.id === activeTab); + //useEffect(() => { + // if (activeIndex >= breakpoint && breakpoint > 0 && tabManager) { + // tabManager.moveTab(activeIndex, breakpoint - 1); + // } + //}, [breakpoint, activeIndex, tabManager]); + useEffect(() => { - if (activeIndex >= breakpoint && breakpoint > 0 && tabManager) { - tabManager.moveTab(activeIndex, breakpoint - 1); + if (tabsHeaderRef.current && activeTab) { + const activeTabElement = tabsHeaderRef.current.querySelector('.draggable-tab.active'); + if (activeTabElement) { + activeTabElement.scrollIntoView(true); + } } - }, [breakpoint, activeIndex, tabManager]); + }, [activeTab]); + + useEffect(() => { + const checkScrollButtons = () => { + if (tabsHeaderRef.current) { + const { scrollLeft, scrollWidth, clientWidth } = tabsHeaderRef.current; + setShowLeftButton(scrollLeft > 0); + setShowRightButton(scrollLeft < scrollWidth - clientWidth - 1); + } + }; + + checkScrollButtons(); + const container = tabsHeaderRef.current; + console.log('Container value:', container, 'tabsHeaderRef.current:', tabsHeaderRef.current); + if (container) { + container.addEventListener('scroll', checkScrollButtons); + window.addEventListener('resize', checkScrollButtons); + } + + return () => { + if (container) { + container.removeEventListener('scroll', checkScrollButtons); + } + window.removeEventListener('resize', checkScrollButtons); + }; + }, [currTabs, tabs, isHeaderMounted]); + + const scrollTabs = (direction) => { + if (tabsHeaderRef.current) { + const scrollAmount = 200; + const newScrollLeft = tabsHeaderRef.current.scrollLeft + (direction === 'left' ? -scrollAmount : scrollAmount); + tabsHeaderRef.current.scrollTo({ left: newScrollLeft, behavior: 'smooth' }); + } + }; useEffect(() => { if (tabsHeaderRef.current) { @@ -240,14 +285,14 @@ const TabsHeader = () => { return [null, null]; } const activeIndex = currTabs?.findIndex((t) => t.id === activeTab); - if (activeIndex >= breakpoint && breakpoint > 0 && tabManager) { - tabManager.moveTab(activeIndex, breakpoint - 1); - } + //if (activeIndex >= breakpoint && breakpoint > 0 && tabManager) { + // tabManager.moveTab(activeIndex, breakpoint - 1); + //} const renderedTabs = currTabs.map((tab, index) => { const isActive = tab.id === activeTab; const fileName = removeFileNameExtension(tab.options.filename); const tabId = `tab-${fileName}-${tab.id}`; - if (index < breakpoint) { + //if (index < breakpoint) { return onDragStart(e, index)} onDragOver={(e) => onDragOver(e, index, tab)} @@ -265,16 +310,16 @@ const TabsHeader = () => { ariaCurrent={isActive ? 'page' : undefined} tabNameHandler={tabNameHandler} />; - } - return onDragStart(e, index)} - tab={tab} - key={tab.id} - id={tabId} - closeTab={() => deleteTab(tab.id)} - setActive={() => setActiveTab(tab.id)} - onDragEnd={() => onDragEnd()} - />; + // } + // return onDragStart(e, index)} + // tab={tab} + // key={tab.id} + // id={tabId} + // closeTab={() => deleteTab(tab.id)} + // setActive={() => setActiveTab(tab.id)} + // onDragEnd={() => onDragEnd()} + // />; }); return [renderedTabs?.slice(0, breakpoint), renderedTabs?.slice(breakpoint, renderedTabs.length)]; }, [tabManager, currTabs, breakpoint, setActiveTab, deleteTab, onDragEnd, onDragStart, onDragOver, onDragLeave]); @@ -282,9 +327,9 @@ const TabsHeader = () => { async function setActiveTab(id) { dispatch(actions.closeElement('tabMenu')); const tabIndex = currTabs.findIndex((t) => t.id === id); - if (tabIndex >= breakpoint) { - tabManager.moveTab(tabIndex, breakpoint - 1); - } + //if (tabIndex >= breakpoint) { + // tabManager.moveTab(tabIndex, breakpoint - 1); + //} activeTab !== id && await tabManager.setActiveTab(id, true); } @@ -299,45 +344,75 @@ const TabsHeader = () => { } return ( -
- {tabs} -
- {additionalTabs?.length > 0 && } +
+ {showLeftButton && (
+ {showRightButton && ( +
); }; -export default TabsHeader; \ No newline at end of file +export default TabsHeader; diff --git a/src/components/TabsHeader/TabsHeader.scss b/src/components/TabsHeader/TabsHeader.scss index 48635d775..9445839c4 100644 --- a/src/components/TabsHeader/TabsHeader.scss +++ b/src/components/TabsHeader/TabsHeader.scss @@ -1,3 +1,45 @@ +.TabsHeader-wrapper { + display: flex; + width: 100%; + position: relative; + align-items: flex-end; + background: var(--multi-tab-header-background); + height: var(--multi-tab-header-height); + + .scroll-button { + position: absolute; + top: 0; + bottom: 0; + width: 32px; + height: 34px; + z-index: 10; + background: var(--multi-tab-header-background); + border: none; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + box-shadow: inset 0 -1px 0 0 var(--multi-tab-divider); + + .Icon { + width: 20px; + height: 20px; + } + + &:hover { + background-color: var(--view-header-button-hover); + } + + &.scroll-button-left { + left: 0; + } + + &.scroll-button-right { + right: 0; + } + } +} + .TabsHeader { display: flex; width: 100%; @@ -5,8 +47,25 @@ align-items: flex-end; background: var(--multi-tab-header-background); overflow-y: hidden; - overflow-x: hidden; + overflow-x: auto; height: var(--multi-tab-header-height); + scroll-behavior: smooth; + + &::-webkit-scrollbar { + height: 0; + display: none; + } + + scrollbar-width: none; + -ms-overflow-style: none; + + &.has-left-button { + margin-left: 32px; + } + + &.has-right-button { + margin-right: 32px; + } &:has(:focus-visible) { outline: var(--focus-visible-outline) !important; diff --git a/webpack.config.prod.js b/webpack.config.prod.js index 21d1d81b6..77458d59b 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -1,6 +1,7 @@ const path = require('path'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const NodePolyfillPlugin = require('node-polyfill-webpack-plugin'); +const webpack = require('webpack'); // const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; // const MiniCssExtractPlugin = require('mini-css-extract-plugin'); @@ -13,7 +14,13 @@ module.exports = { filename: 'webviewer-ui.min.js', chunkFilename: 'chunks/[name].chunk.js', publicPath: './', + library: { + name: 'WebViewerUI', + type: 'umd', + umdNamedDefine: true, + }, }, + // No externals - bundle everything including React for web component use plugins: [ new CopyWebpackPlugin([ { @@ -35,6 +42,10 @@ module.exports = { }, ]), new NodePolyfillPlugin(), + new webpack.SourceMapDevToolPlugin({ + filename: '[file].map', + append: '\n//# sourceMappingURL=[url]', + }), // new MiniCssExtractPlugin({ // filename: 'style.css', // chunkFilename: 'chunks/[name].chunk.css' @@ -190,5 +201,4 @@ module.exports = { minSize: 0, }, }, - devtool: 'source-map', }; From 90e178480c4a42c49cc5dc3d008e14f8803b4d4e Mon Sep 17 00:00:00 2001 From: Hadas Swimmer Date: Tue, 11 Nov 2025 23:39:12 +0200 Subject: [PATCH 2/9] .npmrc --- .npmrc | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..07f8b071a --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +legacy-peer-deps=true +@madisoncres:registry=https://npm.pkg.github.com +//npm.pkg.github.com/:_authToken=${AUTH_GITHUB_TOKEN} From 52a78b1a4a67a9f095cf934e490573190e27b1cd Mon Sep 17 00:00:00 2001 From: bump_version Date: Tue, 11 Nov 2025 21:41:52 +0000 Subject: [PATCH 3/9] Version 11.3.1 [skip ci] --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index fcfed5b06..f226094f1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.3.0 \ No newline at end of file +11.3.1 \ No newline at end of file From 44e8ed8e208d1609052ce7a983404ec245c8ac27 Mon Sep 17 00:00:00 2001 From: oryosefi2 <58735959+oryosefi2@users.noreply.github.com> Date: Wed, 12 Nov 2025 09:23:06 +0200 Subject: [PATCH 4/9] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6f6ee03d1..0e3f2d4bf 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: NPM Publish. +name: NPM Publish on: push: From 710b1ba25ee62cdae7c86877345cc7dfed88df27 Mon Sep 17 00:00:00 2001 From: bump_version Date: Wed, 12 Nov 2025 07:25:44 +0000 Subject: [PATCH 5/9] Version 11.3.2 [skip ci] --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index f226094f1..117224613 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.3.1 \ No newline at end of file +11.3.2 \ No newline at end of file From 80894ee97c75d45929992849303b2303d990d3ff Mon Sep 17 00:00:00 2001 From: oryosefi2 <58735959+oryosefi2@users.noreply.github.com> Date: Wed, 12 Nov 2025 09:50:50 +0200 Subject: [PATCH 6/9] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0e3f2d4bf..6f6ee03d1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: NPM Publish +name: NPM Publish. on: push: From 999882d94b0fda3ca441b9fa9cfc6e164f2f6d87 Mon Sep 17 00:00:00 2001 From: bump_version Date: Wed, 12 Nov 2025 07:53:22 +0000 Subject: [PATCH 7/9] Version 11.3.3 [skip ci] --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 117224613..415b4c75e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.3.2 \ No newline at end of file +11.3.3 \ No newline at end of file From c223f33167a01fc30d235aa1e88336c465b9fb8c Mon Sep 17 00:00:00 2001 From: Hadas Swimmer Date: Wed, 12 Nov 2025 16:43:33 +0200 Subject: [PATCH 8/9] fix padding --- src/components/TabsHeader/Tab/Tab.scss | 4 ---- src/components/TabsHeader/TabsHeader.scss | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/TabsHeader/Tab/Tab.scss b/src/components/TabsHeader/Tab/Tab.scss index b33850e88..09a652c6a 100644 --- a/src/components/TabsHeader/Tab/Tab.scss +++ b/src/components/TabsHeader/Tab/Tab.scss @@ -7,10 +7,6 @@ padding-top: 2px; flex-shrink: 0; - &:first-child { - margin-left: 8px; - } - .Tab { height: 30px; min-width: 104px; diff --git a/src/components/TabsHeader/TabsHeader.scss b/src/components/TabsHeader/TabsHeader.scss index 9445839c4..9233e92f5 100644 --- a/src/components/TabsHeader/TabsHeader.scss +++ b/src/components/TabsHeader/TabsHeader.scss @@ -50,6 +50,7 @@ overflow-x: auto; height: var(--multi-tab-header-height); scroll-behavior: smooth; + margin-right: 4px; &::-webkit-scrollbar { height: 0; From d11899c06fed2dccea802e0b6b26cd421efb6cc8 Mon Sep 17 00:00:00 2001 From: bump_version Date: Wed, 12 Nov 2025 14:46:41 +0000 Subject: [PATCH 9/9] Version 11.3.4 [skip ci] --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 415b4c75e..bcd4de5ec 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.3.3 \ No newline at end of file +11.3.4 \ No newline at end of file