├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── in-solidarity.yml ├── mergeable.yml └── workflows │ ├── greetings.yml │ └── stale.yml ├── .gitignore ├── .husky ├── .gitignore ├── commit-msg └── pre-commit ├── .nvmrc ├── .size-limit ├── .storybook ├── custom │ ├── components │ │ ├── Community.js │ │ ├── CopyButton.js │ │ ├── Description.js │ │ ├── DocsPage.js │ │ ├── Footer.js │ │ ├── Header.js │ │ ├── Import.js │ │ └── Toc.js │ ├── custom.scss │ ├── fundamentals.js │ └── toc.scss ├── main.js ├── manager-head.html ├── preview-head.html ├── preview.js └── static │ ├── assets │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ ├── 06.png │ ├── 07.png │ ├── 08.png │ ├── 09.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── github.png │ ├── headshot-male.jpg │ ├── index.js │ ├── linkedin.png │ ├── nature-2.jpg │ ├── nature.jpg │ ├── sap.png │ ├── slack.png │ └── twitter.png │ ├── favicon.ico │ ├── logo.svg │ ├── logo_text.png │ └── unnormalize.css ├── .stylelintrc ├── .travis.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE.txt ├── LICENSES └── Apache-2.0.txt ├── README.md ├── REUSE.toml ├── __mocks__ └── popper.js.js ├── babel.config.js ├── ci-scripts ├── publish-rc.sh ├── publish.sh └── setup-npm.sh ├── commitlint.config.js ├── config └── jest │ ├── CSSStub.js │ ├── jest.config.js │ └── setup.js ├── data └── countries.json ├── devtools ├── buildIndexFiles.js └── buildVisualStories.js ├── eslint-local-rules.js ├── index.d.ts ├── local-rules ├── classnames-wrap.js └── sort-imports.js ├── metadata.yaml ├── netlify.toml ├── package-lock.json ├── package.json ├── scripts ├── copy-assets.js └── publish-release.sh ├── src ├── ActionBar │ ├── ActionBar.js │ ├── ActionBar.test.js │ └── __stories__ │ │ ├── ActionBar.stories.js │ │ └── __snapshots__ │ │ └── ActionBar.stories.storyshot ├── Avatar │ ├── Avatar.js │ ├── Avatar.test.js │ └── __stories__ │ │ ├── Avatar.stories.js │ │ └── __snapshots__ │ │ └── Avatar.stories.storyshot ├── Bar │ ├── Bar.js │ ├── Bar.test.js │ └── __stories__ │ │ ├── Bar.stories.js │ │ └── __snapshots__ │ │ └── Bar.stories.storyshot ├── Breadcrumb │ ├── Breadcrumb.js │ ├── Breadcrumb.test.js │ ├── _BreadcrumbItem.js │ └── __stories__ │ │ ├── Breadcrumb.stories.js │ │ └── __snapshots__ │ │ └── Breadcrumb.stories.storyshot ├── BusyIndicator │ ├── BusyIndicator.js │ ├── BusyIndicator.test.js │ └── __stories__ │ │ ├── BusyIndicator.stories.js │ │ └── __snapshots__ │ │ └── BusyIndicator.stories.storyshot ├── Button │ ├── Button.js │ ├── Button.test.js │ ├── ButtonSegmented.js │ ├── ButtonSegmented.test.js │ └── __stories__ │ │ ├── Button.stories.js │ │ ├── ButtonSegmented.stories.js │ │ └── __snapshots__ │ │ ├── Button.stories.storyshot │ │ └── ButtonSegmented.stories.storyshot ├── Calendar │ ├── Calendar.js │ ├── Calendar.test.js │ └── __stories__ │ │ └── Calendar.stories.js ├── ComboboxInput │ ├── ComboboxInput.js │ ├── ComboboxInput.test.js │ └── __stories__ │ │ ├── ComboboxInput.stories.js │ │ └── __snapshots__ │ │ └── ComboboxInput.stories.storyshot ├── Counter │ ├── Counter.js │ ├── Counter.test.js │ └── __stories__ │ │ ├── Counter.stories.js │ │ └── __snapshots__ │ │ └── Counter.stories.storyshot ├── DatePicker │ ├── DatePicker.js │ ├── DatePicker.test.js │ ├── __stories__ │ │ ├── DatePicker.stories.js │ │ └── __snapshots__ │ │ │ └── DatePicker.stories.storyshot │ └── _validDateLookup.js ├── Dialog │ ├── Dialog.js │ ├── Dialog.test.js │ └── __stories__ │ │ ├── Dialog.stories.js │ │ └── __snapshots__ │ │ └── Dialog.stories.storyshot ├── Forms │ ├── Checkbox.js │ ├── Checkbox.test.js │ ├── FormFieldset.js │ ├── FormFieldset.test.js │ ├── FormGroup.js │ ├── FormGroup.test.js │ ├── FormInput.js │ ├── FormInput.test.js │ ├── FormItem.js │ ├── FormItem.test.js │ ├── FormLabel.js │ ├── FormLabel.test.js │ ├── FormLegend.js │ ├── FormLegend.test.js │ ├── FormMessage.test.js │ ├── FormRadioGroup.js │ ├── FormRadioGroup.test.js │ ├── FormRadioItem.js │ ├── FormRadioItem.test.js │ ├── FormTextArea.test.js │ ├── FormTextarea.js │ ├── _FormMessage.js │ ├── _FormValidationOverlay.js │ ├── _FormValidationOverlay.test.js │ └── __stories__ │ │ ├── Checkbox.stories.js │ │ ├── FormFieldset.stories.js │ │ ├── FormGroup.stories.js │ │ ├── FormInput.stories.js │ │ ├── FormItem.stories.js │ │ ├── FormLabel.stories.js │ │ ├── FormLegend.stories.js │ │ ├── FormRadioGroup.stories.js │ │ ├── FormTextarea.stories.js │ │ └── __snapshots__ │ │ ├── Checkbox.stories.storyshot │ │ ├── FormFieldset.stories.storyshot │ │ ├── FormGroup.stories.storyshot │ │ ├── FormInput.stories.storyshot │ │ ├── FormItem.stories.storyshot │ │ ├── FormLabel.stories.storyshot │ │ ├── FormLegend.stories.storyshot │ │ ├── FormRadioGroup.stories.storyshot │ │ ├── FormSelect.stories.storyshot │ │ └── FormTextarea.stories.storyshot ├── Icon │ ├── Icon.js │ ├── Icon.test.js │ └── __stories__ │ │ ├── Icon.stories.js │ │ └── __snapshots__ │ │ └── Icon.stories.storyshot ├── InfoLabel │ ├── InfoLabel.js │ ├── InfoLabel.test.js │ └── __stories__ │ │ ├── InfoLabel.stories.js │ │ └── __snapshots__ │ │ └── InfoLabel.stories.storyshot ├── InputGroup │ ├── InputGroup.js │ ├── InputGroup.test.js │ ├── InputGroupAddon.test.js │ ├── _InputGroupAddon.js │ └── __stories__ │ │ ├── InputGroup.stories.js │ │ └── __snapshots__ │ │ └── InputGroup.stories.storyshot ├── LayoutGrid │ ├── Column.js │ ├── Container.js │ ├── LayoutGrid.test.js │ ├── Row.js │ ├── __stories__ │ │ ├── LayoutGrid.stories.js │ │ └── __snapshots__ │ │ │ └── LayoutGrid.stories.storyshot │ └── _layoutGridUtils.js ├── LayoutPanel │ ├── LayoutPanel.js │ ├── LayoutPanel.test.js │ ├── LayoutPanelActions.test.js │ ├── LayoutPanelBody.test.js │ ├── LayoutPanelFilters.test.js │ ├── LayoutPanelFooter.test.js │ ├── LayoutPanelHead.test.js │ ├── LayoutPanelHeader.test.js │ ├── _LayoutPanelActions.js │ ├── _LayoutPanelBody.js │ ├── _LayoutPanelFilters.js │ ├── _LayoutPanelFooter.js │ ├── _LayoutPanelHead.js │ ├── _LayoutPanelHeader.js │ └── __stories__ │ │ ├── LayoutPanel.stories.js │ │ └── __snapshots__ │ │ └── LayoutPanel.stories.storyshot ├── Link │ ├── Link.js │ ├── Link.test.js │ └── __stories__ │ │ ├── Link.stories.js │ │ └── __snapshots__ │ │ └── Link.stories.storyshot ├── List │ ├── List.js │ ├── List.test.js │ ├── ListByline.test.js │ ├── ListFooter.test.js │ ├── ListHeader.test.js │ ├── ListIcon.test.js │ ├── ListItem.test.js │ ├── ListSelection.test.js │ ├── ListText.test.js │ ├── _ListByline.js │ ├── _ListFooter.js │ ├── _ListHeader.js │ ├── _ListIcon.js │ ├── _ListItem.js │ ├── _ListSelection.js │ ├── _ListText.js │ └── __stories__ │ │ ├── List.stories.js │ │ └── __snapshots__ │ │ └── List.stories.storyshot ├── Menu │ ├── Menu.js │ ├── Menu.test.js │ ├── _MenuItem.js │ ├── _MenuList.js │ └── __stories__ │ │ ├── Menu.stories.js │ │ └── __snapshots__ │ │ └── Menu.stories.storyshot ├── MessageBox │ ├── MessageBox.js │ ├── MessageBox.test.js │ └── __stories__ │ │ ├── MessageBox.stories.js │ │ └── __snapshots__ │ │ └── MessageBox.stories.storyshot ├── MessagePage │ ├── MessagePage.js │ ├── MessagePage.test.js │ └── __stories__ │ │ ├── MessagePage.stories.js │ │ └── __snapshots__ │ │ └── MessagePage.stories.storyshot ├── MessageStrip │ ├── MessageStrip.js │ ├── MessageStrip.test.js │ └── __stories__ │ │ ├── MessageStrip.stories.js │ │ └── __snapshots__ │ │ └── MessageStrip.stories.storyshot ├── MultiInput │ ├── MultiInput.js │ ├── MultiInput.test.js │ └── __stories__ │ │ ├── MultiInput.stories.js │ │ └── __snapshots__ │ │ └── MultiInput.stories.storyshot ├── ObjectStatus │ ├── ObjectStatus.js │ ├── ObjectStatus.test.js │ └── __stories__ │ │ ├── ObjectStatus.stories.js │ │ └── __snapshots__ │ │ └── ObjectStatus.stories.storyshot ├── Pagination │ ├── Pagination.js │ ├── Pagination.test.js │ └── __stories__ │ │ ├── Pagination.stories.js │ │ └── __snapshots__ │ │ └── Pagination.stories.storyshot ├── Popover │ ├── Popover.js │ ├── Popover.test.js │ └── __stories__ │ │ ├── Popover.stories.js │ │ └── __snapshots__ │ │ └── Popover.stories.storyshot ├── SearchInput │ ├── SearchInput.js │ ├── SearchInput.test.js │ └── __stories__ │ │ ├── SearchInput.stories.js │ │ └── __snapshots__ │ │ └── SearchInput.stories.storyshot ├── Select │ ├── Select.js │ ├── Select.test.js │ └── __stories__ │ │ ├── Select.stories.js │ │ └── __snapshots__ │ │ └── Select.stories.storyshot ├── Shellbar │ ├── Shellbar.js │ ├── Shellbar.test.js │ └── __stories__ │ │ ├── Shellbar.stories.js │ │ └── __snapshots__ │ │ └── Shellbar.stories.storyshot ├── SideNavigation │ ├── SideNav.js │ ├── SideNav.test.js │ ├── SideNavList.test.js │ ├── SideNavListItem.test.js │ ├── _SideNavList.js │ ├── _SideNavListItem.js │ └── __stories__ │ │ ├── SideNav.stories.js │ │ └── __snapshots__ │ │ └── SideNav.stories.storyshot ├── StepInput │ ├── StepInput.js │ ├── StepInput.test.js │ └── __stories__ │ │ ├── StepInput.stories.js │ │ └── __snapshots__ │ │ └── StepInput.stories.storyshot ├── Switch │ ├── Switch.js │ ├── Switch.test.js │ ├── _SwitchItem.js │ └── __stories__ │ │ ├── Switch.stories.js │ │ └── __snapshots__ │ │ └── Switch.stories.storyshot ├── Table │ ├── Table.js │ ├── Table.test.js │ └── __stories__ │ │ ├── Table.stories.js │ │ └── __snapshots__ │ │ └── Table.stories.storyshot ├── Tabs │ ├── Tab.js │ ├── Tab.test.js │ ├── TabGroup.js │ ├── TabGroup.test.js │ ├── _TabContent.js │ ├── _TabContent.test.js │ └── __stories__ │ │ ├── TabGroup.stories.js │ │ └── __snapshots__ │ │ └── TabGroup.stories.storyshot ├── Tile │ ├── Tile.js │ ├── Tile.test.js │ ├── TileContent.test.js │ ├── TileFooter.test.js │ ├── TileHeader.test.js │ ├── _TileContent.js │ ├── _TileFooter.js │ ├── _TileHeader.js │ └── __stories__ │ │ ├── Tile.stories.js │ │ └── __snapshots__ │ │ └── Tile.stories.storyshot ├── Time │ ├── Time.js │ ├── Time.test.js │ ├── TimeItem.test.js │ ├── _TimeItem.js │ └── __stories__ │ │ ├── Time.stories.js │ │ └── __snapshots__ │ │ └── Time.stories.storyshot ├── TimePicker │ ├── TimePicker.js │ ├── TimePicker.test.js │ ├── TimePickerItem.test.js │ ├── _TimePickerItem.js │ └── __stories__ │ │ ├── TimePicker.stories.js │ │ └── __snapshots__ │ │ └── TimePicker.stories.storyshot ├── Title │ ├── Title.js │ ├── Title.test.js │ └── __stories__ │ │ ├── Title.stories.js │ │ └── __snapshots__ │ │ └── Title.stories.storyshot ├── Token │ ├── Token.js │ ├── Token.test.js │ └── __stories__ │ │ ├── Token.stories.js │ │ └── __snapshots__ │ │ └── Token.stories.storyshot ├── Tree │ ├── Tree.js │ ├── Tree.test.js │ ├── _TreeNode.js │ └── __stories__ │ │ ├── Tree.stories.js │ │ └── __snapshots__ │ │ └── Tree.stories.storyshot ├── Wizard │ ├── Wizard.js │ ├── Wizard.test.js │ ├── WizardContainer.js │ ├── WizardContainer.test.js │ ├── WizardContent.js │ ├── WizardContent.test.js │ ├── WizardFooter.js │ ├── WizardFooter.test.js │ ├── WizardNavigation.js │ ├── WizardNavigation.test.js │ ├── WizardNextStep.js │ ├── WizardStep.js │ ├── WizardStep.test.js │ └── __stories__ │ │ ├── Wizard.stories.js │ │ └── __snapshots__ │ │ └── Wizard.stories.storyshot ├── index.js ├── overrideCss │ └── Pagination.css └── utils │ ├── CustomPropTypes │ ├── CustomPropTypes.js │ └── CustomPropTypes.test.js │ ├── _CssNamespaceContext.js │ ├── _Popper.js │ ├── _PopperContainer.js │ ├── children.js │ ├── constants.js │ ├── dateUtils.js │ ├── dateUtils.test.js │ ├── focusManager │ ├── focusManager.js │ └── focusManager.test.js │ ├── gridManager │ ├── gridManager.js │ └── gridManager.test.js │ ├── listOfIcons.js │ ├── modalManager.js │ ├── modalManager.test.js │ ├── shortId.js │ ├── tryFocus.js │ ├── useUniqueId.js │ └── withStyles.js ├── storybook-testing ├── __image_snapshots__ │ ├── ActionBar-snap.png │ ├── Avatar-snap.png │ ├── Bar-snap.png │ ├── Breadcrumb-snap.png │ ├── BusyIndicator-snap.png │ ├── Button-snap.png │ ├── ButtonSegmented-snap.png │ ├── Checkbox-snap.png │ ├── ComboboxInput-snap.png │ ├── Counter-snap.png │ ├── DatePicker-snap.png │ ├── FormFieldset-snap.png │ ├── FormGroup-snap.png │ ├── FormInput-snap.png │ ├── FormItem-snap.png │ ├── FormLabel-snap.png │ ├── FormLegend-snap.png │ ├── FormRadioGroup-snap.png │ ├── FormTextarea-snap.png │ ├── Icon-snap.png │ ├── InfoLabel-snap.png │ ├── InputGroup-snap.png │ ├── LayoutGrid-snap.png │ ├── LayoutPanel-snap.png │ ├── Link-snap.png │ ├── List-snap.png │ ├── Menu-snap.png │ ├── MessageBox-snap.png │ ├── MessagePage-snap.png │ ├── MessageStrip-snap.png │ ├── MultiInput-snap.png │ ├── ObjectStatus-snap.png │ ├── Pagination-snap.png │ ├── Popover-snap.png │ ├── SearchInput-snap.png │ ├── Select-snap.png │ ├── Shellbar-snap.png │ ├── SideNav-snap.png │ ├── StepInput-snap.png │ ├── Switch-snap.png │ ├── TabGroup-snap.png │ ├── Table-snap.png │ ├── Tile-snap.png │ ├── Time-snap.png │ ├── TimePicker-snap.png │ ├── Title-snap.png │ ├── Token-snap.png │ ├── Tree-snap.png │ └── Wizard-snap.png ├── jest.config.js ├── storyshots.test.js └── visual-tests.test.js └── types ├── ActionBar └── ActionBar.d.ts ├── Avatar └── Avatar.d.ts ├── Breadcrumb └── Breadcrumb.d.ts ├── BusyIndicator └── BusyIndicator.d.ts ├── Button ├── Button.d.ts └── ButtonGroup.d.ts ├── Calendar └── Calendar.d.ts ├── Column └── Column.d.ts ├── ComboboxInput └── ComboboxInput.d.ts ├── Container └── Container.d.ts ├── Counter └── Counter.d.ts ├── DatePicker └── DatePicker.d.ts ├── Dialog └── Dialog.d.ts ├── Forms ├── Checkbox.d.ts ├── FormFieldset.d.ts ├── FormGroup.d.ts ├── FormInput.d.ts ├── FormItem.d.ts ├── FormLabel.d.ts ├── FormLegend.d.ts ├── FormRadioGroup.d.ts ├── FormRadioItem.d.ts ├── FormSelect.d.ts ├── FormSet.d.ts └── FormTextarea.d.ts ├── Icon └── Icon.d.ts ├── Image └── Image.d.ts ├── InfoLabel └── InfoLabel.d.ts ├── InlineHelp └── InlineHelp.d.ts ├── InputGroup └── InputGroup.d.ts ├── LayoutPanel └── LayoutPanel.d.ts ├── Link └── Link.d.ts ├── List └── List.d.ts ├── LocalizationEditor └── LocalizationEditor.d.ts ├── Menu └── Menu.d.ts ├── MessageStrip └── MessageStrip.d.ts ├── MultiInput └── MultiInput.d.ts ├── ObjectStatus └── ObjectStatus.d.ts ├── Pagination └── Pagination.d.ts ├── Popover └── Popover.d.ts ├── Row └── Row.d.ts ├── SearchInput └── SearchInput.d.ts ├── Select └── Select.d.ts ├── Shellbar └── Shellbar.d.ts ├── SideNavigation └── SideNav.d.ts ├── StepInput └── StepInput.d.ts ├── Switch └── Switch.d.ts ├── Table └── Table.d.ts ├── Tabs ├── Tab.d.ts └── TabGroup.d.ts ├── Tile └── Tile.d.ts ├── Time └── Time.d.ts ├── TimePicker └── TimePicker.d.ts ├── Title └── Title.d.ts ├── Token └── Token.d.ts ├── Tree └── Tree.d.ts └── Wizard ├── Wizard.d.ts ├── WizardContainer.d.ts ├── WizardContent.d.ts ├── WizardFooter.d.ts ├── WizardNavigation.d.ts └── WizardStep.d.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | charset = utf-8 6 | 7 | # Unix-style newlines with a newline ending every file 8 | [*] 9 | end_of_line = lf 10 | insert_final_newline = true 11 | indent_style = space 12 | indent_size = 4 13 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build 2 | lib 3 | !/.storybook 4 | storybook-static 5 | src/Docs/* 6 | .* 7 | src/**/__stories__/*.visual.js 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | 3 | 4 | ### Versions 5 | **fundamental-react:** 6 | 7 | --- 8 | 9 | _**NOTE:** Where applicable, please include uncropped screen captures._ 10 | 11 | _**DISCLAIMER:** 12 | After triaging an issue, the fundamental-react team will see if it can be reproduced or confirmed. If more information is needed, the fundamental-react team will contact the author. Any issues awaiting responses from the author for more than 7 days will be closed. The author can re-open the issue at a later time if they can present the requested information._ 13 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | 3 | 4 | 5 | fixes #issueid -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: monthly 7 | time: "10:00" 8 | timezone: Etc/UCT 9 | ignore: 10 | - dependency-name: react-dev-utils 11 | versions: 12 | - ">= 8.a, < 9" 13 | - dependency-name: serve 14 | versions: 15 | - ">= 11.a, < 12" 16 | - dependency-name: size-limit 17 | versions: 18 | - ">= 2.a, < 3" 19 | - dependency-name: y18n 20 | versions: 21 | - 4.0.1 22 | - dependency-name: tabbable 23 | versions: 24 | - 5.1.5 25 | - 5.1.6 26 | - dependency-name: eslint-plugin-local-rules 27 | versions: 28 | - 1.0.1 29 | - dependency-name: standard-version 30 | versions: 31 | - 9.1.0 32 | - dependency-name: fundamental-styles 33 | versions: 34 | - 0.15.0 35 | - dependency-name: eslint-plugin-react 36 | versions: 37 | - 7.22.0 38 | - dependency-name: "@popperjs/core" 39 | versions: 40 | - 2.6.0 41 | -------------------------------------------------------------------------------- /.github/in-solidarity.yml: -------------------------------------------------------------------------------- 1 | rules: 2 | master: 3 | regex: 4 | - /master/gi 5 | level: notice 6 | alternatives: 7 | - primary 8 | - main 9 | - leader 10 | - active 11 | - writer 12 | slave: 13 | regex: 14 | - /slave/gi 15 | level: failure 16 | alternatives: 17 | - secondary 18 | - node 19 | - worker 20 | - replica 21 | - passive 22 | whitelist: 23 | regex: 24 | - '/white[_-]*list/gi' 25 | level: failure 26 | alternatives: 27 | - include list 28 | - allow list 29 | blacklist: 30 | regex: 31 | - '/black[_-]*list/gi' 32 | level: failure 33 | alternatives: 34 | - exclude list 35 | - deny list 36 | grandfathered: 37 | regex: 38 | - /grandfathered/gi 39 | level: warning 40 | alternatives: 41 | - legacied 42 | - exempted 43 | sanity_check: 44 | regex: 45 | - '/sanity[_-]*check/gi' 46 | level: warning 47 | alternatives: 48 | - smoke test 49 | - confidence check 50 | man_hours: 51 | regex: 52 | - '/man[_-]*hours/gi' 53 | level: warning 54 | alternatives: 55 | - person-hours 56 | - human-hours 57 | ignore: 58 | - ".github/in-solidarity.yml" # default 59 | - "**/*.yml" -------------------------------------------------------------------------------- /.github/mergeable.yml: -------------------------------------------------------------------------------- 1 | mergeable: 2 | pull_requests: 3 | title: 4 | must_include: 5 | message: "Title must begin with the following prefixes: feat:, fix: or chore:" 6 | regex: "^feat:|^chore:|^fix:|^docs:" 7 | -------------------------------------------------------------------------------- /.github/workflows/greetings.yml: -------------------------------------------------------------------------------- 1 | name: Greetings 2 | 3 | on: [pull_request, issues] 4 | 5 | jobs: 6 | greeting: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/first-interaction@v1 10 | with: 11 | repo-token: ${{ secrets.GITHUB_TOKEN }} 12 | issue-message: 'Hello @${{ github.actor }}, thank you for using fundamental-react! The fundamental-react team will triage your issue as soon as possible.' 13 | pr-message: 'Hello @${{ github.actor }} , thank you submitting a pull request! Please make sure you have followed our [Contribution Guidelines](https://github.com/SAP/fundamental-react/blob/main/.github/CONTRIBUTING.md).' 14 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: "Close stale pull requests" 2 | on: 3 | schedule: 4 | - cron: "0 0 * * *" 5 | 6 | jobs: 7 | stale: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/stale@v3 11 | with: 12 | repo-token: ${{ secrets.GITHUB_TOKEN }} 13 | stale-pr-label: 'stale' 14 | stale-pr-message: 'This pull request is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days' 15 | days-before-stale: 30 16 | days-before-close: 5 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | 4 | # testing 5 | /coverage 6 | src/coverage 7 | src/*/__stories__/*.visual.js 8 | storybook-testing/__image_snapshots__/__diff_output__/* 9 | 10 | # production 11 | /lib 12 | # Readme copy 13 | src/Docs/ 14 | 15 | # documentation website assets 16 | storybook-static 17 | 18 | #index files 19 | /src/**/index.js 20 | 21 | # misc 22 | .DS_Store 23 | .env.local 24 | .env.development.local 25 | .env.test.local 26 | .env.production.local 27 | 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | 32 | .idea 33 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx --no-install commitlint --edit $1 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npm run lint:pre-commit 5 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v14.17.0 2 | -------------------------------------------------------------------------------- /.size-limit: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | name: "Fundamental-React Size", 4 | webpack: true, 5 | path: "lib/index.js", 6 | limit: "250 KB" 7 | } 8 | ] 9 | -------------------------------------------------------------------------------- /.storybook/custom/components/CopyButton.js: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from 'react'; 2 | import Button from '../../../src/Button/Button'; 3 | 4 | const CopyButton = ({ copyText }) => { 5 | const [copyState, setCopyState] = useState('Copy'); 6 | const inputId = `offscreen-text-for-${copyText}` 7 | const copyImportStatement = (eve) => { 8 | const inputField = document?.getElementById(inputId); 9 | if(inputField) { 10 | inputField?.select(); 11 | inputField?.setSelectionRange(0, 99999); 12 | document?.execCommand("copy"); 13 | setCopyState('Copied') 14 | 15 | } 16 | } 17 | useEffect(() => { 18 | const resetTimer = setTimeout(() => { 19 | setCopyState('Copy') 20 | }, 5000); 21 | return () => clearTimeout(resetTimer); 22 | }, [copyState]); 23 | 24 | return ( 25 | <> 26 | 33 | 42 | 43 | ); 44 | }; 45 | 46 | CopyButton.displayName = 'CopyButton'; 47 | 48 | export default CopyButton; 49 | -------------------------------------------------------------------------------- /.storybook/custom/components/Description.js: -------------------------------------------------------------------------------- 1 | import Markdown from 'markdown-to-jsx'; 2 | import React from 'react'; 3 | 4 | const Description = (props) => { 5 | return ( 6 |
7 | {props.desc} 8 |
9 | ) 10 | } 11 | 12 | Description.displayName = 'Description'; 13 | 14 | export default Description; 15 | -------------------------------------------------------------------------------- /.storybook/custom/components/Footer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const Footer = () => { 4 | return ( 5 | 21 | ) 22 | } 23 | 24 | Footer.displayName = 'Footer'; 25 | 26 | export default Footer; 27 | -------------------------------------------------------------------------------- /.storybook/custom/components/Import.js: -------------------------------------------------------------------------------- 1 | import js from 'react-syntax-highlighter/dist/cjs/languages/prism/javascript'; 2 | import React from 'react'; 3 | import ReactSyntaxHighlighter from 'react-syntax-highlighter/dist/cjs/prism-light'; 4 | import { prism } from 'react-syntax-highlighter/dist/cjs/styles/prism'; 5 | import CopyButton from './CopyButton'; 6 | 7 | ReactSyntaxHighlighter.registerLanguage('javascript', js); 8 | 9 | const Import = ({ componentName }) => { 10 | const importStatement = `import { ${componentName} } from 'fundamental-react/lib/${componentName}';` 11 | return ( 12 |
13 | 20 | {importStatement} 21 | 22 | 23 |
24 | ); 25 | }; 26 | 27 | Import.displayName = 'Import'; 28 | 29 | export default Import; 30 | -------------------------------------------------------------------------------- /.storybook/custom/components/Toc.js: -------------------------------------------------------------------------------- 1 | import '../toc.scss'; 2 | import React from 'react'; 3 | 4 | const Toc = () => { 5 | return ( 6 | <> 7 |

Contents

8 |