[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\n    [\n      \"@babel/preset-env\",\n      {\n        \"targets\": {\n          \"browsers\": [\n            \"last 2 Chrome versions\",\n            \"last 2 Firefox versions\",\n            \"Firefox ESR\",\n            \"last 3 Safari versions\",\n            \"last 2 Edge versions\",\n            \"last 3 iOS versions\",\n            \"last 2 ChromeAndroid versions\",\n            \"last 2 FirefoxAndroid versions\"\n          ]\n        }\n      }\n    ],\n    \"@babel/preset-flow\",\n    \"@babel/preset-react\",\n    \"@babel/preset-typescript\"\n  ],\n  \"plugins\": [\n    \"@babel/plugin-proposal-class-properties\",\n    \"@babel/plugin-transform-flow-strip-types\"\n  ]\n}\n"
  },
  {
    "path": ".circleci/config.yml",
    "content": "version: 2.1\nexecutors:\n  node:\n    docker:\n      - image: cimg/node:18.16.1\n\ndefaults: &defaults\n  working_directory: ~/repo\n  parallelism: 1\n  executor:\n    name: node\n\naliases:\n  - &restore_npm_cache\n    restore_cache:\n      keys:\n        - npm-v7-dependency-{{ checksum \"package-lock.json\" }}\n        - npm-v7-dependency-\n\njobs:\n  build:\n    <<: *defaults\n\n    steps:\n      - checkout\n\n      - persist_to_workspace:\n          root: ~/\n          paths:\n            - repo\n\n      - *restore_npm_cache\n\n      - run:\n          name: install node dependencies\n          command: |\n            npm install\n\n      - run:\n          name: build package\n          command: |\n            npm run build\n\n      - save_cache:\n          paths:\n            - ./node_modules\n          key: npm-v7-dependency-{{ checksum \"package-lock.json\" }}\n\n  eslint_flow:\n    <<: *defaults\n\n    steps:\n      - attach_workspace:\n          at: ~/\n\n      - *restore_npm_cache\n\n      - run:\n          name: lint check for javascript\n          command: |\n            npm run lint --max-warnings=0\n\n      - store_test_results:\n          path: ./tmp/eslint\n\n  stylelint:\n    <<: *defaults\n\n    steps:\n      - attach_workspace:\n          at: ~/\n\n      - *restore_npm_cache\n\n      - run:\n          name: stylelint\n          command: |\n            npm run stylelint\n\n      - store_test_results:\n          path: ./tmp/stylelint\n\n  build_storybook:\n    <<: *defaults\n    resource_class: medium+\n\n    steps:\n      - attach_workspace:\n          at: ~/\n\n      - *restore_npm_cache\n\n      - run:\n          name: build\n          command: |\n            mkdir -p /tmp/storybook\n            npm run build-storybook -- -o /tmp/storybook\n\n      - store_artifacts:\n          path: /tmp/storybook\n\n      - run:\n          name: comment to pr\n          command: |\n            # PR トリガーではない場合はスキップ\n            if [ -z \"$CIRCLE_PR_NUMBER\" ]; then exit 0; fi\n\n            # https://support.circleci.com/hc/en-us/articles/5034956515355-How-to-Programmatically-Construct-the-URLs-for-Artifacts\n            index_html_url=\"https://output.circle-artifacts.com/output/job/${CIRCLE_WORKFLOW_JOB_ID}/artifacts/${CIRCLE_NODE_INDEX}/tmp/storybook/index.html\"\n\n            # https://docs.github.com/en/rest/issues/comments?apiVersion=2022-11-28#create-an-issue-comment\n            curl \\\n              -X POST \\\n              -H \"Accept: application/vnd.github+json\" \\\n              -H \"Authorization: Bearer $GITHUB_TOKEN\" \\\n              -H \"X-GitHub-Api-Version: 2022-11-28\" \\\n              https://api.github.com/repos/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/issues/${CIRCLE_PR_NUMBER}/comments \\\n              -d '{\"body\":\"### Storybook\\n'${index_html_url}'\"}'\n\n  test:\n    <<: *defaults\n\n    steps:\n      - attach_workspace:\n          at: ~/\n\n      - *restore_npm_cache\n\n      - run:\n          name: test\n          command: npm test\n\n      - store_test_results:\n          path: ./tmp/test\n\nworkflows:\n  version: 2\n  integration:\n    jobs:\n      - build\n      - eslint_flow:\n          requires:\n            - build\n      - stylelint:\n          requires:\n            - build\n      - build_storybook:\n          context:\n            - github_token_sushi_bot\n          requires:\n            - build\n      - test:\n          requires:\n            - build\n"
  },
  {
    "path": ".dockerignore",
    "content": "node_modules/\n\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_style = space\nindent_size = 2\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[Makefile]\nindent_style = tab\n"
  },
  {
    "path": ".eslintignore",
    "content": "/dist/\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  parser: '@babel/eslint-parser',\n  env: {\n    browser: true,\n    jest: true,\n    node: true\n  },\n  plugins: ['react-hooks'],\n  globals: {},\n  extends: ['eslint:recommended', 'plugin:compat/recommended', 'plugin:import/recommended', 'plugin:jsx-a11y/recommended', 'plugin:react/recommended', 'plugin:storybook/recommended'],\n  settings: {\n    react: {\n      version: 'detect'\n    },\n    'import/resolver': {\n      node: {\n        extensions: ['.js', '.ts', '.tsx']\n      }\n    },\n    // TODO: browserslist を設定するか各 polyfill に対応\n    polyfills: ['window.scrollX', 'window.scrollY', 'Array.from']\n  },\n  rules: {\n    'no-unused-vars': ['error', {\n      vars: 'all',\n      args: 'all',\n      argsIgnorePattern: '^_'\n    }],\n    // TODO: ログインなどの要素に使えるようオフにしているが、要検討\n    'jsx-a11y/no-autofocus': 'off',\n    'react-hooks/rules-of-hooks': 'error',\n    'react-hooks/exhaustive-deps': 'error'\n  },\n  overrides: [{\n    plugins: ['ft-flow'],\n    files: ['*.js', '*.js.flow'],\n    extends: ['plugin:ft-flow/recommended'],\n    rules: {\n      'ft-flow/generic-spacing': 'off',\n      'ft-flow/space-after-type-colon': 'off'\n    }\n  }, {\n    files: ['*.ts', '*.tsx'],\n    extends: ['eslint-config-freee-typescript'],\n    rules: {\n      '@typescript-eslint/no-explicit-any': 'off',\n      'jsx-a11y/no-autofocus': 'off',\n      '@typescript-eslint/naming-convention': ['error', {\n        selector: 'default',\n        format: ['camelCase', 'PascalCase']\n      }, {\n        selector: 'variable',\n        format: ['camelCase', 'UPPER_CASE', 'PascalCase']\n      }, {\n        selector: 'parameter',\n        format: ['camelCase', 'snake_case', 'UPPER_CASE', 'PascalCase'],\n        leadingUnderscore: 'allow'\n      }, {\n        selector: 'property',\n        format: null\n      }, {\n        selector: 'memberLike',\n        modifiers: ['private'],\n        format: ['camelCase'],\n        leadingUnderscore: 'require'\n      }, {\n        selector: 'typeLike',\n        format: ['PascalCase']\n      }]\n    },\n    settings: {\n      'import/resolver': {\n        node: {\n          extensions: ['.js', '.ts', '.tsx']\n        }\n      }\n    }\n  }]\n};"
  },
  {
    "path": ".flowconfig",
    "content": "[ignore]\n.*/__tests__/types/.*\nlv1/.*\nlv2/.*\nutilities/.*\nhooks/.*\n\n\n[include]\n\n[libs]\n\n[lints]\n\n[options]\nserver.max_workers=4\nmodule.name_mapper='^vibes\\(.*\\)$' -> '<PROJECT_ROOT>\\1'\nsharedmemory.hash_table_pow=21\n\n[strict]\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "<!--\n\n**注意**\nこれは public repositoryです。\nここに書いた情報は、全世界に公開されます。\n社内の機密情報、特にリリース前のプロダクトや機能に関する情報を記載しないでください！\n -->\n\n## :memo: 概要\n<!-- 変更内容を明記しよう -->\n\n## :stuck_out_tongue: やってないこと\n<!-- この PR ではやってないことなどを明記しよう -->\n\n## :heavy_check_mark: 動作確認\n<!-- 実装した個々の機能の再現方法を明記し、開発者・レビュワー共に確認しよう -->\n- [ ] Storybook で 〇〇 が XX できるのを確認\n\n"
  },
  {
    "path": ".github/workflows/publish_package_to_npmjs.yml",
    "content": "name: Publish Package to npmjs\n\non:\n  release:\n    types: [published]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v2\n\n      - uses: actions/setup-node@v3\n        with:\n          node-version-file: .node-version\n          cache: 'npm'\n          registry-url: 'https://registry.npmjs.org'\n\n      - name: Install dependencies\n        run: npm ci\n\n      - run: npm publish --access public\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/publish_storybook.yml",
    "content": "name: publish Storybook\non:\n  push:\n    branches:\n      - 'main'\njobs:\n  publish:\n    if: github.repository == 'freee/vibes'\n    runs-on: ubuntu-latest\n    permissions:\n      id-token: write\n      contents: read\n    steps:\n      - uses: actions/checkout@v4\n      - uses: aws-actions/configure-aws-credentials@v4\n        with:\n          aws-region: 'ap-northeast-1'\n          role-to-assume: ${{ secrets.PROD_AWS_ROLE_TO_ASSUME }}\n      - uses: actions/setup-node@v3\n        with:\n          node-version-file: .node-version\n          cache: 'npm'\n      - name: Install Dependencies\n        run: npm install\n      - name: Build Storybook\n        run: npm run build-storybook\n      - name: Publish to S3\n        env:\n          AWS_BUCKET: ${{ secrets.PROD_AWS_S3_BUCKET }}\n        run: aws s3 sync --delete ${GITHUB_WORKSPACE}/storybook-static/ s3://${AWS_BUCKET}/ --quiet\n"
  },
  {
    "path": ".github/workflows/pull_request_test_and_lint.yml",
    "content": "name: Pull Request Test and Lint\n\non:\n  pull_request:\n    branches:\n      - main\n\njobs:\n  test_and_lint:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v2\n\n      - uses: actions/setup-node@v3\n        with:\n          node-version-file: .node-version\n          cache: 'npm'\n\n      - name: Install dependencies\n        run: npm ci\n\n      - run: npm run lint\n\n      - run: npm run test\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\n*.log\n.DS_Store\n.idea/\n.cache\n.vscode\nstorybook-static/\ndist/\n\n# docker\ndocker/.build_timestamp\n\n# direnv / dotenv\n.envrc\n.env\n\n# eslint cache\n.eslintcache\n"
  },
  {
    "path": ".husky/pre-commit",
    "content": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpx lint-staged\n"
  },
  {
    "path": ".jest/Mock.js",
    "content": ""
  },
  {
    "path": ".jest/setup.js",
    "content": ""
  },
  {
    "path": ".node-version",
    "content": "18.16.1\n"
  },
  {
    "path": ".npmrc",
    "content": "save-exact = true\n"
  },
  {
    "path": ".prettierignore",
    "content": "/dist/\n"
  },
  {
    "path": ".storybook/main.ts",
    "content": "import type { StorybookConfig } from '@storybook/react-webpack5';\n\nconst config: StorybookConfig = {\n  addons: [\n    '@storybook/addon-knobs',\n    '@storybook/addon-essentials',\n    '@storybook/addon-links',\n    '@storybook/addon-a11y',\n    '@storybook/addon-interactions',\n    '@storybook/addon-storysource',\n    'storybook-addon-pseudo-states',\n    '@kemuridama/storybook-addon-github',\n    '@storybook/addon-styling-webpack',\n    {\n      name: '@storybook/addon-styling-webpack',\n      options: {\n        rules: [\n          // Replaces any existing Sass rules with given rules\n          {\n            test: /\\.s[ac]ss$/i,\n            use: [\n              'style-loader',\n              'css-loader',\n              {\n                loader: 'sass-loader',\n                options: { implementation: require.resolve('sass') },\n              },\n            ],\n          },\n        ],\n      },\n    },\n  ],\n  stories: [\n    '../docs/**/*.stories.mdx',\n    '../src/**/*.stories.tsx',\n    '../examples/**/*.stories.tsx',\n  ],\n  typescript: {\n    check: true,\n  },\n  webpackFinal: (config) => ({\n    ...config,\n    module: {\n      ...config.module,\n      rules: [\n        ...(config.module?.rules ?? []),\n        {\n          test: /\\.stories\\.tsx?$/,\n          use: [require.resolve('@storybook/source-loader')],\n          enforce: 'pre',\n        },\n      ],\n    },\n  }),\n  framework: {\n    name: '@storybook/react-webpack5',\n    options: {},\n  },\n  docs: {\n    autodocs: true,\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": ".storybook/manager.js",
    "content": "import { addons } from '@storybook/addons';\nimport { create } from '@storybook/theming';\nimport logo from './logo-vibes.svg';\n\naddons.setConfig({\n  theme: create({\n    base: 'light',\n    brandTitle: 'vibes',\n    brandImage: logo,\n  }),\n});\n"
  },
  {
    "path": ".storybook/preview.tsx",
    "content": "import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { DocsContainer } from '@storybook/addon-docs';\nimport { Decorator, Parameters } from '@storybook/react';\nimport { VibesProvider, useLang } from '../src/utilities/VibesProvider';\nimport '../stylesheets/vibes_2021.scss';\n\nconst LanguagePortal = React.forwardRef<HTMLDivElement, { lang: string }>(\n  ({ lang }, ref) =>\n    ReactDOM.createPortal(<div lang={lang} ref={ref}></div>, document.body)\n);\n\nexport const decorators: Decorator[] = [\n  (Story, context) => {\n    const portalParentRef = React.useRef(null);\n    return (\n      <VibesProvider\n        fixedLayout={!context.globals.responsive}\n        lang={context.globals.lang}\n        portalParentRef={portalParentRef}\n      >\n        <div lang={useLang()}>\n          <Story />\n        </div>\n        <LanguagePortal lang={useLang()} ref={portalParentRef} />\n      </VibesProvider>\n    );\n  },\n];\n\nexport const parameters: Parameters = {\n  viewMode: 'docs',\n  docs: {\n    container: ({ children, context }) => (\n      <div lang={useLang()}>\n        <DocsContainer context={context}>{children}</DocsContainer>\n      </div>\n    ),\n  },\n  options: {\n    storySort: {\n      order: ['doc', ['Readme'], 'examples', 'lv2', 'lv1', 'deprecated'],\n    },\n  },\n  github: {\n    repository: 'freee/vibes',\n    branch: 'main',\n  },\n};\n\nexport const globalTypes = {\n  responsive: {\n    description: 'Responsive',\n    defaultValue: 'Off',\n    toolbar: {\n      title: 'Responsive',\n      icon: 'circlehollow',\n      items: [\n        { value: true, title: 'On' },\n        { value: false, title: 'Off' },\n      ],\n    },\n  },\n  lang: {\n    description: 'Language',\n    defaultValue: 'ja',\n    toolbar: {\n      title: 'Language',\n      icon: 'globe',\n      items: [\n        { value: 'ja', title: '日本語 (ja)' },\n        { value: 'en', title: 'English (en)' },\n      ],\n    },\n  },\n};\n"
  },
  {
    "path": "Dockerfile",
    "content": "FROM node:14.15.4\nARG github_username\nARG github_token\n\nENV GITHUB_USERNAME $github_username\nENV GITHUB_TOKEN $github_token\n\nWORKDIR /usr/src/app\n\nCOPY docker/git-credential-github-token /usr/local/bin\nRUN apt-get update && apt-get install -y curl git\nRUN mkdir /root/.ssh/ && \\\n  git config --global url.\"https://github.com\".insteadOf ssh://git@github.com && \\\n  git config --global --add url.\"https://github.com\".insteadOf git://git@github.com && \\\n  git config --global --add url.\"https://github.com/\".insteadOf git@github.com: && \\\n  git config --global credential.helper github-token\n\nCOPY package.json ./\nCOPY package-lock.json ./\nRUN npm install\n\nCOPY . .\n\nEXPOSE 6006\n\nCMD [\"npm\", \"run\", \"storybook\"]\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2023 freee K.K.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Makefile",
    "content": "APP_NAME := vibes\nVERSION_TAG ?= latest\nIMAGE_NAME := $(APP_NAME):$(VERSION_TAG)\n\n.DEFAULT_GOAL = help # display usage when there is no argument.\n\nDOCKER_DIR := docker\nDOCKER_BUILD_TIMESTAMP := docker/.build_timestamp\n\n$(DOCKER_BUILD_TIMESTAMP): $(shell find ./docker -not -name .build_timestamp)\n\t@docker build -t $(IMAGE_NAME) --build-arg github_username=$(GITHUB_USERNAME) --build-arg github_token=$(GITHUB_TOKEN) .\n\ttouch $(DOCKER_BUILD_TIMESTAMP)\n\n.PHONY: help\nhelp: ## show options\n\t@grep -E '^[a-zA-Z_-{\\.}]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = \":.*?## \"}; {printf \"\\033[36m%-15s\\033[0m %s\\n\", $$1, $$2}'\n\n.PHONY: docker.build\ndocker.build: $(DOCKER_BUILD_TIMESTAMP) ## build docker image\n\n.PHONY: docker.rebuild\ndocker.rebuild: ## rebuild docker image\n\t-rm $(DOCKER_BUILD_TIMESTAMP)\n\tmake docker.build\n\n.PHONY: docker.run\ndocker.run: $(DOCKER_BUILD_TIMESTAMP) ## run storybook on docker\n\tdocker run -it -p 6006:6006 --rm --name $(APP_NAME) $(IMAGE_NAME)\n"
  },
  {
    "path": "README.md",
    "content": "[世界を変えるためのデザインシステム](https://speakerdeck.com/ymrl/shi-jie-wobian-erutamefalsedezainsisutemu)です\n\n# Getting started\n\n## Install\n\nTBD\n\n## Usage\n\nスタイルを適用するため node_modules/vibes/vibes.css を読み込んでください。\n\nfrom Sass:\n\n```\n@import 'node_modules/vibes/vibes_2021';\n```\n\nfrom JavaScript with CSS Modules:\n\n```js\nimport '@freee_jp/vibes/css';\n```\n\nスタイルを読み込んだら、vibes の React Component を次のように使うだけです。\n\n```js\nimport * as React from 'react';\nimport { Breadcrumbs } from '@freee_jp/vibes';\nimport { CompanyLogoT } from 'somewhere';\n\nexport default function App() {\n  return (\n    <div className=\"app\">\n      <CompanyLogoT size=\"fit-width\" fill=\"default\"/>\n      <Breadcrumbs\n        links={[\n          { title: '取引', url: '/hub_pages/deals' },\n          { title: '自動で経理', url: '/wallet_txns/stream' },\n        ]}\n      />\n    </div>\n  );\n}\n```\n\n# Contribution\n\n[こちらのガイドライン](https://github.com/freee/vibes/blob/master/docs/Contribution.stories.mdx)を参照してください。\n"
  },
  {
    "path": "__tests__/types/flow/.flowconfig",
    "content": "[ignore]\n\n[include]\n./../../../index.js\n./../../../lv1.js\n./../../../lv2.js\n./../../../utilities.js\n./../../../node_modules/lottie-web/.*\n./../../../node_modules/react/.*\n./../../../node_modules/react-dom/.*\n./../../../node_modules/react-icons/.*\n./../../../node_modules/react-modal/.*\n./../../../node_modules/react-dnd/.*\n./../../../node_modules/react-dnd-html5-backend/.*\n\n[libs]\n\n[lints]\n\n[options]\nserver.max_workers=4\nmodule.name_mapper='^vibes\\(.*\\)$' -> '<PROJECT_ROOT>/../../..\\1'\ninclude_warnings=true\nsuppress_comment= \\\\(.\\\\|\\n\\\\)*\\\\$FlowExpectedError\n\n[strict]\n"
  },
  {
    "path": "__tests__/types/flow/lv1.js",
    "content": "// @flow\n\nimport * as React from 'react';\nimport {\n  FocusHighlight,\n  VisuallyHidden,\n  Balloon,\n  ColumnBase,\n  Container,\n  ContentsBase,\n  DialogBase,\n  FloatingBase,\n  MarginBase,\n  NegativeMarginBase,\n  PopupBase,\n  CardBase,\n  ScrimBase,\n  ScrollableBase,\n  ZebraBase,\n  Button,\n  GlobalNaviButton,\n  IconOnlyButton,\n  IconOnlyJumpButton,\n  IconOnlyBackwardButton,\n  InlineLink,\n  JumpButton,\n  BackwardButton,\n  LeftIconButton,\n  ListButton,\n  PagerButton,\n  RightIconButton,\n  TabButton,\n  TextButton,\n  CheckBox,\n  RadioButton,\n  SearchField,\n  SelectBox,\n  TextArea,\n  TextField,\n  ToggleButton,\n  OptionButton,\n  FormControlLabel,\n  GridBlock,\n  GridWrapper,\n  Note,\n  PageTitle,\n  Paragraph,\n  SectionTitle,\n  SubSectionTitle,\n  Text,\n  Avatar,\n  MaterialIcon,\n  RequiredIcon,\n  StatusIcon,\n  AlertSwallow,\n  AppStoreBadge,\n  CloudSkeletonIllust,\n  CloudUploadIllust,\n  CsvUploadIllust,\n  FileUploadIllust,\n  GooglePlayBadge,\n  ImageUploadIllust,\n  NotFoundSwallow,\n  CalendarDate,\n  SegmentControlButton,\n  StepNumber,\n  StepBlock,\n  StepBorder,\n  Tab,\n  WithDescriptionContent,\n  WithSideContent,\n  Stack,\n  BorderTableListCell,\n  CheckBoxCell,\n  DescriptionListCell,\n  DescriptionListHeadCell,\n  TableListCell,\n  TableListHead,\n  TableListHeadCell,\n  TableListRow,\n  Message,\n  ProgressBar,\n  Loading,\n  InlineSpinner,\n  // eslint-disable-next-line import/no-unresolved\n} from 'vibes/index';\n\nconst marginProps = {\n  marginLeft: true,\n  marginRight: true,\n  marginBottom: true,\n  marginTop: true,\n  marginSize: 'large',\n};\n\nconst commonProps = {\n  'data-guide': 'guide',\n  'data-test': 'test',\n  'data-tracking': 'tracking',\n  'data-masking': true,\n  ma: 1,\n  mt: 1,\n  mb: 1,\n  mr: 1,\n  ml: 1,\n};\n\nconst inputHandlers = {\n  onChange: (_e: SyntheticInputEvent<HTMLInputElement>) => {},\n  onInput: (_e: SyntheticInputEvent<HTMLInputElement>) => {},\n  onFocus: (_e: SyntheticFocusEvent<HTMLInputElement>) => {},\n  onBlur: (_e: SyntheticFocusEvent<HTMLInputElement>) => {},\n  onKeyDown: (_e: SyntheticKeyboardEvent<HTMLInputElement>) => {},\n  onKeyUp: (_e: SyntheticKeyboardEvent<HTMLInputElement>) => {},\n};\n\nconst buttonAriaProps = {\n  'aria-expanded': true,\n  'aria-pressed': true,\n  'aria-controls': 'hoge',\n  'aria-owns': 'hoge',\n  'aria-haspopup': true,\n  'aria-describedby': 'hoge',\n};\nconst linkAriaProps = {\n  'aria-expanded': true,\n  'aria-controls': 'hoge',\n  'aria-owns': 'hoge',\n  'aria-haspopup': true,\n  'aria-describedby': 'hoge',\n};\nconst numberInputAriaProps = {\n  'aria-valuemin': 0,\n  'aria-valuemax': 100,\n  'aria-valuenow': 10,\n};\nconst numberInputProps = {\n  min: 0,\n  max: 100,\n  step: 10,\n};\n\nconst tableRowAriaProps = {\n  'aria-level': 1,\n  'aria-setsize': 1,\n  'aria-posinset': 1,\n  'aria-expanded': false,\n};\n\n// a11y\n// $FlowExpectedError\n<VisuallyHidden small=\"a\" />;\n<VisuallyHidden {...commonProps}>\n  <div />\n</VisuallyHidden>;\n<VisuallyHidden autoRead={true} assertive id=\"visually-hidden\">\n  <div />\n</VisuallyHidden>;\n<FocusHighlight\n  highlightStyle=\"outset\"\n  cornerStyle=\"round\"\n  inline\n  {...commonProps}\n>\n  <div />\n</FocusHighlight>;\n\nexport default function App() {\n  return (\n    <div className=\"App\">\n      {/* bases */}\n      <Balloon\n        small\n        border=\"default\"\n        position=\"left\"\n        verticalPosition=\"bottom\"\n        {...marginProps}\n        {...commonProps}\n      >\n        balloon\n      </Balloon>\n      <ColumnBase\n        small\n        border=\"default\"\n        inline\n        paddingSize=\"small\"\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </ColumnBase>\n      <Container {...marginProps} {...commonProps}>\n        <div />\n        <div />\n      </Container>\n      <ContentsBase paddingSize=\"small\" {...marginProps} {...commonProps}>\n        <div />\n        <div />\n      </ContentsBase>\n      <DialogBase\n        small\n        border=\"default\"\n        inline\n        paddingSize=\"small\"\n        message\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </DialogBase>\n      <FloatingBase\n        small\n        border=\"default\"\n        inline\n        paddingSize=\"small\"\n        {...commonProps}\n        {...marginProps}\n      >\n        <div />\n      </FloatingBase>\n      <MarginBase\n        marginTop\n        marginLeft\n        marginRight\n        marginBottom\n        marginSize=\"xxLarge\"\n        {...commonProps}\n      >\n        <div />\n      </MarginBase>\n      <NegativeMarginBase\n        marginSize=\"small\"\n        top\n        left\n        right\n        bottom\n        {...commonProps}\n      >\n        <div />\n      </NegativeMarginBase>\n      <PopupBase\n        small\n        border=\"default\"\n        inline\n        paddingSize=\"small\"\n        {...commonProps}\n        {...marginProps}\n      >\n        <div />\n      </PopupBase>\n      <CardBase\n        small\n        inline\n        clickable\n        url=\"test\"\n        target=\"_blank\"\n        rel=\"test\"\n        onClick={(_e: SyntheticMouseEvent<>) => {}}\n        onSelfWindowNavigation={() => {}}\n        {...commonProps}\n        {...marginProps}\n      >\n        <div />\n      </CardBase>\n      <ScrimBase small {...commonProps} {...marginProps}>\n        <div />\n      </ScrimBase>\n      <ScrollableBase scrollableX scrollableY {...commonProps}></ScrollableBase>\n      <ZebraBase paddingSize=\"small\" {...marginProps} {...commonProps}>\n        <div />\n      </ZebraBase>\n      {/* buttons */}\n      <Button\n        appearance=\"primary\"\n        primary\n        danger\n        disabled\n        small\n        large\n        href=\"test\"\n        type=\"button\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n        download=\"test\"\n        ref={React.createRef<HTMLButtonElement | HTMLAnchorElement>()}\n        onClick={(_e: SyntheticMouseEvent<>) => {}}\n        onKeyDown={(\n          _e: SyntheticKeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n        ) => {}}\n        onSelfWindowNavigation={() => {}}\n        iconPosition=\"left\"\n        IconComponent={StatusIcon}\n        width=\"full\"\n        {...marginProps}\n        {...commonProps}\n        {...buttonAriaProps}\n        {...linkAriaProps}\n      >\n        <div />\n      </Button>\n      <GlobalNaviButton\n        IconComponent={StatusIcon}\n        href=\"test\"\n        current\n        onSelfWindowNavigation={() => {}}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </GlobalNaviButton>\n      <IconOnlyButton\n        IconComponent={StatusIcon}\n        primary\n        danger\n        disabled\n        small\n        large\n        label=\"test\"\n        type=\"button\"\n        href=\"test\"\n        target=\"test\"\n        rel=\"test\"\n        onSelfWindowNavigation={() => {}}\n        onClick={(\n          _e: SyntheticEvent<HTMLButtonElement | HTMLAnchorElement>\n        ) => {}}\n        onKeyDown={(\n          _e: SyntheticKeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n        ) => {}}\n        {...marginProps}\n        {...commonProps}\n        {...buttonAriaProps}\n        {...linkAriaProps}\n      />\n      <IconOnlyJumpButton\n        buttonLabel=\"test\"\n        url=\"test\"\n        disabled\n        small\n        large\n        appearance=\"primary\"\n        danger\n        target=\"test\"\n        type=\"button\"\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        onSelfWindowNavigation={() => {}}\n        rel=\"test\"\n        {...commonProps}\n      />\n      <IconOnlyBackwardButton\n        buttonLabel=\"test\"\n        url=\"test\"\n        disabled\n        small\n        large\n        appearance=\"primary\"\n        danger\n        target=\"test\"\n        type=\"button\"\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        onSelfWindowNavigation={() => {}}\n        rel=\"test\"\n        {...commonProps}\n      />\n      <InlineLink\n        href=\"test\"\n        target=\"test\"\n        rel=\"test\"\n        onSelfWindowNavigation={() => {}}\n        onClick={(\n          _e: SyntheticEvent<HTMLAnchorElement | HTMLButtonElement>\n        ) => {}}\n        {...buttonAriaProps}\n        {...linkAriaProps}\n        {...commonProps}\n      >\n        <div />\n      </InlineLink>\n      <JumpButton\n        url=\"test\"\n        disabled\n        small\n        large\n        appearance=\"primary\"\n        danger\n        target=\"test\"\n        type=\"button\"\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        onSelfWindowNavigation={() => {}}\n        rel=\"test\"\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </JumpButton>\n      <BackwardButton\n        url=\"test\"\n        disabled\n        small\n        large\n        appearance=\"primary\"\n        danger\n        type=\"button\"\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        onSelfWindowNavigation={() => {}}\n        rel=\"test\"\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </BackwardButton>\n      <LeftIconButton\n        IconComponent={StatusIcon}\n        primary\n        danger\n        disabled\n        small\n        type=\"button\"\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </LeftIconButton>\n      <ListButton\n        selectableItemIndex={0}\n        selected\n        href=\"test\"\n        target=\"_blank\"\n        rel=\"test\"\n        statusIconText=\"test\"\n        statusIconType=\"done\"\n        actionButton\n        LeftIconComponent={StatusIcon}\n        FarRightIconComponent={StatusIcon}\n        bgTransparent\n        onClick={(\n          _e: SyntheticEvent<HTMLButtonElement | HTMLAnchorElement>\n        ) => {}}\n        onKeyDown={(\n          _e: SyntheticKeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n        ) => {}}\n        selectableItemRef={React.createRef<\n          HTMLAnchorElement | HTMLButtonElement\n        >()}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </ListButton>\n      <PagerButton\n        current\n        disabled\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        small\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </PagerButton>\n      <RightIconButton\n        IconComponent={StatusIcon}\n        primary\n        danger\n        disabled\n        small\n        type=\"button\"\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </RightIconButton>\n      <TabButton current small {...marginProps} {...commonProps}>\n        <div />\n      </TabButton>\n      <TextButton\n        IconComponent={StatusIcon}\n        iconPosition=\"left\"\n        id=\"test\"\n        url=\"test\"\n        target=\"_blank\"\n        rel=\"test\"\n        noBorder\n        disabled\n        small\n        onClick={(\n          _e: SyntheticEvent<HTMLSpanElement | HTMLAnchorElement>\n        ) => {}}\n        {...buttonAriaProps}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </TextButton>\n      {/* forms */}\n      <CheckBox\n        name=\"test\"\n        value=\"test\"\n        checked\n        required\n        autofocus\n        disabled\n        error\n        small\n        {...inputHandlers}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </CheckBox>\n      <RadioButton\n        name=\"test\"\n        value=\"test\"\n        checked\n        required\n        autofocus\n        disabled\n        error\n        small\n        {...inputHandlers}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </RadioButton>\n      <SearchField\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        value=\"test\"\n        required\n        autofocus\n        disabled\n        error\n        small\n        large\n        {...inputHandlers}\n        {...marginProps}\n        {...commonProps}\n      />\n      <SelectBox\n        label=\"test\"\n        labelledby=\"test\"\n        id=\"selectbox-test\"\n        options={[\n          { name: 'test', value: 'test' },\n          { name: 'test', options: [{ name: 'test', value: 'test' }] },\n        ]}\n        name=\"test\"\n        required\n        autofocus\n        disabled\n        error\n        small\n        large\n        alignCenter\n        alignRight\n        width=\"small\"\n        value=\"test\"\n        defaultValue=\"test\"\n        autoComplete=\"on\"\n        onChange={(_e: SyntheticInputEvent<HTMLSelectElement>) => {}}\n        onInput={(_e: SyntheticInputEvent<HTMLSelectElement>) => {}}\n        onFocus={(_e: SyntheticFocusEvent<HTMLSelectElement>) => {}}\n        onBlur={(_e: SyntheticFocusEvent<HTMLSelectElement>) => {}}\n        onKeyDown={(_e: SyntheticKeyboardEvent<HTMLSelectElement>) => {}}\n        onKeyUp={(_e: SyntheticKeyboardEvent<HTMLSelectElement>) => {}}\n        {...marginProps}\n        {...commonProps}\n      />\n      <TextArea\n        id=\"textarea-test\"\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        value=\"test\"\n        defaultValue=\"text\"\n        required\n        autofocus\n        disabled\n        error\n        small\n        large\n        autoComplete=\"on\"\n        onChange={(_e: SyntheticInputEvent<HTMLTextAreaElement>) => {}}\n        onInput={(_e: SyntheticInputEvent<HTMLTextAreaElement>) => {}}\n        onFocus={(_e: SyntheticFocusEvent<HTMLTextAreaElement>) => {}}\n        onBlur={(_e: SyntheticFocusEvent<HTMLTextAreaElement>) => {}}\n        onKeyDown={(_e: SyntheticKeyboardEvent<HTMLTextAreaElement>) => {}}\n        onKeyUp={(_e: SyntheticKeyboardEvent<HTMLTextAreaElement>) => {}}\n        {...marginProps}\n        {...commonProps}\n      />\n      <TextField\n        id=\"textfield-test\"\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        value=\"test\"\n        required\n        autofocus\n        disabled\n        error\n        small\n        large\n        alignCenter\n        alignRight\n        maxLength={100}\n        width=\"small\"\n        autoComplete=\"on\"\n        borderless\n        ref={React.createRef<HTMLInputElement>()}\n        IconComponent={() => <div />}\n        onIconClick={(_e) => {}}\n        onIconFocus={(_e) => {}}\n        onIconBlur={(_e) => {}}\n        iconLabel=\"iconlabel\"\n        iconAriaProps={buttonAriaProps}\n        {...inputHandlers}\n        {...numberInputProps}\n        {...numberInputAriaProps}\n        {...marginProps}\n        {...commonProps}\n      />\n      {/* grids */}\n      <GridBlock size=\"half\" {...commonProps}>\n        <div />\n      </GridBlock>\n      <GridWrapper {...marginProps} {...commonProps}>\n        <div />\n      </GridWrapper>\n      <ToggleButton\n        type=\"checkbox\"\n        name=\"test\"\n        value=\"test\"\n        toggled\n        small\n        disabled\n        {...commonProps}\n      >\n        <div />\n      </ToggleButton>\n      <OptionButton id=\"test\" checked size=\"medium\">\n        <div />\n      </OptionButton>\n      <FormControlLabel\n        id=\"formcontrollabel-test\"\n        htmlFor=\"formcontrollabel-test-for\"\n        required\n        {...commonProps}\n      >\n        あああ\n      </FormControlLabel>\n      {/* headlines */}\n      <Note inline textAlign=\"left\" ellipsis {...marginProps} {...commonProps}>\n        <div />\n      </Note>\n      <PageTitle\n        id=\"test\"\n        inline\n        textAlign=\"left\"\n        headlineLevel={1}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </PageTitle>\n      <Paragraph\n        inline\n        textAlign=\"left\"\n        ellipsis\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </Paragraph>\n      <SectionTitle\n        id=\"test\"\n        inline\n        textAlign=\"left\"\n        headlineLevel={1}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </SectionTitle>\n      <SubSectionTitle\n        id=\"test\"\n        inline\n        textAlign=\"left\"\n        headlineLevel={1}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </SubSectionTitle>\n      <Text size={0.75} weight=\"bold\" color=\"P5\" {...commonProps}>\n        <div />\n      </Text>\n      {/* icons */}\n      <Avatar size=\"small\" imageUrl=\"hoge\" {...commonProps} />\n      <MaterialIcon\n        label=\"hoge\"\n        small\n        IconComponent={StatusIcon}\n        {...commonProps}\n      />\n      <RequiredIcon {...commonProps} />\n      <StatusIcon type=\"error\" {...commonProps}>\n        <div />\n      </StatusIcon>\n      {/* images */}\n      <AlertSwallow {...commonProps} {...marginProps} />\n      <AppStoreBadge {...commonProps} {...marginProps} />\n      <CloudSkeletonIllust {...commonProps} {...marginProps} />\n      <CloudUploadIllust {...commonProps} {...marginProps} />\n      <CsvUploadIllust {...commonProps} {...marginProps} />\n      <FileUploadIllust {...commonProps} {...marginProps} />\n      <GooglePlayBadge {...commonProps} {...marginProps} />\n      <ImageUploadIllust {...commonProps} {...marginProps} />\n      <NotFoundSwallow {...commonProps} {...marginProps} />\n      {/* interactiveParts */}\n      <CalendarDate\n        date=\"test\"\n        dateLabel=\"test\"\n        today\n        disabled\n        secondaryHoliday\n        primaryHoliday\n        nationalHoliday\n        content={{\n          type: 'TimeRecord',\n          date: 'test',\n          status: 'alert',\n          dateLabel: 'test',\n          openingTime: '2019-01-01',\n          endingTime: '2019-12-31',\n        }}\n        onClickDate={(_date: string) => {}}\n        selectableDateRef={(_el: HTMLDivElement) => {}}\n        onKeyDown={(\n          _e: SyntheticKeyboardEvent<HTMLDivElement>,\n          _date: string,\n          _onClickDate?: (date: string) => void | Promise<void>\n        ) => {}}\n        {...commonProps}\n      />\n      <SegmentControlButton\n        current\n        small\n        large\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        {...commonProps}\n      >\n        <div />\n      </SegmentControlButton>\n      <StepNumber number=\"1\" current done disabled small {...commonProps} />\n      <StepBlock\n        number=\"test\"\n        current\n        done\n        disabled\n        small\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </StepBlock>\n      <StepBorder done separator {...commonProps} />\n      <Tab\n        current\n        small\n        selected\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        onBlur={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </Tab>\n\n      {/* layouts */}\n      <WithDescriptionContent\n        position=\"vertical\"\n        renderContent={(_: string) => <div />}\n        renderDescriptionContent={() => <div />}\n        {...commonProps}\n      />\n      <WithSideContent\n        sideContent={<div />}\n        verticalAlign=\"top\"\n        {...commonProps}\n      >\n        <div />\n      </WithSideContent>\n      <Stack\n        direction=\"horizontal\"\n        gap={1}\n        alignItems=\"start\"\n        justifyContent=\"start\"\n        wrap=\"nowrap\"\n        {...commonProps}\n      >\n        <div />\n      </Stack>\n\n      {/* lists */}\n      <BorderTableListCell\n        small\n        alignCenter\n        alignRight\n        onClick={() => {}}\n        {...commonProps}\n      >\n        <div />\n      </BorderTableListCell>\n      <CheckBoxCell\n        header\n        name=\"test\"\n        value=\"test\"\n        checked\n        disabled\n        aria-label=\"test\"\n        onChange={(_e: SyntheticInputEvent<HTMLInputElement>) => {}}\n        {...commonProps}\n      />\n      <DescriptionListCell {...commonProps}>\n        <div />\n      </DescriptionListCell>\n      <DescriptionListHeadCell minWidth={1} {...commonProps}>\n        <div />\n      </DescriptionListHeadCell>\n      <TableListCell\n        small\n        alignCenter\n        alignRight\n        url=\"/hoge/fuga\"\n        onSelfWindowNavigation={() => {}}\n        colSpan={2}\n        indentLevel={2}\n        {...commonProps}\n      >\n        <div />\n      </TableListCell>\n      <TableListHead fixedHeader fixedHeaderOffset={42} {...commonProps}>\n        <div />\n      </TableListHead>\n      <TableListHeadCell\n        alignCenter\n        alignRight\n        ordering=\"asc\"\n        onClick={() => {}}\n        minWidth={1}\n        {...commonProps}\n      >\n        <div />\n      </TableListHeadCell>\n      <TableListRow\n        onClick={() => {}}\n        url=\"/hoge/fuga\"\n        onSelfWindowNavigation={() => {}}\n        {...tableRowAriaProps}\n        {...commonProps}\n      >\n        <div />\n      </TableListRow>\n\n      {/* messages */}\n      <Message error notice success info {...marginProps} {...commonProps}>\n        test\n      </Message>\n\n      {/* ProgressBar */}\n      <ProgressBar\n        value={1}\n        maxValue={100}\n        width=\"full\"\n        indeterminate\n        {...commonProps}\n      />\n\n      {/* Loading */}\n      <Loading isLoading={false}>children</Loading>\n      <Loading isLoading={true}>children</Loading>\n      <Loading isLoading={true} coverAll />\n      <Loading isLoading={true} coverAll message=\"hoge\" />\n\n      {/* InlineSpinner */}\n      <InlineSpinner isLoading={false} large={false} {...commonProps} />\n    </div>\n  );\n}\n"
  },
  {
    "path": "__tests__/types/flow/lv2.js",
    "content": "// @flow\n\nimport * as React from 'react';\nimport {\n  TextField,\n  RadioButton,\n  CheckBox,\n  CardNavigation,\n  SelectBox,\n  TextArea,\n  StatusIcon,\n  AccordionPanel,\n  BasicTable,\n  Breadcrumbs,\n  BulletedList,\n  ButtonGroup,\n  Calendar,\n  DatePicker,\n  SingleComboBox,\n  MultiComboBox,\n  DescriptionList,\n  MessageDialog,\n  MessageDialogConfirm,\n  TaskDialog,\n  GuideDialog,\n  Dropdown,\n  DropdownMenuContent,\n  DropdownButton,\n  NoDataCreated,\n  NoSearchResults,\n  FileUploader,\n  FileDropArea,\n  FilterableDropdownButton,\n  Footer,\n  DateField,\n  FormActions,\n  FormControl,\n  FormControlGroup,\n  PhoneNumberField,\n  NameField,\n  DigitsInput,\n  DateInput,\n  NumeralCodeInput,\n  PasswordField,\n  GlobalNavi,\n  Header,\n  HeadlineArea,\n  LineSeparatedList,\n  ListButtons,\n  ListButtonSelector,\n  ListCard,\n  ListTable,\n  GroupedListTable,\n  MessageBlock,\n  FloatingMessageBlock,\n  MessageIcon,\n  NumericTable,\n  Pagination,\n  Pager,\n  PageSelector,\n  Paragraph,\n  PopupProgressBar,\n  StackedBarChart,\n  Stepper,\n  VerticalSteps,\n  TabBar,\n  TagBox,\n  MiniTag,\n  WithAccordionContent,\n  WithBalloon,\n  WithDropdown,\n  WithFilterableDropdown,\n  WithPopup,\n  SkeletonPageTitle,\n  SkeletonSectionTitle,\n  SkeletonParagraph,\n  SkeletonRectangle,\n  SkeletonBlock,\n  SkeletonIcon,\n  SkeletonCircle,\n  SkeletonListTable,\n  SkeltonPageTitle,\n  SkeltonSectionTitle,\n  SkeltonParagraph,\n  SkeltonRectangle,\n  SkeltonBlock,\n  SkeltonIcon,\n  SkeltonCircle,\n  SkeltonListTable,\n  SkeletonDescriptionList,\n  SkeletonStackedBarChart,\n  WithTOC,\n  // eslint-disable-next-line import/no-unresolved\n} from 'vibes/index';\nimport type {\n  ComboBoxOption,\n  SingleComboBoxOption,\n  MultiComboBoxOption,\n} from 'vibes/index';\n\nconst marginProps = {\n  marginLeft: true,\n  marginRight: true,\n  marginBottom: true,\n  marginTop: true,\n  marginSize: 'large',\n};\n\nconst commonProps = {\n  'data-guide': 'guide',\n  'data-test': 'test',\n  'data-tracking': 'tracking',\n  'data-masking': true,\n  ma: 1,\n  mt: 1,\n  mb: 1,\n  mr: 1,\n  ml: 1,\n};\n\nconst formHandlers = {\n  onChange: (_e: SyntheticInputEvent<*>) => {},\n  onInput: (_e: SyntheticInputEvent<*>) => {},\n  onFocus: (_e: SyntheticFocusEvent<*>) => {},\n  onBlur: (_e: SyntheticFocusEvent<*>) => {},\n  onKeyDown: (_e: SyntheticKeyboardEvent<*>) => {},\n};\n\nconst comboBoxOptions: ComboBoxOption[] = [\n  { label: 'hoge', id: 1, keywords: ['hoge', 'fuga'] },\n  { label: 'foo', id: 2 },\n];\n\nconst singleComboBoxOptions: SingleComboBoxOption[] = [\n  { label: 'hoge', id: 1, keywords: ['hoge', 'fuga'], subLabel: 'bar' },\n  { label: 'foo', id: 2 },\n];\n\nexport default function App() {\n  return (\n    <div className=\"App\">\n      {/* lv2/accordionPanel */}\n      <AccordionPanel\n        title=\"test\"\n        open\n        small\n        {...marginProps}\n        {...commonProps}\n        onClick={() => {}}\n      >\n        <div />\n      </AccordionPanel>\n      {/* lv2/basicTable */}\n      <BasicTable\n        margins={marginProps}\n        headers={[\n          {\n            value: 'test',\n            alignCenter: true,\n            alignRight: true,\n            ordering: 'asc',\n            onClick: () => {},\n            minWidth: 1,\n          },\n          { value: <a href=\"#test\">test</a> },\n        ]}\n        rows={[\n          {\n            onClick: (_rowIndex: number) => {},\n            onSelfWindowNavigation: () => {},\n            cells: [\n              {\n                value: 1,\n                alignCenter: true,\n                alignRight: true,\n                small: true,\n              },\n              { value: '2' },\n            ],\n          },\n          {\n            cells: [{ value: 'link' }],\n            url: 'http://example.com',\n          },\n        ]}\n        {...commonProps}\n      />\n\n      {/* lv2/breadcrumbs */}\n      <Breadcrumbs\n        links={[{ title: 'test', url: 'test', onClickNavigator: () => {} }]}\n        label=\"breadcrumbs\"\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/bulletedList */}\n      <BulletedList\n        listContents={[\n          {\n            value: 'test',\n            url: 'test',\n            target: '_self',\n            rel: 'test',\n          },\n          {\n            value: 'test',\n            'data-guide': 'guide',\n            'data-test': 'test',\n            'data-tracking': 'tracking',\n            'data-masking': true,\n          },\n        ]}\n        small\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/buttonGroup */}\n      <ButtonGroup responsive align=\"left\" {...marginProps} {...commonProps}>\n        <div />\n      </ButtonGroup>\n\n      {/* lv2/calendar */}\n      <Calendar\n        year=\"2018\"\n        month=\"1\"\n        contents={[\n          {\n            type: 'timeRecord',\n            date: '2019-01-01',\n            status: 'notice',\n            dateLabel: 'test',\n            openingTime: '2019-01-01',\n            endingTime: '2019-12-31',\n          },\n        ]}\n        startFromMonday\n        nationalHolidays={['test']}\n        onClickDate={(_date: string) => {}}\n        {...commonProps}\n      />\n      <DatePicker\n        date=\"2019-12-01\"\n        onDateClick={(_d: string) => {}}\n        minDate=\"2012-07-09\"\n        maxDate=\"2019-12-17\"\n        {...commonProps}\n      />\n\n      {/* lv2/comboBox */}\n      <SingleComboBox\n        value={{ label: 'hoge', id: 1, keywords: ['hoge', 'fuga'] }}\n        options={comboBoxOptions}\n        id=\"single-combobox-test\"\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        required\n        disabled\n        error\n        small\n        large\n        width=\"large\"\n        listWidth=\"xSmall\"\n        emptyMessage={<div />}\n        borderless\n        trailingItem={{\n          onSelect: (_fieldValue: string) => {},\n          isVisible: (_fieledValue: string): boolean => {\n            return true;\n          },\n          render: (_fieldValue: string): React.Node => <div />,\n        }}\n        {...{ ...formHandlers, onChange: (_val?: ComboBoxOption) => {} }}\n        {...marginProps}\n        {...commonProps}\n      />\n      <SingleComboBox\n        value={{\n          label: 'hoge',\n          id: 1,\n          keywords: ['hoge', 'fuga'],\n          subLabel: 'bar',\n        }}\n        options={singleComboBoxOptions}\n        id=\"single-combobox-test\"\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        required\n        disabled\n        error\n        small\n        large\n        width=\"large\"\n        listWidth=\"xSmall\"\n        emptyMessage={<div />}\n        borderless\n        trailingItem={{\n          onSelect: (_fieldValue: string) => {},\n          isVisible: (_fieledValue: string): boolean => {\n            return true;\n          },\n          render: (_fieldValue: string): React.Node => <div />,\n        }}\n        {...{ ...formHandlers, onChange: (_val?: ComboBoxOption) => {} }}\n        {...marginProps}\n        {...commonProps}\n      />\n      <MultiComboBox\n        values={[\n          { label: 'hoge', id: 1, keywords: ['hoge', 'fuga'], color: 'RE' },\n        ]}\n        options={[\n          { label: 'hoge', id: 1, keywords: ['hoge', 'fuga'], color: 'RE' },\n          { label: 'foo', id: 2, color: 'YE' },\n        ]}\n        id=\"single-combobox-test\"\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        required\n        disabled\n        error\n        width=\"large\"\n        listWidth=\"xSmall\"\n        maxSelectionCount={1}\n        emptyMessage={<div />}\n        borderless\n        {...{ ...formHandlers, onChange: (_val: MultiComboBoxOption[]) => {} }}\n        {...commonProps}\n      />\n\n      {/* lv2/cardNavigation */}\n      <CardNavigation\n        navigationContents={[\n          {\n            title: 'test',\n            text: 'test',\n            url: '#',\n            IconComponent: StatusIcon,\n          },\n          {\n            title: 'test',\n            text: 'test',\n            url: '#',\n            IconComponent: StatusIcon,\n          },\n          {\n            title: 'test',\n            text: 'test',\n            url: '#',\n            IconComponent: StatusIcon,\n          },\n        ]}\n        {...commonProps}\n      />\n\n      {/* lv2/descriptionList */}\n      <DescriptionList\n        listContents={[\n          {\n            title: <div />,\n            value: <div />,\n          },\n        ]}\n        headCellMinWidth={1}\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/dialogs */}\n      <MessageDialog\n        isOpen\n        title=\"test\"\n        onRequestClose={(_e: SyntheticEvent<*>) => {}}\n        closeButtonLabel=\"test\"\n        id=\"test\"\n        contentAlign=\"left\"\n        {...commonProps}\n      >\n        <div />\n      </MessageDialog>\n      <MessageDialogConfirm\n        isOpen\n        title=\"test\"\n        onConfirm={(_e: SyntheticEvent<*>) => {}}\n        onRequestClose={(_e: SyntheticEvent<*>) => {}}\n        confirmButtonLabel=\"test\"\n        closeButtonLabel=\"test\"\n        confirmButtonHref=\"https://example.com\"\n        confirmButtonTarget=\"_blank\"\n        confirmButtonIconPosition=\"left\"\n        confirmButtonIconComponent={StatusIcon}\n        danger\n        disabled\n        suspend\n        id=\"test\"\n        contentAlign=\"left\"\n        {...commonProps}\n      >\n        <div />\n      </MessageDialogConfirm>\n      <TaskDialog\n        isOpen\n        title=\"test\"\n        onPrimaryAction={(_e: SyntheticEvent<*>) => {}}\n        onRequestClose={(_e: SyntheticEvent<*>) => {}}\n        primaryButtonLabel=\"test\"\n        closeButtonLabel=\"test\"\n        danger\n        disabled\n        id=\"test\"\n        headerSideContent={<div />}\n        contentLabel=\"test\"\n        {...commonProps}\n      >\n        <div />\n      </TaskDialog>\n      <GuideDialog\n        isOpen\n        title=\"test\"\n        type=\"start\"\n        stepCount={1}\n        totalStepCount={100}\n        onRequestBackward={(_e: SyntheticMouseEvent<>) => {}}\n        backwardButtonLabel=\"test\"\n        onRequestForward={(_e: SyntheticMouseEvent<>) => {}}\n        forwardButtonLabel=\"test\"\n        onRequestClose={(_e: SyntheticMouseEvent<>) => {}}\n        closeButtonLabel=\"test\"\n        image={{\n          src: 'test',\n          width: 'test',\n          height: 'test',\n          alt: 'test',\n        }}\n        id=\"test\"\n        {...commonProps}\n      >\n        <div />\n      </GuideDialog>\n\n      {/* lv2/dropdown */}\n      <Dropdown\n        contents={[\n          {\n            type: 'rule',\n          },\n          {\n            type: 'textOnly',\n            text: 'test',\n          },\n          {\n            type: 'checkbox',\n            text: 'test',\n            value: 'test',\n            name: 'test',\n            onChange: (_e: SyntheticInputEvent<HTMLInputElement>) => {},\n            checked: true,\n            disabled: true,\n          },\n          {\n            type: 'selectable',\n            text: 'test',\n            ariaLabel: 'test',\n            onClick: (_e: SyntheticEvent<>) => {},\n            target: '_blank',\n            rel: 'test',\n          },\n        ]}\n        firstSelectableItemRef={(\n          _el: ?React.ElementRef<'button' | 'a' | 'input'>\n        ) => {}}\n        onRequestClose={() => {}}\n        align=\"right\"\n        positionRelative\n        {...commonProps}\n      />\n\n      <DropdownMenuContent\n        contents={[\n          {\n            type: 'rule',\n          },\n          {\n            type: 'textOnly',\n            text: 'test',\n          },\n          {\n            type: 'checkbox',\n            text: 'test',\n            value: 'test',\n            name: 'test',\n            onChange: (_e: SyntheticInputEvent<HTMLInputElement>) => {},\n            checked: true,\n            disabled: true,\n          },\n          {\n            type: 'selectable',\n            text: 'test',\n            ariaLabel: 'test',\n            onClick: (_e: SyntheticEvent<>) => {},\n            target: '_blank',\n            rel: 'test',\n          },\n        ]}\n        firstSelectableItemRef={(\n          _el: ?React.ElementRef<'button' | 'a' | 'input'>\n        ) => {}}\n        onRequestClose={() => {}}\n        onFocusOut={(_direction: 'upward' | 'downward') => {}}\n        {...commonProps}\n      />\n\n      {/* lv2/dropdownButton */}\n      <DropdownButton\n        buttonLabel=\"button\"\n        disabled\n        small\n        large\n        appearance=\"tertiary\"\n        iconPosition=\"right\"\n        IconOnlyComponent={StatusIcon}\n        dropdownContents={[\n          {\n            type: 'rule',\n          },\n          {\n            type: 'textOnly',\n            text: 'test',\n          },\n          {\n            type: 'selectable',\n            text: 'test',\n            ariaLabel: 'test',\n            onClick: (_e: SyntheticEvent<>) => {},\n          },\n        ]}\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/emptyStates} */}\n      <NoDataCreated\n        actionWord=\"登録\"\n        objectName=\"hoge\"\n        image={{ src: 'aaa', width: '100', height: '100' }}\n        mainText=\"aaa\"\n        subText=\"aaa\"\n      >\n        <div />\n      </NoDataCreated>\n\n      <NoSearchResults\n        objectName=\"hoge\"\n        image={{ src: 'aaa', width: '100', height: '100' }}\n        mainText=\"aaa\"\n        subText=\"aaa\"\n      />\n\n      {/* lv2/fileUploader */}\n      <FileUploader\n        onFileSelect={() => {}}\n        acceptFileTypes={['text/csv']}\n        isUploading\n        fileLabel=\"test\"\n        multiple\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/fileDropArea */}\n      <FileDropArea\n        onFileSelect={() => {}}\n        acceptFileTypes={['text/csv']}\n        isUploading\n        fileLabel=\"test\"\n        multiple\n        {...commonProps}\n      >\n        <div />\n      </FileDropArea>\n\n      {/* lv2/filterableDropdownButton */}\n      <FilterableDropdownButton\n        buttonLabel=\"button\"\n        disabled\n        small\n        large\n        appearance=\"tertiary\"\n        dropdownContents={[\n          {\n            type: 'selectable',\n            text: 'test',\n            ariaLabel: 'test',\n            onClick: (_e: SyntheticEvent<>) => {},\n            keywords: ['aaa'],\n          },\n          {\n            type: 'checkbox',\n            text: 'test',\n            onChange: (_e: SyntheticEvent<>) => {},\n            keywords: ['aaa'],\n          },\n        ]}\n        iconPosition=\"left\"\n        IconComponent={StatusIcon}\n        {...commonProps}\n      />\n\n      {/* lv2/footer */}\n      <Footer\n        links={[{ title: 'test', url: 'test' }]}\n        AppStoreUrl=\"test\"\n        GooglePlayUrl=\"test\"\n        disableAppStoreBadge\n        disableGooglePlayBadge\n        copyright=\"Copyright 2012-2019 © freee K.K.\"\n        {...commonProps}\n      />\n\n      {/* lv2/formBlock */}\n      <DateField\n        selectedDate=\"2019-01-01\"\n        startDate=\"2019-01-01\"\n        endDate=\"2019-01-01\"\n        small\n        disabled\n        error\n        required\n        autoComplete=\"bday\"\n        nullable\n        onChange={(_date: string | null) => {}}\n        onInput={(_date: string | null) => {}}\n        onFocus={(_date: string | null) => {}}\n        onBlur={(_date: string | null) => {}}\n        onKeyDown={(_date: string | null) => {}}\n        {...marginProps}\n        {...commonProps}\n      />\n      <FormActions responsive fixed>\n        <div />\n      </FormActions>\n      <FormActions responsive position=\"fixed\">\n        <div />\n      </FormActions>\n      <FormControl\n        id=\"formControl1\"\n        label=\"test\"\n        required\n        {...marginProps}\n        {...commonProps}\n      >\n        <TextField />\n        <RadioButton />\n        <CheckBox />\n        <SelectBox />\n        <TextArea />\n        <NameField />\n        <PhoneNumberField />\n        <DateField\n          selectedDate=\"2019-01-01\"\n          startDate=\"2019-01-01\"\n          endDate=\"2019-01-01\"\n        />\n      </FormControl>\n      <FormControlGroup {...commonProps}>\n        <FormControl>\n          <TextField />\n        </FormControl>\n      </FormControlGroup>\n      <NameField\n        lastName=\"Doe\"\n        firstName=\"John\"\n        lastNamePlaceholder=\"last name\"\n        firstNamePlaceholder=\"first name\"\n        label=\"name\"\n        labelledby=\"idref\"\n        disabled\n        required\n        error\n        small\n        autoComplete=\"name\"\n        onChange={(\n          _key: 'lastName' | 'firstName',\n          _e: SyntheticInputEvent<HTMLInputElement>\n        ) => {}}\n        onInput={(\n          _key: 'lastName' | 'firstName',\n          _e: SyntheticInputEvent<HTMLInputElement>\n        ) => {}}\n        onFocus={(\n          _key: 'lastName' | 'firstName',\n          _e: SyntheticFocusEvent<HTMLInputElement>\n        ) => {}}\n        onBlur={(\n          _key: 'lastName' | 'firstName',\n          _e: SyntheticFocusEvent<HTMLInputElement>\n        ) => {}}\n        onKeyDown={(\n          _key: 'lastName' | 'firstName',\n          _e: SyntheticKeyboardEvent<HTMLInputElement>\n        ) => {}}\n        {...marginProps}\n        {...commonProps}\n      />\n      <PhoneNumberField\n        phoneNumberA=\"000\"\n        phoneNumberB=\"0000\"\n        phoneNumberC=\"0000\"\n        placeholderA=\"000\"\n        placeholderB=\"0000\"\n        placeholderC=\"0000\"\n        disabled\n        error\n        small\n        autoComplete=\"tel\"\n        onChange={(\n          _key: 'a' | 'b' | 'c',\n          _e: SyntheticInputEvent<HTMLInputElement>\n        ) => {}}\n        onInput={(\n          _key: 'a' | 'b' | 'c',\n          _e: SyntheticInputEvent<HTMLInputElement>\n        ) => {}}\n        onFocus={(\n          _key: 'a' | 'b' | 'c',\n          _e: SyntheticFocusEvent<HTMLInputElement>\n        ) => {}}\n        onBlur={(\n          _key: 'a' | 'b' | 'c',\n          _e: SyntheticFocusEvent<HTMLInputElement>\n        ) => {}}\n        onKeyDown={(\n          _key: 'a' | 'b' | 'c',\n          _e: SyntheticKeyboardEvent<HTMLInputElement>\n        ) => {}}\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/formFields */}\n      {['xSmall', 'small', 'medium', 'large', 'full'].map((width) => (\n        <DigitsInput\n          key={width}\n          value={0}\n          nullable\n          id=\"id_digitsInput\"\n          label=\"DigitsInput\"\n          labelledby=\"label_digitsInput\"\n          name=\"name_digitsInput\"\n          required\n          disabled\n          error\n          small\n          borderless\n          width={width}\n          autoComplete=\"off\"\n          onChange={(_v: number | null) => {}}\n          onFocus={(_e: SyntheticFocusEvent<HTMLInputElement>) => {}}\n          onBlur={(_e: SyntheticFocusEvent<HTMLInputElement>) => {}}\n          onInput={(_e: SyntheticInputEvent<HTMLInputElement>) => {}}\n          onKeyDown={(_e: SyntheticKeyboardEvent<HTMLInputElement>) => {}}\n          {...marginProps}\n          {...commonProps}\n        />\n      ))}\n      {['xSmall', 'small', 'medium', 'large', 'full'].map((width) => (\n        <DateInput\n          key={width}\n          value=\"2019-01-01\"\n          id=\"dateinput-test\"\n          label=\"test\"\n          labelledby=\"test\"\n          name=\"test\"\n          required\n          disabled\n          error\n          small\n          minDate=\"2012-07-09\"\n          maxDate=\"2019-12-17\"\n          width={width}\n          {...{ ...formHandlers, onChange: (_d: string) => {} }}\n          {...marginProps}\n          {...commonProps}\n        />\n      ))}\n      <NumeralCodeInput\n        id=\"textfield-test\"\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        value=\"test\"\n        required\n        autofocus\n        disabled\n        error\n        small\n        large\n        alignCenter\n        alignRight\n        maxLength={100}\n        width=\"small\"\n        autoComplete=\"on\"\n        ref={React.createRef<HTMLInputElement>()}\n        onChange={(_v: string) => {}}\n        onInput={(_e: SyntheticInputEvent<HTMLInputElement>) => {}}\n        onFocus={(_e: SyntheticFocusEvent<HTMLInputElement>) => {}}\n        onBlur={(_e: SyntheticFocusEvent<HTMLInputElement>) => {}}\n        onKeyDown={(_e: SyntheticKeyboardEvent<HTMLInputElement>) => {}}\n        onKeyUp={(_e: SyntheticKeyboardEvent<HTMLInputElement>) => {}}\n        {...commonProps}\n      />\n      <PasswordField\n        id=\"passwordfield-test\"\n        label=\"test\"\n        labelledby=\"test\"\n        placeholder=\"test\"\n        name=\"test\"\n        value=\"test\"\n        required\n        autofocus\n        disabled\n        error\n        small\n        large\n        alignCenter\n        alignRight\n        width=\"small\"\n        autoComplete=\"current-password\"\n        ref={React.createRef<HTMLInputElement>()}\n        onChange={(_e: SyntheticInputEvent<HTMLInputElement>) => {}}\n        onInput={(_e: SyntheticInputEvent<HTMLInputElement>) => {}}\n        onFocus={(_e: SyntheticFocusEvent<HTMLInputElement>) => {}}\n        onBlur={(_e: SyntheticFocusEvent<HTMLInputElement>) => {}}\n        onKeyDown={(_e: SyntheticKeyboardEvent<HTMLInputElement>) => {}}\n        onKeyUp={(_e: SyntheticKeyboardEvent<HTMLInputElement>) => {}}\n        {...commonProps}\n      />\n\n      {/* lv2/globalNavi */}\n      <GlobalNavi\n        links={[\n          {\n            title: 'test',\n            url: 'test',\n            IconComponent: StatusIcon,\n            current: true,\n            'data-guide': 'guide',\n            'data-test': 'test',\n            'data-tracking': 'tracking',\n            'data-masking': true,\n          },\n        ]}\n        searchUrl=\"https://support.freee.co.jp/hc/ja/search\"\n        {...commonProps}\n      />\n\n      {/* lv2/header */}\n      <Header\n        logo={<div />}\n        sectionDataList={[\n          {\n            type: 'plan',\n            text: 'test',\n            url: 'test',\n            IconComponent: StatusIcon,\n            iconType: 'default',\n            dropdownContents: [\n              {\n                type: 'selectable',\n                text: 'test',\n                ariaLabel: 'test',\n                onClick: (_: SyntheticEvent<>) => {},\n              },\n            ],\n          },\n          {\n            type: 'dropdown',\n            text: 'test',\n            IconComponent: StatusIcon,\n            hasBadge: true,\n            dropdownContents: [\n              {\n                type: 'selectable',\n                text: <p>test</p>,\n                ariaLabel: 'test',\n                onClick: (_: SyntheticEvent<>) => {},\n                unread: true,\n              },\n              {\n                type: 'textOnly',\n                text: <p>test</p>,\n              },\n            ],\n          },\n        ]}\n        {...commonProps}\n      />\n      <Header\n        logo={<div />}\n        sectionDataList={[\n          {\n            type: 'plan',\n            text: 'test',\n            url: 'test',\n            IconComponent: StatusIcon,\n            iconType: 'default',\n            dropdownContents: [\n              {\n                type: 'selectable',\n                text: 'test',\n                ariaLabel: 'test',\n                onClick: (_: SyntheticEvent<>) => {},\n              },\n            ],\n          },\n          {\n            type: 'dropdown',\n            text: 'test',\n            IconComponent: StatusIcon,\n            hasBadge: true,\n            dropdownContents: [\n              {\n                type: 'selectable',\n                text: <p>test</p>,\n                ariaLabel: 'test',\n                onClick: (_: SyntheticEvent<>) => {},\n                unread: true,\n              },\n              {\n                type: 'textOnly',\n                text: <p>test</p>,\n              },\n            ],\n          },\n        ]}\n        {...commonProps}\n      />\n\n      {/* lv2/headlineArea */}\n      <HeadlineArea\n        pageTitle=\"test\"\n        statusIconType=\"done\"\n        statusIconText=\"test\"\n        relatedMenus={<div />}\n        {...commonProps}\n      >\n        <div />\n      </HeadlineArea>\n\n      {/* lv2/lineSeparatedList */}\n      <LineSeparatedList\n        listContents={[\n          {\n            value: 'test',\n          },\n          {\n            value: <Paragraph>test</Paragraph>,\n          },\n        ]}\n        {...commonProps}\n      />\n\n      {/* lv2/listButtons */}\n      <ListButtons\n        buttons={[\n          {\n            label: <div />,\n            selected: true,\n            href: 'test',\n            target: '_blank',\n            rel: 'test',\n            statusIconText: 'test',\n            statusIconType: 'success',\n            bgTransparent: true,\n            onClick: (_e: SyntheticEvent<HTMLButtonElement>) => {},\n          },\n        ]}\n        onKeyDown={(\n          _e: SyntheticKeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n        ) => {}}\n        selectableItemRef={React.createRef<\n          HTMLButtonElement | HTMLAnchorElement\n        >()}\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/listButtonSelector */}\n      <ListButtonSelector\n        buttons={[\n          {\n            label: <div />,\n            selected: true,\n            href: 'test',\n            target: '_blank',\n            rel: 'test',\n            statusIconText: 'test',\n            statusIconType: 'success',\n            bgTransparent: true,\n            onClick: (_e: SyntheticEvent<HTMLButtonElement>) => {},\n          },\n        ]}\n        selectedLabel=\"test\"\n        selectorLabel=\"test\"\n        withActionButton\n        actionLabel=\"test\"\n        action={() => {}}\n        ActionIconComponent={StatusIcon}\n        disabled\n        {...marginProps}\n        {...commonProps}\n      ></ListButtonSelector>\n\n      {/* lv2/listCard */}\n      <ListCard\n        title=\"test\"\n        url=\"test\"\n        onClick={(_e: SyntheticEvent<HTMLButtonElement>) => {}}\n        actions={<div />}\n        thumbnail={<div />}\n        target=\"test\"\n        rel=\"test\"\n        {...commonProps}\n      >\n        <div />\n      </ListCard>\n\n      {/* lv2/listTable */}\n      <ListTable\n        margins={marginProps}\n        headers={[\n          {\n            value: 'test',\n            alignCenter: true,\n            alignRight: true,\n            ordering: 'asc',\n            onClick: () => {},\n            minWidth: 1,\n            'data-test': 'test',\n          },\n          { value: <a href=\"#test\">test</a> },\n        ]}\n        rows={[\n          {\n            onClick: (_rowIndex: number) => {},\n            onSelfWindowNavigation: () => {},\n            onChangeCheckBox: (_e: SyntheticInputEvent<HTMLInputElement>) => {},\n            'data-test': 'test',\n            cells: [\n              {\n                value: 1,\n                alignCenter: true,\n                alignRight: true,\n                small: true,\n                colSpan: 2,\n                'data-masking': true,\n                'data-test': 'test',\n              },\n              { value: '2' },\n            ],\n          },\n          {\n            cells: [{ value: 'link' }],\n            url: 'http://example.com',\n          },\n        ]}\n        onChangeHeaderCheckBox={(\n          _e: SyntheticInputEvent<HTMLInputElement>\n        ) => {}}\n        fixedHeader\n        fixedHeaderOffset={1}\n        {...commonProps}\n      />\n\n      <GroupedListTable\n        withCheckBox\n        foldable\n        headers={[\n          {\n            value: 'test',\n            alignCenter: true,\n            alignRight: true,\n            ordering: 'asc',\n            onClick: () => {},\n            minWidth: 1,\n          },\n          { value: <a href=\"#test\">test</a> },\n        ]}\n        rowGroups={[\n          {\n            summaryCells: [\n              {\n                value: 1,\n                alignCenter: true,\n                alignRight: true,\n                small: true,\n                colSpan: 2,\n                'data-test': 'test',\n              },\n              { value: '2' },\n            ],\n\n            rows: [\n              {\n                onClick: (_rowIndex: number) => {},\n                onSelfWindowNavigation: () => {},\n                onChangeCheckBox: (\n                  _e: SyntheticInputEvent<HTMLInputElement>\n                ) => {},\n                cells: [\n                  {\n                    value: 1,\n                    alignCenter: true,\n                    alignRight: true,\n                    small: true,\n                    colSpan: 2,\n                  },\n                  { value: '2' },\n                ],\n              },\n              {\n                cells: [{ value: 'link' }],\n                url: 'http://example.com',\n              },\n            ],\n            onClick: () => {},\n            onChangeCheckBox: (_e: SyntheticInputEvent<HTMLInputElement>) => {},\n            folded: true,\n            onToggleFolded: (_b: boolean) => {},\n            'data-test': 'test',\n          },\n        ]}\n        onChangeHeaderCheckBox={(\n          _e: SyntheticInputEvent<HTMLInputElement>\n        ) => {}}\n        {...commonProps}\n      />\n\n      {/* lv2/messageBlock */}\n      <MessageBlock\n        linkTitle=\"test\"\n        linkUrl=\"test\"\n        linkTarget=\"_blank\"\n        linkRel=\"test\"\n        onRequestClose={() => {}}\n        message=\"test\"\n        hover\n        error\n        notice\n        success\n        info\n        {...marginProps}\n      />\n      <FloatingMessageBlock\n        message=\"test\"\n        error\n        notice\n        success\n        info\n        onClose={(_autoClose: boolean) => {}}\n        {...commonProps}\n      />\n\n      <MessageBlock\n        linkTitle=\"test\"\n        linkUrl=\"test\"\n        message=\"test\"\n        hover\n        error\n        notice\n        success\n        info\n        {...marginProps}\n      />\n\n      {/* lv2/messageIcon */}\n      <MessageIcon label=\"hoge\" error success notice small {...marginProps}>\n        message\n      </MessageIcon>\n\n      {/* lv2/numericTable */}\n      <NumericTable\n        headers={[\n          {\n            value: <div />,\n            alignCenter: true,\n            alignRight: true,\n            ordering: 'asc',\n            onClick: () => {},\n          },\n        ]}\n        rows={[\n          {\n            cells: [\n              {\n                value: <div />,\n                alignCenter: true,\n                alignRight: true,\n                small: true,\n                onClick: (_rowIndex: number) => {},\n              },\n            ],\n          },\n        ]}\n        {...marginProps}\n        {...commonProps}\n      />\n\n      {/* lv2/pagination */}\n      <Pagination\n        rowsPerPageOptions={[{ value: '10', name: '10件' }, { value: '20' }]}\n        rowsPerPageValue={10}\n        defaultRowsPerPageValue={10}\n        currentPage={1}\n        rowCount={99}\n        displayRowCount=\"100件以上\"\n        selectBoxWidth=\"small\"\n        disabled\n        onChange={() => {}}\n        onFocus={() => {}}\n        onBlur={() => {}}\n        {...commonProps}\n      />\n\n      {/* lv2/pager */}\n      <Pager\n        currentPage={1}\n        onPageChange={(_page: number) => {}}\n        pageCount={1}\n        pageRange={10}\n        sidePageRange={10}\n        small\n      />\n\n      {/* lv2/pageSelector */}\n      <PageSelector\n        prevDisabled\n        nextDisabled\n        onClickPrev={() => {}}\n        onClickNext={() => {}}\n        onClickTitle={() => {}}\n        renderPopup={(requestClose, firstSelectableItemRef) => (\n          <button onClick={requestClose} ref={firstSelectableItemRef} />\n        )}\n        hasDropdown\n        isExpanded\n        {...marginProps}\n        {...commonProps}\n      >\n        <div />\n      </PageSelector>\n\n      {/* lv2/popupProgressBar */}\n      <PopupProgressBar\n        status=\"doing\"\n        message=\"メッセージ\"\n        onClose={() => {}}\n        {...commonProps}\n      />\n\n      {/* lv2/stackedBarChart */}\n      <StackedBarChart\n        items={[\n          {\n            color: 'RE',\n            label: 'label',\n            value: 1,\n            valueLabel: '1',\n          },\n          {\n            color: 'OR',\n            label: 'label',\n            value: 2,\n            valueLabel: '2',\n          },\n        ]}\n        onClickItem={() => {}}\n        {...commonProps}\n      />\n\n      {/* lv2/stepper */}\n      <Stepper\n        steps={['test', <div key={1} />]}\n        currentStepIndex={1}\n        disabledStepIndex={[1, 2, 3, 4, 5]}\n        small\n        {...commonProps}\n      />\n      <VerticalSteps\n        steps={[\n          {\n            title: 'test',\n            content: <div />,\n            contentSummary: <div />,\n            actions: <div />,\n          },\n        ]}\n        currentStepIndex={0}\n        stepHeadlineLevel={1}\n        {...commonProps}\n      />\n\n      {/* lv2/tabbar */}\n      <TabBar\n        tabs={['test']}\n        currentTabIndex={1}\n        small\n        onClickTab={(_n: number) => {}}\n        {...commonProps}\n      />\n      <TabBar\n        tabs={[\n          {\n            name: 'test',\n            'data-guide': 'guide',\n            'data-test': 'test',\n            'data-tracking': 'tracking',\n            'data-masking': true,\n          },\n        ]}\n        currentTabIndex={1}\n        small\n        onClickTab={(_n: number) => {}}\n        {...commonProps}\n      />\n      {/* lv2/tagbox */}\n      <TagBox type=\"hoge\" removable onRemove={() => {}} {...commonProps}>\n        hoge\n      </TagBox>\n      <MiniTag type=\"hoge\" removable onRemove={() => {}} {...commonProps}>\n        hoge\n      </MiniTag>\n\n      {/* lv2/withAccordionContent */}\n      <WithAccordionContent\n        renderAccordionButtonArea={(AccordionButton, contentId) => (\n          <AccordionButton contentId={contentId} open onClick={() => {}}>\n            アコーディオンボタン\n          </AccordionButton>\n        )}\n        isOpen\n        {...commonProps}\n      >\n        <div />\n      </WithAccordionContent>\n      {/* lv2/withBalloon */}\n      <WithBalloon\n        border=\"default\"\n        balloonContent={<div />}\n        {...commonProps}\n        balloonDisabled\n      >\n        <div />\n      </WithBalloon>\n      <WithBalloon\n        border=\"default\"\n        renderContent={(_balloonId: string) => <div />}\n        renderBalloonContent={(_isVisible: boolean) => <div />}\n        {...commonProps}\n      ></WithBalloon>\n\n      {/* lv2/WithDropdown */}\n      <WithDropdown\n        disabled\n        dropdownContents={[\n          {\n            type: 'rule',\n          },\n          {\n            type: 'textOnly',\n            text: 'test',\n          },\n          {\n            type: 'selectable',\n            text: 'test',\n            ariaLabel: 'test',\n            onClick: (_e: SyntheticEvent<>) => {},\n          },\n        ]}\n        renderButton={(dropdownId, isOpen, buttonRef) => (\n          <button\n            aria-controls={dropdownId}\n            aria-expanded={isOpen}\n            ref={buttonRef}\n          >\n            hoge\n          </button>\n        )}\n        {...commonProps}\n      />\n      <WithFilterableDropdown\n        disabled\n        render={(popupId, isOpen, controlRef, togglePopup) => (\n          <button\n            aria-controls={popupId}\n            aria-expanded={isOpen}\n            ref={controlRef}\n            onFocus={togglePopup(true)}\n          >\n            hoge\n          </button>\n        )}\n        dropdownContents={[\n          {\n            type: 'selectable',\n            text: 'test',\n            ariaLabel: 'test',\n            onClick: (_e: SyntheticEvent<>) => {},\n            keywords: ['aaa'],\n          },\n          {\n            type: 'checkbox',\n            text: 'test',\n            onChange: (_e: SyntheticEvent<>) => {},\n            keywords: ['aaa'],\n          },\n        ]}\n        {...commonProps}\n      />\n      <WithPopup\n        disabled\n        render={(popupId, isOpen, controlRef, togglePopup) => (\n          <button\n            aria-controls={popupId}\n            aria-expanded={isOpen}\n            ref={controlRef}\n            onFocus={togglePopup(true)}\n          >\n            hoge\n          </button>\n        )}\n        renderPopup={(requestClose, firstSelectableItemRef) => (\n          <div>\n            <button\n              onClick={() => requestClose()}\n              ref={firstSelectableItemRef}\n            ></button>\n          </div>\n        )}\n      />\n\n      {/* lv2/skeleton */}\n      <SkeletonPageTitle {...commonProps} />\n      <SkeletonSectionTitle {...commonProps} />\n      <SkeletonParagraph size=\"medium\" {...commonProps} />\n      <SkeletonRectangle size=\"default\" {...commonProps} />\n      <SkeletonBlock size=\"medium\" {...commonProps} />\n      <SkeletonIcon size=\"medium\" {...commonProps} />\n      <SkeletonCircle size=\"medium\" {...commonProps} />\n      <SkeletonListTable\n        columnCount={5}\n        rowCount={5}\n        rowCells={[{ value: <SkeletonIcon /> }]}\n        {...commonProps}\n      />\n      <SkeletonStackedBarChart {...commonProps} />\n      <SkeltonPageTitle {...commonProps} />\n      <SkeltonSectionTitle {...commonProps} />\n      <SkeltonParagraph size=\"medium\" {...commonProps} />\n      <SkeltonRectangle size=\"default\" {...commonProps} />\n      <SkeltonBlock size=\"medium\" {...commonProps} />\n      <SkeltonIcon size=\"medium\" {...commonProps} />\n      <SkeltonCircle size=\"medium\" {...commonProps} />\n      <SkeltonListTable\n        columnCount={5}\n        rowCount={5}\n        rowCells={[{ value: <SkeletonIcon /> }]}\n        {...commonProps}\n      />\n      <SkeletonDescriptionList rowCount={5} {...commonProps} />\n      <WithTOC\n        containerID=\"WithTOC--Example\"\n        contents={[\n          { id: 'WithTOC--Example1', label: 'Lorem Ipsum', content: <></> },\n        ]}\n        offsetTop={200}\n        onNavigateTo={(_: string) => {}}\n      />\n    </div>\n  );\n}\n"
  },
  {
    "path": "__tests__/types/flow/utilities.js",
    "content": "// @flow\nimport {\n  getFocusableElements,\n  isFocusableElement,\n  // eslint-disable-next-line import/no-unresolved\n} from 'vibes/index';\n\nconst focusableElement = getFocusableElements(new HTMLElement());\nfocusableElement.length;\nfocusableElement.item(0);\nfocusableElement.entries();\nfocusableElement.keys();\nfocusableElement.values();\n\n// $FlowExpectedError\nfocusableElement.hoge();\n\nisFocusableElement(new HTMLElement());\n"
  },
  {
    "path": "docker/git-credential-github-token",
    "content": "#!/bin/sh\n\necho protocol=https\necho host=github.com\necho username=$GITHUB_USERNAME\necho password=$GITHUB_TOKEN\n\n"
  },
  {
    "path": "docs/Colors.stories.mdx",
    "content": "import { Meta } from \"@storybook/addon-docs\";\n\n<Meta title=\"doc/Colors\" />\n\n# 色についての方針\n\nvibes 内で使用する色、ならびに vibes を使用するプロダクトで使用する色は、[freee のブランドカラー](https://brand.freee.co.jp/designelements/color/)から選定してください。\n\nまた、コントラスト比の確保に留意してください（[コントラスト比確保の重要性](https://a11y-guidelines.freee.co.jp/explanations/contrast.html)）\n\n- テキストコンテンツに関しては 4.5:1 のコントラスト比を確保してください\n- テキストコンテンツ以外に関しては、画面の情報を読み解くのに必要な部分に関しては 3:1 のコントラスト比を確保してください\n\n# vibes 内で使用されるセマンティックカラー\n\n特定の意味を伝えるために、いくつかの色はその意味と紐付いた **セマンティックカラー** として定義します。\nこれらの意味を伝える場合、または色を使用する場合は、色と意味の組み合わせに一貫性があるようにしてください。\n\n## P5 (<span style={{background: \"#2864f0\", color: \"#FFFFFF\"}}>#2864f0</span>)\n\n- **[DO]** freee のブランドを象徴する色で、ロゴはこの色を使用します\n- **[DO]** UI では「現在いる場所」「現在表示しているもの」「（処理などの）成功」を表現するのにも使用されています\n- **[DO NOT]** P7 とあわせて、リンクやボタンの色と誤認しやすいため、「非インタラクティブ要素を目立たせるため」だけの使用は避けてください l\n\n## P7 (<span style={{background: \"#285ac8\", color: \"#FFFFFF\"}}>#285ac8</span>)\n\n- **[DO]** リンクやボタンに使用するために、P5 よりやや暗くしたメインカラーです\n- **[DO NOT]** P5 とあわせて、リンクやボタンの色と誤認しやすいため、「非インタラクティブ要素を目立たせるため」だけの使用は避けてください l\n\n## RE5 (<span style={{background: \"#dc1e32\", color: \"#ffffff\"}}>#dc1e32</span>)\n\n- **[DO]** エラーの表現や、削除などの致命的な動作に使用してください\n\n## YE7, YE10 (<span style={{background:\"#be8c14\", color: \"#ffffff\"}}>#be8c14</span>, <span style={{background:\"#825a0f\", color: \"#ffffff\"}}>#825a0f</span>)\n\n- **[DO]** 先の挙動に注意が必要な場合など、ユーザーに注意をうながす際に使用してください\n- **[DO NOT]** YE7 は白 #FFFFFF に対してのコントラスト比が 4.5:1 を満たしません。テキストを書く場合は「30px = 1.875rem 以上」または「22px = 1.375rem 以上の太字」にするか、YE10 を使用してください（[freee アクセシビリティー・ガイドライン: コントラスト比の確保](https://a11y-guidelines.freee.co.jp/categories/text.html#gl-text-contrast)）。\n\n## GY7 (<span style={{background: \"#323232\", color: \"#ffffff\"}}>#323232</span>)\n\n- **[DO]** 通常の文字色に使用してください\n\n## S9 (<span style={{background: \"#6e6b6b\", color: \"#ffffff\"}}>#6e6b6b</span>)\n\n- **[DO]** GY7 よりも目立たせたくない場所の文字色に使用してください\n\n## S1 (<span style={{background:\"#f7f5f5\"}}>#f7f5f5</span>)\n\n- **[DO]** コラム領域などテキストを乗せる領域の地色に使用してください\n\n# 外部への提供\n\nColor 定数として vibes 内に定義された 16 進数カラーコードを提供します。\n\n変数名は歴史的な経緯で名付けられているものもあり、必ずしもその色の使用目的を表現していないことに注意してください。\n\n## Examples\n\n### with styled-components [css prop](https://styled-components.com/docs/api#css-prop)\n\n```typescript\nimport * as React from 'react';\nimport { VibesBackgroundColor } from '@freee_jp/vibes';\n\n// Defined: background-color: ${VibesBackgroundColor}\nconst Component: React.FC = ({ children }) => {\n  return (\n    <div\n      css={`\n        background-color: ${VibesBackgroundColor};\n      `}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default Component;\n```\n\n### Example with styled-components basic\n\n```typescript\nimport * as React from 'react';\nimport { VibesBackgroundColor } from '@freee_jp/vibes';\nimport styled from 'styled-components';\n\n// Defined: background-color: ${VibesBackgroundColor}\nconst StyledInner = styled.div`\n  background-color: ${VibesBackgroundColor};\n`;\n\nconst Component: React.FC = ({ children }) => {\n  return <StyledInner>{children}</StyledInner>;\n};\n\nexport default Component;\n```\n"
  },
  {
    "path": "docs/Contribution.stories.mdx",
    "content": "import { Meta } from \"@storybook/addon-docs\";\n\n<Meta title='doc/Contribution' />\n\n# vibes の開発に参加する\n\nこのドキュメントを読んでいただいてありがとうございます。\nきっとこれを読んでいるあなたはvibesの開発に参加しようと思ってくれている方かなと思います。そういう人向けの情報を書いていきます。\n\n\n## Issue を立てる\n\nTBD\n\n## Pull Request する\n\nvibesは誰でもPull RequestしてOKです。あなたからのPull Requestをお待ちしております。\n\n### 開発環境の準備\n\n開発時に必要となる依存パッケージの導入、および初期セットアップを行ってください。\n\n```sh\n$ npm install\n$ npm run setup\n```\n\n### コードの修正\n\n- JavaScript (TypeScript) の修正が必要な場合は `src/` 内のファイルを修正してください\n- スタイルシート (CSS, SCSS, SASS) を修正する場合は `stylesheets/` 内のファイルを修正してください\n\n**ルートディレクトリ内にある `vibes_2021.css` や、`dist/` ディレクトリ内のファイルはビルド生成物です**。\nこれらのファイルはリリース時以外には変更する必要はありません。\nあなたの修正がこれらのファイルに反映されていなくても、Pull RequestしてOKです。\n\n### 動作確認する\n\n動作確認は主にStorybookで行います。Storybookは以下の方法で立ち上がります。\n\n```sh\n# npm で立ち上げる場合\n$ npm run storybook\n# access to localhost:6006\n```\n\n## コーディング規約・方針\n\n以下のページをそれぞれ参照してください。\n\n- [TypeScript](?path=/docs/doc-typescript--page)\n- [Stylesheets](?path=/docs/doc-stylesheets--page)\n\n\n## リリース\n### リリース手順\n\nTBD\n\n#### majorバージョンに該当する変更\n\nvibesを利用する側のプロダクトで、バージョンアップ時に確認や変更が強いられるもの（破壊的変更が含まれるもの）は `major` ラベルを付与します。\n\n- vibesを利用する側で、コードの変更が強いられるもの\n  - 既存コンポーネントの削除\n  - 既存のpropsの意味が変わってしまうもの\n- vibesを利用する側で、画面デザインの変更が強いられるもの\n  - コンポーネントの外形の大きさが大きく変わってしまうような変更\n- vibesを利用する側で設定の変更が必要となるもの\n  - ビルドまわりの設定変更が必要となりそうなもの\n  - peerDependenciesが増えるもの・減るもの\n- vibes側で大きな方針の変更をするもの\n  - バージョン指定基準が決まるとか\n- その他、盛大に祝ったり気持ちを盛り上げ（バイブスを上げ）たりしたいもの\n\n#### minorバージョンに該当するもの\n\nコンポーネントの追加・改善などを含み、vibesを利用するプロダクト側で変更や確認が強いられない場合には `minor` ラベルを付与します。\n\n- コンポーネントの追加\n- コンポーネントの機能改善\n  - propsの追加や、取り得る値の追加\n- コンポーネントのデザイン改善\n  - その改善が加わることによってvibesを使う側の画面のデザインを変更する必要のないもの\n- その他、新機能や機能改善がありつつ、vibesを使う側ではコードや画面デザインの変更が不要な変更\n\n#### patchバージョンに該当するもの\n\n`major`, `minor` に該当する変更がない場合は、 `patch` ラベルを付与してください。\n\n- APIに変化のないバグフィックス\n- vibes内で使用しているnpmモジュールのバージョンアップ\n- vibes内のリファクタリング\n- その他、新機能や機能改善でもなく、vibes利用側でのコードや画面デザインの不要な変更\n"
  },
  {
    "path": "docs/Design/Layout/Layout.stories.mdx",
    "content": "import { Meta } from \"@storybook/addon-docs\";\n\nimport widthImg from './width.png';\nimport heightImg from './height.jpg';\n\n<Meta title='doc/Design/Layout' />\n\nこのドキュメントでは、標準画面サイズなど画面全体のレイアウトについての方針を記載します。\n\n# 画面サイズ\n\n## 最小コンテンツ幅\n- デスクトップWeb向けの画面では最低画面幅1152pxで表示が崩れないように設計してください。\n  - 1152px（72rem） = コンテンツ幅1120px（70rem） + 左右マージン 16px（1rem）\n  - <img src={widthImg} alt=\"上記計算式の解説画像\" width=\"480\" />\n  - 会計Webにアクセスされる端末のほとんどが幅1280px以上（2021年9月現在で約98%）であるため、それよりも小さい範囲でrem計算しやすい値としてコンテンツ幅70remになっています\n- 大きな表が求められるレポート画面など、コンテンツが1120pxでは収まらない場合、適宜その部分を横スクロールで表示できるようにしてください。\n- 幅1120pxよりも小さい幅でレイアウトすることも可能です。\n  - 「1280pxの画面解像度でアクセスしたときに画面幅が足りずに表示崩れを起こしてしまう」のを防ぐ意図なので、それより小さいコンテンツ幅のほうが使いやすいと考えられる場合はそれに合わせてもらってOKです（下記の narrow とか）\n\n\n## ブラウザ幅に合わせてコンテンツ幅をどう表示するか\nコンテンツをブラウザの横幅にあわせて無尽蔵に広げられると、右端に配置したボタン等がユーザーの目に入りにくくなります。そのためコンテンツの最大幅を設定しています。\n現在のVibesでは Container コンポーネントのオプションによって、以下からレイアウトを選択することができます。\n- narrow: 640px = 40rem固定\n  - ウィザードUIなど、左右幅を大きく必要としない場合に使用します\n- normal: 1120px = 70rem固定\n- wide: ブラウザの左右端までコンテンツ幅が広がる（最小 1120px = 70rem、 最大 1600px = 100rem）\n  - 画面幅が大きいときにどこまでコンテンツ幅を大きくするかはその画面における情報量を考慮して判断してください。\n  - コレクション画面などの一行あたりの情報量が多いことが想定される場合には wide にすることを推奨しています。\n\n## 画面高さ\nユーザーがスクロールしたりせずに見ることができるUIの範囲の高さ（ブラウザのウィンドウの縦幅）は630pxを前提にしてください。\n- ファーストビューを考慮する必要がある設計の場合は630pxを前提にしてください。\n  - <img src={heightImg} alt=\"画面高さ630pxはブラウザのコンテンツ部分の上端から下端までに収まる高さとして設定されています\" width=\"480\"/>\n  - 会計Webにアクセスする端末のほとんどが高さ720px以上である（2021年9月現在で99.4%）ことから、そこからブラウザのツールバーなどの分を差し引いた値として定義された数字です\n- fixedの要素がある場合などは630pxで成立するように画面設計を行うか、630pxを基準にメディアクエリを追加してレイアウトを可変にできるように実装するよう仕様を作成してください。\n"
  },
  {
    "path": "docs/Design/Readme.stories.mdx",
    "content": "import { Meta } from \"@storybook/addon-docs\";\n\n<Meta title='doc/Design/Readme' />\n\n\n# コンポーネント設計の指針\n\nVibesのコンポーネントを設計するときには以下のような方針で行っています。\nVibesを使用して画面を設計する際にも意識することで、デザインの一貫性を保ち、アクセシビリティを高め、実装コストを最小限にすることができます。\n\n- [Vibesのカラーパレット](?path=/docs/doc-colors--page) を使用し、適切なコントラスト比を持つ組み合わせにする\n- CSSで `rem` によるサイズ指定を行うため、コンポーネントのサイズは16の倍数ピクセルを基準として設計する\n- コンポーネントにはマージンのオプションをつけるため、コンポーネント自体には固定のマージンをつけない\n- ユーザーがインタラクションできるものの輪郭は角を丸くし、そうでないものは角を丸くしない\n\n# Vibesのコンポーネントを使った画面設計\n\nSketch CloudからlibraryとしてSketchファイルを提供しています。\nこれを使うことで、簡単にSketch内でVibesコンポーネントのシンボルを使用できます。\n\n## Storybookを使った確認\n\n実際のコンポーネントの挙動はStorybookで確認していくことができます。\nKnobsを使うことで、使おうとしているものに近い状態のコンポーネントを確認できます。\n\n特にサイズ変更に関してはコンポーネントごとに制約があるので、コンポーネントを使う前に必ず実際のコンポーネントを確認するようにしてください。\n\n## マージン\n\nほとんどのVibesのコンポーネントにはマージンを付けるためのオプションが用意されています。\nそのため、コンポーネントにマージンをつけるときにはこのオプションが使用できるサイズでマージンをつける必要があります。\n\n- マージンの大きさは 0.5rem(8px), 1rem(16px), 1.5rem(24px), 2rem(32px), 3rem(48px) である必要があります\n- 現在、マージンを付けるオプションの実装を移行しています\n  - 旧仕様(`marginTop` `marginBottom` `marginLeft` `marginRight`)しか使えないコンポーネントでは、各方向のマージンの大きさはすべて同じにするか、 `MarginBase` のようなコンポーネントを噛ませる必要があります\n  - 新仕様(`ma` `mt` `mb` `ml` `mr`)が使えるコンポーネントでは、各方向に別々のサイズのマージンを与えることができます。\n\nコンポーネントは外側から内側に向かってマージンが小さくなるように設計されています。\n多くの要素が配置されるはずのContentsBaseに1.5remのpaddingが付けられているため、画面設計では1remや0.5remの使用頻度が高くなるはずです。\n\n"
  },
  {
    "path": "docs/Readme.stories.mdx",
    "content": "import { Meta } from '@storybook/addon-docs';\n\n<Meta title=\"doc/Readme\" />\n\n# vibes\n\nコンポーネントベースのデザインシステムです。\n\n## vibes の動作ブラウザ\n\nvibes の動作想定環境は[freee の動作環境](https://support.freee.co.jp/hc/ja/articles/202848120) に準じます。\nスクリーンリーダーに関しては[アクセシビリティー・ガイドラインの標準環境](https://a11y-guidelines.freee.co.jp/explanations/screen-reader-check.html#id79)に準じますが、簡便なテストのために VoiceOver を併用します。\n\n- 以下のブラウザで必要に応じて動作確認をしています\n  - Google Chrome\n  - Microsoft Edge (Chromium ベース)\n  - Firefox\n  - Safari\n- スクリーンリーダーでの挙動・バグについては Windows 上の Chrome と NVDA での動作確認に基きます\n- 一部のブラウザにのみ発生する不具合に関してはバグとして対応しない判断をする場合があります\n\n## vibes の使い方\n\n### vibes を使った画面デザイン\n\nコーディングをせずに画面デザインを行う場合には Sketch を使用してください。vibes の Library ファイルは Sketch Cloud で配布しています。\n必要な場合は UX チームにお問い合わせください。\n\n- vibes のコンポーネントには、Figma では表現しきれない制約が存在しています。使おうとしているコンポーネントの仕様は Storybook で確認してください\n- その他の注意点などを [Design ページ](/?path=/docs/doc-design--page) に記載してあります。ご確認ください\n\n### Storybook からコンポーネントを探す\n\nvibes のコンポーネントは他のどのコンポーネントにも依存しない `lv1` と、他のコンポーネントを組み合わせてある `lv2` に大別されています\n\n- コンポーネントを探す際は `lv2` から探し、作ろうとしているものが `lv2` で実現できない場合は `lv1` を組み合わせて使うことを検討してください\n- Storybook に `examples` として、レイアウトのサンプルを用意しています。こちらも参考にしてください\n\n### 作ろうとしているものが vibes だけでは実現不可能なとき\n\nvibes に追加されているコンポーネントは、プロダクトを跨いで使用するような汎用的なものを想定しています。\nそのため、プロダクト固有のドメインに強く紐付くもの、ユーザーに強くアトラクトする必要のあるものについては、vibes を使用しないほうが効果的な場合があります。\n\n- あなた自身が画面デザインを作成している場合は、vibes のコンポーネントのみの組みあわせで目的を達成できるか検討してください\n  - vibes で完結する画面設計であれば、工数の削減や品質の向上が見込めます。画面デザインで期待する効果と比較したうえで意思決定してください\n  - vibes を使用しない場合でも、vibes や freee 全体のトーン＆マナーを意識して、全体の統一感を著しく損わないよう注意してください\n- デザイナーから渡されたものをコーディングしている場合は、まずデザイナーに問い合わせてください\n  - デザイナーがコンポーネントの技術制約を認識できていない場合も考えられます。まずはデザイナーの意思を確認してください\n  - 必要に応じて、vibes の仕様変更や、プロダクト側での UI コンポーネント実装を検討してください\n- プロダクト側で実装する場合には、今後のアップデートに耐えられる実装を意識してください\n  - **vibes のコンポーネントへのスタイル上書きはしないでください** 。`.vb-` で始まるクラス名や、内部の要素セレクタへのスタイル指定を行わないでください。スタイルの上書きは影響範囲を読みづらく、メンテナンス性を下げてしまいます\n  - **`.vb-` で始まる className をプロダクト内で使用しないでください**。vibes コンポーネントの DOM 構造は今後変更することがあり、その場合に vibes のアップデートが困難になります\n    - vibes 内で使用していない `.vb-` で始まる className も、使用しないでください。\n- vibes と組み合わせてスタイルシートを記述する場合は、文字サイズ変更時の整合性を保つため、 `px` ではなく `rem` を使用してください\n\n### アクセシビリティ\n\nvibes を使用しただけでは、必ずしもアクセシビリティの配慮が要らなくなるというものではありません。\n\n- Storybook 内の Examples や各コンポーネントのドキュメントにはあちこちにアクセシビリティの向上に必要な情報が書かれています\n  - アクセシビリティ向上のために用意された `prop` には、使い方を誤るとかえってアクセシビリティを下げてしまうものもあるため、ドキュメントをよく読んで使用してください\n- デザイン・コード・プロダクトを対象に必ず [アクセシビリティチェック](https://a11y-guidelines.freee.co.jp/checks/index.html) を実行してください\n\n## プロダクトへの導入方法\n\n### インストール\n\nTBD\n\n### CSS の読み込み\n\nスタイルを適用するため `node_modules/@freee_jp/vibes/vibes_2021.css` を読み込んでください。\n\nfrom Sass:\n\n```sass\n@import 'node_modules/@freee_jp/vibes/vibes_2021';\n```\n\nfrom JavaScript with CSS Modules:\n\n```js\nimport '@freee_jp/vibes/css';\n```\n\n- CSS の読み込み方法は、プロジェクトの技術選定状況にあわせて検討してください\n\n### vibes コンポーネントの使用\n\n`vibes` から 個別のコンポーネントを import して使用してください\n\n```tsx\nimport * as React from 'react';\nimport { ColumnBase, FormControlGroup, FormControl, TextField } from '@freee_jp/vibes';\n\nconst Component = () =>\n  <ColumnBase>\n    <FormControlGroup>\n      <FormControl label=\"日付\" fieldId=\"dateField\" mb={1} mr={1}>\n        <TextField id=\"dateField\" name=\"dateField\" />\n      </FormControl>\n      <FormControl label=\"備考\" fieldId=\"noteField\" mb={1} mr={1}>\n        <TextField id=\"noteField\" name=\"noteField\" />\n      </FormControl>\n      ...\n    </FormControlGroup>\n    <Button onClick={() => doSubmit()}>送信</Button>\n  </ColumnBase>\n}\n```\n\n- vibes では TypeScript をサポートしています。プロジェクトで使用できる場合には TypeScript を使用してください。\n  - Flow にも対応していますが、新規に採用するのは **非推奨** です。Flow の型定義ファイルは手作業によるメンテナンスとなっており、TypeScript との差異がある状態になっています。\n- `vibes/dist` や `vibes/src` からの import は **禁止** です。\n\n### コンポーネント共通の `props`\n\n`commonProps` として、全コンポーネントで使用可能な `props` を定義しています\n\n- `ma` `mt` `mb` `mr` `ml`\n  - マージン用の `prop` で、それぞれ全方向・上方向・下方向・右方向・左方向へのマージンを `rem` 単位で指定できます\n  - 指定できる値は `0.25` `0.5` `1` `1.5` `2` `3` および `-0.25` `-0.5` `-1` `-1.5` `-2` `-3` です。\n  - 一部のコンポーネントでは `marginTop` `marginBottom` `marginLeft` `marginRight` `marginSize` の指定も可能ですが、指定内容・利用可能コンポーネントが限定的なので、使用は推奨しません\n- `data-guide`\n  - peacemaker 等によるユーザガイド用で使用することを想定しています。DOM に `data-guide` 属性としてレンダリングされます\n- `data-test`\n  - Selenium や Puppeteer による E2E テストで使用することを想定しています。DOM に `data-test` 属性としてレンダリングされます\n- `data-tracking`\n  - Google Tag Manager などによるトラッキング用途に使用することを想定しています。DOM に `data-tracking` 属性としてレンダリングされます\n- `data-masking`\n  - 行動追跡ツールでのマスキングが必要な要素に指定することを想定しています。DOM に `data-masking` 属性としてレンダリングされます\n\n### VibesContext\n\nvibes コンポーネント共通の設定を、`VibesContext` から変更して使うことができます\n\n```tsx\nimport { VibesProvider } from '@freee_jp/vibes';\n\n<VibesProvider fixedLayout={true} portalParent={document.body} lang=\"ja\">\n  ...\n</VibesProvider>;\n```\n\n設定できる項目は以下のとおりです\n\n- `fixedLayout`: ウインドウ幅に関わらずレイアウトを固定するかどうか。\n  - デフォルトは `false` で、レスポンシブ対応が有効となり、一部のコンポーネントが画面幅にあわせた表示になります。\n  - `true` の場合は、画面幅に関わらずレイアウトが固定され、常に PC 向けの表示となります。\n- `portalParent`: ポップアップやダイアログなど、通常時は body 要素の直下に挿入されるコンポーネントの挿入先を変更できます。\n- `lang`: コンポーネントの文言の言語を変更できます。デフォルトは `ja` です。\n"
  },
  {
    "path": "docs/Storybook.stories.mdx",
    "content": "import { Meta } from \"@storybook/addon-docs\";\n\n<Meta title='doc/Storybook' />\n\n## Storybookの使い方\n\nStorybookではコンポーネントの見た目や挙動や仕様を確かめることができます。\n\n### コンポーネントの探し方\n\nVibesのコンポーネントは、どのコンポーネントからも独立しているLv1と、他のコンポーネントに依存するLv2があります。\n車輪の再発明を防ぐため、コンポーネントはまずLv2から探すようにしてください。\n\nまた、サイドバーには検索機能があります。使いたいコンポーネントの名前がわかっている場合はこちらもご利用ください。\n\n\n### Storybookの画面構成\n\nStorybookの画面は、Sidebar, Canvas, Docs, Addonsからなります。\n\n- Sidebarはコンポーネントが一覧になっている部分です。Sキーで表示・非表示にできます。\n- Canvasはコンポーネントが表示される部分です。上部のタブでDocsと切り変えられます\n- Docsはコンポーネントのコードコメントから生成されたドキュメントが表示される部分です。上部のタブでCanvasと切り変えられます。\n- AddonsはCanvasのコンポーネントに対する操作ができます。Aキーで表示・非表示にできます。\n\n### Knobs/Controlsの使用\n\nCanvasに表示されたコンポーネントは、AddonsパネルのKnobs/Controlsタブで表示のカスタマイズをして確認することができます。\nサイズに関するオプションなどを試したい場合に使用してください。\n\n\n## Storybookの書き方\n\nStorybookはコンポーネントのドキュメンテーションであると同時に、その挙動を保証するテストにもなります。その両方の意味において、書き方がある程度統一されていることが求められます。\n本章では、vibesに置ける標準的なStorybookの書き方を説明します。\n\n### 前提\n2023年12月6日時点で利用している`storybook@7.6.1`における書き方になります。\n\n### 記法\n#### Component Story Format 3（CSF3）で記載する（必須）\n[CSF3](https://storybook.js.org/blog/component-story-format-3-0)を利用します。現時点ではそうではない書き方が多く残っていますが、既存のものに修正を入れる場合や新しく書く場合は書き換えてください。\n\n#### パラメータの検証はaddon-knobsではなくaddon-controlsを利用する（必須）\naddon-knobsは非推奨です。現時点では利用箇所が多く残っていますが、既存のものに修正を入れる場合や新しく書く場合は[addon-controls](https://storybook.js.org/docs/essentials/controls)を利用してください。\n\n#### 関数のmockはaddon-actionsではなくstorybook-testのfnを利用する（推奨）\naddon-actionsは、後述するinteraction testでの再利用ができません。そのため、storybook-testのfnを利用してください。\n\n#### 一番上にBasicというstoryを用意する（推奨）\naddon-docsの仕様上、一番上のstoryがメインのstoryとなります。そのため、そのコンポーネントの基本的な利用の確認ができるようなstoryを書いてください。\nまたこのBasicは、後述するinteraction testでも再利用する想定です。\n2つ目以降のstoryは、必要に応じて色々なパターンを見せる用に記載してください。\n\n#### コンポーネントにコメントを付与する（任意）\naddon-docsによってコードコメントがStorybookにも表示されるようになります。必要に応じて、コンポーネントの利用に関する注意事項を記載してください。\n\n```jsx\n// good example\nimport { fn } from '@storybook/test';\nimport { Meta, StoryObj } from '@storybook/react';\nimport Button from './Button';\n\nexport default {\n  component: Button,\n} as Meta<typeof Button>;\n\ntype Story = StoryObj<typeof Button>;\n\nexport const Basic: Story = {\n  args: {\n    onClick: fn(),\n    onSelfWindowNavigation: fn(),\n    onFocus: fn(),\n    onBlur: fn(),\n    children: 'ボタン',\n  },\n  render: (args) => {\n    const ref = React.createRef<HTMLButtonElement | HTMLAnchorElement>();\n\n    return <Button {...args} ref={ref} />;\n  },\n};\n\n// bad example\nimport { action } from '@storybook/addon-actions';\nimport { text } from '@storybook/addon-knobs';\nimport Button from './Button';\n\nexport const ButtonComponent = () => {\n  const ref = React.createRef<HTMLButtonElement | HTMLAnchorElement>();\n  return (\n    <Button\n    onClick={action('click')}\n    onSelfWindowNavigation={action('self window navigation')}\n    onFocus={action('focus')}\n    onBlur={action('blur')}\n    ref={ref}\n  >\n    {text('Children', 'ボタン', 'Button')}\n  </Button>\n  );\n};\n```\n\n### テスト\nstorybook を利用したテストとしては以下の2つを考えています。\n- intreaction test\n- visual regression test\n\n#### interaction test\nここでいうinteraction testとは、コンポーネントの画面上での表示や操作した時の振る舞いを確認するテストです。\n必要に応じてaddon-intreactionを利用し、interaction testを書いてください。Button.stories.tsxが参考になると思います。\n\n#### visual regression test\nvisual regression testとは、修正が入る前後でコンポーネントがどのように表示されるかの画像比較を行うテストです。\nコンポーネントのバリエーションを一覧できるようなstoryを用意してください。必要に応じてaddon-pseudo-statesを利用し、擬似クラスの表示も確認できるようにしてください。Button.stories.tsxが参考になると思います。\n\nなお、現時点ではどのようにvisual regression testを行うかは未定です。\n"
  },
  {
    "path": "docs/Stylesheets.stories.mdx",
    "content": "import { Meta } from \"@storybook/addon-docs\";\n\n<Meta title='doc/Stylesheets' />\n\n# CSS\n\n変更する場合は **stylesheetsディレクトリに格納されているSCSSファイル** を変更してください。\nルートディレクトリにある `vibes.css` や `vibes_hr.css` はビルド成果物です。取り違えに気をつけてください。\n\nvibes では [BEM](https://en.bem.info/methodology/) をベースにしたコーディングルールを採用しています。\n\n\n## styled-components\n\n部分的にstyled-componentsを導入しはじめています。\nstyled-componentsについては、[?path=/docs/doc-typescript--page](TypeScript)のページを参照してください。\n\n## コーディング規約\n\n### Block\n\n基本的には各 Lv でディレクトリごとに区切られた modules や components ごとに 1 つの Block として扱います。ただし、 `button` と `textButton`, `TextField` と `TextArea` のように振る舞いや DOM 構造が大きく異なる場合は同じ modules であっても Modifier ではなく別の Block として定義することを推奨します。\n\n### Element\n\nBlock の構成要素で、スタイルはその Block の子要素である場合のみ有効となります。\n\n### Modifier\n\nBlock と Element の状態やバリエーションを表します。`primary, danger, active, small` といったものが該当します。上述のように、振る舞いや DOM 構造が大きく変わる場合は別の Block や Element として扱うことを検討してください。\n\n### 命名規則\n\n`vb-Block__Element--Modifier`\n\n#### 接頭辞として `vb-` をつける\n\n```css\n.vb-block\n```\n\n#### Block と Element はアンダースコア 2 つ `__` で繋ぐ\n\n```css\n.vb-block__text\n.vb-block__image\n```\n\n#### Block または Element と Modifier はハイフン 2 つ `--` で繋ぐ\n\n```css\n.vb-block--active\n.vb-block__button--primary\n```\n\n#### 2 単語以上を含む名前はキャメルケース `camelCase` で記述する\n\n```css\n.vb-form-block      // NG\n.vb-formBlock       // OK\n.vb-block--text-only // NG\n.vb-block--textOnly // OK\n```\n\n### Element はネストさせない\n\n並列に記述する。要素がネストしていてもクラス名には反映させない。\n\n```css\n.vb-block__text__image // NG\n.vb-block__text        // OK\n.vb-block__image // OK\n```\n\n### 複数の Modifier の組み合わせによって状態が変化しうる場合は、 Modifier をネストさせてもよい\n\nただし、ネストせずに記述できそうな場合は極力避ける。\n\n```css\n.vb-block--primary--disable // OK\n.vb-block--primary         // better\n.vb-block--disable // better\n```\n\n### マークアップ\n\n#### Block を入れ子にしたスタイルの指定をしない。\n\n```css\n// NG\n.vb-block {\n  display: block;\n  .vb-form {\n    line-height: 1;\n  }\n}\n\n// OK\n.vb-block {\n  display: block;\n}\n.vb-form {\n  line-height: 1;\n}\n```\n\n#### Modifier をつける時は必ず元の Block, Element のクラスと併記する\n\nModifier 単体で使えるようにしない。\n\n```html\n// NG\n<div class=\"vb-block--active\"></div>\n// OK\n<div class=\"vb-block vb-block--active\"></div>\n```\n\n```css\n// NG\n.vb-block {\n  display: block;\n  color: #000;\n}\n.vb-block--active {\n  display: block;\n  color: #f00;\n}\n\n// OK\n.vb-block {\n  display: block;\n  color: #f00;\n  &--active {\n    color: #f00;\n  }\n}\n```\n\n#### 要素セレクタを使わない\n\n必要な場合は Element として定義する。\n\n```html\n<!-- NG -->\n<div class=\"vb-block\">\n  <a href=\"/foo\">foo</a>\n</div>\n\n<!-- OK -->\n<div class=\"vb-block\">\n  <a className=\"vb-block__link\" href=\"/foo\">foo</a>\n</div>\n```\n\n```css\n// NG\n.vb-block {\n  a {\n    text-decoration: underline;\n  }\n}\n\n// OK\n.vb-block {\n  &__link {\n    text-decoration: underline;\n  }\n}\n```\n"
  },
  {
    "path": "docs/TypeScript.stories.mdx",
    "content": "import { Meta } from \"@storybook/addon-docs\";\n\n<Meta title='doc/TypeScript' />\n\n# TypeScript (JavaScript)\n\n変更する場合は **srcディレクトリに格納されているts(x)ファイル** を変更してください。`dist` ディレクトリ内にあるファイルはビルド成果物です。取り間違いに気をつけてください。\n\n### コンポーネントの追加時の注意点\n\nコンポーネントを追加するときは、同名の `stories.tsx` ファイルを作成し、Storybookで閲覧できるようにしてください。\n\nまた、追加したコンポーネントをプロダクト側から参照できるよう、 `src/lv1/index.ts` `src/lv2/index.ts` で `export` してください。\n\n### 型定義ファイルについて\n\nTypeScriptの型定義に加えて、Flowでの型定義を `lv1.js.flow` `lv2.js.flow` に（手作業で）記述しています。\nこちらはコンポーネントを追加したり変更したりした際に必ず修正してください。\n\n## styled-components について\n\n部分的にstyled-componentsを採用しはじめていますが、以下をルールとします\n\n- Vibesの外部から利用できるかたちでstyled-components由来のpropを提供しない\n  - 特に as をexportしない。as を提供する場合は、使用できるtagNameを限定する\n- コンポーネントは `CommonStyle` (`src/internal/CommonStyle.ts`) を extendしたもの（`styled(CommonStyle)`）が最外層にあるようにする\n  - ここに `ma` `mt` `mb` `mr` `mr` のようなマージンを提供するpropや、共通のフォント設定などが定義されています\n\n以下のようなかたちになります\n\n```ts\n\nimport { CommonStyle } from '../../internal/CommonStyle';\n\nconst ComponentStyle = styled(commonStyle)`\n/* ここにコンポーネントのスタイルを書く */\n`\n\ntype Props = {\n  //...\n} & CommonProps;\n\nexport const Component: React.FC<Props> = (props: Props) =>{\n\n  return (\n    <ComponentStyle>\n      ...\n    </ComponentStyle>\n  );\n}\n```\n\n\n"
  },
  {
    "path": "examples/Collection.mdx",
    "content": "import { Story, Canvas } from '@storybook/addon-docs/blocks';\n\n# コレクション画面\n\nオブジェクトを一覧表示し、それぞれのオブジェクト個別の画面（シングル画面）に遷移させたり、フィルタやソートによってオブジェクトを検索させたりする画面をコレクション画面と呼びます。\n\n<Canvas>\n  {/* Container を使っているとinlineでは見辛いので、inline={false} にしている */}\n  <Story id=\"examples-collection--collection-page\" inline={false} height={800} />\n</Canvas>\n\n## コレクション画面の構成\n\nコレクション画面は以下の3種類のエリアに分解されます\n\n1. フィルターされたオブジェクトの表示エリア\n2. フィルターされたオブジェクトに対する操作エリア\n3. オブジェクト全体に対する操作エリア\n\n### フィルターされたオブジェクトの表示エリア\n\n`ListTable` や `ListCard` を用いてデータを表示します。\n\nユーザーが初めて機能を使う場合や、検索条件にマッチするオブジェクトが無い場合には 「検索条件に該当するオブジェクトが無いこと」を示したり、機能の説明をして使用を促したりするEmpty UIを用意してください。\n\n{/* TODO: Empty UIのサンプルを用意する */}\n\n#### `ListTable` を用いた表示\n\n* 可能なかぎりすべてのカラムをソート可能にしてください\n* 一括操作可能な場合には、左端にチェックボックスを表示します（`withCheckbox` propをつけるとチェックボックスが表示されます）\n  * ヘッダー行のチェックボックスは現在表示されている範囲のすべてのオブジェクトのチェックボックスを制御します\n  * データの表示条件（フィルタ、ソート、ページングなど）が変更された場合、チェックボックスを未選択状態に戻してください\n* 各行をクリックすることで、それぞれのオブジェクト個別の画面（シングル画面）に遷移させるか、シングルを表現するダイアログを開くことができます\n* 各オブジェクトに対して行えるアクションのショートカットボタンを行内に配置することができます。ただし、それらのアクションはシングル画面やダイアログでも実行可能にしてください。\n* リストの下には `Pager` を配置して、件数が多い場合に辿れるようにしてください。\n  * いわゆる「無限スクロール」にはしないでください\n\n<Canvas>\n  <Story id=\"examples-collection--list-table-with-check-box\" />\n</Canvas>\n\n{/* TODO: ListTableのサンプルを用意する */}\n\n### フィルターされたオブジェクトに対する操作エリア\n\n検索機能によってフィルターされた範囲のデータに対する操作を行います。\n\n* 一括操作、表示件数の変更、フィルターされた範囲のエクスポートがおもに該当します。\n* フィルターされたオブジェクトの表示エリアで左端にチェックボックスを置いているため、チェックを入れたオブジェクトを対象とする一括操作は左端に配置しています\n\n<Canvas>\n  <Story id=\"examples-collection--filtered-objects-action-area\" />\n</Canvas>\n\n\n\n### オブジェクト全体に対する操作エリア\n\nオブジェクトの新規作成やインポート、フィルターの操作をまとめるエリアです。\n\n<Canvas>\n  <Story id=\"examples-collection--all-objects-action-area\" />\n</Canvas>\n\n## コレクション画面のバリエーション\n\n表示するオブジェクトの種類や、想定される使われ方によってコレクション表示を最適な状態にしてください。\n\n### 詳細なフィルタをもつコレクション\n\n詳細なフィルターによって絞り込み表示が可能となったコレクション表示です。一覧性を高めるために、フィルター部分の折り畳みを検討しても良いでしょう。\n\n<Canvas>\n  {/* Container を使っているとinlineでは見辛いので、inline={false} にしている */}\n  <Story id=\"examples-collection--with-complex-filter\" inline={false} height={800} />\n</Canvas>\n\n### 一括操作なしのコレクション\n\n一括操作を可能としない場合にはチェックボックスを配置せず、フィルターされたオブジェクトに対する操作エリアを右に寄せることもできます。\n\n<Canvas>\n  {/* Container を使っているとinlineでは見辛いので、inline={false} にしている */}\n  <Story id=\"examples-collection--without-checkbox\" inline={false} height={800} />\n</Canvas>\n\n### emptyStates（検索結果が空の場合）\n\n検索結果が空の場合にはemptyUIを表示します。vibesではemptyStates/ NoSearchResultsにデフォルトのemptyUIを用意しています。\n\n<Canvas>\n  {/* Container を使っているとinlineでは見辛いので、inline={false} にしている */}\n  <Story id=\"examples-collection--no-search-results-found\" inline={false} height={800} />\n</Canvas>\n\n### emptyStates（データがまだ作成されていない場合）\n\nデータがまだ作成されていない場合にはemptyUIを表示します。vibesではemptyStates/ NoDataCreatedにデフォルトのemptyUIを用意しています。\n\n<Canvas>\n  {/* Container を使っているとinlineでは見辛いので、inline={false} にしている */}\n  <Story id=\"examples-collection--no-data-created-yet\" inline={false} height={800} />\n</Canvas>\n"
  },
  {
    "path": "examples/Collection.stories.tsx",
    "content": "import * as React from 'react';\nimport { MdAdd, MdFilterList } from 'react-icons/md';\nimport Collection from './Collection.mdx';\n\nimport {\n  Container,\n  ContentsBase,\n  Breadcrumbs,\n  MarginBase,\n  JumpButton,\n  Button,\n  SearchField,\n  SelectBox,\n  Paragraph,\n  WithSideContent,\n  ListTable,\n  HeadlineArea,\n  DropdownButton,\n  Pagination,\n  Pager,\n  Digits,\n  FormControl,\n  FormControlGroup,\n  TextField,\n  DigitsInput,\n  DateInput,\n  ColumnBase,\n  SectionTitle,\n  VisuallyHidden,\n  NoSearchResults,\n  NoDataCreated,\n} from '../src';\nimport { Order } from '../src/lv1/lists/TableListHeadCell';\n\nexport default {\n  title: 'examples/Collection',\n  parameters: { docs: { page: Collection } },\n};\n\ntype ListElm = {\n  title: string;\n  user: string;\n  amount: number;\n  status: string;\n  date: string;\n};\nconst useData = () => {\n  const data: ListElm[] = [\n    {\n      title: '打ち合わせ費用',\n      user: 'フリー太郎',\n      amount: 100000,\n      status: '申請中',\n      date: '2020-10-01',\n    },\n    {\n      title: '書籍購入費',\n      user: 'user.email@example.com',\n      amount: 123000,\n      status: '申請中',\n      date: '2020-09-23',\n    },\n    {\n      title: '交通費',\n      user: '佐々木大輔',\n      amount: 2000,\n      status: '精算済',\n      date: '2020-10-11',\n    },\n    {\n      title: 'UFO撮影ロケ',\n      user: '五反田花子',\n      amount: 3000000,\n      status: '却下',\n      date: '2020-09-12',\n    },\n    {\n      title: 'ツチノコ捜索費',\n      user: '三田次郎',\n      amount: 1000000,\n      status: '申請中',\n      date: '2020-11-01',\n    },\n    {\n      title: 'オフィス備品',\n      user: 'フリー太郎',\n      amount: 48000,\n      status: '精算済',\n      date: '2020-09-12',\n    },\n    {\n      title: '書籍購入費',\n      user: 'user.email@example.com',\n      amount: 2800,\n      status: '申請中',\n      date: '2020-10-12',\n    },\n    {\n      title: 'ネコのエサ代',\n      user: '三田次郎',\n      amount: 3000,\n      status: '申請中',\n      date: '2020-10-27',\n    },\n    {\n      title: '駐車場代',\n      user: 'フリー太郎',\n      amount: 4000,\n      status: '申請中',\n      date: '2020-10-05',\n    },\n    {\n      title: 'PC用品',\n      user: '五反田花子',\n      amount: 800000,\n      status: '申請中',\n      date: '2020-10-21',\n    },\n  ];\n\n  const [sortKey, setSortKey] = React.useState<keyof ListElm>('date');\n  const [sortOrder, setSortOrder] = React.useState<Order>('desc');\n  const [statuses, setStatuses] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  const nextOrder: { [key in Order]: Order } = {\n    asc: 'desc',\n    desc: 'init',\n    init: 'asc',\n  };\n\n  const sort = (newKey: keyof ListElm) => {\n    if (sortKey === newKey) {\n      setSortOrder((prev) => nextOrder[prev]);\n    } else {\n      setSortKey(newKey);\n      setSortOrder('asc');\n    }\n    // ソートしたときはチェックボックスの状態をリセット\n    setStatuses(Array(data.length).fill(false));\n  };\n\n  const changeAllStatus = (newStatus: boolean) => {\n    setStatuses(Array(data.length).fill(newStatus));\n  };\n\n  const changeRowStatus = (newStatus: boolean, rowIndex: number) => {\n    const newStatuses = statuses.slice();\n    newStatuses[rowIndex] = newStatus;\n    setStatuses(newStatuses);\n  };\n\n  const sortedData =\n    sortOrder === 'init'\n      ? data\n      : data\n          .slice()\n          .sort(\n            (a, b) =>\n              (typeof a[sortKey] === 'number' && typeof b[sortKey] === 'number'\n                ? Number(a[sortKey]) - Number(b[sortKey])\n                : String(a[sortKey]).localeCompare(String(b[sortKey]))) *\n              (sortOrder === 'desc' ? -1 : 1)\n          );\n\n  const noResults: ListElm[] = [];\n\n  return {\n    sortKey,\n    sortOrder,\n    statuses,\n    sort,\n    sortedData,\n    noResults,\n    changeRowStatus,\n    changeAllStatus,\n  };\n};\n\nexport const CollectionPage = () => {\n  const {\n    sort,\n    sortKey,\n    sortOrder,\n    statuses,\n    sortedData,\n    changeAllStatus,\n    changeRowStatus,\n  } = useData();\n\n  return (\n    <Container width=\"wide\">\n      <ContentsBase>\n        <Breadcrumbs\n          mb={1}\n          links={[\n            { title: 'ホーム', url: '/' },\n            { title: '申請一覧', url: '/path/' },\n          ]}\n        />\n        <HeadlineArea\n          pageTitle=\"コレクション表示\"\n          relatedMenus={\n            <>\n              <JumpButton url=\"/path/to/related/1\" mr={1}>\n                関連機能1\n              </JumpButton>\n              <JumpButton url=\"/path/to/related/2\" mr={1}>\n                関連機能2\n              </JumpButton>\n              <DropdownButton\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service1',\n                    text: 'サービス1',\n                    target: '_blank',\n                  },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service2',\n                    text: 'サービス2',\n                    target: '_blank',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service3',\n                    text: '関連するアプリを探す',\n                    target: '_blank',\n                  },\n                ]}\n                buttonLabel=\"関連サービス・アプリ\"\n              />\n            </>\n          }\n        >\n          これはコレクション表示のサンプルです。ここにはこの画面の説明を書きます。説明が必要ないような画面だったら無理して書かなくてええんやで。\n        </HeadlineArea>\n        <MarginBase mb={1}>\n          <Button IconComponent={MdAdd} mr={1}>\n            新規追加\n          </Button>\n          <JumpButton url=\"/path/to/import\">インポート</JumpButton>\n        </MarginBase>\n        <MarginBase mb={2}>\n          <SearchField\n            width=\"large\"\n            placeholder=\"タイトル、ユーザー名、メールアドレスなどで検索\"\n            marginRight\n            marginSize=\"small\"\n          />\n          <Button>検索</Button>\n        </MarginBase>\n\n        <WithSideContent\n          mb={1}\n          sideContent={\n            <>\n              <Pagination\n                rowsPerPageOptions={[\n                  { value: '10' },\n                  { value: '20' },\n                  { value: '50' },\n                  { value: '100' },\n                  { value: '200' },\n                ]}\n                rowsPerPageValue={20}\n                currentPage={1}\n                rowCount={999}\n                mr={1}\n              />\n              <DropdownButton\n                buttonLabel=\"エクスポート\"\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    text: 'CSV形式でエクスポート',\n                  },\n                  {\n                    type: 'selectable',\n                    text: 'JSON形式でエクスポート',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    text: 'エクスポート履歴',\n                  },\n                ]}\n              />\n            </>\n          }\n        >\n          <DropdownButton\n            buttonLabel=\"一括操作\"\n            dropdownContents={[\n              {\n                type: 'selectable',\n                text: 'ステータスを変更',\n              },\n              { type: 'selectable', text: '削除' },\n            ]}\n            mr={0.5}\n          />\n          {statuses.filter((e) => e).length > 0 && (\n            <Paragraph inline>\n              {statuses.filter((e) => e).length}件を選択中\n            </Paragraph>\n          )}\n        </WithSideContent>\n        <ListTable\n          mr={-1.5}\n          ml={-1.5}\n          headers={[\n            {\n              value: 'タイトル',\n              minWidth: 15,\n              onClick: () => sort('title'),\n              ordering: (sortKey == 'title' && sortOrder) || 'init',\n            },\n            {\n              value: 'ユーザー',\n              minWidth: 10,\n              onClick: () => sort('user'),\n              ordering: (sortKey == 'user' && sortOrder) || 'init',\n            },\n            {\n              value: '金額',\n              minWidth: 5,\n              alignRight: true,\n              onClick: () => sort('amount'),\n              ordering: (sortKey == 'amount' && sortOrder) || 'init',\n            },\n            {\n              value: 'ステータス',\n              onClick: () => sort('status'),\n              ordering: (sortKey == 'status' && sortOrder) || 'init',\n            },\n            {\n              value: '作成日',\n              onClick: () => sort('date'),\n              ordering: (sortKey == 'date' && sortOrder) || 'init',\n            },\n            { value: '操作' },\n          ]}\n          onChangeHeaderCheckBox={(e) => changeAllStatus(e.target.checked)}\n          rows={sortedData.map((row, i) => ({\n            checked: statuses[i],\n            onChangeCheckBox: (e) => {\n              changeRowStatus(e.target.checked, i);\n            },\n            url: `/path/to/single/${i}`,\n            cells: [\n              { value: row.title },\n              { value: row.user, breakWord: true },\n              { value: Digits.formalize(row.amount), alignRight: true },\n              { value: row.status },\n              { value: row.date },\n              {\n                value: (\n                  <>\n                    <Button mr={0.5} small appearance=\"tertiary\">\n                      コピー\n                    </Button>\n                    <Button mr={0.5} danger small appearance=\"tertiary\">\n                      削除\n                    </Button>\n                  </>\n                ),\n              },\n            ],\n          }))}\n          withCheckBox\n        ></ListTable>\n        <Pager\n          currentPage={1}\n          pageCount={99}\n          onPageChange={() => {\n            /* 2ページ目以降作ってないので許して */\n          }}\n        />\n      </ContentsBase>\n    </Container>\n  );\n};\n\nexport const ListTableWithCheckBox = () => {\n  const {\n    sort,\n    sortKey,\n    sortOrder,\n    statuses,\n    sortedData,\n    changeAllStatus,\n    changeRowStatus,\n  } = useData();\n\n  return (\n    <>\n      <ListTable\n        mr={-1.5}\n        ml={-1.5}\n        headers={[\n          {\n            value: 'タイトル',\n            minWidth: 15,\n            onClick: () => sort('title'),\n            ordering: (sortKey == 'title' && sortOrder) || 'init',\n          },\n          {\n            value: 'ユーザー',\n            minWidth: 10,\n            onClick: () => sort('user'),\n            ordering: (sortKey == 'user' && sortOrder) || 'init',\n          },\n          {\n            value: '金額',\n            minWidth: 5,\n            alignRight: true,\n            onClick: () => sort('amount'),\n            ordering: (sortKey == 'amount' && sortOrder) || 'init',\n          },\n          {\n            value: 'ステータス',\n            onClick: () => sort('status'),\n            ordering: (sortKey == 'status' && sortOrder) || 'init',\n          },\n          {\n            value: '作成日',\n            onClick: () => sort('date'),\n            ordering: (sortKey == 'date' && sortOrder) || 'init',\n          },\n          { value: '操作' },\n        ]}\n        onChangeHeaderCheckBox={(e) => changeAllStatus(e.target.checked)}\n        rows={sortedData.map((row, i) => ({\n          checked: statuses[i],\n          onChangeCheckBox: (e) => {\n            changeRowStatus(e.target.checked, i);\n          },\n          url: `/path/to/single/${i}`,\n          cells: [\n            { value: row.title },\n            { value: row.user, breakWord: true },\n            { value: Digits.formalize(row.amount), alignRight: true },\n            { value: row.status },\n            { value: row.date },\n            {\n              value: (\n                <>\n                  <Button mr={0.5} small appearance=\"tertiary\">\n                    コピー\n                  </Button>\n                  <Button mr={0.5} danger small appearance=\"tertiary\">\n                    削除\n                  </Button>\n                </>\n              ),\n            },\n          ],\n        }))}\n        withCheckBox\n      ></ListTable>\n      <Pager\n        currentPage={1}\n        pageCount={99}\n        onPageChange={() => {\n          /* 2ページ目以降作ってないので許して */\n        }}\n      />\n    </>\n  );\n};\n\nexport const FilteredObjectsActionArea = () => (\n  <WithSideContent\n    mb={1}\n    sideContent={\n      <>\n        <Pagination\n          rowsPerPageOptions={[\n            { value: '10' },\n            { value: '20' },\n            { value: '50' },\n            { value: '100' },\n            { value: '200' },\n          ]}\n          rowsPerPageValue={20}\n          currentPage={1}\n          rowCount={999}\n          mr={1}\n        />\n        <DropdownButton\n          buttonLabel=\"エクスポート\"\n          dropdownContents={[\n            {\n              type: 'selectable',\n              text: 'CSV形式でエクスポート',\n            },\n            {\n              type: 'selectable',\n              text: 'JSON形式でエクスポート',\n            },\n            { type: 'rule' },\n            {\n              type: 'selectable',\n              text: 'エクスポート履歴',\n            },\n          ]}\n        />\n      </>\n    }\n  >\n    <DropdownButton\n      buttonLabel=\"一括操作\"\n      dropdownContents={[\n        {\n          type: 'selectable',\n          text: 'ステータスを変更',\n        },\n        { type: 'selectable', text: '削除' },\n      ]}\n    />\n  </WithSideContent>\n);\n\nexport const AllObjectsActionArea = () => (\n  <>\n    <MarginBase mb={1}>\n      <Button IconComponent={MdAdd} mr={1}>\n        新規追加\n      </Button>\n      <JumpButton url=\"/path/to/import\">インポート</JumpButton>\n    </MarginBase>\n    <MarginBase mb={2}>\n      <SearchField\n        width=\"large\"\n        placeholder=\"タイトル、ユーザー名、メールアドレスなどで検索\"\n        marginRight\n        marginSize=\"small\"\n      />\n      <Button>検索</Button>\n    </MarginBase>\n  </>\n);\n\nexport const WithComplexFilter = () => {\n  const {\n    sort,\n    sortKey,\n    sortOrder,\n    statuses,\n    sortedData,\n    changeAllStatus,\n    changeRowStatus,\n  } = useData();\n\n  return (\n    <Container width=\"wide\">\n      <ContentsBase>\n        <Breadcrumbs\n          mb={1}\n          links={[\n            { title: 'ホーム', url: '/' },\n            { title: '申請一覧', url: '/path/' },\n          ]}\n        />\n        <HeadlineArea\n          pageTitle=\"コレクション表示\"\n          relatedMenus={\n            <>\n              <JumpButton url=\"/path/to/related/1\" mr={1}>\n                関連機能1\n              </JumpButton>\n              <JumpButton url=\"/path/to/related/2\" mr={1}>\n                関連機能2\n              </JumpButton>\n              <DropdownButton\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service1',\n                    text: 'サービス1',\n                    target: '_blank',\n                  },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service2',\n                    text: 'サービス2',\n                    target: '_blank',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service3',\n                    text: '関連するアプリを探す',\n                    target: '_blank',\n                  },\n                ]}\n                buttonLabel=\"関連サービス・アプリ\"\n              />\n            </>\n          }\n        >\n          これはコレクション表示のサンプルです。ここにはこの画面の説明を書きます。説明が必要ないような画面だったら無理して書かなくてええんやで。\n        </HeadlineArea>\n        <MarginBase mb={1}>\n          <Button IconComponent={MdAdd} mr={1}>\n            新規追加\n          </Button>\n          <JumpButton url=\"/path/to/import\">インポート</JumpButton>\n        </MarginBase>\n        <ColumnBase paddingSize=\"small\" mb={2}>\n          <WithSideContent\n            verticalAlign=\"middle\"\n            sideContent={\n              <Button appearance=\"tertiary\">検索条件をクリア</Button>\n            }\n          >\n            <SectionTitle>検索条件</SectionTitle>\n          </WithSideContent>\n          <FormControlGroup>\n            <FormControl label=\"タイトル\" fieldId=\"form1-title\" mr={1} mb={1}>\n              <TextField id=\"form1-title\" />\n            </FormControl>\n            <FormControl label=\"ユーザー\" fieldId=\"form1-user\" mr={1} mb={1}>\n              <TextField id=\"form1-user\" width=\"small\" />\n            </FormControl>\n            <FormControl label=\"金額\" mr={1} mb={1}>\n              <DigitsInput nullable label=\"金額の下限\" width=\"small\" />\n              〜\n              <DigitsInput nullable label=\"金額の上限\" width=\"small\" />\n            </FormControl>\n            <FormControl\n              label=\"ステータス\"\n              fieldId=\"form1-status\"\n              mr={1}\n              mb={1}\n            >\n              <SelectBox\n                options={[\n                  { name: '申請中' },\n                  { name: '精算済' },\n                  { name: '却下' },\n                ]}\n                id=\"form1-status\"\n                width=\"small\"\n              />\n            </FormControl>\n            <FormControl label=\"日付\" mr={1} mb={1}>\n              <DateInput label=\"日付の下限\" width=\"small\" />\n              〜\n              <DateInput label=\"日付の上限\" width=\"small\" />\n            </FormControl>\n          </FormControlGroup>\n          <Button IconComponent={MdFilterList}>絞り込む</Button>\n        </ColumnBase>\n\n        <VisuallyHidden>\n          {/* 検索条件の見出しを立てているため、一覧部分にも視覚的には見えないかたちで見出しを立てる */}\n          <SectionTitle>申請の一覧</SectionTitle>\n        </VisuallyHidden>\n        <WithSideContent\n          mb={1}\n          sideContent={\n            <>\n              <Pagination\n                rowsPerPageOptions={[\n                  { value: '10' },\n                  { value: '20' },\n                  { value: '50' },\n                  { value: '100' },\n                  { value: '200' },\n                ]}\n                rowsPerPageValue={20}\n                currentPage={1}\n                rowCount={999}\n                mr={1}\n              />\n              <DropdownButton\n                buttonLabel=\"エクスポート\"\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    text: 'CSV形式でエクスポート',\n                  },\n                  {\n                    type: 'selectable',\n                    text: 'JSON形式でエクスポート',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    text: 'エクスポート履歴',\n                  },\n                ]}\n              />\n            </>\n          }\n        >\n          <DropdownButton\n            buttonLabel=\"一括操作\"\n            dropdownContents={[\n              {\n                type: 'selectable',\n                text: 'ステータスを変更',\n              },\n              { type: 'selectable', text: '削除' },\n            ]}\n            mr={0.5}\n          />\n          {statuses.filter((e) => e).length > 0 && (\n            <Paragraph inline>\n              {statuses.filter((e) => e).length}件を選択中\n            </Paragraph>\n          )}\n        </WithSideContent>\n        <ListTable\n          mr={-1.5}\n          ml={-1.5}\n          headers={[\n            {\n              value: 'タイトル',\n              minWidth: 15,\n              onClick: () => sort('title'),\n              ordering: (sortKey == 'title' && sortOrder) || 'init',\n            },\n            {\n              value: 'ユーザー',\n              minWidth: 10,\n              onClick: () => sort('user'),\n              ordering: (sortKey == 'user' && sortOrder) || 'init',\n            },\n            {\n              value: '金額',\n              minWidth: 5,\n              alignRight: true,\n              onClick: () => sort('amount'),\n              ordering: (sortKey == 'amount' && sortOrder) || 'init',\n            },\n            {\n              value: 'ステータス',\n              onClick: () => sort('status'),\n              ordering: (sortKey == 'status' && sortOrder) || 'init',\n            },\n            {\n              value: '作成日',\n              onClick: () => sort('date'),\n              ordering: (sortKey == 'date' && sortOrder) || 'init',\n            },\n            { value: '操作' },\n          ]}\n          onChangeHeaderCheckBox={(e) => changeAllStatus(e.target.checked)}\n          rows={sortedData.map((row, i) => ({\n            checked: statuses[i],\n            onChangeCheckBox: (e) => {\n              changeRowStatus(e.target.checked, i);\n            },\n            url: `/path/to/single/${i}`,\n            cells: [\n              { value: row.title },\n              { value: row.user, breakWord: true },\n              { value: Digits.formalize(row.amount), alignRight: true },\n              { value: row.status },\n              { value: row.date },\n              {\n                value: (\n                  <>\n                    <Button mr={0.5} small appearance=\"tertiary\">\n                      コピー\n                    </Button>\n                    <Button mr={0.5} danger small appearance=\"tertiary\">\n                      削除\n                    </Button>\n                  </>\n                ),\n              },\n            ],\n          }))}\n          withCheckBox\n        ></ListTable>\n        <Pager\n          currentPage={1}\n          pageCount={99}\n          onPageChange={() => {\n            /* 2ページ目以降作ってないので許して */\n          }}\n        />\n      </ContentsBase>\n    </Container>\n  );\n};\n\nexport const WithoutCheckbox = () => {\n  const { sort, sortKey, sortOrder, sortedData } = useData();\n\n  return (\n    <Container width=\"wide\">\n      <ContentsBase>\n        <Breadcrumbs\n          mb={1}\n          links={[\n            { title: 'ホーム', url: '/' },\n            { title: '申請一覧', url: '/path/' },\n          ]}\n        />\n        <HeadlineArea\n          pageTitle=\"コレクション表示\"\n          relatedMenus={\n            <>\n              <JumpButton url=\"/path/to/related/1\" mr={1}>\n                関連機能1\n              </JumpButton>\n              <JumpButton url=\"/path/to/related/2\" mr={1}>\n                関連機能2\n              </JumpButton>\n              <DropdownButton\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service1',\n                    text: 'サービス1',\n                    target: '_blank',\n                  },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service2',\n                    text: 'サービス2',\n                    target: '_blank',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service3',\n                    text: '関連するアプリを探す',\n                    target: '_blank',\n                  },\n                ]}\n                buttonLabel=\"関連サービス・アプリ\"\n              />\n            </>\n          }\n        >\n          これはコレクション表示のサンプルです。ここにはこの画面の説明を書きます。説明が必要ないような画面だったら無理して書かなくてええんやで。\n        </HeadlineArea>\n        <MarginBase mb={1}>\n          <Button IconComponent={MdAdd} mr={1}>\n            新規追加\n          </Button>\n          <JumpButton url=\"/path/to/import\">インポート</JumpButton>\n        </MarginBase>\n\n        <WithSideContent\n          mb={1}\n          sideContent={\n            <>\n              <Pagination\n                rowsPerPageOptions={[\n                  { value: '10' },\n                  { value: '20' },\n                  { value: '50' },\n                  { value: '100' },\n                  { value: '200' },\n                ]}\n                rowsPerPageValue={20}\n                currentPage={1}\n                rowCount={999}\n                mr={1}\n              />\n              <DropdownButton\n                buttonLabel=\"エクスポート\"\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    text: 'CSV形式でエクスポート',\n                  },\n                  {\n                    type: 'selectable',\n                    text: 'JSON形式でエクスポート',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    text: 'エクスポート履歴',\n                  },\n                ]}\n              />\n            </>\n          }\n        >\n          <SearchField\n            width=\"large\"\n            placeholder=\"タイトル、ユーザー名、メールアドレスなどで検索\"\n            marginRight\n            marginSize=\"small\"\n          />\n          <Button>検索</Button>\n        </WithSideContent>\n        <ListTable\n          mr={-1.5}\n          ml={-1.5}\n          headers={[\n            {\n              value: 'タイトル',\n              minWidth: 15,\n              onClick: () => sort('title'),\n              ordering: (sortKey == 'title' && sortOrder) || 'init',\n            },\n            {\n              value: 'ユーザー',\n              minWidth: 10,\n              onClick: () => sort('user'),\n              ordering: (sortKey == 'user' && sortOrder) || 'init',\n            },\n            {\n              value: '金額',\n              minWidth: 5,\n              alignRight: true,\n              onClick: () => sort('amount'),\n              ordering: (sortKey == 'amount' && sortOrder) || 'init',\n            },\n            {\n              value: 'ステータス',\n              onClick: () => sort('status'),\n              ordering: (sortKey == 'status' && sortOrder) || 'init',\n            },\n            {\n              value: '作成日',\n              onClick: () => sort('date'),\n              ordering: (sortKey == 'date' && sortOrder) || 'init',\n            },\n            { value: '操作' },\n          ]}\n          rows={sortedData.map((row, i) => ({\n            url: `/path/to/single/${i}`,\n            cells: [\n              { value: row.title },\n              { value: row.user, breakWord: true },\n              { value: Digits.formalize(row.amount), alignRight: true },\n              { value: row.status },\n              { value: row.date },\n              {\n                value: (\n                  <>\n                    <Button mr={0.5} small appearance=\"tertiary\">\n                      コピー\n                    </Button>\n                    <Button mr={0.5} danger small appearance=\"tertiary\">\n                      削除\n                    </Button>\n                  </>\n                ),\n              },\n            ],\n          }))}\n        ></ListTable>\n        <Pager\n          currentPage={1}\n          pageCount={99}\n          onPageChange={() => {\n            /* 2ページ目以降作ってないので許して */\n          }}\n        />\n      </ContentsBase>\n    </Container>\n  );\n};\n\nexport const NoSearchResultsFound = () => {\n  const { sort, sortKey, sortOrder, noResults } = useData();\n\n  return (\n    <Container width=\"wide\">\n      <ContentsBase>\n        <Breadcrumbs\n          mb={1}\n          links={[\n            { title: 'ホーム', url: '/' },\n            { title: '申請一覧', url: '/path/' },\n          ]}\n        />\n        <HeadlineArea\n          pageTitle=\"コレクション表示\"\n          relatedMenus={\n            <>\n              <JumpButton url=\"/path/to/related/1\" mr={1}>\n                関連機能1\n              </JumpButton>\n              <JumpButton url=\"/path/to/related/2\" mr={1}>\n                関連機能2\n              </JumpButton>\n              <DropdownButton\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service1',\n                    text: 'サービス1',\n                    target: '_blank',\n                  },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service2',\n                    text: 'サービス2',\n                    target: '_blank',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service3',\n                    text: '関連するアプリを探す',\n                    target: '_blank',\n                  },\n                ]}\n                buttonLabel=\"関連サービス・アプリ\"\n              />\n            </>\n          }\n        >\n          これはコレクション表示のサンプルです。ここにはこの画面の説明を書きます。説明が必要ないような画面だったら無理して書かなくてええんやで。\n        </HeadlineArea>\n        <MarginBase mb={1}>\n          <Button IconComponent={MdAdd} mr={1}>\n            新規追加\n          </Button>\n          <JumpButton url=\"/path/to/import\">インポート</JumpButton>\n        </MarginBase>\n\n        <WithSideContent\n          mb={1}\n          sideContent={\n            <>\n              <Paragraph inline mr={0.5}>\n                <label htmlFor=\"examples__collection__collectionPage__limitSelect\">\n                  表示件数:\n                </label>\n              </Paragraph>\n              <SelectBox\n                id=\"examples__collection__collectionPage__limitSelect\"\n                width=\"xSmall\"\n                options={[\n                  { name: '10件' },\n                  { name: '20件' },\n                  { name: '50件' },\n                  { name: '100件' },\n                  { name: '200件' },\n                ]}\n                mr={1}\n              />\n              <Paragraph inline mr={1}>\n                0 / 0\n              </Paragraph>\n              <DropdownButton\n                buttonLabel=\"エクスポート\"\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    text: 'CSV形式でエクスポート',\n                  },\n                  {\n                    type: 'selectable',\n                    text: 'JSON形式でエクスポート',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    text: 'エクスポート履歴',\n                  },\n                ]}\n              />\n            </>\n          }\n        >\n          <SearchField\n            width=\"large\"\n            placeholder=\"タイトル、ユーザー名、メールアドレスなどで検索\"\n            marginRight\n            marginSize=\"small\"\n          />\n          <Button>検索</Button>\n        </WithSideContent>\n        {noResults.length > 0 ? (\n          <ListTable\n            mr={-1.5}\n            ml={-1.5}\n            headers={[\n              {\n                value: 'タイトル',\n                minWidth: 15,\n                onClick: () => sort('title'),\n                ordering: (sortKey == 'title' && sortOrder) || 'init',\n              },\n              {\n                value: 'ユーザー',\n                minWidth: 10,\n                onClick: () => sort('user'),\n                ordering: (sortKey == 'user' && sortOrder) || 'init',\n              },\n              {\n                value: '金額',\n                minWidth: 5,\n                alignRight: true,\n                onClick: () => sort('amount'),\n                ordering: (sortKey == 'amount' && sortOrder) || 'init',\n              },\n              {\n                value: 'ステータス',\n                onClick: () => sort('status'),\n                ordering: (sortKey == 'status' && sortOrder) || 'init',\n              },\n              {\n                value: '作成日',\n                onClick: () => sort('date'),\n                ordering: (sortKey == 'date' && sortOrder) || 'init',\n              },\n              { value: '操作' },\n            ]}\n            rows={noResults.map((row, i) => ({\n              url: `/path/to/single/${i}`,\n              cells: [\n                { value: row.title },\n                { value: row.user, breakWord: true },\n                { value: Digits.formalize(row.amount), alignRight: true },\n                { value: row.status },\n                { value: row.date },\n                {\n                  value: (\n                    <>\n                      <Button mr={0.5} small appearance=\"tertiary\">\n                        コピー\n                      </Button>\n                      <Button mr={0.5} danger small appearance=\"tertiary\">\n                        削除\n                      </Button>\n                    </>\n                  ),\n                },\n              ],\n            }))}\n          ></ListTable>\n        ) : (\n          <NoSearchResults mt={1} />\n        )}\n      </ContentsBase>\n    </Container>\n  );\n};\n\nexport const NoDataCreatedYet = () => {\n  const { sort, sortKey, sortOrder, noResults } = useData();\n\n  return (\n    <Container width=\"wide\">\n      <ContentsBase>\n        <Breadcrumbs\n          mb={1}\n          links={[\n            { title: 'ホーム', url: '/' },\n            { title: '申請一覧', url: '/path/' },\n          ]}\n        />\n        <HeadlineArea\n          pageTitle=\"コレクション表示\"\n          relatedMenus={\n            <>\n              <JumpButton url=\"/path/to/related/1\" mr={1}>\n                関連機能1\n              </JumpButton>\n              <JumpButton url=\"/path/to/related/2\" mr={1}>\n                関連機能2\n              </JumpButton>\n              <DropdownButton\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service1',\n                    text: 'サービス1',\n                    target: '_blank',\n                  },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service2',\n                    text: 'サービス2',\n                    target: '_blank',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    url: '/path/to/service3',\n                    text: '関連するアプリを探す',\n                    target: '_blank',\n                  },\n                ]}\n                buttonLabel=\"関連サービス・アプリ\"\n              />\n            </>\n          }\n        >\n          これはコレクション表示のサンプルです。ここにはこの画面の説明を書きます。説明が必要ないような画面だったら無理して書かなくてええんやで。\n        </HeadlineArea>\n        <MarginBase mb={1}>\n          <Button IconComponent={MdAdd} mr={1}>\n            新規追加\n          </Button>\n          <JumpButton url=\"/path/to/import\">インポート</JumpButton>\n        </MarginBase>\n\n        <WithSideContent\n          mb={1}\n          sideContent={\n            <>\n              <Paragraph inline mr={0.5}>\n                <label htmlFor=\"examples__collection__collectionPage__limitSelect\">\n                  表示件数:\n                </label>\n              </Paragraph>\n              <SelectBox\n                id=\"examples__collection__collectionPage__limitSelect\"\n                width=\"xSmall\"\n                options={[\n                  { name: '10件' },\n                  { name: '20件' },\n                  { name: '50件' },\n                  { name: '100件' },\n                  { name: '200件' },\n                ]}\n                mr={1}\n              />\n              <Paragraph inline mr={1}>\n                0 / 0\n              </Paragraph>\n              <DropdownButton\n                buttonLabel=\"エクスポート\"\n                dropdownContents={[\n                  {\n                    type: 'selectable',\n                    text: 'CSV形式でエクスポート',\n                  },\n                  {\n                    type: 'selectable',\n                    text: 'JSON形式でエクスポート',\n                  },\n                  { type: 'rule' },\n                  {\n                    type: 'selectable',\n                    text: 'エクスポート履歴',\n                  },\n                ]}\n              />\n            </>\n          }\n        >\n          <SearchField\n            width=\"large\"\n            placeholder=\"タイトル、ユーザー名、メールアドレスなどで検索\"\n            marginRight\n            marginSize=\"small\"\n          />\n          <Button>検索</Button>\n        </WithSideContent>\n        {noResults.length > 0 ? (\n          <ListTable\n            mr={-1.5}\n            ml={-1.5}\n            headers={[\n              {\n                value: 'タイトル',\n                minWidth: 15,\n                onClick: () => sort('title'),\n                ordering: (sortKey == 'title' && sortOrder) || 'init',\n              },\n              {\n                value: 'ユーザー',\n                minWidth: 10,\n                onClick: () => sort('user'),\n                ordering: (sortKey == 'user' && sortOrder) || 'init',\n              },\n              {\n                value: '金額',\n                minWidth: 5,\n                alignRight: true,\n                onClick: () => sort('amount'),\n                ordering: (sortKey == 'amount' && sortOrder) || 'init',\n              },\n              {\n                value: 'ステータス',\n                onClick: () => sort('status'),\n                ordering: (sortKey == 'status' && sortOrder) || 'init',\n              },\n              {\n                value: '作成日',\n                onClick: () => sort('date'),\n                ordering: (sortKey == 'date' && sortOrder) || 'init',\n              },\n              { value: '操作' },\n            ]}\n            rows={noResults.map((row, i) => ({\n              url: `/path/to/single/${i}`,\n              cells: [\n                { value: row.title },\n                { value: row.user, breakWord: true },\n                { value: Digits.formalize(row.amount), alignRight: true },\n                { value: row.status },\n                { value: row.date },\n                {\n                  value: (\n                    <>\n                      <Button mr={0.5} small appearance=\"tertiary\">\n                        コピー\n                      </Button>\n                      <Button mr={0.5} danger small appearance=\"tertiary\">\n                        削除\n                      </Button>\n                    </>\n                  ),\n                },\n              ],\n            }))}\n          ></ListTable>\n        ) : (\n          <NoDataCreated mt={3}>\n            <Button appearance=\"primary\" mt={1}>\n              新規作成\n            </Button>\n          </NoDataCreated>\n        )}\n      </ContentsBase>\n    </Container>\n  );\n};\n"
  },
  {
    "path": "examples/Forms.mdx",
    "content": "import { Story, Canvas } from '@storybook/addon-docs/blocks';\n\n# フォーム\n\nvibes では3種類のフォームの組み方を提供しています\n\n- 縦フォーム\n- 横フォーム\n- リストフォーム\n\nいずれの場合にも、**アクセシビリティの確保** と **エラーの表示方法** に注意を払ってください。\n\n## 縦フォーム\n\n`DescriptionList` を使用して項目を縦方向に並べるフォーム形式です。\n\n- 入力欄の説明を丁寧に表記したり、グルーピングの表現をしたりしやすい形式です\n- 利用頻度が低く、ユーザーの学習効果を期待しづらい場所での使用に適しています\n- 行にフィールドが1つしかない場合には `DescriptionList` の `title` = 左側カラムに `<label>` 要素を、\n  複数ある場合にはそれぞれのフィールドにラベルを配置し（ `value` = 右側カラム内に横フォームを配置するのを推奨 ）、\n  必ずフィールドとラベルが紐付けられている状態にしてください\n  - aXe または Lighthouse で紐付けが行われているか確認することを推奨します\n\n<Canvas>\n  <Story id=\"examples-forms--vertical-form\" />\n</Canvas>\n\n## 横フォーム\n\n`FormControl` と `FormControlGroup` を使用して項目を横方向に並べるフォーム形式です\n\n- たくさんの入力欄をコンパクトに配置する形式です。\n- 利用頻度が高く、ユーザーの学習効果を期待でき、描画領域を節約したい場所に適しています\n- `FormControl` 内にフィールドが1つしかない場合には、`FormControl` の `fieldId` propにフィールドの `id` を渡し、\n  必ずフィールドとラベルが紐付けられている状態にしてください\n  - `FormControl` は `<fieldset>` 要素になっているため、ラジオボタンが配置される場合や複数のフィールドが配置される場合は `fieldId` による紐付けは不要です\n  - aXe または Lighthouse で紐付けが行われているか確認することを推奨します\n\n<Canvas>\n  <Story id=\"examples-forms--horizontal-form\" />\n</Canvas>\n\n## リストフォーム\n\nオブジェクトが複数持つ子オブジェクトをシングル画面で一括で編集する際などに使用するフォーム形式です。\n\n- たくさんの小さなオブジェクトを一度に編集する場所で使用します\n  - 子オブジェクトの編集項目が多い場合は、別画面にしたり、`TaskDialog` に切り出すなどを検討してください\n  - 一度にたくさん編集することが想定されない場合も、別画面にしたり、`TaskDialog` に切り出すなどを検討してください\n- ひとつの項目名に対してたくさんのフィールドが紐付くため、`<label>` 要素は使用しません\n  - `aria-label` にて、 `1行目の日付` のように、何行目を操作しているのかわかるラベルを指定してください\n  - aXe または Lighthouse で紐付けが行われているか確認することを推奨します\n\n<Canvas>\n  <Story id=\"examples-forms--list-form\" />\n</Canvas>\n\n\n## フォーム送信のインタラクション\n\nボタンのラベルが「保存」「作成」「登録」などであっても、ここでは「送信」として扱います。\n\n- 送信中は送信ボタンやその他のアクションボタンを `disabled` にし、マウス操作だけでなくキーボード操作でもアクションできないようにしてください\n  - `Loading` 等で覆われる場合でも、必ず `disabled` にしてください\n- 送信が成功した場合はページ遷移やモーダルの開閉、フォーカスの移動、`FloatingMessageBlock` などによってユーザーに送信が完了したフィードバックをしてください\n- 送信が失敗した場合は `FloatingMessageBlock` を `error` で表示し、ユーザーに送信が失敗したフィードバックをしてください\n\n<Canvas>\n  <Story id=\"examples-forms--submit-success-interaction\" />\n</Canvas>\n\n\n### フォームのエラー表示\n\n- 送信の失敗時には、 `FloatingMessageBlock` でエラーの存在をユーザーに伝え（スクリーンメッセージ）、`Message` で個別のエラーの詳細をユーザーに伝えてください（インラインメッセージ）\n  - `FloatingMessageBlock` を使用すると、 `aria-live` 属性によりスクリーンリーダー等の支援技術にエラーが起きていることを伝えることができます\n- 複数のセクションのある長大なフォームの場合、エラーが発生しているセクションに `MessageBlock` を配置してください（セクションメッセージ）\n- 多くの場合、サーバー側でエラーの検証が必須となるため、送信ボタンを押すまで入力内容がエラーとなるかどうかを予測することができません。\n  そのため、必ずしも「クライアント側でエラー検証を行い、エラーが無くなるまで送信ボタンを押せなくする」必要は **ありません**\n  - クライアント側で検証できなかったエラーがサーバー側で発見された場合、ユーザーは両方のエラーを修正する2度手間を強いられてしまいます\n  - もしクライアント側でエラーを修正するまで送信できなくする場合は、送信ボタンの周囲にエラーの修正が必要であることがわかるよう、メッセージを記載してください\n- もし入力フィールドごとのエラーメッセージを記載できない場合は、フォーム上部に `MessageBlock` でまとめて記載しても構いません\n  - その場合でも、同時に `FloatingMessageBlock` を表示し、「エラーが起きていること」に気付けるようにしてください。\n  - 可能なかぎり、フィールドごとにエラーメッセージを記載するようにしてください\n\n<Canvas>\n  <Story id=\"examples-forms--submit-error-interaction\" />\n</Canvas>\n\n#### ダイアログ内のエラー表示\n\n- `TaskDialog` 内にフォームを配置している場合でも、 `FloatingMessageBlock` を使用してスクリーンメッセージを表示してください\n\n<Canvas>\n  <Story id=\"examples-forms--error-on-task-dialog\" />\n</Canvas>\n\n\n### フロントエンドでのバリデーション\n\n- フォームのバリデーション（入力内容の検証）はサーバーサイドで必ず行う必要があるため、フロントエンドで行う必要はありません\n  - フロントエンドで入力内容のバリデーションを行う場合、ユーザーが正しく入力するための補助と位置付けてください\n- 入力中のユーザーにストレスを与えないよう、フロントエンでのバリデーションはエラーとは別の形で表現し、送信ボタンを押すなどの形でユーザーが入力を終えた意思が明らかになってからエラーとして表示してください\n  - 通常、サーバーサイドでも同じようなバリデーションを行うことになるため、エラーとしての表示はそちらの結果を表示するかたちに寄せてしまうのが良いでしょう\n- `Balloon` や `Note` コンポーネントによる注釈は、スクリーンリーダーや拡大表示を使用しているユーザーは気付かない可能性があることに注意してください\n  - `氏名（カタカナ）` のような入力形式がわかりやすい項目名にしたり、「ハイフンなしで 1410031 のように入力してください」という注釈文を表示したりして、入力開始前に正しい記入方法がわかるようにしてください\n  - `DigitsInput` のように全角半角などの文字種別を自動的に修正したり、郵便番号のハイフン有り・無しどちらも許容したりするなど、入力形式のエラーが起こりにくい工夫をすることを検討してください\n\n<Canvas>\n  <Story id=\"examples-forms--frontend-validation\" />\n</Canvas>\n\n#### バリデーションエラー時の送信ボタン無効化\n\n- サーバーサイドでバリデーションを行う前提があるため、フロントエンドでのバリデーションが通るまで送信ボタンを無効化したりする必要はありません\n- もし無効化する場合はなぜ送信ボタンが無効であるのか、ユーザーが理解できるようにしてください\n  - ボタンの周囲に注釈テキストを表示したり、バルーンでメッセージを表示したりしてください\n  - `aria-describedby` によって、それらのメッセージを無効化されたボタンに紐付けてください\n- どの入力項目が原因で送信できないのかがわかりにくくなるため、入力項目が多い入力フォームや、必須項目とそうでない項目が順番的に混在しているフォームでの使用は避けてください\n  - 必須項目とそうでない項目が存在する場合、必須項目を先に、そうでない項目を後に並べるようにしてください\n- バリデーション結果をエラーとして表示する場合にはBlur時以降に表示するようにするなど、入力中・入力前のユーザーへのストレスに配慮してください\n　\n\n<Canvas>\n  <Story id=\"examples-forms--disable-button-if-invalid\" />\n</Canvas>\n\n## フォーム作成の注意点\n\n- ラベルとフィールドの紐付けを必ず行ってください\n  - freeeアクセシビリティー・ガイドライン: [フォーム・コントロールのラベル付けの必要性](https://a11y-guidelines.freee.co.jp/explanations/form-labeling.html)\n  - aXe または Lighthouse で紐付けが行われているか確認することを推奨します\n- ユーザーが自分自身の情報を入力するフォームでは、 `autoComplete` 属性を使用して自動補完が効く状態にしてください\n  - ただし、自分自身 **以外** の情報を入力するフォームでは、 `autoComplete` を `off` にしてください\n  - `autoComplete` 属性に何を指定するべきかは、MDN: [HTML の autocomplete 属性](https://developer.mozilla.org/ja/docs/Web/HTML/Attributes/autocomplete) を参照してください\n- 安易な `placeholder` の使用は推奨しません\n  - `placeholder` の文字列は通常のテキストよりもコントラストの低い色の組み合わせになっているため、可読性が下がります\n    - コントラストの高い色を使用すると、入力済み文字列との区別が付かなくなるおそれがあります\n  - 記入をし始めてしまうと `placeholder` の内容が確認できなくなります。可読性の問題もあるので記入に必要な情報を `placeholder` にするべきではありません\n"
  },
  {
    "path": "examples/Forms.stories.tsx",
    "content": "import * as React from 'react';\nimport Forms from './Forms.mdx';\nimport {\n  Button,\n  CheckBox,\n  DateField,\n  DateInput,\n  DescriptionList,\n  DigitsInput,\n  FloatingMessageBlock,\n  FormActions,\n  FormControl,\n  FormControlGroup,\n  InlineLink,\n  ListTable,\n  Loading,\n  Message,\n  MessageBlock,\n  MessageIcon,\n  NameField,\n  Note,\n  SelectBox,\n  TaskDialog,\n  TextField,\n  ToggleButton,\n  VisuallyHidden,\n  WithDescriptionContent,\n  WithBalloon,\n  RequiredIcon,\n} from '../src';\nimport { MdAdd } from 'react-icons/md';\n\nexport default {\n  title: 'examples/Forms',\n  parameters: { docs: { page: Forms } },\n};\n\nexport const VerticalForm = () => (\n  <>\n    <DescriptionList\n      mb={1}\n      listContents={[\n        {\n          // 単体でフィールドを置くときはlabel の htmlFor を忘れない！！！\n          title: (\n            <label htmlFor=\"vertical-form__employee-code\">従業員番号</label>\n          ),\n          value: <TextField id=\"vertical-form__employee-code\" />,\n        },\n        // 姓名でフィールドが分かれているので、ここはlabelを使用しない\n        {\n          title: (\n            <>\n              氏名\n              <RequiredIcon ml={0.5} />\n            </>\n          ),\n          value: <NameField autoComplete=\"name\" required />,\n        },\n        {\n          // 姓名でフィールドが分かれているので、ここはlabelを使用しない\n          title: '氏名（カタカナ）',\n          value: (\n            <WithDescriptionContent\n              renderContent={() => (\n                <NameField\n                  lastNamePlaceholder=\"セイ\"\n                  firstNamePlaceholder=\"メイ\"\n                  label=\"氏名（カタカナ）\"\n                  autoComplete=\"name\"\n                  required\n                />\n              )}\n              renderDescriptionContent={() => (\n                <Note mt={0.5}>全角カタカナで入力してください</Note>\n              )}\n            />\n          ),\n        },\n        {\n          title: <label htmlFor=\"vertical-form__display-name\">表示名</label>,\n          value: (\n            <WithDescriptionContent\n              renderDescriptionContent={() => (\n                <Note mt={0.5}>\n                  空欄にした場合、氏名が表示名として使用されます\n                </Note>\n              )}\n              renderContent={(descId) => (\n                <TextField\n                  // renderDescriptionContentの内容がフィールドの説明として渡されるよう、aria-describedbyに渡している\n                  aria-describedby={descId}\n                  id=\"vertical-form__display-name\"\n                />\n              )}\n            />\n          ),\n        },\n        {\n          // 「性別」はSelectBoxのラベルなので、htmlFor で紐付ける\n          title: <label htmlFor=\"vertical-form__sex\">性別</label>,\n          value: (\n            <>\n              <SelectBox\n                id=\"vertical-form__sex\"\n                width=\"small\"\n                options={[\n                  { value: '0', name: '未選択' },\n                  { value: '1', name: '男性' },\n                  { value: '2', name: '女性' },\n                  { value: '9', name: 'その他' },\n                ]}\n              />\n              <CheckBox ml={1}>性別を自分以外のメンバーに公開する</CheckBox>\n            </>\n          ),\n        },\n        {\n          // 複数のフィールドがあるので、ここはlabelを使用しない\n          title: '住所',\n          value: (\n            <>\n              <FormControlGroup>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"郵便番号\"\n                  fieldId=\"vertical-form__postal\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  <TextField\n                    id=\"vertical-form__postal\"\n                    width=\"small\"\n                    autoComplete=\"postal-code\"\n                  />\n                </FormControl>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"都道府県\"\n                  fieldId=\"vertical-form__pref\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  {/* 都道府県のSelectBoxを作るのめんどくさい（許して） */}\n                  <TextField\n                    id=\"vertical-form__pref\"\n                    width=\"medium\"\n                    autoComplete=\"address-level1\"\n                  />\n                </FormControl>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"市区町村\"\n                  fieldId=\"vertical-form__city\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  {/* 都道府県のSelectBoxを作るのめんどくさい（許して） */}\n                  <TextField\n                    id=\"vertical-form__city\"\n                    width=\"medium\"\n                    autoComplete=\"address-level2\"\n                  />\n                </FormControl>\n              </FormControlGroup>\n              <FormControlGroup>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"町名・番地\"\n                  fieldId=\"vertical-form__address-line-1\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  <TextField\n                    id=\"vertical-form__address-line-1\"\n                    width=\"large\"\n                    autoComplete=\"street-address\"\n                  />\n                </FormControl>\n              </FormControlGroup>\n              <FormControlGroup>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"建物名・部屋番号\"\n                  fieldId=\"vertical-form__address-line-2\"\n                  mb={1}\n                  mr={1}\n                >\n                  <TextField\n                    id=\"vertical-form__address-line-2\"\n                    width=\"large\"\n                    autoComplete=\"street-address\"\n                  />\n                </FormControl>\n              </FormControlGroup>\n            </>\n          ),\n        },\n        {\n          // 年月日でフィールドが分かれているので、<label>を使用しない\n          title: '生年月日',\n          value: (\n            <DateField\n              selectedDate=\"1990-01-01\"\n              startDate=\"1900-01-01\"\n              endDate=\"2021-12-31\"\n              autoComplete=\"bday\"\n            />\n          ),\n        },\n        {\n          // 単体でフィールドを置くときはlabel の htmlFor を忘れない！！！\n          title: (\n            <label htmlFor=\"vertical-form__pension_num\">基礎年金番号</label>\n          ),\n          value: (\n            <WithDescriptionContent\n              renderDescriptionContent={() => (\n                <Note mt={0.5}>\n                  基礎年金番号は10桁の数字で表され、4桁と6桁の組み合わせとなっています。\n                  <InlineLink\n                    href=\"https://www.nenkin.go.jp/faq/n_net/toroku/moshikomi/20150519.html\"\n                    target=\"_blank\"\n                  >\n                    基礎年金番号の調べ方\n                  </InlineLink>\n                </Note>\n              )}\n              renderContent={(descId) => (\n                <TextField\n                  id=\"vertical-form__pension_num\"\n                  // renderDescriptionContentの内容がフィールドの説明として渡されるよう、aria-describedbyに渡している\n                  aria-describedby={descId}\n                />\n              )}\n            />\n          ),\n        },\n      ]}\n    />\n    <FormActions>\n      <Button appearance=\"primary\">保存</Button>\n      <Button>キャンセル</Button>\n    </FormActions>\n  </>\n);\n\nexport const HorizontalForm = () => (\n  <>\n    <FormControlGroup>\n      <FormControl mb={1} mr={1} label=\"種別\">\n        <ToggleButton name=\"horizontal-form__type\" type=\"radio\">\n          収入\n        </ToggleButton>\n        <ToggleButton name=\"horizontal-form__type\" type=\"radio\">\n          支出\n        </ToggleButton>\n      </FormControl>\n      <FormControl\n        mb={1}\n        mr={1}\n        label=\"口座\"\n        fieldId=\"horizontal-form__account\"\n      >\n        <SelectBox\n          id=\"horizontal-form__account\"\n          width=\"small\"\n          options={[\n            { name: '現金' },\n            { name: 'freee銀行' },\n            { name: '五反田銀行' },\n          ]}\n        />\n      </FormControl>\n      <FormControl\n        mb={1}\n        mr={1}\n        label=\"取引先\"\n        required\n        help=\"入出金の相手となる会社名や個人名を入力します\"\n        fieldId=\"horizontal-form__partner\"\n      >\n        <TextField id=\"horizontal-form__partner\" required />\n      </FormControl>\n      <FormControl\n        mb={1}\n        mr={1}\n        label=\"金額\"\n        required\n        fieldId=\"horizontal-form__amount\"\n      >\n        <DigitsInput id=\"horizontal-form__amount\" />\n      </FormControl>\n      <FormControl\n        mb={1}\n        mr={1}\n        label=\"摘要\"\n        fieldId=\"hofizontal-form__description\"\n        help=\"入出金の目的などを記載します\"\n      >\n        <TextField width=\"large\" id=\"hofizontal-form__description\" required />\n      </FormControl>\n    </FormControlGroup>\n    <FormActions>\n      <Button appearance=\"primary\">登録</Button>\n    </FormActions>\n  </>\n);\n\nexport const ListForm = () => {\n  const [values, setValues] = React.useState<\n    {\n      date: string;\n      type: 'income' | 'expense';\n      amount: number;\n      note: string;\n    }[]\n  >([{ date: '2021-04-01', type: 'income', amount: 0, note: '' }]);\n  return (\n    <>\n      <ListTable\n        mb={0.5}\n        headers={[\n          { value: '日付' },\n          { value: '収支' },\n          // 通常のListTableでは金額は右寄せで配置するが、DigitsInput内が右寄せであり、DigitsInputの左端と揃えたいため、見出しセルは左寄せで配置する\n          { value: '金額' },\n          {\n            value: (\n              <>\n                備考\n                <MessageIcon label=\"ヘルプ\" small>\n                  メモとして自由に使える欄です\n                </MessageIcon>\n              </>\n            ),\n          },\n          { value: <VisuallyHidden>行の操作</VisuallyHidden> },\n        ]}\n        rows={values.map((v, i) => ({\n          cells: [\n            {\n              value: (\n                <DateInput\n                  value={v.date}\n                  // 何行目の何の項目なのかわかるラベルにする\n                  label={`${i + 1}行目の日付`}\n                  width=\"small\"\n                  onChange={(d) =>\n                    setValues([\n                      ...values.slice(0, i),\n                      { ...v, date: d },\n                      ...values.slice(i + 1),\n                    ])\n                  }\n                />\n              ),\n            },\n            {\n              value: (\n                <SelectBox\n                  value={v.type}\n                  // 何行目の何の項目なのかわかるラベルにする\n                  // 視覚的に見えるラベルとN:1なので、<label>要素は使用せず、aria-labelで表現する\n                  label={`${i + 1}行目の収支`}\n                  width=\"xSmall\"\n                  onChange={(e) =>\n                    setValues([\n                      ...values.slice(0, i),\n                      {\n                        ...v,\n                        type:\n                          e.target.value === 'income' ? 'income' : 'expense',\n                      },\n                      ...values.slice(i + 1),\n                    ])\n                  }\n                  options={[\n                    { value: 'income', name: '収入' },\n                    { value: 'expense', name: '支出' },\n                  ]}\n                />\n              ),\n            },\n\n            {\n              value: (\n                <DigitsInput\n                  value={v.amount}\n                  // 何行目の何の項目なのかわかるラベルにする\n                  // 視覚的に見えるラベルとN:1なので、<label>要素は使用せず、aria-labelで表現する\n                  label={`${i + 1}行目の金額`}\n                  onChange={(a) =>\n                    setValues([\n                      ...values.slice(0, i),\n                      { ...v, amount: a || 0 },\n                      ...values.slice(i + 1),\n                    ])\n                  }\n                />\n              ),\n            },\n            {\n              value: (\n                <TextField\n                  value={v.note}\n                  // 何行目の何の項目なのかわかるラベルにする\n                  // 視覚的に見えるラベルとN:1なので、<label>要素は使用せず、aria-labelで表現する\n                  label={`${i + 1}行目の備考`}\n                  width=\"large\"\n                  onChange={(e) =>\n                    setValues([\n                      ...values.slice(0, i),\n                      { ...v, note: e.target.value },\n                      ...values.slice(i + 1),\n                    ])\n                  }\n                />\n              ),\n            },\n            {\n              alignRight: true,\n              value: (\n                <Button\n                  onClick={() =>\n                    setValues([...values.slice(0, i), ...values.slice(i + 1)])\n                  }\n                  appearance=\"tertiary\"\n                  small\n                  disabled={values.length === 1}\n                >\n                  行を削除\n                </Button>\n              ),\n            },\n          ],\n        }))}\n      />\n      <Button\n        IconComponent={MdAdd}\n        iconPosition=\"left\"\n        onClick={() =>\n          setValues([\n            ...values,\n            { date: '2021-04-01', amount: 0, type: 'income', note: '' },\n          ])\n        }\n        // ListTableと左端を揃えるため、左側に1.5remのマージンを持たせている。\n        // 通常の使用では、ListTableの側に-1.5remのネガティブマージンを付けることも多いはず\n        ml={1.5}\n      >\n        行を追加\n      </Button>\n    </>\n  );\n};\n\nexport const SubmitSuccessInteraction = () => {\n  const [message, setMessage] = React.useState('');\n  const [sending, setSending] = React.useState(false);\n\n  return (\n    <>\n      <Note mb={1}>\n        「保存」ボタンで送信中〜送信完了の動きを試すことができます\n      </Note>\n      <FormActions>\n        <Button\n          appearance=\"primary\"\n          disabled={sending}\n          onClick={() => {\n            setMessage('');\n            setSending(true);\n            setTimeout(() => {\n              setMessage('保存しました');\n              setSending(false);\n            }, 600);\n          }}\n        >\n          保存\n        </Button>\n        <Button disabled={sending}>キャンセル</Button>\n      </FormActions>\n      <Loading coverAll isLoading={sending} />\n      {message && <FloatingMessageBlock success message={message} />}\n    </>\n  );\n};\n\nexport const ErrorOnTaskDialog = () => {\n  const [message, setMessage] = React.useState('');\n  const [sending, setSending] = React.useState(false);\n  const [error, setError] = React.useState(false);\n  const [modalOpen, setModalOpen] = React.useState(false);\n\n  return (\n    <>\n      <Button onClick={() => setModalOpen(true)}>編集ダイアログを開く</Button>\n      <TaskDialog\n        isOpen={modalOpen}\n        title=\"編集\"\n        primaryButtonLabel=\"保存\"\n        closeButtonLabel=\"閉じる\"\n        onRequestClose={() => setModalOpen(false)}\n        onPrimaryAction={() => {\n          setMessage('');\n          setSending(true);\n          setError(false);\n          setTimeout(() => {\n            setMessage(\n              '入力内容にエラーがあります。修正のうえ、再度お試しください'\n            );\n            setError(true);\n            setSending(false);\n          }, 600);\n        }}\n        disabled={sending}\n      >\n        {message && <MessageBlock error mb={1} message={message} />}\n        <DescriptionList\n          mr={-1.5}\n          ml={-1.5}\n          listContents={[\n            {\n              title: (\n                <label htmlFor=\"submit-error-interaction__amount\">\n                  振込金額\n                  <RequiredIcon ml={0.5} />\n                </label>\n              ),\n              value: (\n                <>\n                  <DigitsInput\n                    id=\"submit-error-interaction__amount\"\n                    required\n                    error={error}\n                    value={0}\n                  />\n                  {error && (\n                    <Message ml={1} error>\n                      0より大きい数値を入力してください\n                    </Message>\n                  )}\n                </>\n              ),\n            },\n            {\n              title: (\n                <label htmlFor=\"submit-error-interaction__account-from\">\n                  振込元口座\n                  <RequiredIcon ml={0.5} />\n                </label>\n              ),\n              value: (\n                <>\n                  <SelectBox\n                    id=\"submit-error-interaction__account-from\"\n                    options={[\n                      { name: '選択してください', value: 'default' },\n                      { name: 'freee銀行' },\n                      { name: '五反田銀行' },\n                      { name: '品川信用金庫' },\n                    ]}\n                    error={error}\n                    value=\"default\"\n                    required\n                  />\n                  {error && (\n                    <Message ml={1} error>\n                      口座を選択してください\n                    </Message>\n                  )}\n                </>\n              ),\n            },\n            {\n              title: (\n                <label htmlFor=\"submit-error-interaction__name-from\">\n                  振込名義\n                </label>\n              ),\n              value: (\n                <>\n                  <WithDescriptionContent\n                    renderContent={(descId) => (\n                      <>\n                        <TextField\n                          id=\"submit-error-interaction__name-from\"\n                          // エラーメッセージがaria-desdribedbyになっているべきか悩ましいが、\n                          // ここでは他のフィールドと仕様をあわせやすいよう、エラーメッセージをaria-describedに入れない判断をした\n                          aria-describedby={descId}\n                          error={error}\n                          value=\"ふりーたろう\"\n                        />\n                        {error && (\n                          <Message ml={1} error>\n                            半角カタカナで記入してください\n                          </Message>\n                        )}\n                      </>\n                    )}\n                    renderDescriptionContent={() => (\n                      <Note mt={0.5}>\n                        振込先に通知される名義を半角カタカナで記入してください。空欄にした場合は口座名義がそのまま使用されます。\n                      </Note>\n                    )}\n                  />\n                </>\n              ),\n            },\n            {\n              title: '振込先口座',\n              value: (\n                <>\n                  <FormControlGroup>\n                    <FormControl\n                      label=\"銀行コード\"\n                      fieldId=\"submit-error-interaction__bank_to\"\n                      help=\"銀行ごとに指定されている4桁の数字です\"\n                      required\n                      mr={1.5}\n                      mb={1}\n                    >\n                      <TextField\n                        id=\"submit-error-interaction__bank_to\"\n                        width=\"small\"\n                        required\n                        value={'123'}\n                        error={error}\n                      />\n                      {error && (\n                        <MessageIcon error label=\"エラー\" ml={0.5}>\n                          4桁の半角数字で記入してください\n                        </MessageIcon>\n                      )}\n                    </FormControl>\n                    <FormControl\n                      label=\"支店コード\"\n                      fieldId=\"submit-error-interaction__branch_to\"\n                      help=\"支店ごとに指定されている3桁の数字です\"\n                      required\n                      mr={1.5}\n                      mb={1}\n                    >\n                      <TextField\n                        id=\"submit-error-interaction__branch_to\"\n                        width=\"xSmall\"\n                        required\n                        value=\"\"\n                        error={error}\n                      />\n                      {error && (\n                        <MessageIcon error label=\"エラー\" ml={0.5}>\n                          3桁の半角数字で記入してください\n                        </MessageIcon>\n                      )}\n                    </FormControl>\n                  </FormControlGroup>\n                  <FormControlGroup>\n                    <FormControl\n                      // ここだけエラー内容が思いつかんかった\n                      label=\"口座種別\"\n                      fieldId=\"submit-error-interaction__account_type_to\"\n                      required\n                      mr={1.5}\n                    >\n                      <SelectBox\n                        id=\"submit-error-interaction__account_type_to\"\n                        options={[\n                          { name: '普通' },\n                          { name: '当座' },\n                          { name: '定期' },\n                        ]}\n                        width=\"xSmall\"\n                        required\n                      />\n                    </FormControl>\n                    <FormControl\n                      label=\"口座番号\"\n                      fieldId=\"submit-error-interaction__account_number_to\"\n                      required\n                      mr={1.5}\n                      mb={1}\n                    >\n                      <TextField\n                        id=\"submit-error-interaction__account_number_to\"\n                        width=\"medium\"\n                        required\n                        value=\"\"\n                        error={error}\n                      />\n                      {error && (\n                        <MessageIcon error label=\"エラー\" ml={0.5}>\n                          7桁の半角数字で記入してください\n                        </MessageIcon>\n                      )}\n                    </FormControl>\n                    <FormControl\n                      label=\"口座名義\"\n                      fieldId=\"submit-error-interaction__account_name_to\"\n                      required\n                      mr={1.5}\n                      mb={1}\n                    >\n                      <TextField\n                        id=\"submit-error-interaction__account_name_to\"\n                        width=\"medium\"\n                        required\n                        value=\"ふりーはなこ\"\n                        error={error}\n                      />\n                      {error && (\n                        <MessageIcon error label=\"エラー\" ml={0.5}>\n                          半角カタカナで記入してください\n                        </MessageIcon>\n                      )}\n                    </FormControl>\n                  </FormControlGroup>\n                </>\n              ),\n            },\n          ]}\n        />\n        <Loading coverAll isLoading={sending} />\n        {message && <FloatingMessageBlock error message={message} />}\n      </TaskDialog>\n    </>\n  );\n};\n\nexport const SubmitErrorInteraction = () => {\n  const [message, setMessage] = React.useState('');\n  const [sending, setSending] = React.useState(false);\n  const [error, setError] = React.useState(false);\n\n  return (\n    <>\n      <Note mb={1}>\n        「保存」ボタンで送信中〜エラー時の動きを試すことができます\n      </Note>\n\n      {message && <MessageBlock error mb={1} message={message} />}\n      <DescriptionList\n        mb={1}\n        listContents={[\n          {\n            title: (\n              <label htmlFor=\"submit-error-interaction__amount\">\n                振込金額\n                <RequiredIcon ml={0.5} />\n              </label>\n            ),\n            value: (\n              <>\n                <DigitsInput\n                  id=\"submit-error-interaction__amount\"\n                  required\n                  error={error}\n                  value={0}\n                />\n                {error && (\n                  <Message ml={1} error>\n                    0より大きい数値を入力してください\n                  </Message>\n                )}\n              </>\n            ),\n          },\n          {\n            title: (\n              <label htmlFor=\"submit-error-interaction__account-from\">\n                振込元口座\n                <RequiredIcon ml={0.5} />\n              </label>\n            ),\n            value: (\n              <>\n                <SelectBox\n                  id=\"submit-error-interaction__account-from\"\n                  options={[\n                    { name: '選択してください', value: 'default' },\n                    { name: 'freee銀行' },\n                    { name: '五反田銀行' },\n                    { name: '品川信用金庫' },\n                  ]}\n                  error={error}\n                  value=\"default\"\n                  required\n                />\n                {error && (\n                  <Message ml={1} error>\n                    口座を選択してください\n                  </Message>\n                )}\n              </>\n            ),\n          },\n          {\n            title: (\n              <label htmlFor=\"submit-error-interaction__name-from\">\n                振込名義\n              </label>\n            ),\n            value: (\n              <>\n                <WithDescriptionContent\n                  renderContent={(descId) => (\n                    <>\n                      <TextField\n                        id=\"submit-error-interaction__name-from\"\n                        // エラーメッセージがaria-desdribedbyになっているべきか悩ましいが、\n                        // ここでは他のフィールドと仕様をあわせやすいよう、エラーメッセージをaria-describedに入れない判断をした\n                        aria-describedby={descId}\n                        error={error}\n                        value=\"ふりーたろう\"\n                      />\n                      {error && (\n                        <Message ml={1} error>\n                          半角カタカナで記入してください\n                        </Message>\n                      )}\n                    </>\n                  )}\n                  renderDescriptionContent={() => (\n                    <Note mt={0.5}>\n                      振込先に通知される名義を半角カタカナで記入してください。空欄にした場合は口座名義がそのまま使用されます。\n                    </Note>\n                  )}\n                />\n              </>\n            ),\n          },\n          {\n            title: '振込先口座',\n            value: (\n              <>\n                <FormControlGroup>\n                  <FormControl\n                    label=\"銀行コード\"\n                    fieldId=\"submit-error-interaction__bank_to\"\n                    help=\"銀行ごとに指定されている4桁の数字です\"\n                    required\n                    mr={1.5}\n                    mb={1}\n                  >\n                    <TextField\n                      id=\"submit-error-interaction__bank_to\"\n                      width=\"small\"\n                      required\n                      value={'123'}\n                      error={error}\n                    />\n                    {error && (\n                      <MessageIcon error label=\"エラー\" ml={0.5}>\n                        4桁の半角数字で記入してください\n                      </MessageIcon>\n                    )}\n                  </FormControl>\n                  <FormControl\n                    label=\"支店コード\"\n                    fieldId=\"submit-error-interaction__branch_to\"\n                    help=\"支店ごとに指定されている3桁の数字です\"\n                    required\n                    mr={1.5}\n                    mb={1}\n                  >\n                    <TextField\n                      id=\"submit-error-interaction__branch_to\"\n                      width=\"xSmall\"\n                      required\n                      value=\"\"\n                      error={error}\n                    />\n                    {error && (\n                      <MessageIcon error label=\"エラー\" ml={0.5}>\n                        3桁の半角数字で記入してください\n                      </MessageIcon>\n                    )}\n                  </FormControl>\n                </FormControlGroup>\n                <FormControlGroup>\n                  <FormControl\n                    // ここだけエラー内容が思いつかんかった\n                    label=\"口座種別\"\n                    fieldId=\"submit-error-interaction__account_type_to\"\n                    required\n                    mr={1.5}\n                  >\n                    <SelectBox\n                      id=\"submit-error-interaction__account_type_to\"\n                      options={[\n                        { name: '普通' },\n                        { name: '当座' },\n                        { name: '定期' },\n                      ]}\n                      width=\"xSmall\"\n                      required\n                    />\n                  </FormControl>\n                  <FormControl\n                    label=\"口座番号\"\n                    fieldId=\"submit-error-interaction__account_number_to\"\n                    required\n                    mr={1.5}\n                    mb={1}\n                  >\n                    <TextField\n                      id=\"submit-error-interaction__account_number_to\"\n                      width=\"medium\"\n                      required\n                      value=\"\"\n                      error={error}\n                    />\n                    {error && (\n                      <MessageIcon error label=\"エラー\" ml={0.5}>\n                        7桁の半角数字で記入してください\n                      </MessageIcon>\n                    )}\n                  </FormControl>\n                  <FormControl\n                    label=\"口座名義\"\n                    fieldId=\"submit-error-interaction__account_name_to\"\n                    required\n                    mr={1.5}\n                    mb={1}\n                  >\n                    <TextField\n                      id=\"submit-error-interaction__account_name_to\"\n                      width=\"medium\"\n                      required\n                      value=\"ふりーはなこ\"\n                      error={error}\n                    />\n                    {error && (\n                      <MessageIcon error label=\"エラー\" ml={0.5}>\n                        半角カタカナで記入してください\n                      </MessageIcon>\n                    )}\n                  </FormControl>\n                </FormControlGroup>\n              </>\n            ),\n          },\n        ]}\n      />\n\n      <FormActions>\n        <Button\n          appearance=\"primary\"\n          disabled={sending}\n          onClick={() => {\n            setMessage('');\n            setSending(true);\n            setError(false);\n            setTimeout(() => {\n              setMessage(\n                '入力内容にエラーがあります。修正のうえ、再度お試しください'\n              );\n              setError(true);\n              setSending(false);\n            }, 600);\n          }}\n        >\n          保存\n        </Button>\n        <Button disabled={sending}>キャンセル</Button>\n      </FormActions>\n      <Loading coverAll isLoading={sending} />\n      {message && <FloatingMessageBlock error message={message} />}\n    </>\n  );\n};\n\nexport const FrontendValidation = () => {\n  const [value, setValue] = React.useState('');\n  const validationMessage = !value.match(/^[ァ-ヾ]*$/)\n    ? '全角カタカナで入力してください'\n    : '';\n\n  const [error, setError] = React.useState(false);\n  const [statusMessage, setStatusMessage] = React.useState('');\n  const [serverValidationMessage, setServerValidationMessage] =\n    React.useState('');\n  const [sending, setSending] = React.useState(false);\n\n  return (\n    <>\n      <FormControl\n        fieldId=\"frontend-validation__corporate-name-kana\"\n        label=\"事業所名（カタカナ）\"\n        mb={1}\n      >\n        <WithBalloon\n          border=\"notice\"\n          balloonDisabled={!validationMessage}\n          renderBalloonContent={() => validationMessage}\n          renderContent={() => (\n            <TextField\n              id=\"frontend-validation__corporate-name-kana\"\n              value={value}\n              onChange={(e) => setValue(e.target.value)}\n              error={error}\n            />\n          )}\n        />\n        <VisuallyHidden autoRead>\n          {/* スクリーンリーダー向けに、フロントエンドバリデーションのメッセージをVisuallyHiddenで配置しています\n              `autoRead` を渡すことで、 `aria-live=\"polite\"` になっているが、これが表示されているタイミングは入力中であることが多いため、自動的に読み上げられる可能性は低い。\n              （サーバーサイドのものでいいので）バリデーション結果が正しく伝わるよう、代替手段を提供する必要がある。\n              この例では保存ボタン押下後にFloatingMessageBlockで通知されるため、気付くことができる。\n           */}\n          {validationMessage}\n        </VisuallyHidden>\n        {serverValidationMessage && (\n          <Message ml={1} error>\n            {serverValidationMessage}\n          </Message>\n        )}\n      </FormControl>\n      <Button\n        appearance=\"primary\"\n        disabled={sending}\n        onClick={() => {\n          setStatusMessage('');\n          setServerValidationMessage('');\n          setError(false);\n          setSending(true);\n          setTimeout(() => {\n            setSending(false);\n            if (!value.match(/^[ァ-ヾ]*$/)) {\n              setError(true);\n              setServerValidationMessage('全角カタカナで入力してください');\n              setStatusMessage(\n                '入力内容にエラーがあります。修正のうえ、再度お試しください'\n              );\n            } else {\n              setStatusMessage('保存しました');\n            }\n          }, 600);\n        }}\n      >\n        保存\n      </Button>\n      <Loading coverAll isLoading={sending} />\n      {statusMessage && (\n        <FloatingMessageBlock\n          error={error}\n          success={!error}\n          message={statusMessage}\n        />\n      )}\n    </>\n  );\n};\n\nexport const DisableButtonIfInvalid = () => {\n  const [values, setValues] = React.useState({\n    companyName: '',\n    companyNameKana: '',\n    notes: '',\n  });\n  const [errorMessages, setErrorMessages] = React.useState({\n    companyName: '',\n    companyNameKana: '',\n    notes: '',\n  });\n\n  const validatedAsRequired =\n    values.companyName.length > 0 && values.companyNameKana.length > 0;\n  const validatedAsKatakana = !!values.companyNameKana.match(/^[ァ-ヾ]*$/);\n  const [statusMessage, setStatusMessage] = React.useState('');\n  const [sending, setSending] = React.useState(false);\n\n  return (\n    <>\n      <DescriptionList\n        mb={1}\n        listContents={[\n          {\n            title: (\n              <label htmlFor=\"disable-button-if-invalid__corporate-name\">\n                事業所名\n                <RequiredIcon ml={0.5} />\n              </label>\n            ),\n            value: (\n              <>\n                <TextField\n                  id=\"disable-button-if-invalid__corporate-name\"\n                  value={values.companyName}\n                  onChange={(e) =>\n                    setValues({\n                      ...values,\n                      companyName: e.target.value,\n                    })\n                  }\n                  onBlur={() =>\n                    setErrorMessages({\n                      ...errorMessages,\n                      companyName:\n                        values.companyName.length > 0\n                          ? ''\n                          : '事業所名は必須です',\n                    })\n                  }\n                  required\n                  error={!!errorMessages.companyName}\n                />\n                {errorMessages.companyName && (\n                  <Message error ml={1}>\n                    {errorMessages.companyName}\n                  </Message>\n                )}\n              </>\n            ),\n          },\n          {\n            title: (\n              <label htmlFor=\"disable-button-if-invalid__corporate-name-kana\">\n                事業所名（カタカナ）\n                <RequiredIcon ml={0.5} />\n              </label>\n            ),\n            value: (\n              <>\n                <WithBalloon\n                  border=\"notice\"\n                  balloonDisabled={validatedAsKatakana}\n                  renderBalloonContent={() =>\n                    !validatedAsKatakana ? '全角カタカナで入力してください' : ''\n                  }\n                  renderContent={() => (\n                    <TextField\n                      id=\"disable-button-if-invalid__corporate-name-kana\"\n                      value={values.companyNameKana}\n                      onChange={(e) =>\n                        setValues({\n                          ...values,\n                          companyNameKana: e.target.value,\n                        })\n                      }\n                      onBlur={() =>\n                        setErrorMessages({\n                          ...errorMessages,\n                          companyNameKana: !validatedAsKatakana\n                            ? '全角カタカナで入力してください'\n                            : values.companyNameKana.length == 0\n                            ? '事業所名（カタカナ）は必須です'\n                            : '',\n                        })\n                      }\n                      required\n                      error={!!errorMessages.companyNameKana}\n                    />\n                  )}\n                />\n                <VisuallyHidden autoRead>\n                  {/*\n                    スクリーンリーダー向けに、フロントエンドバリデーションのメッセージをVisuallyHiddenで配置しています\n                    `autoRead` を渡すことで、 `aria-live=\"polite\"` になっているが、これが表示されているタイミングは入力中であることが多いため、自動的に読み上げられる可能性は低い。\n                    （サーバーサイドのものでいいので）バリデーション結果が正しく伝わるよう、代替手段を提供する必要がある。\n                    この例では保存ボタン押下後にFloatingMessageBlockで通知されるため、気付くことができる。\n                  */}\n                  {!validatedAsKatakana ? '全角カタカナで入力してください' : ''}\n                </VisuallyHidden>\n                {errorMessages.companyNameKana && (\n                  <Message error ml={1}>\n                    {errorMessages.companyNameKana}\n                  </Message>\n                )}\n              </>\n            ),\n          },\n          {\n            title: (\n              <label htmlFor=\"disable-button-if-invalid__notes\">備考</label>\n            ),\n            value: (\n              <TextField\n                id=\"disable-button-if-invalid__notes\"\n                value={values.notes}\n                onChange={(e) =>\n                  setValues({ ...values, notes: e.target.value })\n                }\n                width=\"large\"\n              />\n            ),\n          },\n        ]}\n      />\n      <WithDescriptionContent\n        position=\"horizontal\"\n        renderContent={(descriptionId) => (\n          <Button\n            appearance=\"primary\"\n            disabled={sending || !(validatedAsKatakana && validatedAsRequired)}\n            aria-describedby={descriptionId}\n            onClick={() => {\n              setStatusMessage('');\n              setSending(true);\n              setTimeout(() => {\n                setSending(false);\n                setStatusMessage('保存しました');\n              }, 600);\n            }}\n          >\n            保存\n          </Button>\n        )}\n        renderDescriptionContent={() =>\n          !validatedAsRequired ? (\n            <Note ml={0.5}>必須項目をすべて入力してください</Note>\n          ) : !validatedAsKatakana ? (\n            <Note ml={0.5}>入力内容に誤りがあります。ご確認ください</Note>\n          ) : undefined\n        }\n      />\n      <Loading coverAll isLoading={sending} />\n      {statusMessage && (\n        <FloatingMessageBlock success message={statusMessage} />\n      )}\n    </>\n  );\n};\n"
  },
  {
    "path": "examples/ImportWizard.mdx",
    "content": "import { Story, Canvas } from '@storybook/addon-docs/blocks';\n\n# インポートウィザード\n\nインポートによってオブジェクトの新規追加を行う画面の例です。\n\n- スクリーンリーダーのユーザーがページが切り変わったことに気付けるよう、ステップを移動するたびPageTitleにフォーカスが移動するようになっています。\n- ウィザードとして実装してあり、グローバルナビ等を配置しない想定になっています。\n\n<Canvas>\n  {/* Container を使っているとinlineでは見辛いので、inline={false} にしている */}\n  <Story id=\"examples-importwizard--import-walkthrough\" inline={false} height={800} />\n</Canvas>\n\n## ファイルの準備ステップ\n\nテンプレートファイルのダウンロード導線と、アップロードのUIを配置します。アップロードすることで次のステップに進めます。\n\n<Canvas>\n  <Story id=\"examples-importwizard--upload-step\" />\n</Canvas>\n\n## 内容確認ステップ\n\nアップロードされたファイルの内容から、インポート後の状態を表示しています。エラーがある場合には MessageIcon で表現してください。\n\n<Canvas>\n  <Story id=\"examples-importwizard--confirm-step\" />\n</Canvas>\n\n\n## 実行中ステップ\n\nインポート作業を実行中のステップです。前のステップには戻れなくなっています。ポーリング等を使って現在の状態を取得し、完了していたら次のステップに遷移する想定です。\n\n実行中・完了済みのインポートがいつでも確認できるようになっていれば、ここからウィザードを抜ける導線を用意しても問題ありません。\n\n<Canvas>\n  <Story id=\"examples-importwizard--execution-step\" />\n</Canvas>\n\n## 完了ステップ\n\nインポートによって作成されたデータを示し、一覧または再実行への導線を示します。\n\n<Canvas>\n  <Story id=\"examples-importwizard--completed-step\" />\n</Canvas>\n"
  },
  {
    "path": "examples/ImportWizard.stories.tsx",
    "content": "import * as React from 'react';\nimport { MdFileDownload } from 'react-icons/md';\nimport ImportWizard from './ImportWizard.mdx';\n\nimport {\n  Container,\n  ContentsBase,\n  Breadcrumbs,\n  PageTitle,\n  Paragraph,\n  Button,\n  FileUploader,\n  FileTypes,\n  Stepper,\n  SectionTitle,\n  JumpButton,\n  FormActions,\n  NumericTable,\n  Loading,\n  Digits,\n  MarginBase,\n} from '../src';\n\nexport default {\n  title: 'examples/ImportWizard',\n  parameters: { docs: { page: ImportWizard } },\n};\n\nconst requestMock = (wait = 700) => {\n  // eslint-disable-next-line compat/compat\n  return new Promise<void>((resolve) => setTimeout(() => resolve(), wait));\n};\n\nexport const ImportWalkthrough = () => {\n  const [isRequesting, setIsRequesting] = React.useState(false);\n  const [currentStep, setCurrentStep] = React.useState(0);\n  const headRef = React.useRef<HTMLHeadingElement>(null);\n\n  // 実行中ステップに入ったときだけ、3秒で次のステップへ\n  React.useEffect(() => {\n    if (currentStep === 2) {\n      setTimeout(() => setCurrentStep(3), 3000);\n    }\n    // stepが変わったら見出しにフォーカス\n    headRef.current?.focus();\n  }, [currentStep]);\n\n  return (\n    <Container width=\"narrow\">\n      <ContentsBase>\n        <Breadcrumbs\n          mb={1}\n          links={[\n            { title: 'ホーム', url: '/' },\n            { title: '申請一覧', url: '/path/' },\n            { title: 'インポート' },\n          ]}\n        />\n        <Stepper\n          currentStepIndex={currentStep}\n          steps={['ファイルの準備', '内容の確認', '実行', '完了']}\n          disabledStepIndex={[]}\n        />\n        {currentStep === 0 ? (\n          <UploadStep\n            isRequesting={isRequesting}\n            headRef={headRef}\n            onFileSelect={async () => {\n              setIsRequesting(true);\n              await requestMock();\n              setCurrentStep(currentStep + 1);\n              setIsRequesting(false);\n            }}\n          />\n        ) : currentStep === 1 ? (\n          <ConfirmStep\n            isRequesting={isRequesting}\n            headRef={headRef}\n            onBack={() => setCurrentStep(currentStep - 1)}\n            onConfirm={async () => {\n              setIsRequesting(true);\n              await requestMock(1000);\n              setCurrentStep(currentStep + 1);\n              setIsRequesting(false);\n            }}\n          />\n        ) : currentStep === 2 ? (\n          <ExecutionStep headRef={headRef} />\n        ) : (\n          <CompletedStep headRef={headRef} onRetry={() => setCurrentStep(0)} />\n        )}\n      </ContentsBase>\n    </Container>\n  );\n};\n\nexport const UploadStep = ({\n  headRef = React.createRef<HTMLHeadingElement>(),\n  onFileSelect = () => {\n    return;\n  },\n  isRequesting = false,\n}: {\n  headRef: React.Ref<HTMLHeadingElement>;\n  onFileSelect: () => any;\n  isRequesting: boolean;\n}) => (\n  <>\n    <PageTitle textAlign=\"center\" mb={1} ref={headRef}>\n      申請のインポート\n    </PageTitle>\n    <Paragraph mb={1} textAlign=\"center\">\n      複数の申請を一括して追加することができます。\n      <br />\n      テンプレートのCSVファイルをMicrosoft\n      Excel等で編集して、アップロードしてください。\n    </Paragraph>\n    <Paragraph mb={2} textAlign=\"center\">\n      <Button IconComponent={MdFileDownload}>\n        テンプレートCSVファイルのダウンロード\n      </Button>\n    </Paragraph>\n    <SectionTitle mb={1} textAlign=\"center\">\n      ファイルをアップロードして次のステップへ\n    </SectionTitle>\n\n    {/* TODO: こういうの↓を提供してくれるコンポーネントほしいね */}\n    <MarginBase fitContent mr=\"auto\" ml=\"auto\">\n      <FileUploader\n        fileLabel=\"CSVファイル\"\n        isUploading={isRequesting}\n        acceptFileTypes={[FileTypes.CSV]}\n        onFileSelect={onFileSelect}\n      />\n    </MarginBase>\n  </>\n);\n\nconst ConfirmTable = () => (\n  <NumericTable\n    ml={-1.5}\n    mr={-1.5}\n    mb={1}\n    headers={[\n      { value: 'タイトル' },\n      { value: '申請者' },\n      { value: '日付' },\n      { value: '金額', alignRight: true },\n    ]}\n    rows={[\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n      {\n        cells: [\n          { value: '打ち合わせ費用' },\n          { value: 'フリー太郎' },\n          { value: '2020-10-01' },\n          { value: Digits.formalize(10000), alignRight: true },\n        ],\n      },\n    ]}\n  />\n);\n\nexport const ConfirmStep = ({\n  headRef = React.createRef<HTMLHeadingElement>(),\n  isRequesting = false,\n  onBack = () => {\n    /* do nothing */\n  },\n  onConfirm = () => {\n    /* do nothing */\n  },\n}: {\n  headRef: React.Ref<HTMLHeadingElement>;\n  isRequesting: boolean;\n  onBack: () => void;\n  onConfirm: () => void;\n}) => (\n  <>\n    <Loading isLoading={isRequesting} coverAll />\n    <PageTitle textAlign=\"center\" mb={1} ref={headRef}>\n      インポートする内容をご確認ください\n    </PageTitle>\n    <SectionTitle mb={1}>10件の申請をインポートしようとしています</SectionTitle>\n    <ConfirmTable />\n    <Paragraph textAlign=\"center\" mb={1}>\n      この内容でよろしければ、実行してください\n    </Paragraph>\n    <MarginBase fitContent ml=\"auto\" mr=\"auto\">\n      <FormActions>\n        <Button\n          large\n          disabled={isRequesting}\n          onClick={onConfirm}\n          appearance=\"primary\"\n        >\n          実行\n        </Button>\n        <Button large disabled={isRequesting} onClick={onBack}>\n          やり直す\n        </Button>\n      </FormActions>\n    </MarginBase>\n  </>\n);\n\nexport const ExecutionStep = ({\n  headRef = React.createRef<HTMLHeadingElement>(),\n}: {\n  headRef: React.Ref<HTMLHeadingElement>;\n}) => (\n  <>\n    <PageTitle textAlign=\"center\" mb={1} ref={headRef}>\n      申請のインポートを実行中です\n    </PageTitle>\n    <Paragraph mb={1} textAlign=\"center\">\n      しばらくこのままお待ちください\n    </Paragraph>\n    {/* TODO: プログレスバーか何かほしいですね */}\n  </>\n);\n\nexport const CompletedStep = ({\n  headRef = React.createRef<HTMLHeadingElement>(),\n  onRetry = () => {\n    /* do nothing */\n  },\n}: {\n  headRef: React.Ref<HTMLHeadingElement>;\n  onRetry: () => void;\n}) => (\n  <>\n    <PageTitle textAlign=\"center\" mb={1} ref={headRef}>\n      申請のインポートが完了しました\n    </PageTitle>\n    <Paragraph mb={1} textAlign=\"center\">\n      以下の内容でインポートしました\n    </Paragraph>\n    <ConfirmTable />\n    <MarginBase fitContent ml=\"auto\" mr=\"auto\" mb={1}>\n      <JumpButton large>一覧画面へ</JumpButton>\n    </MarginBase>\n    <MarginBase fitContent ml=\"auto\" mr=\"auto\">\n      <Button onClick={onRetry} appearance=\"tertiary\">\n        再度インポートする\n      </Button>\n    </MarginBase>\n  </>\n);\n"
  },
  {
    "path": "examples/Pages.stories.tsx",
    "content": "import * as React from 'react';\nimport { Container, ContentsBase, Footer, GlobalNavi, Header } from '../src';\nimport {\n  MdHome,\n  MdInbox,\n  MdAssessment,\n  MdLibraryBooks,\n  MdCreditCard,\n  MdSettings\n} from 'react-icons/md';\n\nexport default {\n  title: 'examples/Pages'\n};\n\nconst Accounting = () => (\n  <svg\n    viewBox=\"0 0 132 32\"\n    style={{\n      height: '3rem'\n    }}\n  >\n    <title>freee会計</title>\n    <path\n      d=\"M10.84048,4.82736 L12.76624,14.73392 C12.95888,15.72464 12.30608,16.69264 11.31536,16.88528 L4.11056,18.2856 C3.11984,18.47824 2.15184,17.82512 1.95952,16.8344 L0.03376,6.92816 C-0.15888,5.93744 0.49392,4.96944 1.48464,4.7768 L8.68944,3.37648 C9.67984,3.18384 10.64816,3.83696 10.84048,4.82736 Z M5.023744,15.771552 C4.927104,15.274272 4.445504,14.949472 3.948224,15.046112 C3.450624,15.142752 3.125824,15.624352 3.222784,16.121632 C3.319424,16.618912 3.801024,16.944032 4.298304,16.847072 C4.795584,16.750432 5.120384,16.268832 5.023744,15.771552 Z M8.175936,15.158912 C8.079296,14.661632 7.597696,14.336832 7.100096,14.433152 C6.602816,14.530112 6.278016,15.011712 6.374656,15.508992 C6.471296,16.006272 6.952896,16.331392 7.450176,16.234432 C7.947776,16.137792 8.272576,15.656192 8.175936,15.158912 Z M11.327968,14.54624 C11.231328,14.04864 10.749728,13.72384 10.252448,13.82048 C9.754848,13.91744 9.430048,14.39904 9.526688,14.89632 C9.623328,15.3936 10.104928,15.7184 10.602208,15.62176 C11.099808,15.52512 11.424608,15.04352 11.327968,14.54624 Z M4.498592,13.069856 C4.401952,12.572576 3.920352,12.247776 3.423072,12.344096 C2.925472,12.441056 2.600672,12.922656 2.697632,13.419936 C2.794272,13.917216 3.275872,14.242336 3.773152,14.145376 C4.270432,14.048736 4.595232,13.567136 4.498592,13.069856 Z M7.650624,12.457184 C7.553984,11.959584 7.072384,11.634784 6.575104,11.731424 C6.077504,11.828384 5.752704,12.309984 5.849664,12.807264 C5.946304,13.304544 6.427904,13.629344 6.925184,13.532704 C7.422464,13.436064 7.747264,12.954464 7.650624,12.457184 Z M10.802816,11.844384 C10.706176,11.347104 10.224576,11.022304 9.726976,11.118944 C9.229696,11.215584 8.904896,11.697184 9.001536,12.194464 C9.098176,12.691744 9.579776,13.016864 10.077056,12.919904 C10.574656,12.823584 10.899456,12.341984 10.802816,11.844384 Z M3.97344,10.368128 C3.8768,9.870528 3.3952,9.546048 2.89792,9.642368 C2.40032,9.739328 2.07552,10.220928 2.17248,10.718208 C2.26912,11.215488 2.75072,11.540608 3.248,11.443648 C3.74528,11.347008 4.07008,10.865408 3.97344,10.368128 Z M7.125472,9.755328 C7.028832,9.258048 6.547232,8.933248 6.049952,9.029888 C5.552352,9.126528 5.227552,9.608128 5.324512,10.105408 C5.421152,10.602688 5.902752,10.927808 6.400032,10.830848 C6.897312,10.734528 7.222112,10.252928 7.125472,9.755328 Z M10.277504,9.142656 C10.180864,8.645376 9.699264,8.320576 9.201984,8.417216 C8.704384,8.513856 8.379584,8.995456 8.476544,9.492736 C8.573184,9.990016 9.054784,10.315136 9.552064,10.218176 C10.049344,10.121536 10.374144,9.639936 10.277504,9.142656 Z M9.034121,4.71888114 L8.952032,4.727328 L1.747232,6.127648 C1.499552,6.175968 1.336352,6.417888 1.384672,6.665568 L1.384672,6.665568 L1.647072,8.016288 C1.695392,8.263968 1.937312,8.427488 2.184992,8.379168 L2.184992,8.379168 L9.389792,6.978848 C9.637472,6.930528 9.800672,6.688608 9.752352,6.440928 L9.752352,6.440928 L9.489952,5.089888 C9.441632,4.842208 9.199712,4.679008 8.952032,4.727328 Z\"\n      fill=\"#73A5FF\"\n    ></path>\n    <path\n      d=\"M5.023744,15.771552 C5.120384,16.268832 4.795584,16.750432 4.298304,16.847072 C3.801024,16.944032 3.319424,16.618912 3.222784,16.121632 C3.125824,15.624352 3.450624,15.142752 3.948224,15.046112 C4.445504,14.949472 4.927104,15.274272 5.023744,15.771552\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M8.175936,15.158912 C8.272576,15.656192 7.947776,16.137792 7.450176,16.234432 C6.952896,16.331392 6.471296,16.006272 6.374656,15.508992 C6.278016,15.011712 6.602816,14.530112 7.100096,14.433152 C7.597696,14.336832 8.079296,14.661632 8.175936,15.158912\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M11.327968,14.54624 C11.424608,15.04352 11.099808,15.52512 10.602208,15.62176 C10.104928,15.7184 9.623328,15.3936 9.526688,14.89632 C9.430048,14.39904 9.754848,13.91744 10.252448,13.82048 C10.749728,13.72384 11.231328,14.04864 11.327968,14.54624\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M4.498592,13.069856 C4.595232,13.567136 4.270432,14.048736 3.773152,14.145376 C3.275872,14.242336 2.794272,13.917216 2.697632,13.419936 C2.600672,12.922656 2.925472,12.441056 3.423072,12.344096 C3.920352,12.247776 4.401952,12.572576 4.498592,13.069856\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M3.97344,10.368128 C4.07008,10.865408 3.74528,11.347008 3.248,11.443648 C2.75072,11.540608 2.26912,11.215488 2.17248,10.718208 C2.07552,10.220928 2.40032,9.739328 2.89792,9.642368 C3.3952,9.546048 3.8768,9.870528 3.97344,10.368128\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M7.650624,12.457184 C7.747264,12.954464 7.422464,13.436064 6.925184,13.532704 C6.427904,13.629344 5.946304,13.304544 5.849664,12.807264 C5.752704,12.309984 6.077504,11.828384 6.575104,11.731424 C7.072384,11.634784 7.553984,11.959584 7.650624,12.457184\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M7.125472,9.755328 C7.222112,10.252928 6.897312,10.734528 6.400032,10.830848 C5.902752,10.927808 5.421152,10.602688 5.324512,10.105408 C5.227552,9.608128 5.552352,9.126528 6.049952,9.029888 C6.547232,8.933248 7.028832,9.258048 7.125472,9.755328\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M10.802816,11.844384 C10.899456,12.341984 10.574656,12.823584 10.077056,12.919904 C9.579776,13.016864 9.098176,12.691744 9.001536,12.194464 C8.904896,11.697184 9.229696,11.215584 9.726976,11.118944 C10.224576,11.022304 10.706176,11.347104 10.802816,11.844384\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M10.277504,9.142656 C10.374144,9.639936 10.049344,10.121536 9.552064,10.218176 C9.054784,10.315136 8.573184,9.990016 8.476544,9.492736 C8.379584,8.995456 8.704384,8.513856 9.201984,8.417216 C9.699264,8.320576 10.180864,8.645376 10.277504,9.142656\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M9.752352,6.440928 C9.800672,6.688608 9.637472,6.930528 9.389792,6.978848 L2.184992,8.379168 C1.937312,8.427488 1.695392,8.263968 1.647072,8.016288 L1.384672,6.665568 C1.336352,6.417888 1.499552,6.175968 1.747232,6.127648 L8.952032,4.727328 C9.199712,4.679008 9.441632,4.842208 9.489952,5.089888 L9.752352,6.440928 Z\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M34.921312,-6.4e-05 C33.515552,6.150336 29.351072,11.249856 23.798752,13.927296 C26.247392,14.427136 28.782112,14.689536 31.378272,14.689536 C33.716832,14.689536 35.258592,14.537216 37.633952,14.162496 C37.525792,14.484416 37.607712,14.676096 37.086752,14.858496 C35.739872,15.330176 34.689632,15.657216 33.351712,15.974336 C32.646112,16.141696 32.514912,16.260096 32.040992,16.650176 C31.821152,16.830656 31.529952,17.091776 31.318112,17.242816 L31.318112,17.242816 L36.103072,17.908736 C36.712992,17.993856 36.869152,18.116736 36.785952,18.531456 L36.785952,18.531456 L30.599712,18.531456 C29.403872,18.531456 29.165472,18.602496 28.217312,18.929536 C27.073952,19.324096 25.890272,19.549376 24.606432,19.557696 C27.654752,23.105856 28.998432,27.539776 28.698592,31.999936 L28.698592,31.999936 L17.027232,16.848256 C16.120672,15.671296 15.745952,15.402816 14.098912,15.041216 L14.098912,15.041216 L12.033952,14.588096 L13.118752,14.324416 C13.648992,14.195776 13.693152,14.103296 14.036192,13.771456 C14.925472,12.910336 16.165152,12.387136 17.476832,12.387136 C18.301152,12.387136 18.529632,12.615616 19.397472,11.947456 L19.397472,11.947456 Z M24.024064,15.569664 C21.246144,15.275904 19.130304,15.341184 17.483584,15.845504 C19.318144,17.564864 21.785024,18.617664 24.497664,18.617664 C26.983424,18.617664 29.262464,17.733824 31.038144,16.263104 C28.651584,16.257664 26.576064,15.839424 24.024064,15.569664 Z M16.99312,13.448928 C16.56816,13.448928 16.22352,13.793568 16.22352,14.218528 C16.22352,14.643488 16.56816,14.987808 16.99312,14.987808 C17.41808,14.987808 17.7624,14.643488 17.7624,14.218528 C17.7624,13.793568 17.41808,13.448928 16.99312,13.448928 Z\"\n      fill=\"#2864F0\"\n    ></path>\n    <path\n      d=\"M16.99312,14.987808 C16.56816,14.987808 16.22352,14.643488 16.22352,14.218528 C16.22352,13.793568 16.56816,13.448928 16.99312,13.448928 C17.41808,13.448928 17.7624,13.793568 17.7624,14.218528 C17.7624,14.643488 17.41808,14.987808 16.99312,14.987808\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M24.497664,18.617664 C21.785024,18.617664 19.318144,17.564864 17.483584,15.845504 C19.130304,15.341184 21.246144,15.275904 24.024064,15.569664 C26.576064,15.839424 28.651584,16.257664 31.038144,16.263104 C29.262464,17.733824 26.983424,18.617664 24.497664,18.617664\"\n      fill=\"#FFFFFF\"\n    ></path>\n    <path\n      d=\"M72.590784,12.743424 C72.994944,12.743424 73.422144,13.006784 73.422144,13.745664 C73.422144,15.128704 71.622784,15.838144 70.227584,16.147584 C70.227584,14.975104 71.457344,12.743424 72.590784,12.743424 L72.590784,12.743424 Z M81.754624,12.743424 C82.158464,12.743424 82.585344,13.006784 82.585344,13.745664 C82.585344,15.128704 80.786304,15.838144 79.391424,16.147584 C79.391424,14.975104 80.620864,12.743424 81.754624,12.743424 L81.754624,12.743424 Z M90.912064,12.743424 C91.315904,12.743424 91.743104,13.006784 91.743104,13.745664 C91.743104,15.128704 89.944064,15.838144 88.548864,16.147584 C88.548864,14.975104 89.778304,12.743424 90.912064,12.743424 L90.912064,12.743424 Z M95.825984,14.886464 C95.097664,17.548544 92.809344,19.434304 90.887104,19.434304 C88.837184,19.434304 88.497024,18.103104 88.497024,17.247744 C90.485184,16.870144 93.522624,16.035584 93.522624,13.681664 C93.522624,12.602304 92.851264,11.588864 91.014144,11.588864 C88.392384,11.588864 86.750464,13.918464 86.313664,15.855744 C85.397184,17.901504 83.501184,19.434304 81.729664,19.434304 C79.679424,19.434304 79.339584,18.103104 79.339584,17.247744 C81.328064,16.870144 84.365504,16.035584 84.365504,13.681664 C84.365504,12.602304 83.694144,11.588864 81.856384,11.588864 C79.236544,11.588864 77.595264,13.915584 77.156864,15.851904 L77.156544,15.843264 C76.242304,17.895744 74.341184,19.434304 72.565824,19.434304 C70.516224,19.434304 70.175744,18.103104 70.175744,17.247744 C72.164224,16.870144 75.201984,16.035584 75.201984,13.681664 C75.201984,12.602304 74.530624,11.588864 72.692864,11.588864 C69.765184,11.588864 68.054144,14.496384 67.885504,16.515584 C67.478464,16.577024 67.091584,16.611584 66.759104,16.611584 C65.376064,16.611584 65.544384,15.556864 65.761344,14.441344 C66.073344,12.837504 65.210304,11.588864 63.533184,11.588864 C61.614784,11.588864 60.197824,13.485824 59.409024,15.361984 L59.403904,15.361024 C59.849344,13.067904 59.464704,11.660864 56.705024,11.660864 C55.442304,11.660864 54.003584,12.056704 52.451904,12.665984 C52.454784,12.669184 53.013504,9.770624 53.013504,9.770624 C53.708864,6.194944 54.646144,5.441344 55.815104,5.441344 C56.740864,5.441344 57.356224,5.994624 58.105024,6.962624 L58.507584,4.883264 C57.586624,4.345024 56.698304,4.129664 55.763264,4.129664 C53.004544,4.129664 51.166784,6.135424 50.401344,10.073024 L49.679744,13.792704 C47.165184,14.790784 43.971264,15.826304 38.945344,16.055104 L38.712064,17.251904 C43.632704,17.060864 46.870784,16.129024 49.411264,15.167104 C49.411264,15.167104 48.039104,22.225984 48.039104,22.226304 C47.366464,25.685824 46.460864,26.558464 45.250624,26.558464 C44.124544,26.558464 43.448704,25.663104 42.960704,25.037504 C42.892864,25.386944 42.558144,27.116864 42.558144,27.116864 C43.174784,27.462464 44.017344,27.870464 45.360704,27.870464 C47.901184,27.870464 49.854144,26.025984 50.650624,21.927424 L52.182144,14.049344 C53.722944,13.414144 55.333184,12.905024 56.138304,12.905024 C57.436864,12.905024 57.675264,13.345664 57.337984,15.104704 L56.242624,20.715904 L58.670464,20.715904 L59.163584,18.211904 C59.537344,16.290304 60.859584,13.527744 62.559744,13.527744 C63.416064,13.527744 63.602304,14.180864 63.442304,15.003904 C63.026944,17.142144 64.294464,17.688064 65.788224,17.688064 C66.358464,17.688064 67.051264,17.680064 67.892544,17.559424 C67.983744,18.854784 69.024064,20.964544 71.877184,20.964544 C74.015424,20.964544 75.843264,19.599744 77.091264,17.846464 C77.304384,19.143424 78.389504,20.964544 81.040704,20.964544 C83.176384,20.964544 85.002304,19.602944 86.250624,17.852864 C86.465664,19.149504 87.551104,20.964544 90.198144,20.964544 C93.195264,20.964544 95.782144,18.327104 96.786304,15.089984 L95.825984,14.886464 Z\"\n      fill=\"#2864F0\"\n    ></path>\n    <path\n      d=\"M111.78704,12.77296 C110.55376,11.91568 109.45616,10.89296 108.65904,9.84048 C107.95216,10.99824 107.12496,11.93072 106.0872,12.77296 L111.78704,12.77296 Z M108.0424,16.81872 C107.57616,17.85616 107.09488,18.80368 106.58352,19.69104 C108.55376,19.55536 110.10256,19.43504 111.57648,19.25488 L111.4712,19.13456 C110.80944,18.45776 110.61392,18.2472 110.05776,17.73584 L111.3208,17.02896 C112.61424,18.15696 113.86224,19.46544 114.88528,20.7736 L113.53168,21.72112 L113.50128,21.676 C112.94512,20.90928 112.83984,20.7736 112.50896,20.3528 C109.62128,20.7736 106.28272,21.14992 103.27472,21.37552 L102.8088,19.90128 C103.51536,19.87152 104.41808,19.8264 104.92912,19.78096 C105.45552,18.86384 105.92176,17.90128 106.34288,16.81872 L102.70352,16.81872 L102.70352,15.4952 L114.88528,15.4952 L114.88528,16.81872 L108.0424,16.81872 Z M105.54576,13.19408 C104.68848,13.81072 103.756,14.35216 102.8088,14.78832 L101.9064,13.58512 C104.50832,12.5624 106.44816,10.87792 107.78672,8.532 L109.516,8.532 C110.92976,10.51696 112.99024,12.08112 115.66704,13.164 L114.73488,14.4424 C113.81744,14.036 112.91504,13.53968 112.10288,12.98352 L112.10288,14.0664 L105.54576,14.0664 L105.54576,13.19408 Z\"\n      fill=\"#2864F0\"\n    ></path>\n    <path\n      d=\"M126.977664,14.337024 L124.105024,14.337024 L124.105024,12.893184 L126.977664,12.893184 L126.977664,8.441664 L128.481344,8.441664 L128.481344,12.893184 L131.338944,12.893184 L131.338944,14.337024 L128.481344,14.337024 L128.481344,21.766464 L126.977664,21.766464 L126.977664,14.337024 Z M119.894144,19.901184 L122.375424,19.901184 L122.375424,17.841024 L119.894144,17.841024 L119.894144,19.901184 Z M118.811264,15.856064 L123.413184,15.856064 L123.413184,14.728064 L118.811264,14.728064 L118.811264,15.856064 Z M118.811264,13.900544 L123.413184,13.900544 L123.413184,12.772864 L118.811264,12.772864 L118.811264,13.900544 Z M118.811264,9.900544 L123.413184,9.900544 L123.413184,8.727424 L118.811264,8.727424 L118.811264,9.900544 Z M118.510464,16.713344 L123.759104,16.713344 L123.759104,21.631104 L122.375424,21.631104 L122.375424,21.074624 L119.894144,21.074624 L119.894144,21.766464 L118.510464,21.766464 L118.510464,16.713344 Z M117.954304,11.945984 L124.315584,11.945984 L124.315584,10.727744 L117.954304,10.727744 L117.954304,11.945984 Z\"\n      fill=\"#2864F0\"\n    ></path>\n  </svg>\n);\n\nexport const PageLayout = () => {\n  return (\n    <>\n      <Header logo={<Accounting />} sectionDataList={[]} />\n      <GlobalNavi\n        mb={1}\n        links={[\n          {\n            title: 'ホーム',\n            url: '#',\n            IconComponent: MdHome\n          },\n          {\n            title: '取引',\n            url: '#',\n            IconComponent: MdInbox\n          },\n          {\n            title: 'レポート',\n            url: '#',\n            IconComponent: MdAssessment,\n            current: true\n          },\n          {\n            title: '決算',\n            url: '#',\n            IconComponent: MdLibraryBooks\n          },\n          {\n            title: '口座',\n            url: '#',\n            IconComponent: MdCreditCard\n          },\n          {\n            title: '設定',\n            url: '#',\n            IconComponent: MdSettings\n          }\n        ]}\n      />\n      <Container width=\"wide\" mb={1}>\n        <ContentsBase>hoge</ContentsBase>\n      </Container>\n      <Footer width=\"wide\" />\n    </>\n  );\n};\n"
  },
  {
    "path": "examples/ResponsiveLayout.mdx",
    "content": "import { Story, Canvas } from '@storybook/addon-docs/blocks';\n\n# レスポンシブレイアウト\n\n<Canvas>\n  {/* Container を使っているとinlineでは見辛いので、inline={false} にしている */}\n  <Story id=\"examples-responsivelayout--layout-sample\" inline={false} height={800} />\n</Canvas>\n\n"
  },
  {
    "path": "examples/ResponsiveLayout.stories.tsx",
    "content": "import * as React from 'react';\nimport ResponsiveLayout from './ResponsiveLayout.mdx';\n\nimport {\n  Button,\n  ColumnBase,\n  Container,\n  ContentsBase,\n  DescriptionList,\n  FormActions,\n  FormControl,\n  FormControlGroup,\n  HeadlineArea,\n  SectionTitle,\n  SubSectionTitle,\n  TextField,\n  Paragraph,\n  NameField,\n  NegativeContentsBase,\n  MessageBlock,\n  FloatingMessageBlock,\n  VibesProvider,\n} from '../src';\n\nexport default {\n  title: 'examples/ResponsiveLayout',\n  parameters: { docs: { page: ResponsiveLayout }, layout: 'fullscreen' },\n};\n\nexport const LayoutSample = () => {\n  const [screenMessage, setScreenMessage] = React.useState('');\n  return (\n    <>\n      <VibesProvider fixedLayout={false}>\n        <Container>\n          <ContentsBase>\n            <HeadlineArea pageTitle=\"レスポンシブレイアウト\">\n              Vibesでいい感じにデスクトップでもWebでも使える画面を使えるようにしたい\n            </HeadlineArea>\n            <Paragraph mb={1}>\n              <code>VibesContext</code>に\n              <code>value={'{{ responsive: true }}'}</code>\n              を渡すことで、中身がよしなにレスポンシブレイアウトになるような仕組みを作れないかと考えています\n            </Paragraph>\n            <MessageBlock\n              message=\"MessageBlockはpaddingが少し小さくなり、ボタンは段落ちした表示になります\"\n              linkTitle=\"詳細\"\n              linkUrl=\"#\"\n              mb={1}\n            />\n            {screenMessage && (\n              <FloatingMessageBlock\n                message={screenMessage}\n                onClose={() => setScreenMessage('')}\n                mb={1}\n              />\n            )}\n\n            <NegativeContentsBase>\n              <ColumnBase mb={1}>\n                <Paragraph>\n                  一部のコンポーネントは、 <code>responsive</code> propを持ち、{' '}\n                  <code>\n                    &lt;VibesContext value={'{{ responsive: '}true{' }}'}&gt;\n                  </code>{' '}\n                  内に置いたときと同じ表示になるようにします\n                </Paragraph>\n              </ColumnBase>\n            </NegativeContentsBase>\n\n            <Button\n              onClick={() =>\n                setScreenMessage(\n                  'FloatingMessageBlockもMessageBlock同様の表示になります。中身同じだからね'\n                )\n              }\n            >\n              ボタン\n            </Button>\n          </ContentsBase>\n\n          <ContentsBase>\n            <SectionTitle mb={1}>フォームの表示</SectionTitle>\n            <Paragraph mb={1}>\n              テキストフィールドはlargeにしないと、iOSでズームされてしまうかも\n            </Paragraph>\n            <ColumnBase mb={1.5}>\n              <FormControlGroup>\n                <FormControl label=\"氏名\" required mb={1} mr={1}>\n                  <NameField autoComplete=\"name\" required />\n                </FormControl>\n              </FormControlGroup>\n\n              <SubSectionTitle>ご住所</SubSectionTitle>\n              <FormControlGroup>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"郵便番号\"\n                  fieldId=\"layout-sample__postal\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  <TextField\n                    id=\"layout-sample__postal\"\n                    width=\"small\"\n                    autoComplete=\"postal-code\"\n                  />\n                </FormControl>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"都道府県\"\n                  fieldId=\"layout-sample__pref\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  {/* 都道府県のSelectBoxを作るのめんどくさい（許して） */}\n                  <TextField\n                    id=\"layout-sample__pref\"\n                    width=\"medium\"\n                    autoComplete=\"address-level1\"\n                  />\n                </FormControl>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"市区町村\"\n                  fieldId=\"layout-sample__city\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  {/* 都道府県のSelectBoxを作るのめんどくさい（許して） */}\n                  <TextField\n                    id=\"layout-sample__city\"\n                    width=\"medium\"\n                    autoComplete=\"address-level2\"\n                  />\n                </FormControl>\n              </FormControlGroup>\n              <FormControlGroup>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"町名・番地\"\n                  fieldId=\"layout-sample__address-line-1\"\n                  required\n                  mb={1}\n                  mr={1}\n                >\n                  <TextField\n                    id=\"layout-sample__address-line-1\"\n                    width=\"large\"\n                    autoComplete=\"street-address\"\n                  />\n                </FormControl>\n              </FormControlGroup>\n              <FormControlGroup>\n                {/* フィールドがひとつの場合はfieldIdを指定 */}\n                <FormControl\n                  label=\"建物名・部屋番号\"\n                  fieldId=\"layout-sample__address-line-2\"\n                  mb={1}\n                  mr={1}\n                >\n                  <TextField\n                    id=\"layout-sample__address-line-2\"\n                    width=\"large\"\n                    autoComplete=\"street-address\"\n                  />\n                </FormControl>\n              </FormControlGroup>\n            </ColumnBase>\n\n            <DescriptionList\n              mb={1}\n              listContents={[\n                {\n                  title: <label htmlFor=\"layout-sample__item-1\">項目1</label>,\n                  value: <TextField id=\"layout-sample__item-1\" />,\n                },\n                {\n                  title: <label htmlFor=\"layout-sample__item-2\">項目2</label>,\n                  value: <TextField id=\"layout-sample__item-1\" />,\n                },\n                {\n                  title: <label htmlFor=\"layout-sample__item-3\">項目3</label>,\n                  value: <TextField id=\"layout-sample__item-1\" />,\n                },\n              ]}\n            />\n\n            <FormActions responsive>\n              <Button appearance=\"primary\">送信</Button>\n              <Button appearance=\"tertiary\">スキップ</Button>\n            </FormActions>\n          </ContentsBase>\n        </Container>\n      </VibesProvider>\n    </>\n  );\n};\n"
  },
  {
    "path": "examples/ThroughCommonProps.mdx",
    "content": "import { Story, Canvas } from '@storybook/addon-docs/blocks';\n\n# CommonProps の通過（子要素への移譲）\n\n`pickCommonProps` ユーティリティ関数は、CommonProps 形式のオブジェクトを抽出することができます。\n\nこれを利用することで、自前コンポーネントが CommonProps 形式を含んだ props を受け付けて、内部に備わる vibes コンポーネントへ commonProps 値を移譲するといったことができます。\n\n<Canvas>\n  <Story id=\"examples-throughcommonprops--sample\" />\n</Canvas>\n\n"
  },
  {
    "path": "examples/ThroughCommonProps.stories.tsx",
    "content": "import * as React from 'react';\nimport ThroughCommonProps from './ThroughCommonProps.mdx';\nimport { Button, CommonProps, MarginBase, pickCommonProps } from '../src';\n\nexport default {\n  title: 'examples/ThroughCommonProps',\n  parameters: { docs: { page: ThroughCommonProps } }\n};\n\nexport const Sample = () => {\n  type InnerProps = CommonProps & { children?: React.ReactNode };\n\n  const InnerBlock: React.FC<InnerProps> = (props: InnerProps) => {\n    const commonProps = pickCommonProps(props);\n    const { children } = props;\n\n    return <MarginBase {...commonProps}>{children}</MarginBase>;\n  };\n\n  const InnerButton: React.FC<InnerProps> = (props: InnerProps) => {\n    const commonProps = pickCommonProps(props);\n    const { children } = props;\n\n    return (\n      <Button {...commonProps} appearance=\"primary\">\n        {children}\n      </Button>\n    );\n  };\n\n  return (\n    <>\n      <InnerBlock mb={3}>margin bottom = 3</InnerBlock>\n      <InnerButton ml={1} data-test=\"through-common-props-example\">\n        Button (ml=1, data-test=through-common-props-example)\n      </InnerButton>\n    </>\n  );\n};\n"
  },
  {
    "path": "index.d.ts",
    "content": "export * from './dist';\n"
  },
  {
    "path": "index.js",
    "content": "export * from './dist';\n"
  },
  {
    "path": "index.js.flow",
    "content": "// @flow\n/* eslint-disable import/no-unresolved */\nimport * as Lv1 from './lv1';\nimport * as Lv2 from './lv2';\nimport * as Utilities from './utilities';\n/* eslint-enable import/no-unresolved */\n\ndeclare module.exports: {\n  ...typeof Lv1,\n  ...typeof Lv2,\n  ...typeof Utilities,\n\n  // 以下は数が増えてきたらこのファイルにベタ書きし続けるか考える\n  // utilities\n  Ascii: {\n    hankakuToZenkaku: (str: string) => string,\n    zenkakuToHankaku: (str: string) => string,\n  },\n  Digits: {\n    formalize: (str?: string | number) => string,\n    numberize: (str: string) => number,\n    toPercent: (val: string | number, toFixed?: number) => string,\n  },\n  TimeString: {\n    createTimeString: (hour: number, min: number) => string,\n    getHour: (timeStr: string) => number,\n    getMin: (timeStr: string) => number,\n    convert: (str: string) => string,\n  },\n  Mins: {\n    strToMin: (str: string) => number,\n    minToStr: (min: number) => string,\n  },\n  VibesBlackColor: string,\n  VibesBase1Color: string,\n  VibesBase2Color: string,\n  VibesBase3Color: string,\n  VibesColumnColor: string,\n  VibesBurntColor: string,\n  VibesAlertColor: string,\n  VibesNoticeColor: string,\n  VibesBackgroundColor: string,\n  VibesPrimaryCorpColor: string,\n  VibesAccentCorpColor: string,\n  VibesLinkCorpColor: string,\n  VibesPrimaryHrColor: string,\n  VibesAccentHrColor: string,\n  VibesLinkHrColor: string,\n  Colors2021P01: string,\n  Colors2021P02: string,\n  Colors2021P03: string,\n  Colors2021P04: string,\n  Colors2021P05: string,\n  Colors2021P06: string,\n  Colors2021P07: string,\n  Colors2021P08: string,\n  Colors2021P09: string,\n  Colors2021P10: string,\n  Colors2021S01: string,\n  Colors2021S02: string,\n  Colors2021S03: string,\n  Colors2021S04: string,\n  Colors2021S05: string,\n  Colors2021S06: string,\n  Colors2021S07: string,\n  Colors2021S08: string,\n  Colors2021S09: string,\n  Colors2021S10: string,\n  Colors2021RE02: string,\n  Colors2021RE04: string,\n  Colors2021RE05: string,\n  Colors2021RE07: string,\n  Colors2021RE10: string,\n  Colors2021OR02: string,\n  Colors2021OR04: string,\n  Colors2021OR05: string,\n  Colors2021OR07: string,\n  Colors2021OR10: string,\n  Colors2021YE02: string,\n  Colors2021YE04: string,\n  Colors2021YE05: string,\n  Colors2021YE07: string,\n  Colors2021YE10: string,\n  Colors2021YG02: string,\n  Colors2021YG04: string,\n  Colors2021YG05: string,\n  Colors2021YG07: string,\n  Colors2021YG10: string,\n  Colors2021GR02: string,\n  Colors2021GR04: string,\n  Colors2021GR05: string,\n  Colors2021GR07: string,\n  Colors2021GR10: string,\n  Colors2021BG02: string,\n  Colors2021BG04: string,\n  Colors2021BG05: string,\n  Colors2021BG07: string,\n  Colors2021BG10: string,\n  Colors2021PU02: string,\n  Colors2021PU04: string,\n  Colors2021PU05: string,\n  Colors2021PU07: string,\n  Colors2021PU10: string,\n  Colors2021GY02: string,\n  Colors2021GY04: string,\n  Colors2021GY05: string,\n  Colors2021GY07: string,\n  Colors2021GY10: string,\n  Vibes2021BlackColor: string,\n  Vibes2021Base1Color: string,\n  Vibes2021Base2Color: string,\n  Vibes2021Base3Color: string,\n  Vibes2021ColumnColor: string,\n  Vibes2021BurntColor: string,\n  Vibes2021AlertColor: string,\n  Vibes2021NoticeColor: string,\n  Vibes2021BackgroundColor: string,\n  Vibes2021PrimaryCorpColor: string,\n  Vibes2021AccentCorpColor: string,\n  Vibes2021LinkCorpColor: string,\n};\n"
  },
  {
    "path": "injectFileName.js",
    "content": ""
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  testEnvironment: 'jsdom',\n  roots: ['<rootDir>'],\n  modulePaths: ['<rootDir>'],\n};\n"
  },
  {
    "path": "lv1.js.flow",
    "content": "// @flow\n\nimport * as React from 'react';\n// eslint-disable-next-line import/no-unresolved\nimport * as Utilities from './utilities';\n\ntype MarginClassProps = {|\n  marginTop?: boolean,\n  marginLeft?: boolean,\n  marginRight?: boolean,\n  marginBottom?: boolean,\n  marginSize?: 'xSmall' | 'small' | 'large' | 'xLarge' | 'xxLarge',\n|};\n\ntype CommonProps = typeof Utilities.CommonProps;\n\ntype FormHandlers<T = Element> = {|\n  onChange?: (e: SyntheticInputEvent<T>) => void | Promise<void>,\n  onInput?: (e: SyntheticInputEvent<T>) => void | Promise<void>,\n  onFocus?: (e: SyntheticFocusEvent<T>) => void | Promise<void>,\n  onBlur?: (e: SyntheticFocusEvent<T>) => void | Promise<void>,\n  onKeyDown?: (e: SyntheticKeyboardEvent<T>) => void | Promise<void>,\n  onKeyUp?: (e: SyntheticKeyboardEvent<T>) => void | Promise<void>,\n|};\n\ntype AutocompleteAttribute =\n  | 'off'\n  | 'on'\n  | 'name'\n  | 'honorific-prefix'\n  | 'given-name'\n  | 'additional-name'\n  | 'family-name'\n  | 'honorific-suffix'\n  | 'nickname'\n  | 'email'\n  | 'username'\n  | 'new-password'\n  | 'current-password'\n  | 'one-time-code'\n  | 'organization-title'\n  | 'organization'\n  | 'street-address'\n  | 'address-line1'\n  | 'address-line2'\n  | 'address-line3'\n  | 'address-level4'\n  | 'address-level3'\n  | 'address-level2'\n  | 'address-level1'\n  | 'country'\n  | 'country-name'\n  | 'postal-code'\n  | 'cc-name'\n  | 'cc-given-name'\n  | 'cc-additional-name'\n  | 'cc-family-name'\n  | 'cc-number'\n  | 'cc-exp'\n  | 'cc-exp-month'\n  | 'cc-exp-year'\n  | 'cc-csc'\n  | 'cc-type'\n  | 'transaction-currency'\n  | 'transaction-amount'\n  | 'language'\n  | 'bday'\n  | 'bday-day'\n  | 'bday-month'\n  | 'bday-year'\n  | 'sex'\n  | 'tel'\n  | 'tel-country-code'\n  | 'tel-national'\n  | 'tel-area-code'\n  | 'tel-local'\n  | 'tel-local-prefix'\n  | 'tel-local-suffix'\n  | 'tel-extension'\n  | 'impp'\n  | 'url'\n  | 'photo';\n\ntype StatusType =\n  | 'done'\n  | 'success'\n  | 'progress'\n  | 'required'\n  | 'disabled'\n  | 'emphasis'\n  | 'warning'\n  | 'error';\n\ntype Size = 'half' | 'oneThird' | 'twoThirds' | 'oneQuarter' | 'threeQuarters';\n\ntype TimeRecord = {\n  type: 'TimeRecord',\n  date: string,\n  status?: 'alert' | 'notice' | 'success',\n  dateLabel?: string,\n  openingTime: string,\n  endingTime: string,\n};\ntype AriaExpandedT = boolean;\ntype AriaPressedT = boolean | 'mixed';\ntype AriaControlsT = string;\ntype AriaOwnsT = string;\ntype AriaHaspopupT = boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\ntype AriaDescribedbyT = string;\ntype AriaNumberValueT = number;\ntype AriaLevelT = number;\ntype AriaSetSizeT = number;\ntype AriaPosinsetT = number;\n\ntype ButtonAriaProps = {|\n  'aria-expanded'?: AriaExpandedT,\n  'aria-pressed'?: AriaPressedT,\n  'aria-controls'?: AriaControlsT,\n  'aria-owns'?: AriaOwnsT,\n  'aria-haspopup'?: AriaHaspopupT,\n  'aria-describedby'?: AriaDescribedbyT,\n|};\n\ntype LinkAriaProps = {|\n  'aria-expanded'?: AriaExpandedT,\n  'aria-controls'?: AriaControlsT,\n  'aria-owns'?: AriaOwnsT,\n  'aria-haspopup'?: AriaHaspopupT,\n  'aria-describedby'?: AriaDescribedbyT,\n|};\n\ntype NumberInputAriaProps = {|\n  'aria-valuemin'?: AriaNumberValueT,\n  'aria-valuemax'?: AriaNumberValueT,\n  'aria-valuenow'?: AriaNumberValueT,\n|};\n\ntype TableRowAriaProps = {|\n  'aria-level'?: AriaLevelT,\n  'aria-setsize'?: AriaSetSizeT,\n  'aria-posinset'?: AriaPosinsetT,\n  'aria-expanded'?: AriaExpandedT,\n|};\n\n/**\n * lv1/a11y\n */\nclass VisuallyHidden extends React.Component<{|\n  id?: string,\n  children?: React.Node,\n  autoRead?: boolean,\n  assertive?: boolean,\n  ...CommonProps,\n|}> {}\n\ntype FocusHighlight = React.StatelessFunctionalComponent<{|\n  children?: React.Node,\n  inline?: boolean,\n  highlightStyle?: 'inset' | 'outset',\n  cornerStyle?: 'round' | 'sharp',\n  ...CommonProps,\n|}>;\n\n/**\n * lv1/bases\n */\n\ntype Balloon = React.AbstractComponent<\n  {|\n    children?: React.Node,\n    small?: boolean,\n    border?: 'default' | 'alert' | 'notice' | 'success',\n    position?: 'left' | 'right' | 'center',\n    verticalPosition?: 'top' | 'bottom',\n    ...MarginClassProps,\n    ...CommonProps,\n  |},\n  HTMLDivElement\n>;\n\nclass ColumnBase extends React.Component<{|\n  children?: React.Node,\n  rounded?: boolean,\n  small?: boolean,\n  border?: 'default' | 'alert' | 'notice' | 'success',\n  inline?: boolean,\n  overflowHidden?: boolean,\n  paddingSize?: 'small' | 'medium' | 'large' | 'zero',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass Container extends React.Component<{|\n  children: React.Node,\n  width?: 'normal' | 'narrow' | 'wide',\n  responsive?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass ContentsBase extends React.Component<{|\n  children: React.Node,\n  paddingSize?: 'small' | 'large',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass DialogBase extends React.Component<{|\n  children?: React.Node,\n  small?: boolean,\n  border?: 'default' | 'alert' | 'notice' | 'success',\n  inline?: boolean,\n  message?: boolean,\n  paddingSize?: 'small' | 'medium' | 'large' | 'zero',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass FloatingBase extends React.Component<{|\n  children?: React.Node,\n  small?: boolean,\n  border?: 'default' | 'alert' | 'notice' | 'success',\n  inline?: boolean,\n  fitContent?: boolean,\n  paddingSize?: 'small' | 'medium' | 'large' | 'zero',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass MarginBase extends React.Component<{|\n  children?: React.Node,\n  fitContent?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass PopupBase extends React.Component<{|\n  children?: React.Node,\n  small?: boolean,\n  border?: 'default' | 'alert' | 'notice' | 'success',\n  inline?: boolean,\n  fitContent?: boolean,\n  paddingSize?: 'small' | 'medium' | 'large' | 'zero',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass CardBase extends React.Component<{|\n  children?: React.Node,\n  paddingSize?: 'small' | 'medium' | 'large' | 'zero',\n  small?: boolean,\n  inline?: boolean,\n  clickable?: boolean,\n  url?: string,\n  target?: string,\n  rel?: string,\n  onClick?: (e: SyntheticMouseEvent<>) => void | Promise<void>,\n  overflowHidden?: boolean,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass ScrimBase extends React.Component<{|\n  children?: React.Node,\n  small?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass NegativeMarginBase extends React.Component<{|\n  children?: React.Node,\n  marginSize?: 'small' | 'medium' | 'large',\n  top?: boolean,\n  left?: boolean,\n  right?: boolean,\n  bottom?: boolean,\n  ...CommonProps,\n|}> {}\n\ntype ScrollableBase = React.StatelessFunctionalComponent<{|\n  scrollableX?: boolean,\n  scrollableY?: boolean,\n  children?: React.Node,\n  ...CommonProps,\n|}>;\nclass ZebraBase extends React.Component<{|\n  children?: React.Node,\n  paddingSize?: 'small' | 'medium' | 'large' | 'zero',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n/**\n * lv1/buttons\n */\ntype Button = React.AbstractComponent<\n  {|\n    appearance?: 'primary' | 'secondary' | 'tertiary',\n    children?: React.Node,\n    primary?: boolean,\n    danger?: boolean,\n    disabled?: boolean,\n    small?: boolean,\n    large?: boolean,\n    href?: string,\n    target?: string,\n    rel?: string,\n    download?: boolean | string,\n    type?: 'button' | 'submit' | 'reset',\n    iconPosition?: 'left' | 'right',\n    IconComponent?: React.ComponentType<*>,\n    width?: 'default' | 'full',\n    hasMinWidth?: boolean,\n    onClick?: (e: SyntheticMouseEvent<>) => void | Promise<void>,\n    onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n    onKeyDown?: (\n      e: SyntheticKeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n    ) => void | Promise<void>,\n    onFocus?: (\n      e: SyntheticFocusEvent<HTMLButtonElement | HTMLAnchorElement>\n    ) => void | Promise<void>,\n    onBlur?: (\n      e: SyntheticFocusEvent<HTMLButtonElement | HTMLAnchorElement>\n    ) => void | Promise<void>,\n    ...LinkAriaProps,\n    ...ButtonAriaProps,\n    ...MarginClassProps,\n    ...CommonProps,\n  |},\n  HTMLAnchorElement | HTMLButtonElement\n>;\n\nclass GlobalNaviButton extends React.Component<{|\n  children?: React.Node,\n  IconComponent?: React.ComponentType<*>,\n  href?: string,\n  current?: boolean,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass IconOnlyButton extends React.Component<{|\n  IconComponent: React.ComponentType<*>,\n  primary?: boolean,\n  danger?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  large?: boolean,\n  label?: string,\n  type?: 'button' | 'submit' | 'reset',\n  href?: string,\n  target?: string,\n  rel?: string,\n  download?: boolean | string,\n  appearance?: 'primary' | 'secondary' | 'tertiary',\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  onClick?: (e: SyntheticEvent<HTMLButtonElement | HTMLAnchorElement>) => any,\n  onKeyDown?: (\n    e: SyntheticKeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n  ) => void | Promise<void>,\n  onFocus?: (\n    e: SyntheticFocusEvent<HTMLButtonElement | HTMLAnchorElement>\n  ) => void | Promise<void>,\n  onBlur?: (\n    e: SyntheticFocusEvent<HTMLButtonElement | HTMLAnchorElement>\n  ) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n  ...ButtonAriaProps,\n  ...LinkAriaProps,\n|}> {}\n\ntype IconOnlyJumpButton = React.StatelessFunctionalComponent<{|\n  buttonLabel: string,\n  url?: string,\n  appearance?: 'primary' | 'secondary' | 'tertiary',\n  danger?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  large?: boolean,\n  target?: string,\n  type?: 'button' | 'submit' | 'reset',\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  rel?: string,\n  ...CommonProps,\n|}>;\n\ntype IconOnlyBackwardButton = React.StatelessFunctionalComponent<{|\n  buttonLabel: string,\n  url?: string,\n  appearance?: 'primary' | 'secondary' | 'tertiary',\n  danger?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  large?: boolean,\n  target?: string,\n  type?: 'button' | 'submit' | 'reset',\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  rel?: string,\n  ...CommonProps,\n|}>;\n\ntype InlineLink = React.StatelessFunctionalComponent<{|\n  href?: string,\n  target?: string,\n  disabled?: boolean,\n  rel?: string,\n  children?: React.Node,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  onClick?: (\n    event: SyntheticEvent<HTMLAnchorElement | HTMLButtonElement>\n  ) => void | Promise<void>,\n  ...ButtonAriaProps,\n  ...LinkAriaProps,\n  ...CommonProps,\n|}>;\n\nclass JumpButton extends React.Component<{|\n  children?: React.Node,\n  url?: string,\n  appearance?: 'primary' | 'secondary' | 'tertiary',\n  danger?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  large?: boolean,\n  target?: string,\n  type?: 'button' | 'submit' | 'reset',\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  rel?: string,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass BackwardButton extends React.Component<{|\n  children?: React.Node,\n  url?: string,\n  appearance?: 'primary' | 'secondary' | 'tertiary',\n  danger?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  large?: boolean,\n  type?: 'button' | 'submit' | 'reset',\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  rel?: string,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass LeftIconButton extends React.Component<{|\n  children?: React.Node,\n  IconComponent: React.ComponentType<*>,\n  primary?: boolean,\n  danger?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  type?: 'button' | 'submit' | 'reset',\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass ListButton extends React.Component<{|\n  selectableItemIndex?: number,\n  children?: React.Node,\n  selected?: boolean,\n  href?: string,\n  target?: string,\n  rel?: string,\n  statusIconText?: string,\n  statusIconType?: StatusType,\n  actionButton?: boolean,\n  LeftIconComponent?: React.ComponentType<*>,\n  FarRightIconComponent?: React.ComponentType<*>,\n  bgTransparent?: boolean,\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  selectableItemRef?: React.Ref<'a' | 'button'>,\n  onKeyDown?: (\n    e: SyntheticKeyboardEvent<HTMLAnchorElement | HTMLButtonElement>,\n    selectableItemIndex: number\n  ) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass PagerButton extends React.Component<{|\n  children?: React.Node,\n  current?: boolean,\n  disabled?: boolean,\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => void | Promise<void>,\n  small?: boolean,\n  label?: string,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass RightIconButton extends React.Component<{|\n  children?: React.Node,\n  IconComponent: React.ComponentType<*>,\n  primary?: boolean,\n  danger?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  type?: 'button' | 'submit' | 'reset',\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  ...MarginClassProps,\n  ...CommonProps,\n  ...ButtonAriaProps,\n|}> {}\n\nclass TabButton extends React.Component<{|\n  children?: React.Node,\n  current?: boolean,\n  small?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass TextButton extends React.Component<{|\n  children?: React.Node,\n  IconComponent?: React.ComponentType<*>,\n  iconPosition?: 'left' | 'right',\n  id?: string,\n  url?: string,\n  target?: string,\n  rel?: string,\n  noBorder?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  onClick?: (\n    e: SyntheticEvent<HTMLSpanElement | HTMLAnchorElement>\n  ) => void | Promise<void>,\n  ...LinkAriaProps,\n  ...ButtonAriaProps,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv1/forms\n */\nclass CheckBox extends React.Component<{|\n  children?: React.Node,\n  name?: string,\n  value?: string,\n  checked?: boolean,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  ...FormHandlers<HTMLInputElement>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass RadioButton extends React.Component<{|\n  children?: React.Node,\n  name?: string,\n  value?: string,\n  checked?: boolean,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  ...FormHandlers<HTMLInputElement>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype ReadOnlyField = React.StatelessFunctionalComponent<{|\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  name?: string,\n  value?: string,\n  valueText?: string,\n  small?: boolean,\n  large?: boolean,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  ...CommonProps,\n|}>;\n\nclass SearchField extends React.Component<{|\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  value?: string,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  maxLength?: number,\n  borderless?: boolean,\n  ...FormHandlers<HTMLInputElement>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nexport type SelectBoxOption = {|\n  name: string,\n  value?: string,\n  disabled?: boolean,\n|};\nexport type SelectBoxOptionGroup = {|\n  name: string,\n  options: SelectBoxOption[],\n  disabled?: boolean,\n|};\nclass SelectBox extends React.Component<{|\n  label?: string,\n  labelledby?: string,\n  id?: string,\n  options?: Array<SelectBoxOption | SelectBoxOptionGroup>,\n  value?: string,\n  defaultValue?: string,\n  name?: string,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  autoComplete?: AutocompleteAttribute,\n  ...FormHandlers<HTMLSelectElement>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass TextArea extends React.Component<{|\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  value?: string,\n  defaultValue?: string,\n  required?: boolean,\n  autofocus?: boolean,\n  autoResize?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  autoComplete?: AutocompleteAttribute,\n  maxLength?: number,\n  resize?: 'none' | 'horizontal' | 'vertical' | 'both',\n  width?: 'small' | 'medium' | 'large' | 'full',\n  height?: number,\n  ...FormHandlers<HTMLTextAreaElement>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype TextFieldType = 'text' | 'email' | 'password' | 'number' | 'tel';\n\ntype NumberInputProps = {|\n  min?: number,\n  max?: number,\n  step?: number,\n|};\n\ntype TextField = React.AbstractComponent<\n  {|\n    id?: string,\n    type?: TextFieldType,\n    label?: string,\n    labelledby?: string,\n    placeholder?: string,\n    name?: string,\n    value?: string,\n    required?: boolean,\n    autofocus?: boolean,\n    disabled?: boolean,\n    error?: boolean,\n    small?: boolean,\n    large?: boolean,\n    alignCenter?: boolean,\n    alignRight?: boolean,\n    maxLength?: number,\n    autoComplete?: AutocompleteAttribute,\n    suffix?: string,\n    borderless?: boolean,\n    width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n    loading?: boolean,\n    IconComponent?: React.ComponentType<*>,\n    iconLabel?: string,\n    onIconClick?: (e: SyntheticMouseEvent<>) => void | Promise<void>,\n    onIconFocus?: (e: SyntheticFocusEvent<>) => void | Promise<void>,\n    onIconBlur?: (e: SyntheticFocusEvent<>) => void | Promise<void>,\n    iconAriaProps?: ButtonAriaProps,\n    ...FormHandlers<HTMLInputElement>,\n    ...NumberInputProps,\n    ...NumberInputAriaProps,\n    ...MarginClassProps,\n    ...CommonProps,\n  |},\n  HTMLInputElement\n>;\n\ntype ToggleButton = React.StatelessFunctionalComponent<{|\n  children?: React.Node,\n  type: 'checkbox' | 'radio',\n  name?: string,\n  value?: string,\n  toggled?: boolean,\n  small?: boolean,\n  disabled?: boolean,\n  ...FormHandlers<HTMLInputElement>,\n  ...CommonProps,\n|}>;\n\ntype OptionButton = React.StatelessFunctionalComponent<{|\n  children?: React.Node,\n  id?: string,\n  checked: boolean,\n  size?: 'small' | 'medium' | 'large' | 'none',\n  width?: 'default' | 'full',\n  ...CommonProps,\n|}>;\n\nclass FormControlLabel extends React.Component<{|\n  children?: React.Node,\n  id?: string,\n  htmlFor?: string,\n  required?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass NumeralField extends React.Component<{|\n  id?: string,\n  type?: TextFieldType,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  value?: number,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  maxLength?: number,\n  autoComplete?: AutocompleteAttribute,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  ...FormHandlers<HTMLInputElement>,\n  ...NumberInputProps,\n  ...NumberInputAriaProps,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv1/grids\n */\nclass GridBlock extends React.Component<{|\n  children?: React.Node,\n  size: Size,\n  ...CommonProps,\n|}> {}\n\nclass GridWrapper extends React.Component<{|\n  children?: React.Node,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv1/headlines\n */\nclass Note extends React.Component<{|\n  children?: React.Node,\n  inline?: boolean,\n  textAlign?: 'left' | 'center' | 'right',\n  ellipsis?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass PageTitle extends React.Component<{|\n  children?: React.Node,\n  id?: string,\n  inline?: boolean,\n  textAlign?: 'left' | 'center' | 'right',\n  headlineLevel?: 1 | 2 | 3 | 4 | 5 | 6 | -1,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass Paragraph extends React.Component<{|\n  children?: React.Node,\n  inline?: boolean,\n  textAlign?: 'left' | 'center' | 'right',\n  ellipsis?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass SectionTitle extends React.Component<{|\n  children?: React.Node,\n  id?: string,\n  inline?: boolean,\n  textAlign?: 'left' | 'center' | 'right',\n  headlineLevel?: 1 | 2 | 3 | 4 | 5 | 6 | -1,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass SubSectionTitle extends React.Component<{|\n  children?: React.Node,\n  id?: ?string,\n  inline?: boolean,\n  textAlign?: 'left' | 'center' | 'right',\n  headlineLevel?: 1 | 2 | 3 | 4 | 5 | 6 | -1,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype Text = React.StatelessFunctionalComponent<{|\n  children?: React.Node,\n  size?: 0.75 | 0.875 | 1 | 1.5,\n  weight?: 'normal' | 'bold',\n  color?:\n    | 'black'\n    | 'burnt'\n    | 'link'\n    | 'alert'\n    | 'notice'\n    | 'white'\n    | 'GY7'\n    | 'S9'\n    | 'P7'\n    | 'P5'\n    | 'RE5'\n    | 'YE10',\n  ellipsis?: boolean,\n  ...CommonProps,\n|}>;\n\n/**\n * lv1/icons\n */\n\ntype Avatar = React.StatelessFunctionalComponent<{|\n  imageUrl?: string,\n  size?: 'small' | 'medium' | 'large' | 'xLarge',\n  ...CommonProps,\n|}>;\nclass MaterialIcon extends React.Component<{|\n  label?: string,\n  small?: boolean,\n  error?: boolean,\n  notice?: boolean,\n  success?: boolean,\n  pointerEvents?: 'auto' | 'none',\n  IconComponent: React.ComponentType<any>,\n  color?:\n    | 'inherit'\n    | 'white'\n    | 'P1'\n    | 'P2'\n    | 'P3'\n    | 'P4'\n    | 'P5'\n    | 'P6'\n    | 'P7'\n    | 'P8'\n    | 'P9'\n    | 'P10'\n    | 'S1'\n    | 'S2'\n    | 'S3'\n    | 'S4'\n    | 'S5'\n    | 'S6'\n    | 'S7'\n    | 'S8'\n    | 'S9'\n    | 'S10'\n    | 'RE2'\n    | 'RE4'\n    | 'RE5'\n    | 'RE7'\n    | 'RE10'\n    | 'OR2'\n    | 'OR4'\n    | 'OR5'\n    | 'OR7'\n    | 'OR10'\n    | 'YE2'\n    | 'YE4'\n    | 'YE5'\n    | 'YE7'\n    | 'YE10'\n    | 'YG2'\n    | 'YG4'\n    | 'YG5'\n    | 'YG7'\n    | 'YG10'\n    | 'GR2'\n    | 'GR4'\n    | 'GR5'\n    | 'GR7'\n    | 'GR10'\n    | 'BG2'\n    | 'BG4'\n    | 'BG5'\n    | 'BG7'\n    | 'BG10'\n    | 'PU2'\n    | 'PU4'\n    | 'PU5'\n    | 'PU7'\n    | 'PU10'\n    | 'GY1'\n    | 'GY2'\n    | 'GY4'\n    | 'GY5'\n    | 'GY7'\n    | 'GY10',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype RequiredIcon = React.StatelessFunctionalComponent<CommonProps>;\n\nclass StatusIcon extends React.Component<{|\n  children?: React.Node,\n  type?: StatusType,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv1/images\n */\n\nclass AlertSwallow extends React.Component<{|\n  size?: 'medium' | 'fit-width' | 'fit-height',\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass AppStoreBadge extends React.Component<{|\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass CloudSkeletonIllust extends React.Component<{|\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass CloudUploadIllust extends React.Component<{|\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass CsvUploadIllust extends React.Component<{|\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass FileUploadIllust extends React.Component<{|\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\ntype FinishTaskIllust = React.StatelessFunctionalComponent<{|\n  ...CommonProps,\n|}>;\n\nclass GooglePlayBadge extends React.Component<{|\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass ImageUploadIllust extends React.Component<{|\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass NoDataIllust extends React.Component<{|\n  size?: 'medium' | 'fit-width' | 'fit-height',\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass NoSearchResultsIllust extends React.Component<{|\n  size?: 'medium' | 'fit-width' | 'fit-height',\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass NotFoundSwallow extends React.Component<{|\n  size?: 'medium' | 'fit-width' | 'fit-height',\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\nclass DiscoveryIllust extends React.Component<{|\n  animationDelay?: number,\n  ...CommonProps,\n  ...MarginClassProps,\n|}> {}\n\n/**\n * lv1/interactiveParts\n */\nclass CalendarDate extends React.Component<{|\n  date: string,\n  dateLabel?: string,\n  today?: boolean,\n  disabled?: boolean,\n  secondaryHoliday?: boolean,\n  primaryHoliday?: boolean,\n  nationalHoliday?: boolean,\n  content?: ?TimeRecord,\n  onClickDate?: (date: string) => void | Promise<void>,\n  selectableDateRef?: (el: HTMLDivElement) => void | Promise<void>,\n  onKeyDown?: (\n    e: SyntheticKeyboardEvent<HTMLDivElement>,\n    date: string,\n    onClickDate?: (date: string) => void | Promise<void>\n  ) => void | Promise<void>,\n  ...CommonProps,\n|}> {}\n\nclass SegmentControlButton extends React.Component<{|\n  children?: React.Node,\n  current?: boolean,\n  small?: boolean,\n  large?: boolean,\n  href?: string,\n  target?: string,\n  rel?: string,\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n  IconComponent?: React.ComponentType<*>,\n  ...CommonProps,\n|}> {}\n\ntype StepNumber = React.StatelessFunctionalComponent<{|\n  number?: string,\n  current?: boolean,\n  done?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  ...CommonProps,\n|}>;\nclass StepBlock extends React.Component<{|\n  number?: string,\n  children?: React.Node,\n  current?: boolean,\n  done?: boolean,\n  disabled?: boolean,\n  small?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass StepBorder extends React.Component<{|\n  done?: boolean,\n  separator?: boolean,\n  ...CommonProps,\n|}> {}\n\nclass Tab extends React.Component<{|\n  children?: React.Node,\n  current?: boolean,\n  small?: boolean,\n  selected?: boolean,\n  onClick?: (SyntheticEvent<HTMLButtonElement>) => any,\n  onBlur?: (SyntheticEvent<HTMLButtonElement>) => any,\n  notification?: string,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv1/layouts\n */\ntype WithDescriptionContent = React.StatelessFunctionalComponent<{|\n  position?: 'horizontal' | 'vertical' | 'vertical-reverse',\n  renderContent: (descriptionContentId: string) => React.Node,\n  renderDescriptionContent: () => React.Node,\n  ...CommonProps,\n|}>;\ntype WithSideContent = React.StatelessFunctionalComponent<{\n  children?: React.Node,\n  sideContent: React.Node,\n  verticalAlign?: 'top' | 'bottom' | 'middle',\n  ...CommonProps,\n}>;\n\ntype Gap = 0 | 0.25 | 0.5 | 1 | 1.5 | 2 | 3;\ntype JustifyContent = 'start' | 'end' | 'center' | 'space-between';\ntype AlignItems = 'stretch' | 'center' | 'start' | 'end';\ntype FlexWrap = 'nowrap' | 'wrap';\n\ntype Stack = React.StatelessFunctionalComponent<{\n  children?: React.Node,\n  direction?:\n    | 'vertical'\n    | 'horizontal'\n    | 'vertical-reverse'\n    | 'horizontal-reverse',\n  gap?: Gap,\n  justifyContent?: JustifyContent,\n  alignItems?: AlignItems,\n  wrap?: FlexWrap,\n  inline?: boolean,\n  ...CommonProps,\n}>;\n\ntype HStack = React.StatelessFunctionalComponent<{\n  children?: React.Node,\n  gap?: Gap,\n  justifyContent?: JustifyContent,\n  alignItems?: AlignItems,\n  wrap?: FlexWrap,\n  inline?: boolean,\n  ...CommonProps,\n}>;\n\ntype VStack = React.StatelessFunctionalComponent<{\n  children?: React.Node,\n  gap?: Gap,\n  justifyContent?: JustifyContent,\n  alignItems?: AlignItems,\n  wrap?: FlexWrap,\n  inline?: boolean,\n}>;\n\n/**\n * lv1/lists\n */\nclass BorderTableListCell extends React.Component<{|\n  children?: React.Node,\n  small?: boolean,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  onClick?: () => any,\n  status?: 'alert' | 'notice' | 'success',\n  rowHeader?: boolean,\n  fixedRowHeader?: boolean,\n  fixedRowHeaderLeft?: number,\n  rowSpan?: number,\n  ...CommonProps,\n|}> {}\n\ntype CheckBoxCell = React.StatelessFunctionalComponent<{|\n  header: boolean,\n  name?: string,\n  value?: string,\n  checked?: boolean,\n  disabled?: boolean,\n  'aria-label'?: string,\n  onChange?: (e: SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n  ...CommonProps,\n|}>;\n\ntype DescriptionListCell = React.StatelessFunctionalComponent<{\n  children?: React.Node,\n  ...CommonProps,\n}>;\nclass DescriptionListHeadCell extends React.Component<{|\n  children?: React.Node,\n  minWidth?: number,\n  spacing?: 'normal' | 'compact',\n  ...CommonProps,\n|}> {}\n\nclass TableListCell extends React.Component<{|\n  children?: React.Node,\n  url?: string,\n  small?: boolean,\n  alignBottom?: boolean,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  alignTop?: boolean,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  colSpan?: number,\n  indentLevel?: number,\n  ...CommonProps,\n|}> {}\n\nclass TableListHead extends React.Component<{|\n  children?: React.Node,\n  fixedHeader?: boolean,\n  fixedHeaderOffset?: number | string,\n  ...CommonProps,\n|}> {}\n\nclass TableListHeadCell extends React.Component<{|\n  children?: React.Node,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  ordering?: 'asc' | 'desc' | 'init',\n  onClick?: () => any,\n  width?: number,\n  minWidth?: number,\n  maxWidth?: number,\n  noWrap?: boolean,\n  rowHeader?: boolean,\n  fixedRowHeader?: boolean,\n  fixedRowHeaderLeft?: number,\n  ...CommonProps,\n|}> {}\n\ntype TableListRow = React.AbstractComponent<\n  {|\n    children?: React.Node,\n    url?: string,\n    onClick?: () => any,\n    onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n    ...CommonProps,\n    ...TableRowAriaProps,\n  |},\n  HTMLTableRowElement\n>;\n\ntype TreeFoldingButtonCell = React.StatelessFunctionalComponent<{|\n  folded: boolean,\n  onToggleFolded: (folded: boolean) => void | Promise<void>,\n  ...CommonProps,\n|}>;\n\n/**\n * lv1/messages\n */\nclass Message extends React.Component<{|\n  children?: React.Node,\n  error?: boolean,\n  notice?: boolean,\n  success?: boolean,\n  info?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype ProgressBar = React.StatelessFunctionalComponent<{|\n  value?: number,\n  maxValue?: number,\n  indeterminate?: boolean,\n  width?: 'default' | 'full' | 'large' | 'small' | 'xSmall',\n  ...CommonProps,\n|}>;\n\ntype Loading = React.StatelessFunctionalComponent<\n  | {|\n      coverAll: true,\n      children?: React.Node,\n      isLoading: boolean,\n      message?: React.Node,\n      inline?: boolean,\n      ...CommonProps,\n    |}\n  | {|\n      coverAll?: false,\n      children: React.Node,\n      isLoading: boolean,\n      message?: React.Node,\n      inline?: boolean,\n      ...CommonProps,\n    |}\n>;\n\ntype InlineSpinner = React.StatelessFunctionalComponent<{|\n  isLoading: boolean,\n  large?: boolean,\n  ...CommonProps,\n|}>;\n\ndeclare module.exports: {\n  VisuallyHidden: typeof VisuallyHidden,\n  FocusHighlight: FocusHighlight,\n  Balloon: Balloon,\n  ColumnBase: typeof ColumnBase,\n  Container: typeof Container,\n  ContentsBase: typeof ContentsBase,\n  DialogBase: typeof DialogBase,\n  FloatingBase: typeof FloatingBase,\n  MarginBase: typeof MarginBase,\n  PopupBase: typeof PopupBase,\n  CardBase: typeof CardBase,\n  ScrimBase: typeof ScrimBase,\n  NegativeMarginBase: typeof NegativeMarginBase,\n  ScrollableBase: ScrollableBase,\n  ZebraBase: typeof ZebraBase,\n  Button: Button,\n  GlobalNaviButton: typeof GlobalNaviButton,\n  IconOnlyButton: typeof IconOnlyButton,\n  IconOnlyJumpButton: IconOnlyJumpButton,\n  IconOnlyBackwardButton: IconOnlyBackwardButton,\n  InlineLink: InlineLink,\n  JumpButton: typeof JumpButton,\n  BackwardButton: typeof BackwardButton,\n  LeftIconButton: typeof LeftIconButton,\n  ListButton: typeof ListButton,\n  PagerButton: typeof PagerButton,\n  RightIconButton: typeof RightIconButton,\n  TabButton: typeof TabButton,\n  TextButton: typeof TextButton,\n  CheckBox: typeof CheckBox,\n  NumeralField: typeof NumeralField,\n  RadioButton: typeof RadioButton,\n  ReadOnlyField: ReadOnlyField,\n  SearchField: typeof SearchField,\n  SelectBox: typeof SelectBox,\n  TextArea: typeof TextArea,\n  TextField: TextField,\n  ToggleButton: ToggleButton,\n  OptionButton: OptionButton,\n  FormControlLabel: typeof FormControlLabel,\n  GridBlock: typeof GridBlock,\n  GridWrapper: typeof GridWrapper,\n  Note: typeof Note,\n  PageTitle: typeof PageTitle,\n  Paragraph: typeof Paragraph,\n  SectionTitle: typeof SectionTitle,\n  SubSectionTitle: typeof SubSectionTitle,\n  Text: Text,\n  Avatar: Avatar,\n  MaterialIcon: typeof MaterialIcon,\n  RequiredIcon: RequiredIcon,\n  StatusIcon: typeof StatusIcon,\n  AlertSwallow: typeof AlertSwallow,\n  AppStoreBadge: typeof AppStoreBadge,\n  CloudSkeletonIllust: typeof CloudSkeletonIllust,\n  CloudUploadIllust: typeof CloudUploadIllust,\n  CsvUploadIllust: typeof CsvUploadIllust,\n  FileUploadIllust: typeof FileUploadIllust,\n  FinishTaskIllust: FinishTaskIllust,\n  GooglePlayBadge: typeof GooglePlayBadge,\n  ImageUploadIllust: typeof ImageUploadIllust,\n  NoDataIllust: typeof NoDataIllust,\n  NoSearchResultsIllust: typeof NoSearchResultsIllust,\n  NotFoundSwallow: typeof NotFoundSwallow,\n  DiscoveryIllust: typeof DiscoveryIllust,\n  CalendarDate: typeof CalendarDate,\n  SegmentControlButton: typeof SegmentControlButton,\n  StepNumber: StepNumber,\n  StepBlock: typeof StepBlock,\n  StepBorder: typeof StepBorder,\n  Tab: typeof Tab,\n  WithDescriptionContent: WithDescriptionContent,\n  WithSideContent: WithSideContent,\n  Stack: Stack,\n  HStack: HStack,\n  VStack: VStack,\n  BorderTableListCell: typeof BorderTableListCell,\n  CheckBoxCell: CheckBoxCell,\n  DescriptionListCell: DescriptionListCell,\n  DescriptionListHeadCell: typeof DescriptionListHeadCell,\n  TableListCell: typeof TableListCell,\n  TableListHead: typeof TableListHead,\n  TableListHeadCell: typeof TableListHeadCell,\n  TableListRow: TableListRow,\n  TreeFoldingButtonCell: TreeFoldingButtonCell,\n  Message: typeof Message,\n  ProgressBar: ProgressBar,\n  Loading: Loading,\n  InlineSpinner: InlineSpinner,\n};\n"
  },
  {
    "path": "lv2.js.flow",
    "content": "// @flow\n\nimport * as React from 'react';\n// eslint-disable-next-line import/no-unresolved\nimport * as Utilities from './utilities';\n\ntype AutocompleteAttribute =\n  | 'off'\n  | 'on'\n  | 'name'\n  | 'honorific-prefix'\n  | 'given-name'\n  | 'additional-name'\n  | 'family-name'\n  | 'honorific-suffix'\n  | 'nickname'\n  | 'email'\n  | 'username'\n  | 'new-password'\n  | 'current-password'\n  | 'one-time-code'\n  | 'organization-title'\n  | 'organization'\n  | 'street-address'\n  | 'address-line1'\n  | 'address-line2'\n  | 'address-line3'\n  | 'address-level4'\n  | 'address-level3'\n  | 'address-level2'\n  | 'address-level1'\n  | 'country'\n  | 'country-name'\n  | 'postal-code'\n  | 'cc-name'\n  | 'cc-given-name'\n  | 'cc-additional-name'\n  | 'cc-family-name'\n  | 'cc-number'\n  | 'cc-exp'\n  | 'cc-exp-month'\n  | 'cc-exp-year'\n  | 'cc-csc'\n  | 'cc-type'\n  | 'transaction-currency'\n  | 'transaction-amount'\n  | 'language'\n  | 'bday'\n  | 'bday-day'\n  | 'bday-month'\n  | 'bday-year'\n  | 'sex'\n  | 'tel'\n  | 'tel-country-code'\n  | 'tel-national'\n  | 'tel-area-code'\n  | 'tel-local'\n  | 'tel-local-prefix'\n  | 'tel-local-suffix'\n  | 'tel-extension'\n  | 'impp'\n  | 'url'\n  | 'photo';\n\ntype MarginClassProps = {|\n  marginTop?: boolean,\n  marginLeft?: boolean,\n  marginRight?: boolean,\n  marginBottom?: boolean,\n  marginSize?: 'xSmall' | 'small' | 'large' | 'xLarge' | 'xxLarge',\n|};\n\ntype CommonProps = typeof Utilities.CommonProps;\n\n/**\n * lv2/accordionPanel\n */\nclass AccordionPanel extends React.Component<{|\n  title: React.Node,\n  children?: React.Node,\n  open?: boolean,\n  border?: 'both' | 'bottom' | 'top',\n  small?: boolean,\n  onClick: () => any,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/basicTable\n */\ntype Order = 'asc' | 'desc' | 'init';\n\nexport type TableHeader = {|\n  value: React.Node,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  ordering?: Order,\n  onClick?: (rowIndex: number) => any,\n  width?: number,\n  minWidth?: number,\n  maxWidth?: number,\n  noWrap?: boolean,\n  'data-test'?: string,\n|};\n\nexport type TableRow = {|\n  onClick?: (rowIndex: number) => any,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  url?: string,\n  cells: Array<TableCell>,\n  checked?: boolean,\n  onChangeCheckBox?: (\n    SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  checkBoxName?: string,\n  checkBoxValue?: string,\n  'data-test'?: string,\n  ref?: { current: HTMLTableRowElement | null },\n|};\n\nexport type TableCell = {|\n  value: React.Node,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  alignTop?: boolean,\n  small?: boolean,\n  colSpan?: number,\n  'data-masking'?: boolean,\n  'data-test'?: string,\n|};\n\n/**\n * lv2/breadcrumbs\n */\nexport type BreadcrumbsLink = {|\n  title: string,\n  url?: string,\n  onClickNavigator?: () => void | Promise<void>,\n  loading?: boolean,\n|};\nclass Breadcrumbs extends React.Component<{|\n  links: Array<BreadcrumbsLink>,\n  label?: string,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/bulletedList\n */\nexport type BulletListContent = {|\n  value: React.Node,\n  url?: string,\n  target?: string,\n  rel?: string,\n  'data-guide'?: string,\n  'data-test'?: string,\n  'data-tracking'?: string,\n  'data-masking'?: boolean,\n|};\n\ntype BulletedList = React.StatelessFunctionalComponent<{|\n  listContents?: Array<BulletListContent>,\n  listStyleType?: 'decimal' | 'disc',\n  small?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/calendar\n */\ntype TimeRecord = {\n  type: 'timeRecord',\n  date: string,\n  status?: 'alert' | 'notice' | 'success',\n  dateLabel?: string,\n  openingTime: string,\n  endingTime: string,\n};\n\nclass Calendar extends React.Component<{|\n  year: string,\n  month: string,\n  contents?: Array<TimeRecord>,\n  startFromMonday?: boolean,\n  nationalHolidays?: Array<string>,\n  onClickDate?: (date: string) => void | Promise<void>,\n  ...CommonProps,\n|}> {}\n\nclass DatePicker extends React.Component<{|\n  date?: string | Date,\n  onDateClick: (string) => any,\n  minDate?: string,\n  maxDate?: string,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/comboBox\n */\n\nexport type ComboBoxOption = {|\n  label: string,\n  id: string | number,\n  keywords?: string[],\n  disabled?: boolean,\n|};\n\nexport type SingleComboBoxOption = {|\n  ...ComboBoxOption,\n  subLabel?: string,\n|};\n\ntype ComboboxFixedItem = {|\n  onSelect: (fieldValue: string) => any,\n  isVisible?: (\n    fieldValue: string,\n    filteredOptions: ComboBoxOption[]\n  ) => boolean,\n  label?: (fieldValue: string) => string,\n|};\n\nclass SingleComboBox extends React.Component<{|\n  value?: ComboBoxOption | SingleComboBoxOption,\n  options: ComboBoxOption[] | SingleComboBoxOption[],\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  required?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large',\n  emptyMessage?: React.Node,\n  isLoading?: boolean,\n  borderless?: boolean,\n  onChange?: (val?: ComboBoxOption) => void | Promise<void>,\n  onInput?: (e: SyntheticInputEvent<*>) => void | Promise<void>,\n  onFocus?: (e: SyntheticFocusEvent<*>) => void | Promise<void>,\n  onBlur?: (e: SyntheticFocusEvent<*>) => void | Promise<void>,\n  onKeyDown?: (e: SyntheticKeyboardEvent<*>) => void | Promise<void>,\n  trailingItem?: {\n    onSelect: (fieldValue: string) => any,\n    isVisible?: (fieldValue: string) => boolean,\n    render: (fieldValue: string) => React.Node,\n    selectIfOnly?: boolean,\n    isMoreOption?: boolean,\n  },\n  fixedItems?: [ComboboxFixedItem] | [ComboboxFixedItem, ComboboxFixedItem],\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype ComboBoxFetchParams = { name: string, page: number };\n\nexport type ApiMetaData = {\n  limit: number,\n  currentPage: number,\n  totalPages: number,\n  totalCount: number,\n};\n\ntype useApiComboBox = <T>(params: {\n  createOptions: (items: T[]) => ComboBoxOption[],\n  fetchItems: (params: ComboBoxFetchParams) => Promise<any>,\n  fetchOnInit?: boolean,\n  initialName?: string,\n  responseAdapter?: (response: any) => { items: T[], meta: ApiMetaData },\n}) => {\n  createOptions: (items: T[]) => ComboBoxOption[],\n  fetchItems: (params: ComboBoxFetchParams) => Promise<void>,\n  isLoading: boolean,\n  items: T[],\n  meta: ApiMetaData,\n  onFocus: (\n    e: SyntheticFocusEvent<*>,\n    fetchParams: ComboBoxFetchParams,\n    value?: ComboBoxOption\n  ) => void,\n  options: ComboBoxOption[],\n  setItems: (newItems: T[]) => void,\n  setMeta: (newMeta: ApiMetaData) => void,\n};\n\nclass ApiComboBox extends React.Component<{|\n  fetchItems: (params: ComboBoxFetchParams) => Promise<any>,\n  meta: ApiMetaData,\n  createNewItem?: (fieldValue: string) => void,\n  value?: ComboBoxOption,\n  options: ComboBoxOption[],\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  required?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  borderless?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large',\n  emptyMessage?: React.Node,\n  isLoading?: boolean,\n  onChange?: (option?: ComboBoxOption) => void | Promise<void>,\n  onInput?: (e: SyntheticInputEvent<*>) => void | Promise<void>,\n  onFocus?: (\n    e: SyntheticFocusEvent<*>,\n    fetchParams: ComboBoxFetchParams,\n    value?: ComboBoxOption\n  ) => void | Promise<void>,\n  onBlur?: (\n    e: SyntheticFocusEvent<*>,\n    fetchParams: ComboBoxFetchParams,\n    value?: ComboBoxOption\n  ) => void | Promise<void>,\n  onKeyDown?: (e: SyntheticKeyboardEvent<*>) => void | Promise<void>,\n  createOptions?: (items: any[]) => ComboBoxOption[],\n  items?: any[],\n  setItems?: (newItems: any[]) => void,\n  setMeta?: (newMeta: ApiMetaData) => void,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nexport type MultiComboBoxOption = {|\n  ...ComboBoxOption,\n  color?: 'RE' | 'OR' | 'YE' | 'YG' | 'GR' | 'BG' | 'PU' | 'GY',\n  type?: string,\n|};\n\ntype MultiComboBox = React.AbstractComponent<\n  {|\n    id?: string,\n    label?: string,\n    labelledby?: string,\n    placeholder?: string,\n    name?: string,\n    required?: boolean,\n    disabled?: boolean,\n    error?: boolean,\n    width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n    borderless?: boolean,\n    onChange?: (val: MultiComboBoxOption[]) => void | Promise<void>,\n    onInput?: (\n      e: SyntheticInputEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onFocus?: (\n      e: SyntheticFocusEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onBlur?: (e: SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n    onKeyDown?: (\n      e: SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    values?: MultiComboBoxOption[],\n    options: MultiComboBoxOption[],\n    maxSelectionCount?: number,\n    listWidth?: 'xSmall' | 'small' | 'medium' | 'large',\n    emptyMessage?: React.Node,\n    isLoading?: boolean,\n    ...CommonProps,\n  |},\n  HTMLInputElement\n>;\n\ntype useApiMultiComboBox = <T>(params: {\n  createOptions: (items: T[]) => MultiComboBoxOption[],\n  fetchItems: (params: ComboBoxFetchParams) => Promise<any>,\n  fetchOnInit?: boolean,\n  responseAdapter?: (response: any) => { items: T[], meta: ApiMetaData },\n}) => {\n  createOptions: (items: T[]) => MultiComboBoxOption[],\n  fetchItems: (params: ComboBoxFetchParams) => Promise<void>,\n  isLoading: boolean,\n  items: T[],\n  meta: ApiMetaData,\n  onFocus: (\n    e: SyntheticFocusEvent<*>,\n    fetchParams: ComboBoxFetchParams,\n    values?: MultiComboBoxOption[]\n  ) => void,\n  options: MultiComboBoxOption[],\n  setItems: (newItems: T[]) => void,\n  setMeta: (newMeta: ApiMetaData) => void,\n};\n\nclass ApiMultiComboBox extends React.Component<{|\n  fetchItems: (params: ComboBoxFetchParams) => Promise<any>,\n  meta: ApiMetaData,\n  createNewItem?: (fieldValue: string) => void,\n  values?: MultiComboBoxOption[],\n  options: MultiComboBoxOption[],\n  maxSelectionCount?: number,\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  required?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  borderless?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large',\n  emptyMessage?: React.Node,\n  isLoading?: boolean,\n  onChange?: (options?: MultiComboBoxOption[]) => void | Promise<void>,\n  onInput?: (e: SyntheticInputEvent<*>) => void | Promise<void>,\n  onFocus?: (\n    e: SyntheticFocusEvent<*>,\n    fetchParams: ComboBoxFetchParams,\n    values?: MultiComboBoxOption[]\n  ) => void | Promise<void>,\n  onBlur?: (\n    e: SyntheticFocusEvent<*>,\n    fetchParams: ComboBoxFetchParams,\n    values?: MultiComboBoxOption[]\n  ) => void | Promise<void>,\n  onKeyDown?: (e: SyntheticKeyboardEvent<*>) => void | Promise<void>,\n  createOptions?: (items: any[]) => MultiComboBoxOption[],\n  items?: any[],\n  setItems?: (newItems: any[]) => void,\n  setMeta?: (newMeta: ApiMetaData) => void,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/cardNavigation\n */\ntype CardNavigationContent = {|\n  title: React.Node,\n  text?: React.Node,\n  url?: string,\n  IconComponent?: React.ElementType,\n|};\nclass CardNavigation extends React.Component<{|\n  navigationContents: Array<CardNavigationContent>,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/descriptionList\n */\ntype DescriptionListContent = {|\n  title: React.Node,\n  value?: React.Node,\n|};\nclass DescriptionList extends React.Component<{|\n  listContents: Array<DescriptionListContent>,\n  headCellMinWidth?: number,\n  spacing?: 'normal' | 'compact',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/dialogs\n */\nclass MessageDialog extends React.Component<{|\n  isOpen: boolean,\n  elementFocusAfterClose?: HTMLElement,\n  title: React.Node,\n  children: React.Node,\n  onRequestClose: (SyntheticEvent<*>) => any,\n  closeButtonLabel: string,\n  closeButtonAppearance?: 'primary' | 'secondary' | 'tertiary',\n  responsive?: boolean,\n  id?: string,\n  contentAlign?: 'left',\n  contentRef?: (element: HTMLDivElement) => void,\n  ...CommonProps,\n|}> {}\n\nclass MessageDialogConfirm extends React.Component<{|\n  isOpen: boolean,\n  elementFocusAfterClose?: HTMLElement,\n  title: React.Node,\n  children: React.Node,\n  onConfirm: (SyntheticEvent<*>) => any,\n  onRequestClose: (SyntheticEvent<*>) => any,\n  confirmButtonLabel: string,\n  confirmButtonHref?: string,\n  confirmButtonTarget?: string,\n  confirmButtonIconPosition?: 'left' | 'right',\n  confirmButtonIconComponent?: React.ComponentType<*>,\n  closeButtonLabel: string,\n  disabled?: boolean,\n  suspend?: boolean,\n  danger?: boolean,\n  responsive?: boolean,\n  id?: string,\n  contentAlign?: 'left',\n  contentRef?: (element: HTMLDivElement) => void,\n  mobileButtonLayout?: 'row' | 'column',\n  ...CommonProps,\n|}> {}\n\nclass TaskDialog extends React.Component<{|\n  isOpen: boolean,\n  elementFocusAfterClose?: HTMLElement,\n  title: React.Node,\n  children: React.Node,\n  onPrimaryAction?: (SyntheticEvent<*>) => any,\n  onRequestClose: (SyntheticEvent<*>) => any,\n  primaryButtonLabel?: string,\n  closeButtonLabel: string,\n  danger?: boolean,\n  disabled?: boolean,\n  suspend?: boolean,\n  shouldCloseOnOverlayClickOrEsc?: boolean,\n  responsive?: boolean,\n  mobileButtonLayout?: 'row' | 'column',\n  headerSideContent?: React.Node,\n  footerOptionalContent?: React.Node,\n  footerSideContent?: React.Node,\n  id?: string,\n  contentLabel?: string,\n  contentRef?: (element: HTMLDivElement) => void,\n  ...CommonProps,\n|}> {}\n\ntype GuideDialog = React.StatelessFunctionalComponent<{|\n  isOpen: boolean,\n  elementFocusAfterClose?: HTMLElement,\n  title: string,\n  type?: 'start' | 'step',\n  children: React.Node,\n  stepCount?: number,\n  totalStepCount?: number,\n  onRequestBackward?: (SyntheticMouseEvent<>) => void | Promise<void>,\n  backwardButtonLabel?: string,\n  onRequestForward?: (SyntheticMouseEvent<>) => void | Promise<void>,\n  forwardButtonLabel?: string,\n  onRequestClose: (SyntheticMouseEvent<>) => void | Promise<void>,\n  closeButtonLabel: string,\n  image?: {|\n    src: string,\n    width?: string,\n    height?: string,\n    alt: string,\n  |},\n  id?: string,\n  contentRef?: (element: HTMLDivElement) => void,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/modals\n */\nclass FullScreenModal extends React.Component<{|\n  id?: string,\n  isOpen: boolean,\n  contentLabel?: string,\n  title: React.Node,\n  children: React.Node,\n  onRequestClose: (SyntheticEvent<*>) => any,\n  disabled?: boolean,\n  shouldCloseOnEsc?: boolean,\n  contentRef?: (element: HTMLDivElement) => void,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/dropdown\n */\nexport type DropdownContent =\n  | {\n      type: 'rule',\n    }\n  | {\n      type: 'textOnly',\n      text: string | React.Node,\n      unread?: boolean,\n      'data-guide'?: string,\n      'data-test'?: string,\n      'data-tracking'?: string,\n      'data-masking'?: boolean,\n    }\n  | {\n      type: 'checkbox',\n      text: React.Node,\n      value?: string,\n      name?: string,\n      onChange?: (\n        e: SyntheticInputEvent<HTMLInputElement>\n      ) => void | Promise<void>,\n      checked?: boolean,\n      disabled?: boolean,\n      'data-guide'?: string,\n      'data-test'?: string,\n      'data-tracking'?: string,\n      'data-masking'?: boolean,\n    }\n  | {\n      type: 'selectable',\n      text: string | React.Node,\n      ariaLabel?: string,\n      onClick?: (e: SyntheticEvent<>) => void | Promise<void>,\n      unread?: boolean,\n      disabled?: boolean,\n      danger?: boolean,\n      url?: string,\n      target?: string,\n      rel?: string,\n      onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n      'data-guide'?: string,\n      'data-test'?: string,\n      'data-tracking'?: string,\n      'data-masking'?: boolean,\n    };\n\nclass Dropdown extends React.Component<{|\n  contents: Array<DropdownContent>,\n  firstSelectableItemRef?: (\n    el: ?React.ElementRef<'button' | 'a' | 'input'>\n  ) => void | Promise<void>,\n  onRequestClose?: () => void | Promise<void>,\n  align?: 'left' | 'right',\n  positionRelative?: boolean,\n  ...CommonProps,\n|}> {}\n\ntype DropdownMenuContent = React.StatelessFunctionalComponent<{|\n  contents: Array<DropdownContent>,\n  firstSelectableItemRef?: (\n    el: ?React.ElementRef<'button' | 'a' | 'input'>\n  ) => void | Promise<void>,\n  onRequestClose?: () => void | Promise<void>,\n  onFocusOut?: (direction: 'upward' | 'downward') => void | Promise<void>,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/dropdownButton\n */\n\nclass DropdownButton extends React.Component<{|\n  buttonLabel: string,\n  disabled?: boolean,\n  small?: boolean,\n  large?: boolean,\n  dropdownContents: Array<DropdownContent>,\n  appearance?: 'primary' | 'secondary' | 'tertiary',\n  iconOnly?: boolean,\n  iconPosition?: 'left' | 'right',\n  contentsFixed?: boolean,\n  IconOnlyComponent?: React.ComponentType<*>,\n  onOpen?: () => void,\n  onClose?: () => void,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/emptyStates\n */\n\nclass NoDataCreated extends React.Component<{|\n  actionWord?: string,\n  objectName?: string,\n  image?: {\n    src: string,\n    width: string,\n    height: string,\n  },\n  mainText?: React.Node,\n  subText?: React.Node,\n  children?: React.Node,\n  size?: 'medium' | 'fit-width' | 'fit-height',\n  ...CommonProps,\n|}> {}\n\nclass NoSearchResults extends React.Component<{|\n  objectName?: string,\n  image?: {\n    src: string,\n    width: string,\n    height: string,\n  },\n  mainText?: React.Node,\n  subText?: React.Node,\n  size?: 'medium' | 'fit-width' | 'fit-height',\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/fileUploader\n */\nexport type FileType =\n  | 'text/csv'\n  | 'text/tab-separated-values'\n  | 'image/jpeg'\n  | 'image/png'\n  | 'image/gif'\n  | 'application/pdf'\n  | 'application/vnd.ms-excel'\n  | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n  | 'application/msword'\n  | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n  | 'application/vnd.ms-powerpoint'\n  | 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n  | 'application/zip';\n\nexport type FileUploaderStatus =\n  | 'default'\n  | 'selected'\n  | 'uploading'\n  | 'processing';\n/** @deprecated Use `FileUploadedStatus` type instead. */\nexport type FileStatus = FileUploaderStatus;\n\nclass FileUploader extends React.Component<{|\n  onFileSelect: (Array<File>) => any,\n  acceptFileTypes?: Array<FileType>,\n  isUploading?: boolean,\n  fileLabel: string,\n  fileName?: string,\n  multiple?: boolean,\n  status?: FileUploaderStatus,\n  processingMessage?: string,\n  width?: 'medium' | 'full',\n  type?: 'normal' | 'compact',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass FileDropArea extends React.Component<{|\n  children: React.ChildrenArray<null | boolean | React.Element<any>>,\n  onFileSelect: (Array<File>) => any,\n  acceptFileTypes?: Array<FileType>,\n  isUploading?: boolean,\n  fileLabel: string,\n  fileName?: string,\n  multiple?: boolean,\n  status?: FileUploaderStatus,\n  processingMessage?: string,\n  disabled?: boolean,\n  disabledMessage?: string,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/filterableDropdownButton\n */\n\nexport type FilterableDropdownContent =\n  | {\n      type: 'checkbox',\n      text: React.Node,\n      value?: string,\n      name?: string,\n      onChange?: (\n        e: SyntheticInputEvent<HTMLInputElement>\n      ) => void | Promise<void>,\n      checked?: boolean,\n      disabled?: boolean,\n      keywords?: string[],\n    }\n  | {\n      type: 'selectable',\n      text: string | React.Node,\n      ariaLabel?: string,\n      onClick?: (e: SyntheticEvent<>) => void | Promise<void>,\n      unread?: boolean,\n      disabled?: boolean,\n      url?: string,\n      target?: string,\n      rel?: string,\n      onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n      keywords?: string[],\n      disableOnRequestClose?: boolean,\n    };\ntype FilterableDropdownButton = React.StatelessFunctionalComponent<{|\n  buttonLabel: string,\n  disabled?: boolean,\n  small?: boolean,\n  large?: boolean,\n  dropdownContents: FilterableDropdownContent[],\n  appearance?: 'primary' | 'secondary' | 'tertiary',\n  iconOnly?: boolean,\n  iconPosition?: 'right' | 'left',\n  IconComponent?: React.ComponentType<*>,\n  onFilterChange?: (\n    e: SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onOpen?: () => void,\n  isLoading?: boolean,\n  noResultsMessage?: React.Node,\n  noDataMessage?: React.Node,\n  renderDropdownBottomContent?: (\n    requestClose: () => void | Promise<void>\n  ) => React.Node,\n  fixedItems?: {\n    disableOnRequestClose?: boolean,\n    isVisible: (filterValue: string) => boolean,\n    label: React.Node | ((filterValue: string) => React.Node),\n    onSelect: (filterValue: string) => any,\n  }[],\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/filterTag\n */\n\nclass FilterTag extends React.Component<{\n  renderPopup?: (\n    requestClose: () => void | Promise<void>,\n    firstSelectableItemRef: { current: HTMLElement | null }\n  ) => React.Node,\n  label: string,\n  value?: string,\n  ...MarginClassProps,\n}> {}\n\n/**\n * lv2/footer\n */\nclass Footer extends React.Component<{|\n  links?: Array<{|\n    title: string,\n    url: string,\n  |}>,\n  AppStoreUrl?: string,\n  GooglePlayUrl?: string,\n  disableAppStoreBadge?: boolean,\n  disableGooglePlayBadge?: boolean,\n  copyright?: string,\n  sectionNode?: React.Node,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/formBlock\n */\n\nclass DateField extends React.Component<{|\n  selectedDate: string | null,\n  startDate: string,\n  endDate: string,\n  small?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  required?: boolean,\n  autoComplete?: 'off' | 'bday',\n  nullable?: boolean,\n  wareki?: boolean,\n  onChange?: (date: string | null) => void | Promise<void>,\n  onInput?: (date: string | null) => void | Promise<void>,\n  onFocus?: (date: string | null) => void | Promise<void>,\n  onBlur?: (date: string | null) => void | Promise<void>,\n  onKeyDown?: (date: string | null) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype FormActions = React.StatelessFunctionalComponent<{|\n  fixed?: boolean,\n  position?: 'static' | 'fixed' | 'sticky',\n  responsive?: boolean,\n  children?: React.Node,\n  align?: 'left' | 'center',\n  width?: 'normal' | 'wide' | 'narrow',\n  ...CommonProps,\n|}>;\n\nclass FormControl extends React.Component<{|\n  children: React.ChildrenArray<null | boolean | React.Element<any>>,\n  label?: React.Node,\n  required?: boolean,\n  fieldId?: string,\n  id?: string,\n  help?: React.Node,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass FormControlGroup extends React.Component<{|\n  children: React.ChildrenArray<\n    | null\n    | boolean\n    | React.Element<typeof FormControl>\n    | React.Element<(props: any) => React.Element<typeof FormControl>>\n    | React.Element<React.AbstractComponent<any, mixed>>\n  >,\n  ...CommonProps,\n|}> {}\n\ntype PhoneNumberKey = 'a' | 'b' | 'c';\nclass PhoneNumberField extends React.Component<{|\n  phoneNumberA?: string,\n  phoneNumberB?: string,\n  phoneNumberC?: string,\n  placeholderA?: string,\n  placeholderB?: string,\n  placeholderC?: string,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  autoComplete?: 'off' | 'tel',\n  onChange?: (\n    key: PhoneNumberKey,\n    e: SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onInput?: (\n    key: PhoneNumberKey,\n    e: SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onFocus?: (\n    key: PhoneNumberKey,\n    e: SyntheticFocusEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onBlur?: (\n    key: PhoneNumberKey,\n    e: SyntheticFocusEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onKeyDown?: (\n    key: PhoneNumberKey,\n    e: SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\nclass DateDurationField extends React.Component<{|\n  required?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  startDate?: Date | string,\n  startDateId?: string,\n  startDateName?: string,\n  startDateLabel?: string,\n  startDateLabelledby?: string,\n  startDatePlaceholder?: string,\n  endDate?: Date | string,\n  endDateId?: string,\n  endDateName?: string,\n  endDateLabel?: string,\n  endDateLabelledby?: string,\n  endDatePlaceholder?: string,\n  small?: boolean,\n  minDate?: string,\n  maxDate?: string,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  onChange?: (duration: [string, string]) => void | Promise<void>,\n  onFocus?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onBlur?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onInput?: (SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n  onKeyDown?: (\n    SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n|}> {}\n\nclass AmountRangeField extends React.Component<{|\n  required?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  minAmount?: number | null,\n  minAmountId?: string,\n  minAmountName?: string,\n  minAmountLabel?: string,\n  minAmountLabelledby?: string,\n  minAmountPlaceholder?: string,\n  maxAmount?: number | null,\n  maxAmountId?: string,\n  maxAmountName?: string,\n  maxAmountLabel?: string,\n  maxAmountLabelledby?: string,\n  maxAmountPlaceholder?: string,\n  small?: boolean,\n  nullable?: boolean,\n  onChange?: (range: [number | null, number | null]) => void | Promise<void>,\n  onFocus?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onBlur?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onInput?: (SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n  onKeyDown?: (\n    SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/formFields\n */\n\nclass DigitsInput extends React.Component<{\n  value?: number | null,\n  nullable?: boolean,\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  required?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  borderless?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  onChange?: (number | null) => any,\n  onFocus?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onBlur?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onInput?: (SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n  onKeyDown?: (\n    SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  ...MarginClassProps,\n}> {}\n\nclass DateInput extends React.Component<\n  {|\n    value?: Date | string,\n    id?: string,\n    label?: string,\n    labelledby?: string,\n    placeholder?: string,\n    name?: string,\n    required?: boolean,\n    autofocus?: boolean,\n    disabled?: boolean,\n    error?: boolean,\n    small?: boolean,\n    minDate?: string,\n    maxDate?: string,\n    width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n    onChange?: (string) => void,\n    onFocus?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n    onBlur?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n    onInput?: (SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n    onKeyDown?: (\n      SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    ...MarginClassProps,\n    ...CommonProps,\n  |},\n  HTMLInputElement\n> {}\n\ntype DecimalInput = React.StatelessFunctionalComponent<{|\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  onInput?: (SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n  onFocus?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onBlur?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onKeyDown?: (\n    SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onKeyUp?: (SyntheticKeyboardEvent<HTMLInputElement>) => void | Promise<void>,\n  min?: number,\n  max?: number,\n  hideSpinner?: boolean,\n  nullable?: boolean,\n  onChange?: (value: number | null) => void | Promise<void>,\n  step?: number,\n  places?: number,\n  value?: number | null,\n  ...CommonProps,\n|}>;\n\ntype FormattedTextInput = React.AbstractComponent<\n  {|\n    id?: string,\n    label?: string,\n    labelledby?: string,\n    placeholder?: string,\n    name?: string,\n    value?: string,\n    required?: boolean,\n    autofocus?: boolean,\n    disabled?: boolean,\n    error?: boolean,\n    small?: boolean,\n    large?: boolean,\n    alignCenter?: boolean,\n    alignRight?: boolean,\n    autoComplete?: AutocompleteAttribute,\n    suffix?: string,\n    borderless?: boolean,\n    width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n    loading?: boolean,\n    onChange?: (value: string) => void | Promise<void>,\n    onInput?: (\n      e: SyntheticInputEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onFocus?: (\n      e: SyntheticFocusEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onBlur?: (e: SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n    onKeyDown?: (\n      e: SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onKeyUp?: (\n      e: SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    preset?:\n      | 'postalCode'\n      | 'corporateNumber'\n      | 'invoiceRegistrationCompanyNumber',\n    formatter?: {|\n      preprocess?: (string) => string,\n      format: (string) => string,\n    |},\n    onChangePreprocessedValue?: (string) => any,\n    onChangeFormattedValue?: (string) => any,\n    ...MarginClassProps,\n    ...CommonProps,\n  |},\n  HTMLInputElement\n>;\n\ntype NumeralCodeInput = React.AbstractComponent<\n  {|\n    id?: string,\n    type?: 'text' | 'tel',\n    label?: string,\n    labelledby?: string,\n    placeholder?: string,\n    name?: string,\n    value?: string,\n    required?: boolean,\n    autofocus?: boolean,\n    disabled?: boolean,\n    error?: boolean,\n    small?: boolean,\n    large?: boolean,\n    alignCenter?: boolean,\n    alignRight?: boolean,\n    maxLength?: number,\n    autoComplete?: AutocompleteAttribute,\n    width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n    onChange?: (value: string) => void | Promise<void>,\n    onInput?: (\n      e: SyntheticInputEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onFocus?: (\n      e: SyntheticFocusEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onBlur?: (e: SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n    onKeyDown?: (\n      e: SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onKeyUp?: (\n      e: SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    ...CommonProps,\n  |},\n  HTMLInputElement\n>;\n\ntype PasswordField = React.AbstractComponent<\n  {|\n    id?: string,\n    label?: string,\n    labelledby?: string,\n    placeholder?: string,\n    name?: string,\n    value?: string,\n    required?: boolean,\n    autofocus?: boolean,\n    disabled?: boolean,\n    error?: boolean,\n    small?: boolean,\n    large?: boolean,\n    alignCenter?: boolean,\n    alignRight?: boolean,\n    autoComplete?: 'current-password' | 'new-password' | 'off',\n    suffix?: string,\n    borderless?: boolean,\n    width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n    loading?: boolean,\n    onChange?: (\n      e: SyntheticInputEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onInput?: (\n      e: SyntheticInputEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onFocus?: (\n      e: SyntheticFocusEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onBlur?: (e: SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n    onKeyDown?: (\n      e: SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    onKeyUp?: (\n      e: SyntheticKeyboardEvent<HTMLInputElement>\n    ) => void | Promise<void>,\n    ...MarginClassProps,\n    ...CommonProps,\n  |},\n  HTMLInputElement\n>;\n\ntype TimeInput = React.StatelessFunctionalComponent<{|\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  value?: string | null,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  onChange?: (value: string | null) => void | Promise<void>,\n  onInput?: (SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n  onFocus?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onBlur?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onKeyDown?: (\n    SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onKeyUp?: (SyntheticKeyboardEvent<HTMLInputElement>) => void | Promise<void>,\n  nullable?: boolean,\n  ...CommonProps,\n|}>;\n\ntype TimeLengthInput = React.StatelessFunctionalComponent<{|\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  value?: number | null,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  error?: boolean,\n  small?: boolean,\n  large?: boolean,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  onChange?: (value: number | null) => void | Promise<void>,\n  onInput?: (SyntheticInputEvent<HTMLInputElement>) => void | Promise<void>,\n  onFocus?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onBlur?: (SyntheticFocusEvent<HTMLInputElement>) => void | Promise<void>,\n  onKeyDown?: (\n    SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onKeyUp?: (SyntheticKeyboardEvent<HTMLInputElement>) => void | Promise<void>,\n  nullable?: boolean,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/globalNavi\n */\nexport type LinkContent = {|\n  title: string,\n  url: string,\n  IconComponent?: React.ComponentType<*>,\n  current?: boolean,\n  'data-guide'?: string,\n  'data-test'?: string,\n  'data-tracking'?: string,\n  'data-masking'?: boolean,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n|};\n\nclass GlobalNavi extends React.Component<{|\n  disableGutters?: boolean,\n  label?: string,\n  links?: Array<LinkContent>,\n  searchUrl?: string,\n  hideHelpForm?: boolean,\n  searchQueryParams?: { [key: string]: string },\n  sectionNode?: React.Node,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/header\n */\n\ntype SectionData = {|\n  type?: 'plan' | 'link' | 'button' | 'text' | 'dropdown',\n  text: string,\n  url?: string,\n  IconComponent?: React.ComponentType<*>,\n  iconType?: 'default' | 'alert' | 'notice',\n  dropdownContents?: Array<DropdownContent>,\n  hasBadge?: boolean,\n  onClick?: () => any,\n|};\n\nclass Header extends React.Component<{|\n  disableGutters?: boolean,\n  logo: React.Node,\n  sectionDataList?: Array<SectionData>,\n  sectionNode?: React.Node,\n  logoUrl?: string,\n  children?: React.Node,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/headlineArea\n */\nexport type StatusType =\n  | 'done'\n  | 'success'\n  | 'progress'\n  | 'required'\n  | 'disabled'\n  | 'emphasis'\n  | 'warning'\n  | 'error';\n\nclass HeadlineArea extends React.Component<{|\n  pageTitle: string,\n  children?: React.Node,\n  loading?: boolean,\n  statusIconType?: StatusType,\n  statusIconText?: string,\n  relatedMenus?: React.Node,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/lineSeparatedList\n */\nexport type LineSeparatedListContent = {|\n  value: React.Node,\n|};\n\ntype LineSeparatedList = React.StatelessFunctionalComponent<{|\n  listContents?: Array<LineSeparatedListContent>,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/listButtons\n */\ntype buttonProps = {|\n  label: React.Node,\n  selected?: boolean,\n  href?: string,\n  target?: string,\n  rel?: string,\n  statusIconText?: string,\n  statusIconType?: StatusType,\n  bgTransparent?: boolean,\n  onClick?: (e: SyntheticEvent<HTMLButtonElement>) => any,\n|};\n\nclass ListButtons extends React.Component<{|\n  buttons: Array<buttonProps>,\n  selectableItemRef?: React.Ref<'a' | 'button'>,\n  onKeyDown?: (\n    e: SyntheticKeyboardEvent<HTMLAnchorElement | HTMLButtonElement>,\n    itemIndex: number\n  ) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/messageBlock\n */\ntype MessageTypes = {|\n  error?: boolean,\n  notice?: boolean,\n  success?: boolean,\n  info?: boolean,\n|};\n\ntype MessageChildren = {| children: React.Node |} | {| message: React.Node |};\n\nclass MessageBlock extends React.Component<{|\n  assistance?: boolean,\n  discovery?: boolean,\n  explanatory?: boolean,\n  linkTitle?: string,\n  linkUrl?: string,\n  linkTarget?: string,\n  linkRel?: string,\n  onLinkClick?: () => any,\n  onRequestClose?: () => any,\n  hover?: boolean,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  ...MessageChildren,\n  ...MessageTypes,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype FloatingMessageBlock = React.StatelessFunctionalComponent<{|\n  linkTitle?: string,\n  linkUrl?: string,\n  linkTarget?: string,\n  linkRel?: string,\n  onClose?: (autoClose: boolean) => void | Promise<void>,\n  onLinkClick?: () => any,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  ...MessageChildren,\n  ...MessageTypes,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/GuidanceMessage\n */\nclass GuidanceMessage extends React.Component<{|\n  children?: React.Node,\n  renderCloseButton?: (\n    CloseButton?: React.StatelessFunctionalComponent<{|\n      onClick: () => any,\n      ...CommonProps,\n    |}>\n  ) => React.Node,\n  IconComponent?: React.ComponentType<*>,\n  inline?: boolean,\n  small?: boolean,\n  verticalAlign?: 'top' | 'middle',\n  width?: 'fit-content' | 'full',\n  url?: string,\n  target?: string,\n  rel?: string,\n  onClick?: (\n    e: SyntheticMouseEvent<HTMLButtonElement | HTMLAnchorElement>\n  ) => void | Promise<void>,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/messageBlock\n */\nclass MessageIcon extends React.Component<{|\n  children?: React.Node,\n  label: string,\n  error?: boolean,\n  notice?: boolean,\n  success?: boolean,\n  small?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/numericTable\n */\ntype NumericTableHeader = {|\n  value?: React.Node,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  ordering?: Order,\n  width?: number,\n  minWidth?: number,\n  maxWidth?: number,\n  noWrap?: boolean,\n  onClick?: (rowIndex: number) => any,\n  'data-test'?: string,\n|};\n\ntype NumericTableRow = {|\n  cells: Array<NumericTableCell>,\n  checkBoxDisabled?: boolean,\n  onChangeCheckBox?: (\n    SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  checkBoxName?: string,\n  checkBoxValue?: string,\n  'data-test'?: string,\n|};\n\ntype NumericTableCell = {|\n  value: React.Node,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  small?: boolean,\n  breakWord?: boolean,\n  noWrap?: boolean,\n  onClick?: (rowIndex: number) => any,\n  status?: 'alert' | 'notice' | 'success',\n  'data-masking'?: boolean,\n  'data-test'?: string,\n|};\n\nclass NumericTable extends React.Component<{|\n  headers: Array<NumericTableHeader>,\n  rows: Array<NumericTableRow>,\n  withCheckBox?: boolean,\n  onChangeCheckBox?: (\n    SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  fixedHeader?: boolean,\n  fixedHeaderOffset?: number | string,\n  hasRowHeader?: boolean,\n  rowHeaderCount?: number,\n  fixedRowHeader?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/pagination\n */\nclass Pagination extends React.Component<{|\n  rowsPerPageOptions: {\n    value: string,\n    name?: string,\n  }[],\n  rowsPerPageValue?: number,\n  defaultRowsPerPageValue?: number,\n  currentPage: number,\n  rowCount?: number,\n  displayRowCount?: string,\n  currentPageRowCount?: number,\n  selectBoxWidth?: 'xSmall' | 'small' | 'medium' | 'large',\n  disabled?: boolean,\n  onChange?: (\n    e: SyntheticInputEvent<HTMLSelectElement>\n  ) => void | Promise<void>,\n  onFocus?: (e: SyntheticFocusEvent<HTMLSelectElement>) => void | Promise<void>,\n  onBlur?: (e: SyntheticFocusEvent<HTMLSelectElement>) => void | Promise<void>,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/pager\n */\nclass Pager extends React.Component<{|\n  currentPage: number,\n  onPageChange: (page: number) => void | Promise<void>,\n  pageCount: number,\n  pageRange?: number,\n  sidePageRange?: number,\n  small?: boolean,\n  disabled?: boolean,\n|}> {}\n\n/**\n * lv2/pageSelector\n */\nclass PageSelector extends React.Component<{|\n  prevDisabled?: boolean,\n  nextDisabled?: boolean,\n  onClickPrev: () => any,\n  onClickNext: () => any,\n  onClickTitle?: () => any,\n  children: React.Node,\n  renderPopup?: (\n    requestClose: () => void | Promise<void>,\n    firstSelectableItemRef: { current: HTMLElement | null }\n  ) => React.Node,\n  hasDropdown?: boolean,\n  isExpanded?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/popupProgressBar\n */\nclass PopupProgressBar extends React.Component<{|\n  status: 'doing' | 'done' | 'error',\n  message: string,\n  progressValue?: number,\n  progressMaxValue?: number,\n  onClose: () => void,\n  ...CommonProps,\n|}> {}\n\ntype ProgressState = {\n  status: 'doing' | 'done' | 'error',\n  message: string,\n  progressValue?: number,\n  progressMaxValue?: number,\n};\n\n/**\n * lv2/popupProgressBarPortal\n */\nclass PopupProgressBarPortal extends React.Component<{|\n  progressStates: Array<ProgressState>,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/stackedBarChart\n */\ntype StackedBarChart = React.StatelessFunctionalComponent<{|\n  items: Array<StackedBarChartItem>,\n  onClickItem: (number) => void,\n  ...CommonProps,\n|}>;\n\ntype StackedBarChartItem = {\n  color: 'RE' | 'OR' | 'YE' | 'YG' | 'GR' | 'BG' | 'PU' | 'GY',\n  label: string,\n  value: number,\n  valueLabel: string,\n};\n\n/**\n * lv2/stepper\n */\nclass Stepper extends React.Component<{|\n  steps: Array<React.Node>,\n  currentStepIndex: number,\n  disabledStepIndex: Array<number>,\n  small?: boolean,\n  ...CommonProps,\n|}> {}\n\ntype VerticalSteps = React.StatelessFunctionalComponent<{|\n  currentStepIndex: number,\n  steps: Array<{\n    title: React.Node,\n    content?: React.Node,\n    actions?: React.Node,\n    contentSummary?: React.Node,\n  }>,\n  stepHeadlineLevel?: 1 | 2 | 3 | 4 | 5 | 6 | -1,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/tabbar\n */\ntype TabElement = Array<\n  | string\n  | {\n      name: React.Node,\n      notification?: string,\n      'data-guide'?: string,\n      'data-test'?: string,\n      'data-tracking'?: string,\n      'data-masking'?: boolean,\n    }\n>;\nclass TabBar extends React.Component<{|\n  tabs: TabElement,\n  currentTabIndex: number,\n  small?: boolean,\n  onClickTab: (number) => any,\n  renderButtons?: () => React.ChildrenArray<\n    null | boolean | React.Element<any>\n  >,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/TagBox\n */\ntype TagBoxMaxWidth = 'small' | 'medium' | 'large';\ntype TagBoxColor = 'success' | 'error' | AccentColor;\ntype AccentColor = 'RE' | 'OR' | 'YE' | 'YG' | 'GR' | 'BG' | 'PU' | 'GY';\nclass TagBox extends React.Component<{|\n  children?: string,\n  type?: string,\n  removable?: boolean,\n  disabledRemoveButton?: boolean,\n  maxWidth?: TagBoxMaxWidth,\n  onRemove?: () => any,\n  color?: TagBoxColor,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ntype MiniTag = React.StatelessFunctionalComponent<{|\n  children: string,\n  type?: string,\n  removable?: boolean,\n  onRemove?: () => void,\n  color?: 'RE' | 'OR' | 'YE' | 'YG' | 'GR' | 'BG' | 'PU' | 'GY',\n  removeButtonTabIndex?: 0 | -1,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/PersonTag\n */\ntype PersonTagColor = 'success' | 'error' | AccentColor;\nclass PersonTag extends React.Component<{|\n  children?: string,\n  type?: string,\n  removable?: boolean,\n  disabledRemoveButton?: boolean,\n  onRemove?: () => any,\n  color?: PersonTagColor,\n  imageUrl: string,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/nameField\n */\ntype NameKey = 'lastName' | 'firstName';\nclass NameField extends React.Component<{|\n  lastName?: string,\n  firstName?: string,\n  lastNamePlaceholder?: string,\n  firstNamePlaceholder?: string,\n  label?: string,\n  labelledby?: string,\n  disabled?: boolean,\n  required?: boolean,\n  error?: boolean,\n  small?: boolean,\n  autoComplete?: 'off' | 'name',\n  onChange?: (\n    key: NameKey,\n    e: SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onInput?: (\n    key: NameKey,\n    e: SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onFocus?: (\n    key: NameKey,\n    e: SyntheticFocusEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onBlur?: (\n    key: NameKey,\n    e: SyntheticFocusEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onKeyDown?: (\n    key: NameKey,\n    e: SyntheticKeyboardEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/listButtonSelector\n */\nclass ListButtonSelector extends React.Component<{|\n  selectedLabel: string,\n  selectorLabel: string,\n  withActionButton?: boolean,\n  actionLabel?: string,\n  action?: () => any,\n  ActionIconComponent?: React.ComponentType<*>,\n  buttons: Array<buttonProps>,\n  disabled?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/ListCard\n */\ntype ListCard = React.StatelessFunctionalComponent<{|\n  title?: React.Node,\n  url?: string,\n  onClick?: (SyntheticEvent<HTMLButtonElement>) => void | Promise<void>,\n  children?: React.Node,\n  actions?: React.Node,\n  target?: string,\n  rel?: string,\n  thumbnail?: React.Node,\n  thumbnailSize?: 'default' | 'large',\n  disabled?: boolean,\n  current?: boolean,\n  IconComponent?: React.ElementType,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/ListTable\n */\ntype ListTable = React.StatelessFunctionalComponent<{|\n  margins?: MarginClassProps,\n  headers: Array<TableHeader>,\n  rows: Array<TableRow>,\n  withCheckBox?: boolean,\n  onChangeHeaderCheckBox?: (\n    SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  fixedHeader?: boolean,\n  fixedHeaderOffset?: number | string,\n  fitContent?: boolean,\n  ...CommonProps,\n|}>;\nexport type TableRowGroup = {\n  rows: TableRow[],\n  summaryCells: TableCell[],\n  onClick?: () => void | Promise<void>,\n  onSelfWindowNavigation?: (url?: string) => void | Promise<void>,\n  url?: string,\n  onChangeCheckBox?: (\n    SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  checkBoxName?: string,\n  checkBoxValue?: string,\n  folded?: boolean,\n  onToggleFolded?: (fold: boolean) => void | Promise<void>,\n  'data-test'?: string,\n};\ntype GroupedListTable = React.StatelessFunctionalComponent<{|\n  headers: TableHeader[],\n  rowGroups: TableRowGroup[],\n  withCheckBox?: boolean,\n  onChangeHeaderCheckBox?: (\n    SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  foldable?: boolean,\n  fitContent?: boolean,\n  ...CommonProps,\n|}>;\n/**\n * lv2/ButtonGroup\n */\nclass ButtonGroup extends React.Component<{|\n  children: React.ChildrenArray<null | boolean | React.Element<any>>,\n  align?: 'left' | 'center',\n  responsive?: boolean,\n  mobileButtonLayout?: 'row' | 'column',\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\n/**\n * lv2/selectableButton\n */\n\nclass SelectableButton extends React.Component<{\n  selected: boolean,\n  label: string,\n  onClick?: () => void,\n  dropdownContents?: Array<DropdownContent>,\n  badge?: number,\n  ...MarginClassProps,\n}> {}\n\n/**\n * lv2/withAccordionContent\n */\ntype WithAccordionContent = React.StatelessFunctionalComponent<{|\n  renderAccordionButtonArea: (\n    AccordionButton: React.StatelessFunctionalComponent<{|\n      contentId: string,\n      children?: React.Node,\n      appearance?: 'primary' | 'secondary' | 'tertiary',\n      open: boolean,\n      small?: boolean,\n      large?: boolean,\n      onClick: () => any,\n      ...CommonProps,\n    |}>,\n    contentId: string\n  ) => React.Node,\n  isOpen: boolean,\n  children: React.Node,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/withBalloon\n */\ntype WithBalloon = React.StatelessFunctionalComponent<{|\n  border?: 'default' | 'alert' | 'notice' | 'success',\n  renderBalloonContent?: (isVisible: boolean) => React.Node,\n  balloonContent?: React.Node,\n  children?: React.Node,\n  renderContent?: (balloonId: string) => React.Node,\n  balloonDisabled?: boolean,\n  ...CommonProps,\n|}>;\n\ntype WithDropdown = React.StatelessFunctionalComponent<{|\n  renderButton: (\n    dropdownId: string,\n    isOpen: boolean,\n    buttonRef: { current: HTMLElement | null }\n  ) => React.Node,\n  disabled?: boolean,\n  contentsFixed?: boolean,\n  dropdownContents: Array<DropdownContent>,\n  onOpen?: () => void,\n  onClose?: () => void,\n  ...CommonProps,\n|}>;\n\ntype WithFilterableDropdown = React.StatelessFunctionalComponent<{|\n  render: (\n    popupId: string,\n    isOpen: boolean,\n    controlRef: { current: HTMLElement | null },\n    togglePopup: (open: boolean) => void | Promise<void>\n  ) => React.Node,\n  dropdownContents: FilterableDropdownContent[],\n  disabled?: boolean,\n  onFilterChange?: (\n    e: SyntheticInputEvent<HTMLInputElement>\n  ) => void | Promise<void>,\n  onOpen?: () => void,\n  isLoading?: boolean,\n  noResultsMessage?: React.Node,\n  noDataMessage?: React.Node,\n  renderDropdownBottomContent?: (\n    requestClose: () => void | Promise<void>\n  ) => React.Node,\n  fixedItems?: {\n    disableOnRequestClose?: boolean,\n    isVisible: (filterValue: string) => boolean,\n    label: React.Node | ((filterValue: string) => React.Node),\n    onSelect: (filterValue: string) => any,\n  }[],\n  ...CommonProps,\n|}>;\n\ntype WithPopup = React.StatelessFunctionalComponent<{|\n  render: (\n    popupId: string,\n    isOpen: boolean,\n    controlRef: { current: HTMLElement | null },\n    togglePopup: (open: boolean) => void | Promise<void>\n  ) => React.Node,\n  renderPopup: (\n    requestClose: () => void | Promise<void>,\n    firstSelectableItemRef: { current: HTMLElement | null }\n  ) => React.Node,\n  onOpen?: () => void,\n  onClose?: () => void,\n  disabled?: boolean,\n  contentsFixed?: boolean,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/skeleton\n */\ntype SkeletonPageTitle = React.StatelessFunctionalComponent<{|\n  ...CommonProps,\n|}>;\n\ntype SkeletonSectionTitle = React.StatelessFunctionalComponent<{|\n  ...CommonProps,\n|}>;\n\ntype SkeletonParagraph = React.StatelessFunctionalComponent<{|\n  size?: 'small' | 'medium' | 'large',\n  ...CommonProps,\n|}>;\n\ntype SkeletonRectangle = React.StatelessFunctionalComponent<{|\n  size?: 'default' | 'large',\n  ...CommonProps,\n|}>;\n\ntype SkeletonBlock = React.StatelessFunctionalComponent<{|\n  size?: 'small' | 'medium' | 'large',\n  ...CommonProps,\n|}>;\n\ntype SkeletonIcon = React.StatelessFunctionalComponent<{|\n  size?: 'small' | 'medium' | 'large',\n  ...CommonProps,\n|}>;\n\ntype SkeletonCircle = React.StatelessFunctionalComponent<{|\n  size?: 'small' | 'medium' | 'large' | 'xlarge',\n  ...CommonProps,\n|}>;\n\ntype SkeletonInput = React.StatelessFunctionalComponent<{|\n  small?: boolean,\n  large?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  ...CommonProps,\n|}>;\n\ntype SkeletonListTable = React.StatelessFunctionalComponent<{|\n  columnCount?: number,\n  rowCount?: number,\n  rowCells?: Array<TableCell>,\n  ...CommonProps,\n|}>;\n\ntype SkeletonDescriptionList = React.StatelessFunctionalComponent<{|\n  rowCount?: number,\n  ...CommonProps,\n|}>;\n\ntype SkeletonStackedBarChart = React.StatelessFunctionalComponent<{|\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/scrimCoveredContent\n */\ntype ScrimCoveredContent = React.StatelessFunctionalComponent<{|\n  children: React.Node,\n  inline?: boolean,\n  message?: React.Node,\n  ...CommonProps,\n|}>;\n\n/**\n * lv2/withTOC\n */\ntype WithTOC = React.StatelessFunctionalComponent<{|\n  contents: Array<WithTOCContent>,\n  containerID?: string,\n  offsetTop?: number,\n  onNavigateTo?: (id: string) => void,\n  ...CommonProps,\n|}>;\n\ntype WithTOCContent = {\n  id: string,\n  label: string,\n  content: React.Node,\n};\n\n/**\n * lv2/hierarchicalTable\n */\ntype HierarchicalTableHeader = {|\n  value?: React.Node,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  ordering?: Order,\n  width?: number,\n  minWidth?: number,\n  maxWidth?: number,\n  noWrap?: boolean,\n  onClick?: () => any,\n|};\n\ntype HierarchicalTableRow = {|\n  cells: Array<HierarchicalTableCell>,\n  childRows: Array<HierarchicalTableRow>,\n  ...CommonProps,\n|};\n\ntype HierarchicalTableCell = {|\n  value: React.Node,\n  alignCenter?: boolean,\n  alignRight?: boolean,\n  small?: boolean,\n  breakWord?: boolean,\n  noWrap?: boolean,\n  onClick?: () => any,\n|};\n\nclass HierarchicalTable extends React.Component<{|\n  headers: Array<HierarchicalTableHeader>,\n  rows: Array<HierarchicalTableRow>,\n  fixedHeader?: boolean,\n  fixedRowHeader?: boolean,\n  ...CommonProps,\n|}> {}\n\nclass IndexSearchField extends React.Component<{|\n  id?: string,\n  label?: string,\n  labelledby?: string,\n  placeholder?: string,\n  name?: string,\n  value?: string,\n  required?: boolean,\n  autofocus?: boolean,\n  disabled?: boolean,\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full',\n  maxLength?: number,\n  onUpdate?: (searchWord?: string) => void,\n  searchTarget?: string[],\n  forceOpen?: boolean,\n  ...MarginClassProps,\n  ...CommonProps,\n|}> {}\n\ndeclare module.exports: {\n  AccordionPanel: typeof AccordionPanel,\n  BasicTable: ListTable,\n  BulletedList: BulletedList,\n  Breadcrumbs: typeof Breadcrumbs,\n  Calendar: typeof Calendar,\n  DatePicker: typeof DatePicker,\n  SingleComboBox: typeof SingleComboBox,\n  ApiComboBox: typeof ApiComboBox,\n  useApiComboBox: useApiComboBox,\n  MultiComboBox: MultiComboBox,\n  ApiMultiComboBox: typeof ApiMultiComboBox,\n  useApiMultiComboBox: useApiMultiComboBox,\n  CardNavigation: typeof CardNavigation,\n  DescriptionList: typeof DescriptionList,\n  MessageDialog: typeof MessageDialog,\n  MessageDialogConfirm: typeof MessageDialogConfirm,\n  TaskDialog: typeof TaskDialog,\n  GuideDialog: GuideDialog,\n  FullScreenModal: typeof FullScreenModal,\n  Dropdown: typeof Dropdown,\n  DropdownMenuContent: DropdownMenuContent,\n  DropdownButton: typeof DropdownButton,\n  NoDataCreated: typeof NoDataCreated,\n  NoSearchResults: typeof NoSearchResults,\n  FileUploader: typeof FileUploader,\n  FileDropArea: typeof FileDropArea,\n  FilterableDropdownButton: FilterableDropdownButton,\n  FilterTag: FilterTag,\n  Footer: typeof Footer,\n  DateField: typeof DateField,\n  FormActions: FormActions,\n  FormControl: typeof FormControl,\n  FormControlGroup: typeof FormControlGroup,\n  PhoneNumberField: typeof PhoneNumberField,\n  DateDurationField: typeof DateDurationField,\n  AmountRangeField: typeof AmountRangeField,\n  DigitsInput: typeof DigitsInput,\n  DateInput: typeof DateInput,\n  DecimalInput: DecimalInput,\n  FormattedTextInput: FormattedTextInput,\n  NumeralCodeInput: NumeralCodeInput,\n  PasswordField: PasswordField,\n  TimeInput: TimeInput,\n  TimeLengthInput: TimeLengthInput,\n  GlobalNavi: typeof GlobalNavi,\n  Header: typeof Header,\n  HeadlineArea: typeof HeadlineArea,\n  LineSeparatedList: LineSeparatedList,\n  ListButtons: typeof ListButtons,\n  MessageBlock: typeof MessageBlock,\n  FloatingMessageBlock: FloatingMessageBlock,\n  GuidanceMessage: typeof GuidanceMessage,\n  MessageIcon: typeof MessageIcon,\n  NumericTable: typeof NumericTable,\n  Pagination: typeof Pagination,\n  Pager: typeof Pager,\n  PageSelector: typeof PageSelector,\n  PopupProgressBar: typeof PopupProgressBar,\n  PopupProgressBarPortal: typeof PopupProgressBarPortal,\n  StackedBarChart: StackedBarChart,\n  StackedBarChartItem: StackedBarChartItem,\n  Stepper: typeof Stepper,\n  VerticalSteps: VerticalSteps,\n  TabElement: TabElement,\n  TabBar: typeof TabBar,\n  TagBox: typeof TagBox,\n  MiniTag: MiniTag,\n  PersonTag: typeof PersonTag,\n  NameField: typeof NameField,\n  ListButtonSelector: typeof ListButtonSelector,\n  ListCard: ListCard,\n  ListTable: ListTable,\n  GroupedListTable: GroupedListTable,\n  ButtonGroup: typeof ButtonGroup,\n  SelectableButton: SelectableButton,\n  WithAccordionContent: WithAccordionContent,\n  WithBalloon: WithBalloon,\n  WithDropdown: WithDropdown,\n  WithFilterableDropdown: WithFilterableDropdown,\n  WithPopup: WithPopup,\n  WithTOC: WithTOC,\n  HierarchicalTable: typeof HierarchicalTable,\n  FileTypes: { [key: string]: FileType },\n  SkeletonPageTitle: SkeletonPageTitle,\n  SkeletonSectionTitle: SkeletonSectionTitle,\n  SkeletonParagraph: SkeletonParagraph,\n  SkeletonRectangle: SkeletonRectangle,\n  SkeletonBlock: SkeletonBlock,\n  SkeletonIcon: SkeletonIcon,\n  SkeletonCircle: SkeletonCircle,\n  SkeletonInput: SkeletonInput,\n  SkeletonListTable: SkeletonListTable,\n  SkeletonStackedBarChart: SkeletonStackedBarChart,\n  SkeltonPageTitle: SkeletonPageTitle,\n  SkeltonSectionTitle: SkeletonSectionTitle,\n  SkeltonParagraph: SkeletonParagraph,\n  SkeltonRectangle: SkeletonRectangle,\n  SkeltonBlock: SkeletonBlock,\n  SkeltonIcon: SkeletonIcon,\n  SkeltonCircle: SkeletonCircle,\n  SkeltonListTable: SkeletonListTable,\n  SkeletonDescriptionList: SkeletonDescriptionList,\n  ScrimCoveredContent: ScrimCoveredContent,\n  IndexSearchField: IndexSearchField,\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@freee_jp/vibes\",\n  \"version\": \"100.1.0\",\n  \"repository\": \"git@github.com:freee/vibes.git\",\n  \"author\": \"freee K.K.\",\n  \"license\": \"Apache-2.0\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": \"./index.js\",\n      \"require\": \"./index.js\",\n      \"types\": \"./index.d.ts\"\n    },\n    \"./css\": \"./vibes_2021.min.css\",\n    \"./stylesheets/*\": \"./stylesheets/*.scss\",\n    \"./vibes_2021.min.css\": \"./vibes_2021.min.css\"\n  },\n  \"files\": [\n    \"dist/\",\n    \"index.d.ts\",\n    \"index.js\",\n    \"index.js.flow\",\n    \"lv1.js.flow\",\n    \"lv2.js.flow\",\n    \"stylesheets/\",\n    \"utilities.js.flow\",\n    \"vibes_2021.css\",\n    \"vibes_2021.min.css\"\n  ],\n  \"peerDependencies\": {\n    \"lottie-web\": \"^5.5.7\",\n    \"react\": \"^16.8.x || ^17 || ^18\",\n    \"react-dom\": \"^16.8.x || ^17 || ^18\",\n    \"react-modal\": \"^3.7.1\",\n    \"styled-components\": \"^5\"\n  },\n  \"engines\": {\n    \"node\": \">= 14\",\n    \"npm\": \">= 6\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"7.23.5\",\n    \"@babel/eslint-parser\": \"7.23.3\",\n    \"@babel/plugin-proposal-class-properties\": \"7.16.7\",\n    \"@babel/plugin-transform-flow-strip-types\": \"7.16.7\",\n    \"@babel/preset-env\": \"7.16.11\",\n    \"@babel/preset-flow\": \"7.16.7\",\n    \"@babel/preset-react\": \"7.16.7\",\n    \"@babel/preset-typescript\": \"7.16.7\",\n    \"@kemuridama/storybook-addon-github\": \"1.2.0\",\n    \"@storybook/addon-a11y\": \"7.6.1\",\n    \"@storybook/addon-essentials\": \"7.6.1\",\n    \"@storybook/addon-interactions\": \"7.6.1\",\n    \"@storybook/addon-knobs\": \"7.0.2\",\n    \"@storybook/addon-links\": \"7.6.1\",\n    \"@storybook/addon-storysource\": \"7.6.1\",\n    \"@storybook/addon-styling-webpack\": \"0.0.6\",\n    \"@storybook/manager-api\": \"7.6.1\",\n    \"@storybook/react\": \"7.6.1\",\n    \"@storybook/react-webpack5\": \"7.6.1\",\n    \"@storybook/source-loader\": \"7.6.1\",\n    \"@storybook/test\": \"7.6.1\",\n    \"@storybook/test-runner\": \"0.16.0\",\n    \"@types/classnames\": \"2.2.11\",\n    \"@types/jest\": \"29.5.2\",\n    \"@types/node\": \"12.20.39\",\n    \"@types/react\": \"17.0.43\",\n    \"@types/react-dom\": \"17.0.14\",\n    \"@types/react-modal\": \"3.13.1\",\n    \"@types/react-scroll\": \"1.8.3\",\n    \"@types/react-transition-group\": \"4.4.4\",\n    \"@types/styled-components\": \"5.1.26\",\n    \"@types/throttle-debounce\": \"2.1.0\",\n    \"@typescript-eslint/eslint-plugin\": \"5.31.0\",\n    \"@typescript-eslint/parser\": \"5.31.0\",\n    \"css-loader\": \"6.8.1\",\n    \"eslint\": \"8.20.0\",\n    \"eslint-config-freee-typescript\": \"0.5.0\",\n    \"eslint-config-prettier\": \"8.5.0\",\n    \"eslint-import-resolver-node\": \"0.3.6\",\n    \"eslint-plugin-compat\": \"4.2.0\",\n    \"eslint-plugin-ft-flow\": \"2.0.1\",\n    \"eslint-plugin-import\": \"2.26.0\",\n    \"eslint-plugin-jsx-a11y\": \"6.5.1\",\n    \"eslint-plugin-react\": \"7.30.1\",\n    \"eslint-plugin-react-hooks\": \"4.6.0\",\n    \"eslint-plugin-storybook\": \"0.6.15\",\n    \"file-loader\": \"6.2.0\",\n    \"flow-bin\": \"0.112.0\",\n    \"husky\": \"^7.0.0\",\n    \"is-ci\": \"3.0.1\",\n    \"jest\": \"29.6.0\",\n    \"jest-environment-jsdom\": \"29.6.0\",\n    \"lint-staged\": \"12.3.7\",\n    \"lottie-web\": \"5.5.7\",\n    \"material-design-icons\": \"3.0.1\",\n    \"npm-run-all\": \"4.1.5\",\n    \"prettier\": \"2.7.1\",\n    \"prettier-config-freee\": \"1.1.0\",\n    \"react\": \"17.0.2\",\n    \"react-dom\": \"17.0.2\",\n    \"react-modal\": \"3.14.4\",\n    \"replace-in-file\": \"6.2.0\",\n    \"resolve.exports\": \"2.0.2\",\n    \"sass\": \"1.51.0\",\n    \"sass-loader\": \"14.0.0\",\n    \"storybook\": \"7.6.1\",\n    \"storybook-addon-pseudo-states\": \"2.1.2\",\n    \"style-loader\": \"3.3.4\",\n    \"stylelint\": \"16.0.2\",\n    \"stylelint-config-prettier\": \"9.0.3\",\n    \"stylelint-config-standard\": \"19.0.0\",\n    \"tsconfig-freee\": \"0.1.2\",\n    \"typescript\": \"4.6.2\",\n    \"webpack\": \"5.88.1\"\n  },\n  \"scripts\": {\n    \"storybook\": \"storybook dev -p 6006\",\n    \"build-storybook\": \"storybook build\",\n    \"test-storybook\": \"test-storybook\",\n    \"lint\": \"eslint --cache './src/**/*.{js,flow,ts,tsx}' './*.js.flow' './__tests__/' && prettier --check './src/**/*.{js,flow,ts,tsx}' './*.js.flow'\",\n    \"lint:fix\": \"eslint --cache --fix './src/**/*.{js,flow,ts,tsx}' './*.js.flow' './__tests__/' && prettier --write './src/**/*.{js,flow,ts,tsx}' './*.js.flow'\",\n    \"stylelint\": \"stylelint stylesheets/ && prettier --check stylesheets/\",\n    \"build\": \"npm run clean && run-p build:**\",\n    \"build:esm\": \"tsc -p ./tsconfig.build.json --outDir ./dist\",\n    \"build:css:dev-2021\": \"sass --style=expanded --no-source-map stylesheets/vibes_2021.scss vibes_2021.css\",\n    \"build:css:prod-2021:\": \"sass --style=compressed --no-source-map stylesheets/vibes_2021.scss vibes_2021.min.css\",\n    \"clean\": \"rm -r dist\",\n    \"test\": \"npm run test:types && npm run test:utilities\",\n    \"test:types\": \"npm run test:types:flow\",\n    \"test:types:flow\": \"flow ./__tests__/types/flow\",\n    \"test:utilities\": \"jest ./src/utilities\",\n    \"release\": \"node scripts/release.js\",\n    \"setup\": \"is-ci || husky install\"\n  },\n  \"dependencies\": {\n    \"classnames\": \"2.2.6\",\n    \"date-fns\": \"1.30.1\",\n    \"react-animate-height\": \"2.1.2\",\n    \"react-content-loader\": \"6.2.0\",\n    \"react-dnd\": \"11.1.3\",\n    \"react-dnd-html5-backend\": \"11.1.3\",\n    \"react-icons\": \"4.3.1\",\n    \"react-scroll\": \"1.8.7\",\n    \"react-transition-group\": \"4.4.2\",\n    \"styled-components\": \"^5\",\n    \"throttle-debounce\": \"3.0.1\",\n    \"wareki\": \"1.0.0\"\n  },\n  \"prettier\": \"prettier-config-freee\",\n  \"lint-staged\": {\n    \"*.{js,flow,ts,tsx}\": [\n      \"eslint --cache --fix\",\n      \"prettier --write\"\n    ],\n    \"*.scss\": [\n      \"stylelint --fix\",\n      \"prettier --write\"\n    ]\n  }\n}\n"
  },
  {
    "path": "scripts/release.js",
    "content": "const path = require('path');\nconst replace = require('replace-in-file');\nconst execSync = require('child_process').execSync;\nconst commitTargets = [\n  './README.md',\n  './src/utilities/index.ts',\n  './package.json',\n  './package-lock.json',\n  './vibes_2021.css',\n  './vibes_2021.min.css',\n  './dist',\n];\n\nconst statusBuffer = execSync('git status -s');\nif (statusBuffer.length > 0) {\n  console.error('Git working directory not clean.\\n');\n  process.exit(1);\n}\n\nconst level = process.argv[2];\nif (!['major', 'minor', 'patch'].includes(level)) {\n  console.error(\n    \"Release version is invalid. Please specify 'major', 'minor' or 'patch'.\\n\"\n  );\n  process.exit(1);\n}\nexecSync('npm test');\n// install時に出る差分をコミットしないようにする\nexecSync('git checkout ./package-lock.json');\n\nexecSync(`npm version ${level} --no-git-tag-version`);\nconst version = require(path.resolve(__dirname, '../package.json')).version;\n\n// Replace versions\nconst replaceFiles = ['src/utilities/index.ts', 'README.md'];\nconst versionRegexp = /[\\d]+\\.[\\d]+\\.[\\d]+/g;\nreplaceFiles.forEach((filepath) => {\n  try {\n    const result = replace.sync({\n      files: filepath,\n      from: versionRegexp,\n      to: version,\n    });\n    console.log('Replacement version result: ', result);\n  } catch (error) {\n    console.error('Replacement error: ', error);\n  }\n});\n\nexecSync('npm run build');\nexecSync(`git add -f ${commitTargets.join(' ')}`);\nexecSync(`git commit -m '${version}'`);\nconsole.log(`Release commit for version ${version} created!`);\n"
  },
  {
    "path": "src/@types/image.d.ts",
    "content": "declare module '*.jpeg';\ndeclare module '*.jpg';\ndeclare module '*.png';\n"
  },
  {
    "path": "src/@types/mdx.d.ts",
    "content": "// types/mdx.d.ts\ndeclare module '*.mdx' {\n  let MDXComponent: (props: any) => JSX.Element;\n  export default MDXComponent;\n}\n"
  },
  {
    "path": "src/@types/redux.d.ts",
    "content": "// FIXME: Vibesではreduxを使わないのだが、react-dndの問題でmoduleだけ宣言している\n// https://github.com/react-dnd/react-dnd/issues/1560#issuecomment-546581882\ndeclare module 'redux';\n"
  },
  {
    "path": "src/constants/Color.ts",
    "content": "export const VibesBlackColor = '#252525';\nexport const VibesBase1Color = '#efede8';\nexport const VibesBase2Color = '#e4e0d7';\nexport const VibesBase3Color = '#938f86';\nexport const VibesColumnColor = '#f9f7f4';\nexport const VibesBurntColor = '#6f6b62';\nexport const VibesAlertColor = '#c33939';\nexport const VibesNoticeColor = '#c67320';\nexport const VibesBackgroundColor = '#efede8';\n\n// Corp\nexport const VibesPrimaryCorpColor = '#4575b4';\nexport const VibesAccentCorpColor = '#749fcb';\nexport const VibesLinkCorpColor = '#3d6dac';\n\n// HR\nexport const VibesPrimaryHrColor = '#338650';\nexport const VibesAccentHrColor = '#71ab85';\nexport const VibesLinkHrColor = '#267a43';\n\n// Vibes 2021 Colors\nexport const Colors2021P01 = '#ebf3ff';\nexport const Colors2021P02 = '#dce8ff';\nexport const Colors2021P03 = '#aac8ff';\nexport const Colors2021P04 = '#73a5ff';\nexport const Colors2021P05 = '#2864f0';\nexport const Colors2021P06 = '#3264dc';\nexport const Colors2021P07 = '#285ac8';\nexport const Colors2021P08 = '#1e46aa';\nexport const Colors2021P09 = '#23418c';\nexport const Colors2021P10 = '#143278';\nexport const Colors2021S01 = '#f7f5f5';\nexport const Colors2021S02 = '#f0eded';\nexport const Colors2021S03 = '#e9e7e7';\nexport const Colors2021S04 = '#e1dcdc';\nexport const Colors2021S05 = '#d7d2d2';\nexport const Colors2021S06 = '#bebaba';\nexport const Colors2021S07 = '#aaa7a7';\nexport const Colors2021S08 = '#8c8989';\nexport const Colors2021S09 = '#6e6b6b';\nexport const Colors2021S10 = '#464343';\nexport const Colors2021RE02 = '#fad2d7';\nexport const Colors2021RE04 = '#f07882';\nexport const Colors2021RE05 = '#dc1e32';\nexport const Colors2021RE07 = '#a51428';\nexport const Colors2021RE10 = '#6e0f19';\nexport const Colors2021OR02 = '#ffe1d2';\nexport const Colors2021OR04 = '#ffaa78';\nexport const Colors2021OR05 = '#fa6414';\nexport const Colors2021OR07 = '#be4b0f';\nexport const Colors2021OR10 = '#7d320a';\nexport const Colors2021YE02 = '#fff0d2';\nexport const Colors2021YE04 = '#ffd278';\nexport const Colors2021YE05 = '#ffb91e';\nexport const Colors2021YE07 = '#be8c14';\nexport const Colors2021YE10 = '#825a0f';\nexport const Colors2021YG02 = '#e6f0d2';\nexport const Colors2021YG04 = '#b4dc7d';\nexport const Colors2021YG05 = '#82c31e';\nexport const Colors2021YG07 = '#50961e';\nexport const Colors2021YG10 = '#3c5f14';\nexport const Colors2021GR02 = '#cdebd7';\nexport const Colors2021GR04 = '#64be8c';\nexport const Colors2021GR05 = '#00963c';\nexport const Colors2021GR07 = '#006e2d';\nexport const Colors2021GR10 = '#004b1e';\nexport const Colors2021BG02 = '#cdf0f0';\nexport const Colors2021BG04 = '#64d2d2';\nexport const Colors2021BG05 = '#00b9b9';\nexport const Colors2021BG07 = '#008c8c';\nexport const Colors2021BG10 = '#146464';\nexport const Colors2021PU02 = '#e6d7fa';\nexport const Colors2021PU04 = '#b482f0';\nexport const Colors2021PU05 = '#733ce6';\nexport const Colors2021PU07 = '#5a2daa';\nexport const Colors2021PU10 = '#3c1e73';\nexport const Colors2021GY01 = '#fbfbfb';\nexport const Colors2021GY02 = '#dcdcdc';\nexport const Colors2021GY04 = '#a0a0a0';\nexport const Colors2021GY05 = '#5a5a5a';\nexport const Colors2021GY07 = '#323232';\nexport const Colors2021GY10 = '#1e1e1e';\n\nexport const Vibes2021BlackColor = Colors2021GY07;\nexport const Vibes2021Base1Color = Colors2021S02;\nexport const Vibes2021Base2Color = Colors2021S03;\nexport const Vibes2021Base3Color = Colors2021S08;\nexport const Vibes2021ColumnColor = Colors2021S01;\nexport const Vibes2021BurntColor = Colors2021S09;\nexport const Vibes2021AlertColor = Colors2021RE05;\nexport const Vibes2021NoticeColor = Colors2021YE07;\nexport const Vibes2021BackgroundColor = Colors2021P01;\nexport const Vibes2021PrimaryCorpColor = Colors2021P05;\nexport const Vibes2021AccentCorpColor = Colors2021P04;\nexport const Vibes2021LinkCorpColor = Colors2021P07;\n"
  },
  {
    "path": "src/constants/Font.ts",
    "content": "// type-scale\n// design-token （各コンポーネントの実装に直接使わないでください）\nexport const FontSize0625 = '0.625rem'; // 10dp\nexport const FontSize0750 = '0.75rem'; // 12dp\nexport const FontSize0875 = '0.875rem'; // 14dp\nexport const FontSize1000 = '1rem'; // 16dp\nexport const FontSize1500 = '1.5rem'; // 24dp\n\n// semantic-token （各componentでfont-sizeを扱うときにはこちらを利用）\nexport const SmallestIconFontSize = FontSize0625; // 10dp\nexport const CaptionFontSize = FontSize0750; // 12dp\nexport const NormalFontSize = FontSize0875; // 14dp\nexport const Headline3FontSize = FontSize0875; // 14dp\nexport const Headline2FontSize = FontSize1000; // 16dp\nexport const Headline1FontSize = FontSize1500; // 24dp\n\nexport const MobileHeadline3FontSize = FontSize0875; // 14dp\nexport const MobileHeadline2FontSize = FontSize0875; // 14dp\nexport const MobileHeadline1FontSize = FontSize1000; // 16dp\n\nexport const FontFamily = `'-apple-system', BlinkMacSystemFont, 'Helvetica Neue',\n  'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo,\n  sans-serif`;\n\nexport const LineHeight = '1.5';\n\n// 地の文\nexport const NormalFont = `normal ${NormalFontSize}/${LineHeight} ${FontFamily}`;\n\n// キャプション（地の文よりも小さめ）\nexport const CaptionFont = `normal ${CaptionFontSize}/${LineHeight} ${FontFamily}`;\n\n// フォームのラベルや表の見出し（キャプションと同じ内容だが目的が違うので分けている）\nexport const ItemNameFont = `normal ${CaptionFontSize}/${LineHeight} ${FontFamily}`;\n\n// 見出し最大\nexport const HeadlineFont1 = `bold ${Headline1FontSize}/${LineHeight} ${FontFamily}`;\n\n// 見出し中間\nexport const HeadlineFont2 = `bold ${Headline2FontSize}/${LineHeight} ${FontFamily}`;\n\n// 見出し最小\nexport const HeadlineFont3 = `bold ${NormalFontSize}/${LineHeight} ${FontFamily}`;\n\n// 見出し最大 (モバイル)\nexport const MobileHeadlineFont1 = `bold ${MobileHeadline1FontSize}/${LineHeight} ${FontFamily}`;\n\n// 見出し中間 (モバイル)\nexport const MobileHeadlineFont2 = `bold ${MobileHeadline2FontSize}/${LineHeight} ${FontFamily}`;\n\n// 見出し最小 (モバイル)\nexport const MobileHeadlineFont3 = `bold ${MobileHeadline3FontSize}/${LineHeight} ${FontFamily}`;\n"
  },
  {
    "path": "src/constants/Size.ts",
    "content": "export const MinimumSize = '1px';\n\nexport const XSmallSize = '0.25rem'; // 4dp\nexport const SmallSize = '0.5rem'; // 8dp\nexport const BasicSize = '1rem'; // 16dp\nexport const LargeSize = '1.5rem'; // 24dp\nexport const XLargeSize = '2rem'; // 32dp\nexport const XXLargeSize = '3rem'; // 48dp\n\nexport const ContainerSize = '70rem'; // 70dp\n\nexport const FormControlHeight = '2.25rem'; //36dp\nexport const FormControlSmallHeight = '1.5rem'; // 24dp\nexport const FormControlLargeHeight = '3rem'; // 48dp\n\n// モバイルを想定した横幅の閾値(320 ~ 768px)\nexport const TabletBoundaryWidth = '64rem';\nexport const MobileBoundaryWidth = '48rem';\n// iPhone 8との境界\nexport const NarrowMobileBoundaryWidth = `${375 / 16}rem`;\n\n// border-radius-size\n// design-token （各コンポーネントの実装に直接使わないでください）\nexport const BorderRadius0250 = '0.25rem'; // 4dp\nexport const BorderRadius0500 = '0.5rem'; // 8dp\nexport const BorderRadius0750 = '0.75rem'; // 12dp\nexport const BorderRadius1000 = '1rem'; // 16dp\nexport const BorderRadius1500 = '1.5rem'; // 24dp\nexport const BorderRadius9900 = '99rem'; // 円形にするための大きい数字\n\n// semantic-token （各コンポーネントの実装に原則直接使わないでください）\nexport const XSmallBorderRadius = BorderRadius0250; // 4dp\nexport const SmallBorderRadius = BorderRadius0500; // 8dp\nexport const MediumBorderRadius = BorderRadius0750; // 12dp\nexport const LargeBorderRadius = BorderRadius1000; // 16dp\nexport const XLargeBorderRadius = BorderRadius1500; // 24dp\nexport const FullBorderRadius = BorderRadius9900; // この変数のみ単体で利用可能\n\n// alias-token（各componentでborder-radiusを扱うときにはこちらを利用）\nexport const BaseBorderRadius = SmallBorderRadius; // Base系コンポーネント\nexport const CardBorderRadius = MediumBorderRadius; // Card系コンポーネント\nexport const FloatingBorderRadius = LargeBorderRadius; // Floating系コンポーネント\nexport const PopupBorderRadius = LargeBorderRadius; // Popup系コンポーネント\nexport const DialogBorderRadius = XLargeBorderRadius; // Dialog系コンポーネント\nexport const FontBorderRadius = SmallBorderRadius; // テキストを含むコンポーネント\nexport const MiniPaddingBorderRadius = XSmallBorderRadius; // テキストを含むコンポーネントの中でもPaddingが小さいコンポーネント\nexport const FocusHighlightBorderRadius = XSmallBorderRadius; // フォーカスハイライト系コンポーネント\n"
  },
  {
    "path": "src/constants/ZIndex.ts",
    "content": "export const OverlayZIndex = '100';\nexport const FormActionsZIndex = '200';\nexport const FloatingZIndex = '500';\nexport const ModalZIndex = '1000';\nexport const MessageModalZIndex = '1500';\nexport const PopupZIndex = '2000';\nexport const PopupMessageZIndex = '3000';\nexport const FixedMessageZIndex = '4000';\nexport const MaxZIndex = '2147483647';\n"
  },
  {
    "path": "src/constants/index.ts",
    "content": "export * from './Color';\nexport * from './Font';\nexport * from './Size';\nexport * from './ZIndex';\n"
  },
  {
    "path": "src/hooks/useUniqueId.ts",
    "content": "import { useEffect, useState } from 'react';\n\nlet idCounter = 0;\nfunction createUniqueId(base: string): string {\n  return `${base}_${++idCounter}`;\n}\n\nexport default function useUniqueId(\n  base: string,\n  specifiedId?: string\n): string {\n  const [uniqueId, setUniqueId] = useState('');\n  useEffect(() => {\n    setUniqueId(specifiedId || createUniqueId(base));\n  }, [base, specifiedId]);\n  return uniqueId;\n}\n"
  },
  {
    "path": "src/index.ts",
    "content": "export * from './lv1';\nexport * from './lv2';\nexport * from './utilities';\nexport * from './constants';\n"
  },
  {
    "path": "src/internal/CommonStyle.ts",
    "content": "import styled from 'styled-components';\nimport { NormalFont, VibesBlackColor } from '../constants';\nimport {\n  MarginSize,\n  FunctionalMarginProps,\n} from '../utilities/functionalMarginClasses';\nimport {\n  MarginClassProps,\n  marginClassPropsToFunctionalMarginProps,\n} from '../utilities/marginClasses';\n\nexport const marginSizeToValue = (marginSize: MarginSize) =>\n  marginSize === 'auto' ? marginSize : `${marginSize}rem`;\n\nexport const CommonStyle = styled.span.attrs(\n  (props: FunctionalMarginProps) => props\n)`\n  font: ${NormalFont};\n  color: ${VibesBlackColor};\n  ${({ ma, mt, mb, ml, mr }) => ({\n    margin: ma\n      ? marginSizeToValue(ma)\n      : mt || mb || ml || mr\n      ? `${mt ? marginSizeToValue(mt) : 0} ${mr ? marginSizeToValue(mr) : 0} ${\n          mb ? marginSizeToValue(mb) : 0\n        } ${ml ? marginSizeToValue(ml) : 0}`\n      : 0,\n  })}\n`;\n\nexport const CommonStyleWithDeprecatedMarginProps = styled(CommonStyle).attrs(\n  ({\n    ma,\n    mt,\n    mb,\n    ml,\n    mr,\n    ...props\n  }: FunctionalMarginProps & MarginClassProps) => {\n    const converted = marginClassPropsToFunctionalMarginProps(props);\n    return {\n      ma,\n      mt: mt || converted.mt,\n      mb: mb || converted.mb,\n      mr: mr || converted.mr,\n      ml: ml || converted.ml,\n    };\n  }\n)``;\n"
  },
  {
    "path": "src/lv1/InlineSpinner.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../stories';\nimport InlineSpinner from './InlineSpinner';\nimport MarginBase from './bases/MarginBase';\nimport InlineLink from './buttons/InlineLink';\n\nexport default {\n  component: InlineSpinner,\n};\n\nexport const InlineSpinnerComponent = () => (\n  <InlineSpinner\n    isLoading={boolean('IsLoading', true, 'InlineSpinner')}\n    large={boolean('large', false, 'InlineSpinner')}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithButton = () => (\n  <>\n    <MarginBase ma={1}>\n      <InlineLink mr={0.5}>ローディング中</InlineLink>\n      <InlineSpinner isLoading />\n    </MarginBase>\n    <MarginBase ma={1}>\n      <InlineSpinner isLoading />\n      <InlineLink ml={0.5}>ローディング中</InlineLink>\n    </MarginBase>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/InlineSpinner.tsx",
    "content": "import lottie from 'lottie-web';\nimport * as React from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport spinner from './Loading/loading-parts.json';\nimport commonProps, { CommonProps } from '../utilities/commonProps';\nimport vbClassNames from '../utilities/vbClassNames';\n\ntype Props = {\n  /**\n   * 表示/非表示を切り替えます\n   */\n  isLoading: boolean;\n  /**\n   * 大きさを切り替えます\n   */\n  large?: boolean;\n} & CommonProps;\n\nconst InlineSpinner: React.FC<Props> = (props: Props) => {\n  const { isLoading, large } = props;\n  const lottieRef = React.useRef<HTMLDivElement>(null);\n  React.useEffect(() => {\n    if (lottieRef.current != null) {\n      const anim = lottie.loadAnimation({\n        animationData: spinner,\n        autoplay: true,\n        container: lottieRef.current,\n        loop: true,\n        renderer: 'svg',\n      });\n      return (): void => anim.destroy();\n    }\n  }, [isLoading, lottieRef]);\n\n  const baseClass = 'vb-spinner';\n\n  return (\n    <span {...commonProps(props, baseClass, { large })}>\n      <span\n        className={vbClassNames(`${baseClass}__base`, { modifier: { large } })}\n      >\n        <CSSTransition\n          classNames={vbClassNames(`${baseClass}__fade`, {\n            modifier: { large },\n          })}\n          in={isLoading}\n          timeout={300}\n          exit\n          unmountOnExit\n          // StrictModeで、\"Warning: findDOMNode is deprecated in StrictMode.\"が出ないように\n          // [FYI] https://github.com/reactjs/react-transition-group/issues/668#issuecomment-695162879\n          nodeRef={lottieRef}\n        >\n          <div\n            className={vbClassNames(`${baseClass}__animation`, {\n              modifier: { large },\n            })}\n            ref={lottieRef}\n          />\n        </CSSTransition>\n      </span>\n    </span>\n  );\n};\n\nexport default InlineSpinner;\n"
  },
  {
    "path": "src/lv1/Loading/loading-parts.json",
    "content": "{\"v\":\"5.7.4\",\"fr\":29.9700012207031,\"ip\":0,\"op\":60.0000024438501,\"w\":48,\"h\":48,\"nm\":\"コンポ 1\",\"ddd\":0,\"assets\":[],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"Line\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":0,\"s\":[0]},{\"t\":60.0000024438501,\"s\":[360]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[24,24,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"d\":1,\"ty\":\"el\",\"s\":{\"a\":0,\"k\":[32,32],\"ix\":2},\"p\":{\"a\":0,\"k\":[0,0],\"ix\":3},\"nm\":\"楕円形パス 1\",\"mn\":\"ADBE Vector Shape - Ellipse\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.24],\"y\":[1]},\"o\":{\"x\":[0.55],\"y\":[0]},\"t\":0,\"s\":[0]},{\"t\":50.0000020365418,\"s\":[100]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.383],\"y\":[0.736]},\"o\":{\"x\":[0.731],\"y\":[0.345]},\"t\":10,\"s\":[0]},{\"t\":60.0000024438501,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"パスのトリミング 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.156862745098,0.392156862745,0.941176470588,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"楕円形 1\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":60.0000024438501,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"bgLine\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[24,24,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"d\":1,\"ty\":\"el\",\"s\":{\"a\":0,\"k\":[32,32],\"ix\":2},\"p\":{\"a\":0,\"k\":[0,0],\"ix\":3},\"nm\":\"楕円形パス 1\",\"mn\":\"ADBE Vector Shape - Ellipse\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.913725490196,0.905882352941,0.905882352941,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"楕円形 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":60.0000024438501,\"st\":0,\"bm\":0}],\"markers\":[]}"
  },
  {
    "path": "src/lv1/Loading/loading-whole-2021.json",
    "content": "{\"v\":\"5.7.11\",\"fr\":29.9700012207031,\"ip\":0,\"op\":80.0000032584668,\"w\":504,\"h\":168,\"nm\":\"レイヤー 1/loading_swallow\",\"ddd\":0,\"assets\":[],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"レイヤー 1/loading_swallowアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[345.5,84.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[162,84,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.81,0],[0,-1.809],[-1.809,0],[0,1.81]],\"o\":[[-1.809,0],[0,1.81],[1.81,0],[0,-1.809]],\"v\":[[0,-3.277],[-3.276,-0.001],[0,3.277],[3.276,-0.001]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":129.01,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":11.378,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[29.002,76.154],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[7.157,-1.437],[-13.688,0],[-8.571,7.527],[10.721,0.571]],\"o\":[[8.846,9.093],[12.304,0],[-16.297,0.162],[-7.589,-0.498]],\"v\":[[-33.507,-6.39],[1.395,8.352],[33.508,-3.739],[-11.314,-7.854]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":135.46,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":11.378,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 2\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[65.018,89.282],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[26.348,-13.44],[-11.84,0],[-8.831,1.789],[0,0],[1.203,-0.455],[6.565,-1.433],[1.047,-0.998],[1.53,-1.167],[0,0],[-0.453,-1.689],[0,0],[1.216,-0.496],[6.528,-0.168],[1.948,-23.424],[0,0],[3.35,0.738],[0,0],[0,0],[0,0],[-7.246,0],[-1.088,-0.154],[-2.114,1.626]],\"o\":[[-6.578,30.501],[10.958,2.825],[9.359,0],[0,0],[-0.531,1.17],[-6.175,2.337],[-1.414,0.308],[-1.392,1.325],[0,0],[1.737,0.202],[0,0],[-1.313,0],[-5.728,2.336],[14.409,16.682],[0,0],[-2.092,-2.719],[0,0],[0,0],[0,0],[4.312,-5.154],[1.13,0],[2.641,0.374],[0,0]],\"v\":[[53.2,-79],[0.234,-10.494],[34.52,-6.167],[61.85,-8.894],[61.464,-8.045],[58.763,-5.494],[39.634,0.18],[35.845,2.131],[31.46,5.873],[57.002,8.846],[60.63,11.979],[23.238,11.979],[19.42,12.765],[0.932,16.625],[21.331,79],[-37.842,2.104],[-46.267,-3.248],[-61.85,-6.682],[-54.026,-8.583],[-54.029,-8.586],[-35.991,-17.018],[-32.662,-16.784],[-25.227,-18.675]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":654.725,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":32.252,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 2\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[66.85,84],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[26.348,-13.44],[-11.84,0],[-8.831,1.789],[0,0],[1.203,-0.455],[6.565,-1.433],[1.047,-0.998],[1.53,-1.167],[0,0],[-0.453,-1.689],[0,0],[1.216,-0.496],[6.528,-0.168],[1.948,-23.424],[0,0],[3.35,0.738],[0,0],[0,0],[0,0],[-7.246,0],[-1.088,-0.154],[-2.114,1.626]],\"o\":[[-6.578,30.501],[10.958,2.825],[9.359,0],[0,0],[-0.531,1.17],[-6.175,2.337],[-1.414,0.308],[-1.392,1.325],[0,0],[1.737,0.202],[0,0],[-1.313,0],[-5.728,2.336],[14.409,16.682],[0,0],[-2.092,-2.719],[0,0],[0,0],[0,0],[4.312,-5.154],[1.13,0],[2.641,0.374],[0,0]],\"v\":[[53.2,-79.569],[0.234,-11.063],[34.52,-6.736],[61.85,-9.463],[61.464,-8.614],[58.763,-6.063],[39.634,-0.389],[35.845,1.562],[31.46,5.304],[57.002,8.277],[60.63,11.41],[23.238,11.41],[19.42,12.196],[0.932,16.056],[21.331,78.431],[-37.842,1.535],[-46.267,-3.817],[-61.85,-7.251],[-54.026,-9.152],[-54.029,-9.155],[-35.991,-17.587],[-32.662,-17.353],[-25.227,-19.244]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[66.85,84.569],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[161.514,86.1],\"to\":[0,0],\"ti\":[0,0]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":20,\"s\":[161.514,82.1],\"to\":[0,0],\"ti\":[0,0]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":40,\"s\":[161.514,86.1],\"to\":[0,0],\"ti\":[0,0]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":60,\"s\":[161.514,82.1],\"to\":[0,0],\"ti\":[0,0]},{\"t\":80.0000032584668,\"s\":[161.514,86.1]}],\"ix\":2},\"a\":{\"a\":0,\"k\":[161.514,84.069],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 7\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-12.154,9.723],[0.547,3.119],[3.166,0.053],[0.652,-3.099],[-2.919,-1.226]],\"o\":[[0,0],[33.005,-0.546],[4.697,-3.758],[-0.548,-3.119],[-3.166,-0.053],[-0.651,3.099],[0,0]],\"v\":[[-47.759,17.529],[-33.157,17.773],[41.145,-3.133],[47.212,-12.257],[40.815,-17.72],[34.24,-12.473],[38.148,-5.024]],\"c\":false},\"ix\":2,\"x\":\"var $bm_rt;\\n$bm_rt = content('グループ 6').content('パス 1').path;\"},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":13,\"s\":[0]},{\"t\":15.0000006109625,\"s\":[100]}],\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":14,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":25,\"s\":[96.757]},{\"t\":28.0000011404634,\"s\":[145.136]}],\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":139.378,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":35,\"s\":[0]},{\"t\":47.0000019143492,\"s\":[-135]}],\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[180.477,69.701],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-25.523,21.269]],\"o\":[[36.207,4.656],[0,0]],\"v\":[[-46.057,9.625],[46.057,-14.281]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":29,\"s\":[0]},{\"t\":32.0000013033867,\"s\":[100]}],\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":31,\"s\":[0]},{\"t\":45.0000018328876,\"s\":[145.136]}],\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":111.378,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":47,\"s\":[0]},{\"t\":57.0000023216576,\"s\":[-103]}],\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[272.795,56.542],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":80.0000032584668,\"st\":0,\"bm\":0}],\"markers\":[]}"
  },
  {
    "path": "src/lv1/Loading.stories.tsx",
    "content": "import { boolean, text } from '@storybook/addon-knobs';\nimport * as React from 'react';\n\nimport Loading from './Loading';\nimport Button from './buttons/Button';\nimport SectionTitle from './typography/SectionTitle';\nimport { commonKnobs } from '../../stories';\nimport { TextField } from '.';\n\nconst LOREM =\n  'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';\n\nexport default {\n  component: Loading,\n};\nexport const WithKnobs = () => (\n  <Loading\n    inline={boolean('inline', false, 'Loading')}\n    isLoading={boolean('isLoading', true, 'Loading')}\n    coverAll={boolean('CoverAll', false, 'Loading')}\n    message={text('message', '', 'Loading')}\n    {...commonKnobs()}\n  >\n    {LOREM}\n  </Loading>\n);\n\nexport const IsLoadingFalse = () => (\n  <Loading isLoading={false}>{LOREM}</Loading>\n);\nexport const IsLoadingTrue = () => <Loading isLoading={true}>{LOREM}</Loading>;\n\nexport const IsInlineTrue = () => (\n  <Loading isLoading inline>\n    <TextField />\n  </Loading>\n);\n\nconst CoverAllInternal = ({ message }: { message?: React.ReactNode }) => {\n  const [isLoading, setIsLoading] = React.useState<boolean>(false);\n\n  return (\n    <Loading coverAll message={message} isLoading={isLoading}>\n      <Button\n        onClick={() => {\n          setIsLoading(true);\n          setTimeout(() => setIsLoading(false), 5 * 1000);\n        }}\n      >\n        ローディングを表示(5秒間)\n      </Button>\n    </Loading>\n  );\n};\nexport const CoverAll = () => <CoverAllInternal />;\nexport const CoverAllWithMessage = () => (\n  <CoverAllInternal message={<SectionTitle>ローディング中です</SectionTitle>} />\n);\n"
  },
  {
    "path": "src/lv1/Loading.tsx",
    "content": "import lottie from 'lottie-web';\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\n\nimport animDataParts from './Loading/loading-parts.json';\nimport animDataWhole2021 from './Loading/loading-whole-2021.json';\nimport commonProps, { CommonProps } from '../utilities/commonProps';\nimport { usePortalParentContext } from '../utilities/VibesProvider';\n\ntype Props = (\n  | {\n      coverAll: true;\n      children?: React.ReactNode;\n    }\n  | {\n      coverAll?: false;\n      children: NonNullable<React.ReactNode>;\n    }\n) & {\n  isLoading: boolean;\n  message?: React.ReactNode;\n  inline?: boolean;\n} & CommonProps;\n\n/**\n * ローディング中に表示領域のカバーとアイコンを表示するコンポーネント。\n *\n * * `coverAll` props を指定しないと子要素をカバー、指定すると全画面領域をカバーする。\n * * `coverAll` props を指定しているときに `message` props を指定すると、つばめの下に内容が表示される。\n *   * 「ローディング中です」とかプログレスバーを表示する場合に使用する想定。\n * * Loading を表示中でも、カバーされたコンテンツはキーボード操作等により操作できます。必要に応じて追加の措置を講じてください\n *   * 「フォームが再度送信される」「ロードが終わった後にユーザーが迷子になる」のような理由でユーザーの操作を防ぎたいボタン等については、 `disabled` 属性によって非活性にするなどして操作を防ぐ必要があります。\n *   * 他の画面へのリンクについては、ブラウザの「戻る」ボタンやブラウザのウインドウを閉じる操作を防げないことから、非活性にする必要はないでしょう（本来、リンクには `disabled` 属性は存在しません）。\n *\n * 使用例1:\n *\n * ```jsx\n * <Loading isLoading={isLoading}>\n *   <p>\n *     isLoading が true 時に表示領域をカバーしたいコンテンツを子要素として配置する。\n *   </p>\n * </Loading>\n * ```\n *\n * 使用例2:\n *\n * ```jsx\n * <Loading coverAll isLoading={isLoading}>\n *   <p>\n *     coverAll 指定時は全画面をカバーする。\n *   </p>\n * </Loading>\n * ```\n */\nconst Loading: React.FC<Props> = (props: Props) => {\n  const { children, coverAll, inline, isLoading, message } = props;\n  const lottieRef = React.useRef<HTMLDivElement>(null);\n  const portalParent = usePortalParentContext();\n  React.useEffect(() => {\n    if (lottieRef.current != null) {\n      const anim = lottie.loadAnimation({\n        animationData: coverAll ? animDataWhole2021 : animDataParts,\n        autoplay: true,\n        container: lottieRef.current,\n        loop: true,\n        renderer: 'svg',\n      });\n      return (): void => anim.destroy();\n    }\n  }, [coverAll, isLoading, lottieRef]);\n\n  const [delayedMessage, setDelayedMessage] =\n    React.useState<React.ReactNode>(null);\n  React.useEffect(() => {\n    const timeoutId = setTimeout(() => {\n      setDelayedMessage(message);\n    }, 100);\n\n    return () => {\n      clearTimeout(timeoutId);\n    };\n  }, [message]);\n\n  return coverAll ? (\n    <>\n      {ReactDOM.createPortal(\n        <CSSTransition\n          classNames=\"vb-loading__fade\"\n          in={isLoading}\n          timeout={300}\n          exit\n          unmountOnExit\n          // StrictModeで、\"Warning: findDOMNode is deprecated in StrictMode.\"が出ないように\n          // [FYI] https://github.com/reactjs/react-transition-group/issues/668#issuecomment-695162879\n          nodeRef={lottieRef}\n        >\n          <div {...commonProps(props, 'vb-loading')}>\n            <div className=\"vb-loading__cover vb-loading__cover--coverAll\">\n              <div\n                className=\"vb-loading__animation vb-loading__animation--coverAll\"\n                ref={lottieRef}\n              />\n              {!!message && (\n                <div\n                  className=\"vb-loading__message\"\n                  aria-live=\"polite\"\n                  aria-atomic=\"true\"\n                >\n                  {delayedMessage}\n                </div>\n              )}\n            </div>\n          </div>\n        </CSSTransition>,\n        portalParent\n      )}\n      {children}\n    </>\n  ) : (\n    <div {...commonProps(props, 'vb-loading', { block: true, inline })}>\n      <CSSTransition\n        classNames=\"vb-loading__fade\"\n        in={isLoading}\n        timeout={300}\n        exit\n        unmountOnExit\n        nodeRef={lottieRef}\n      >\n        <div className=\"vb-loading__cover\">\n          <div className=\"vb-loading__animation\" ref={lottieRef} />\n        </div>\n      </CSSTransition>\n      {children}\n    </div>\n  );\n};\n\nexport default Loading;\n"
  },
  {
    "path": "src/lv1/a11y/FocusHighlight.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { FocusHighlight } from './FocusHighlight';\nimport { boolean, select } from '@storybook/addon-knobs';\nimport { VibesBlackColor, VibesColumnColor } from '../../constants';\n\nexport default {\n  component: FocusHighlight,\n};\nconst FocusableElement: React.FC = ({\n  children,\n}: {\n  children?: React.ReactNode;\n}) => (\n  <div\n    style={{\n      outline: 'none',\n      display: 'inline-block',\n      minWidth: '11rem',\n      background: VibesColumnColor,\n      textAlign: 'center',\n      color: VibesBlackColor,\n      padding: '0.5rem',\n      border: '1px solid #5a5a5a',\n    }}\n    // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n    tabIndex={0}\n  >\n    {children}\n  </div>\n);\nexport const FocusHighlightComponent = () => (\n  <FocusHighlight\n    inline={boolean('inline', false, 'FocusHighlight')}\n    highlightStyle={\n      select(\n        'highlightStyle',\n        { inset: 'inset', outset: 'outset', undefined: '' },\n        'outset',\n        'FocusHighlight'\n      ) || undefined\n    }\n    cornerStyle={\n      select(\n        'cornerStyle',\n        { round: 'round', sharp: 'sharp', undefined: '' },\n        'sharp',\n        'FocusHighlight'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <FocusableElement>focusable element</FocusableElement>\n  </FocusHighlight>\n);\n\nexport const HighlightStyle = () => (\n  <>\n    <FocusHighlight inline highlightStyle=\"outset\" mr={1} mb={1}>\n      <FocusableElement>outset</FocusableElement>\n    </FocusHighlight>\n    <FocusHighlight inline highlightStyle=\"inset\" mr={1} mb={1}>\n      <FocusableElement>inset</FocusableElement>\n    </FocusHighlight>\n  </>\n);\n\nexport const CornerStyle = () => (\n  <>\n    <FocusHighlight inline cornerStyle=\"sharp\" mr={1} mb={1}>\n      <FocusableElement>sharp</FocusableElement>\n    </FocusHighlight>\n    <FocusHighlight inline cornerStyle=\"round\" mr={1} mb={1}>\n      <FocusableElement>round</FocusableElement>\n    </FocusHighlight>\n\n    <FocusHighlight\n      inline\n      cornerStyle=\"sharp\"\n      highlightStyle=\"inset\"\n      mr={1}\n      mb={1}\n    >\n      <FocusableElement>sharp (inset)</FocusableElement>\n    </FocusHighlight>\n    <FocusHighlight\n      inline\n      cornerStyle=\"round\"\n      highlightStyle=\"inset\"\n      mr={1}\n      mb={1}\n    >\n      <FocusableElement>round (inset)</FocusableElement>\n    </FocusHighlight>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/a11y/FocusHighlight.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * `true` の場合、`display: inline-block` となります\n   */\n  inline?: boolean;\n  /**\n   * フォーカスハイライト表示の位置。 `inset` にすると内側に表示されます。\n   */\n  highlightStyle?: 'inset' | 'outset';\n  /**\n   * フォーカスハイライトの角を丸めるかどうか\n   *\n   * `round` にした場合、 `$vbFocusHighlightBorderRadius` = 0.25rem = 4px の角丸となります。必ずしもコンテンツの丸みと一致するようになっていないことに注意してください。\n   */\n  cornerStyle?: 'round' | 'sharp';\n  /**\n   * `full`の場合、`width: 100%` になります。\n   */\n  width?: 'fit-content' | 'full';\n} & CommonProps;\n\n/**\n * フォーカスインジケーターを非表示にしている要素を `children` に入れ、フォーカスインジケーターを表示させるためのコンポーネントです。\n *\n * ほとんどのVibesのコンポーネントは、フォーカスインジケーターの指定をしていないため、ブラウザが提供するものが使用されます。\n * そのため、ほとんどの場所ではこのコンポンーネントを使用する必要はありません。\n * ブラウザが提供するフォーカスインジケーターの表示では視認性が低いなどの問題がある場合にのみ、使用してください。\n */\nexport const FocusHighlight: React.FC<Props> = ({\n  children,\n  inline,\n  highlightStyle,\n  cornerStyle,\n  width = 'fit-content',\n  ...props\n}: Props) => (\n  <span\n    {...commonProps(props, 'vb-focusHighlight', {\n      inline,\n      inset: highlightStyle === 'inset',\n      round: cornerStyle === 'round',\n      full: width === 'full',\n    })}\n  >\n    {children}\n  </span>\n);\n"
  },
  {
    "path": "src/lv1/a11y/FocusTrap.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { FocusTrap } from './FocusTrap';\nimport { boolean } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport { Button, Paragraph, ColumnBase, TextField } from '../..';\nimport { Keys } from '../../utilities/keyboard';\n\nexport default {\n  component: FocusTrap,\n};\n\nexport const FocusTrapComponent = () => {\n  const button1 = React.useRef<HTMLButtonElement>(null);\n  const button5 = React.useRef<HTMLButtonElement>(null);\n  return (\n    <>\n      <Button ref={button1} mb={1}>\n        Button 1\n      </Button>\n      <FocusTrap\n        loop={boolean('loop', false, 'FocusTrap')}\n        onFocusInsideTop={action('onFocusInsideTop')}\n        onFocusInsideBottom={action('onFocusInsideBottom')}\n        onFocusOutsideTop={action('onFocusOutsideTop')}\n        onFocusOutsideBottom={action('onFocusOutsideBottom')}\n        {...commonKnobs}\n      >\n        <ColumnBase>\n          <Paragraph mb={1}>\n            フォーカストラップを抜けるには、Escキーを押してください（この挙動はFocusTrapコンポーネントには実装されていません）\n          </Paragraph>\n          {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n          <div\n            onKeyDown={(e) => {\n              if (e.key === Keys.ESC && button5.current) {\n                button5.current.focus();\n              }\n            }}\n          >\n            <Button mr={1} mb={1}>\n              Button 2\n            </Button>\n            <Button mr={1} mb={1}>\n              Button 3\n            </Button>\n            <Button mr={1} mb={1}>\n              Button 4\n            </Button>\n          </div>\n        </ColumnBase>\n      </FocusTrap>\n      <Button ref={button5} mt={1} onClick={() => button1.current?.focus()}>\n        Button 5 (Click to focus on Button 1)\n      </Button>\n    </>\n  );\n};\n\nexport const Loop = () => {\n  const button1 = React.useRef<HTMLButtonElement>(null);\n  const button5 = React.useRef<HTMLButtonElement>(null);\n  return (\n    <>\n      <Button ref={button1} mb={1}>\n        Button 1\n      </Button>\n      <FocusTrap loop>\n        <ColumnBase>\n          <Paragraph mb={1}>\n            フォーカスをFocusTrapコンポーネント内でループさせられます。\n          </Paragraph>\n          <Paragraph mb={1}>\n            フォーカストラップを抜けるには、Escキーを押してください（この挙動はFocusTrapコンポーネントには実装されていません）\n          </Paragraph>\n          {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n          <div\n            onKeyDown={(e) => {\n              if (e.key === Keys.ESC && button5.current) {\n                button5.current.focus();\n              }\n            }}\n          >\n            <Button mr={1} mb={1}>\n              Button 2\n            </Button>\n            <Button mr={1} mb={1}>\n              Button 3\n            </Button>\n            <Button mr={1} mb={1}>\n              Button 4\n            </Button>\n          </div>\n        </ColumnBase>\n      </FocusTrap>\n      <Button ref={button5} mt={1} onClick={() => button1.current?.focus()}>\n        Button 5 (Click to focus on Button 1)\n      </Button>\n    </>\n  );\n};\n\nexport const CustomizedFocusOrder = () => {\n  const button1 = React.useRef<HTMLButtonElement>(null);\n  const button2 = React.useRef<HTMLButtonElement>(null);\n  const button3 = React.useRef<HTMLButtonElement>(null);\n  const button4 = React.useRef<HTMLButtonElement>(null);\n  const button2a = React.useRef<HTMLButtonElement>(null);\n  const button2c = React.useRef<HTMLButtonElement>(null);\n  return (\n    <>\n      <Button ref={button1} mr={1} mb={1}>\n        Button 1\n      </Button>\n      <FocusTrap\n        inline\n        onFocusInsideTop={() => {\n          button1.current?.focus();\n          return true;\n        }}\n        onFocusInsideBottom={() => {\n          button2a.current?.focus();\n          return true;\n        }}\n        onFocusOutsideBottom={() => {\n          button2c.current?.focus();\n          return true;\n        }}\n      >\n        <Button ref={button2} mr={1} mb={1}>\n          Button 2\n        </Button>\n      </FocusTrap>\n      <Button ref={button3} mr={1} mb={1}>\n        Button 3\n      </Button>\n\n      <FocusTrap\n        onFocusInsideTop={() => {\n          button2.current?.focus();\n          return true;\n        }}\n        onFocusInsideBottom={() => {\n          button3.current?.focus();\n          return true;\n        }}\n        onFocusOutsideTop={() => {\n          button4.current?.focus();\n          return true;\n        }}\n        onFocusOutsideBottom={() => {\n          button3.current?.focus();\n          return true;\n        }}\n      >\n        <ColumnBase>\n          <Button mr={1} mb={1} ref={button2a}>\n            Button 2-A\n          </Button>\n          <Button mr={1} mb={1}>\n            Button 2-B\n          </Button>\n          <Button mr={1} mb={1} ref={button2c}>\n            Button 2-C\n          </Button>\n        </ColumnBase>\n      </FocusTrap>\n      <Button ref={button4} mt={1}>\n        Button 4\n      </Button>\n    </>\n  );\n};\n\nexport const NoFocusableElement = () => {\n  const button1 = React.useRef<HTMLButtonElement>(null);\n  const button2 = React.useRef<HTMLButtonElement>(null);\n  return (\n    <>\n      <Button ref={button1} mb={1}>\n        Button 1\n      </Button>\n      {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n      <div\n        onKeyDown={(e) => {\n          if (e.key === Keys.ESC && button2.current) {\n            button2.current.focus();\n          }\n        }}\n      >\n        <FocusTrap loop>\n          <ColumnBase>\n            <Paragraph mb={1}>\n              フォーカストラップを抜けるには、Escキーを押してください（この挙動はFocusTrapコンポーネントには実装されていません）\n            </Paragraph>\n            <Paragraph mb={1}>\n              フォーカス可能な要素がない場合、コンポーネントの提供する要素にフォーカスが留まり続けます\n            </Paragraph>\n            <Button disabled mr={1}>\n              disbled button（フォーカスできません）\n            </Button>\n            <TextField\n              label=\"テキストフィールド\"\n              placeholder=\"disabled field （フォーカスできません）\"\n              disabled\n              width=\"large\"\n            />\n          </ColumnBase>\n        </FocusTrap>\n      </div>\n      <Button ref={button2} mt={1} onClick={() => button1.current?.focus()}>\n        Button 2 (Click to focus on Button 1)\n      </Button>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/a11y/FocusTrap.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { getFocusableElements } from '../../utilities/FocusableEelements';\n\ntype Props = {\n  children: React.ReactNode;\n  /** フォーカスをループさせるかどうか。`true` にすると、末尾までフォーカスが移動したあと、先頭に移動するようになります */\n  loop?: boolean;\n  /** display:inline-blockとなり、要素がspanになります */\n  inline?: boolean;\n  /** フォーカスが外側からコンポーネントの先端に到達した場合の処理です。 `true` を返した場合、コンポーネント内にフォーカスを移す処理を行いません。 */\n  onFocusOutsideTop?: (event: React.FocusEvent) => void | boolean;\n  /** フォーカスが外側からコンポーネントの後端に到達した場合の処理です。 `true` を返した場合、コンポーネント内にフォーカスを移す処理を行いません。 */\n  onFocusOutsideBottom?: (event: React.FocusEvent) => void | boolean;\n  /** フォーカスが内側からコンポーネントの先端に到達した場合の処理です。 `true` を返した場合、コンポーネント内にフォーカスを戻す処理を行いません。 */\n  onFocusInsideTop?: (event: React.FocusEvent) => void | boolean;\n  /** フォーカスが内側からコンポーネントの後端に到達した場合の処理です。 `true` を返した場合、コンポーネント内にフォーカスを戻す処理を行いません。 */\n  onFocusInsideBottom?: (event: React.FocusEvent) => void | boolean;\n} & CommonProps;\n\n/**\n * フォーカストラップ（Tabキー/Shift+Tabキーによるフォーカス移動では脱出できない領域）を作るコンポーネントです\n *\n * フォーカストラップは、上手く作ればキーボードによる操作が効率化され、ユーザーの理解を助けることができます。\n * しかし、作り方が悪いとキーボードによる操作の完遂が不可能になってしまうことがあります。\n *\n * **フォーカストラップを作る場合は、慎重に設計とテストを行ってください**。\n * 特に、Tabキー、矢印キー、Escキーなどを使って、簡単かつユーザーが予想しやすい方法でフォーカストラップから脱出できるような仕組みを必ず用意してください\n * （[キーボード・トラップの回避](https://a11y-guidelines.freee.co.jp/categories/input_device.html#gl-input-device-no-trap)）。\n *\n * このコンポーネントは、単純なフォーカストラップのほか、先端/末尾から移動する際に特定の場所にフォーカスを移すような挙動や、\n * フォーカス順序を意図的にDOM上の順序とは変えるようなこともできます。\n *\n * `onFocusOutsideTop` `onFocusOutsideBottom` は、FocusTrap内へフォーカスが進入しようとした場合の処理を定義できます。\n * また、 `onFocusInsideTop` `onFocusInsideBottom` は、FocusTrapの外へフォーカスが脱出しようとした場合の処理を定義できます。\n * これらのコールバックが `true` を返す場合、FocusTrapコンポーネントはフォーカスを移動させる処理を行いません（通常はFocusTrap内の先頭または末尾の要素にフォーカスを移します）。\n * これらを使うことで、複雑な順序のフォーカス制御を行うことができます。\n *\n *\n */\nexport const FocusTrap: React.FC<Props> = ({\n  children,\n  loop,\n  inline,\n  onFocusOutsideTop,\n  onFocusOutsideBottom,\n  onFocusInsideTop,\n  onFocusInsideBottom,\n  ...props\n}: Props) => {\n  const ref = React.useRef<HTMLDivElement>(null);\n  return React.createElement(\n    inline ? 'span' : 'div',\n    commonProps(props, 'vb-focusTrap', { inline }),\n    <>\n      <span\n        // 外から来たときは先頭の要素にフォーカスさせる\n        // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n        tabIndex={0}\n        onFocus={(e) => {\n          if (onFocusOutsideTop && onFocusOutsideTop(e)) {\n            return;\n          }\n          if (ref.current) {\n            const focusable = getFocusableElements(ref.current);\n            (focusable.length > 0\n              ? (focusable[0] as HTMLElement)\n              : ref.current\n            ).focus();\n          }\n        }}\n      />\n      <span\n        // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n        tabIndex={0}\n        onFocus={(e) => {\n          if (onFocusInsideTop && onFocusInsideTop(e)) {\n            return;\n          }\n          if (ref.current) {\n            const focusable = getFocusableElements(ref.current);\n            (focusable.length > 0\n              ? ((loop\n                  ? focusable[focusable.length - 1]\n                  : focusable[0]) as HTMLElement)\n              : ref.current\n            ).focus();\n          }\n        }}\n      />\n      {React.createElement(\n        inline ? 'span' : 'div',\n        { tabIndex: -1, ref },\n        children\n      )}\n      <span\n        // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n        tabIndex={0}\n        onFocus={(e) => {\n          if (onFocusInsideBottom && onFocusInsideBottom(e)) {\n            return;\n          }\n          if (ref.current) {\n            const focusable = getFocusableElements(ref.current);\n            (focusable.length > 0\n              ? ((loop\n                  ? focusable[0]\n                  : focusable[focusable.length - 1]) as HTMLElement)\n              : ref.current\n            ).focus();\n          }\n        }}\n      />\n      <span\n        // 外から来たときは末尾の要素にフォーカスさせる\n        // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n        tabIndex={0}\n        onFocus={(e) => {\n          if (onFocusOutsideBottom && onFocusOutsideBottom(e)) {\n            return;\n          }\n          if (ref.current) {\n            const focusable = getFocusableElements(ref.current);\n            (focusable.length > 0\n              ? (focusable[focusable.length - 1] as HTMLElement)\n              : ref.current\n            ).focus();\n          }\n        }}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/a11y/VisuallyHidden.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { text, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../buttons/Button';\nimport VisuallyHidden from './VisuallyHidden';\n\nexport default {\n  component: VisuallyHidden,\n};\nexport const WithKnobs = () => (\n  <VisuallyHidden\n    autoRead={boolean('autoRead', false, 'VisuallyHidden')}\n    assertive={boolean('assertive', false, 'VisuallyHidden')}\n    {...commonKnobs()}\n  >\n    {text(\n      'Text',\n      'これは見えないテキストです。視覚上の要素にはならないが、スクリーンリーダーでは読める必要のあるテキストがどうしても必要な場合に使用してください。',\n      'VisuallyHidden'\n    )}\n  </VisuallyHidden>\n);\n\n//ここからは、 autoRead 機能をテストするためのあれこれ\ntype Props = Record<string, never>;\ntype State = {\n  count: number;\n};\n\n//autoReadで読み上げるカウンター\nclass TestCounter extends React.Component<Props, State> {\n  state = { count: 0 };\n  constructor(props: Props) {\n    super(props);\n    this.handleCountUp = this.handleCountUp.bind(this);\n  }\n\n  handleCountUp() {\n    this.setState((state) => {\n      return { count: state.count + 1 };\n    });\n  }\n\n  render() {\n    return (\n      <div>\n        <VisuallyHidden\n          autoRead={true}\n          assertive={boolean('assertive', false, 'VisuallyHidden')}\n          {...commonKnobs()}\n        >\n          カウンターは {this.state.count}です。\n        </VisuallyHidden>\n        <Button onClick={this.handleCountUp}>カウンター増やす</Button>\n      </div>\n    );\n  }\n}\n\nexport const AutoReadSample = () => <TestCounter />;\n\nexport const NotificationToScreenreaders = () => {\n  const [message, setMessage] = React.useState<string>('');\n  React.useEffect(() => {\n    if (message) {\n      // 連続で同じメッセージを読ませるために、メッセージがセットされたら適当な間隔を置いたあとで削除する\n      const timeoutId = setTimeout(() => setMessage(''), 2000);\n      return () => clearTimeout(timeoutId);\n    }\n  }, [message]);\n\n  return (\n    <>\n      <Button onClick={() => setMessage('こんにちは、私の声は聞こえますか？')}>\n        スクリーンリーダーに通知を読ませる\n      </Button>\n      {message && <VisuallyHidden autoRead>{message}</VisuallyHidden>}\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/a11y/VisuallyHidden.tsx",
    "content": "import * as React from 'react';\nimport { CommonProps, pickCommonProps } from '../../utilities/commonProps';\nimport styled from 'styled-components';\nimport { CommonStyle } from '../../internal/CommonStyle';\n\ntype Props = {\n  children?: React.ReactNode;\n  id?: string;\n  autoRead?: boolean;\n  assertive?: boolean;\n} & CommonProps;\n\nconst VisuallyHiddenStyle = styled(CommonStyle).attrs(() => ({ as: 'div' }))`\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  clip: rect(1px 1px 1px 1px);\n`;\n\n/**\n * 視覚的には見えないが、スクリーンリーダー等からは「見える」要素を提供します。\n * `autoRead` オプションを付けることで、 `aria-live=\"polite\"` な、内部が書き変わったときに自動的に読み上げられる要素となります。\n */\nconst VisuallyHidden: React.FC<Props> = (props: Props) => {\n  const { children, autoRead, id, assertive } = props;\n  const live = autoRead ? (assertive ? 'assertive' : 'polite') : undefined;\n  const atomic = live ? true : undefined; //自動で読む場合は必ずtrueにする。そうしないと、firefoxで差分だけの読み上げになってしまう(ほんとうはこっちの挙動が正しいのだけれど、chromeはaria-atomicを無視するので、互換性的に差分読み上げは使わない)\n\n  // aria-liveで自動的にスクリーンリーダーが読むようにしたいが、aria-liveな要素の挿入と同時にコンテンツを入れるとNVDAでは読み上げてくれない\n  // そこで最初のレンダリング時のみ 100ms ディレイさせて中に入れてやることで、無理矢理読ませている\n  const [isInitialRender, setInitialRender] = React.useState(true);\n\n  React.useEffect(() => {\n    if (autoRead && isInitialRender) {\n      const timeoutId = setTimeout(() => setInitialRender(false), 100);\n      return () => {\n        clearTimeout(timeoutId);\n      };\n    }\n  }, [autoRead, isInitialRender]);\n\n  return (\n    <VisuallyHiddenStyle\n      {...pickCommonProps(props)}\n      id={id}\n      aria-live={live}\n      aria-atomic={atomic}\n    >\n      {/* 初回レンダー時、autoReadならchildrenを入れない。useEffect内のsetTimeoutで100ms遅らせる。 */}\n      {isInitialRender && autoRead ? false : children}\n    </VisuallyHiddenStyle>\n  );\n};\n\nexport default VisuallyHidden;\n"
  },
  {
    "path": "src/lv1/bases/Balloon.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { select, boolean } from '@storybook/addon-knobs';\nimport Balloon, { BalloonInternal } from './Balloon';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: BalloonInternal,\n};\nexport const BaloonComponent = () => (\n  <div\n    style={{\n      width: '60rem',\n      marginTop: '6rem',\n      marginRight: 'auto',\n      marginLeft: 'auto',\n      position: 'relative',\n    }}\n  >\n    <Balloon\n      small={boolean('Small', false, 'Balloon')}\n      border={\n        select(\n          'Border',\n          {\n            none: '',\n            default: 'default',\n            notice: 'notice',\n            alert: 'alert',\n            success: 'success',\n          },\n          '',\n          'Balloon'\n        ) || undefined // none時にundefinedにしたいが、selectのoptionにundefinedを渡せないので空文字を||でundefinedにしている\n      }\n      position={select(\n        'Position',\n        {\n          center: 'center',\n          left: 'left',\n          right: 'right',\n        },\n        'center',\n        'Balloon'\n      )}\n      verticalPosition={\n        select(\n          'verticalPosition',\n          { top: 'top', bottom: 'bottom', none: '' },\n          '',\n          'Balloon'\n        ) || undefined\n      }\n      {...commonKnobs()}\n    >\n      バルーンはツールチップやシステムメッセージなどに利用できます\n    </Balloon>\n  </div>\n);\n"
  },
  {
    "path": "src/lv1/bases/Balloon.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  small?: boolean;\n  border?: 'default' | 'alert' | 'notice' | 'success';\n  position?: 'left' | 'right' | 'center';\n  verticalPosition?: 'top' | 'bottom';\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * バルーンはツールチップやシステムメッセージなどに利用できます\n */\nexport const BalloonInternal: React.ForwardRefRenderFunction<\n  HTMLDivElement,\n  Props\n> = (props: Props, ref?: React.Ref<HTMLDivElement>) => {\n  const {\n    children,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    border,\n    position,\n    verticalPosition,\n    marginSize,\n  } = props;\n  const classModifiers = {\n    small,\n    'border-default': border === 'default',\n    'border-alert': border === 'alert',\n    'border-notice': border === 'notice',\n    'border-success': border === 'success',\n    left: position === 'left',\n    right: position === 'right',\n    top: verticalPosition === 'top',\n    bottom: verticalPosition === 'bottom',\n  };\n\n  return (\n    // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n    <div\n      {...commonProps(props, 'vb-balloon', classModifiers, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n      // フォーカスを受けられるようにtabIndex=-1にしているが、クリック時にフォーカスしてしまうため、mousedownを抑止する\n      onMouseDown={(e: React.MouseEvent<HTMLHeadElement>) => e.preventDefault()}\n      tabIndex={-1}\n      ref={ref}\n    >\n      {children}\n    </div>\n  );\n};\n\nconst Balloon = React.forwardRef(BalloonInternal);\nexport default Balloon;\n"
  },
  {
    "path": "src/lv1/bases/CardBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport CardBase from './CardBase';\nimport Paragraph from '../typography/Paragraph';\nimport { commonKnobs } from '../../../stories';\nimport { boolean, text, select } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport { VibesProvider } from '../../utilities';\n\nexport default {\n  component: CardBase,\n};\nexport const CardBaseComponent = () => (\n  <CardBase\n    small={boolean('Small', false, 'CardBase')}\n    inline={boolean('Inline', false, 'CardBase')}\n    clickable={boolean('Clickable', false, 'CardBase')}\n    url={text('URL', '', 'CardBase')}\n    target={text('Target', '', 'CardBase')}\n    rel={text('Rel', '', 'CardBase')}\n    paddingSize={\n      select(\n        'PaddingSize',\n        { none: '', small: 'small', large: 'large', zero: 'zero' },\n        '',\n        'CardBase'\n      ) || undefined\n    }\n    onClick={action('click')}\n    onSelfWindowNavigation={action('selfWindowNavigation')}\n    {...commonKnobs()}\n  >\n    カードベースはグルーピングされた要素を表示するときに使用するパーツです。\n    <br />\n    同等のグルーピングが複数並ぶ場合、例えばコレクションにおけるひとつのオブジェクトであったり、設定における複数カテゴリを同じ画面で並べる場合に用います。{' '}\n    <br />\n    周囲に24dpのpaddingが入ります。\n  </CardBase>\n);\n\nexport const Clickable = () => (\n  <CardBase\n    clickable\n    small={boolean('Small', false, 'CardBase')}\n    inline={boolean('Inline', false, 'CardBase')}\n    url={text('URL', '', 'CardBase')}\n    target={text('Target', '', 'CardBase')}\n    rel={text('Rel', '', 'CardBase')}\n    paddingSize={\n      select(\n        'PaddingSize',\n        {\n          none: '',\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n          zero: 'zero',\n        },\n        '',\n        'CardBase'\n      ) || undefined\n    }\n    onClick={action('click')}\n    onSelfWindowNavigation={action('selfWindowNavigation')}\n  >\n    クリッカブルなCardBaseです。URLを渡すとリンクになり、そうでない場合はボタンになります。\n  </CardBase>\n);\n\nexport const PaddingSizeOption = () => (\n  <>\n    <CardBase mb={1}>default (1.5rem = 24px)</CardBase>\n    <CardBase paddingSize=\"zero\" mb={1}>\n      paddingSize=&quot;zero&quot;\n    </CardBase>\n    <CardBase paddingSize=\"small\" mb={1}>\n      paddingSize=&quot;small&quot; (1rem = 16px)\n    </CardBase>\n    <CardBase paddingSize=\"medium\" mb={1}>\n      paddingSize=&quot;medium&quot; (1.5rem = 24px)\n    </CardBase>\n    <CardBase paddingSize=\"large\" mb={1}>\n      paddingSize=&quot;large&quot; (2rem = 32px)\n    </CardBase>\n  </>\n);\nexport const ResponsivePaddingSize = () => (\n  <VibesProvider fixedLayout={false}>\n    <CardBase mb={1}>\n      default (デスクトップ向けは1.5rem = 24px、モバイル向けは左右が1rem = 16px)\n    </CardBase>\n    <CardBase paddingSize=\"zero\" mb={1}>\n      paddingSize=&quot;zero&quot;\n    </CardBase>\n    <CardBase paddingSize=\"small\" mb={1}>\n      paddingSize=&quot;small&quot; (1rem = 16px)\n    </CardBase>\n    <CardBase paddingSize=\"medium\" mb={1}>\n      paddingSize=&quot;medium&quot; (1.5rem = 24px)\n    </CardBase>\n    <CardBase paddingSize=\"large\" mb={1}>\n      paddingSize=&quot;large&quot; (2rem = 32px)\n    </CardBase>\n  </VibesProvider>\n);\nexport const InlineOption = () => (\n  <>\n    <Paragraph>\n      inline propを使用すると、\n      <CardBase inline paddingSize=\"small\" ml={0.5} mr={0.5}>\n        こんなふうに\n      </CardBase>\n      display:inline の表示になります\n    </Paragraph>\n  </>\n);\n\nexport const Disabled = () => (\n  <CardBase\n    small={boolean('Small', false, 'CardBase')}\n    inline={boolean('Inline', false, 'CardBase')}\n    clickable={boolean('Clickable', false, 'CardBase')}\n    disabled={boolean('disabled', true, 'CardBase')}\n    url={text('URL', '', 'CardBase')}\n    target={text('Target', '', 'CardBase')}\n    rel={text('Rel', '', 'CardBase')}\n    paddingSize={\n      select(\n        'PaddingSize',\n        { none: '', small: 'small', large: 'large', zero: 'zero' },\n        '',\n        'CardBase'\n      ) || undefined\n    }\n    onClick={action('click')}\n    onSelfWindowNavigation={action('selfWindowNavigation')}\n    {...commonKnobs()}\n  >\n    これはdisabled\n  </CardBase>\n);\n"
  },
  {
    "path": "src/lv1/bases/CardBase.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\nimport { BaseComponentProps } from './types';\n\ntype Props = {\n  children?: React.ReactNode;\n  clickable?: boolean;\n  disabled?: boolean;\n  url?: string;\n  target?: string;\n  rel?: string;\n  onClick?: React.MouseEventHandler;\n  /**\n   * `true` にすると、`overflow: hidden;`が指定されます。`CardBase`内で`Portal`を利用していない`DropDown`があった場合、`overflow: hidden;`によって見切れてしまう問題が発生しているので、それを避けるために暫定的にオンオフできるようにしています。デフォルトは`true`です。\n   */\n  overflowHidden?: boolean;\n} & BaseComponentProps &\n  SelfWindowNavigationProp &\n  CommonProps &\n  MarginClassProps;\n\n/**\n * グルーピングされた要素を表示するときに使用するパーツです。\n *\n * 同等のグルーピングが複数並ぶ場合、例えばコレクションにおけるひとつのオブジェクトであったり、設定における複数カテゴリを同じ画面で並べる場合に用います。\n *\n * 周囲に24dpのpaddingが入ります。\n *\n * - `DialogBase` や `PopupBase` との混同に注意してください。\n *   - ポップアップコンテンツ（ドロップダウンメニューやコンボボックス等）に使用するべきなのは `PopupBase` です\n *   - モーダルダイアログに使用するべきなのは `DialogBase` です\n *   - `CardBase` は、これらとはシャドウのスタイルが違います。\n * - カード自体をクリック可能にする場合（ボタンやリンクとして使用する場合）は、`clickable` を `true` にしてください\n *   - react-router 等を使用している場合は、遷移時の処理を `onSelfWindowNavigation` に指定してください\n */\nconst CardBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    small,\n    paddingSize,\n    inline,\n    clickable,\n    disabled,\n    url,\n    target,\n    rel,\n    onClick,\n    overflowHidden = true,\n    onSelfWindowNavigation,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    marginSize,\n    marginTop,\n  } = props;\n\n  const className = 'vb-cardBase';\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        className,\n        {\n          paddingSmall: small || paddingSize === 'small',\n          paddingZero: paddingSize === 'zero',\n          paddingLarge: paddingSize === 'large',\n          // レスポンシブなpaddingの変更は、inlineでなく、paddingSizeが無指定の場合のみ行う\n          paddingResponsive:\n            useResponsive() && !inline && !small && !paddingSize,\n          inline,\n          disabled,\n          clickable,\n          overflowHidden,\n        },\n        { marginBottom, marginLeft, marginTop, marginSize, marginRight }\n      )}\n    >\n      {clickable ? (\n        url ? (\n          <a\n            className={`${className}__link${\n              disabled ? ` ${className}__link--disabled` : ''\n            }`}\n            href={url}\n            target={target}\n            rel={\n              rel\n                ? rel\n                : target === '_blank'\n                ? 'noopener noreferrer'\n                : undefined\n            }\n            aria-disabled={disabled}\n            onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n              if (disabled) {\n                e.preventDefault();\n                return;\n              }\n              if (onClick) {\n                onClick(e);\n              }\n              const navigator = selfWindowNavigator(onSelfWindowNavigation);\n              if (navigator) {\n                navigator(e, url);\n              }\n            }}\n          >\n            <div className={`${className}__content`}>{children}</div>\n          </a>\n        ) : (\n          <button\n            className={`${className}__button${\n              disabled ? ` ${className}__button--disabled` : ''\n            }`}\n            onClick={onClick}\n            disabled={disabled}\n          >\n            <div className={`${className}__content`}>{children}</div>\n          </button>\n        )\n      ) : (\n        children\n      )}\n    </div>\n  );\n};\n\nexport default CardBase;\n"
  },
  {
    "path": "src/lv1/bases/ColumnBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport ColumnBase from './ColumnBase';\nimport Paragraph from '../typography/Paragraph';\nimport { select, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { VibesProvider } from '../../utilities';\n\nexport default {\n  component: ColumnBase,\n};\nexport const ColumnBaseComonent = () => (\n  <ColumnBase\n    small={boolean('Small', false, 'ColumnBase')}\n    rounded={boolean('Rounded', false, 'ColumnBase')}\n    inline={boolean('Inline', false, 'ColumnBase')}\n    border={\n      select(\n        'Border',\n        {\n          none: '',\n          default: 'default',\n          notice: 'notice',\n          alert: 'alert',\n          success: 'success',\n        },\n        '',\n        'ColumnBase'\n      ) || undefined // none時にundefinedにしたいが、selectのoptionにundefinedを渡せないので空文字を||でundefinedにしている\n    }\n    paddingSize={\n      select(\n        'PaddingSize',\n        {\n          none: '',\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n          zero: 'zero',\n        },\n        '',\n        'ColumnBase'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    コラムベースはタブやディバイダーなどで区切られたコンテンツを埋め込むための領域です。\n    <br />\n    周囲に24dpのpaddingが入ります。注釈などにも使うことができます。\n  </ColumnBase>\n);\n\nexport const PaddingSizeOption = () => (\n  <>\n    <ColumnBase mb={1}>default (1.5rem = 24px)</ColumnBase>\n    <ColumnBase paddingSize=\"zero\" mb={1}>\n      paddingSize=&quot;zero&quot;\n    </ColumnBase>\n    <ColumnBase paddingSize=\"small\" mb={1}>\n      paddingSize=&quot;small&quot; (1rem = 16px)\n    </ColumnBase>\n    <ColumnBase paddingSize=\"medium\" mb={1}>\n      paddingSize=&quot;medium&quot; (1.5rem = 24px)\n    </ColumnBase>\n    <ColumnBase paddingSize=\"large\" mb={1}>\n      paddingSize=&quot;large&quot; (2rem = 32px)\n    </ColumnBase>\n  </>\n);\n\nexport const ResponsivePaddingSize = () => (\n  <VibesProvider fixedLayout={false}>\n    <ColumnBase mb={1}>\n      default (デスクトップ向けは1.5rem = 24px、モバイル向けは左右が1rem = 16px)\n    </ColumnBase>\n    <ColumnBase paddingSize=\"zero\" mb={1}>\n      paddingSize=&quot;zero&quot;\n    </ColumnBase>\n    <ColumnBase paddingSize=\"small\" mb={1}>\n      paddingSize=&quot;small&quot; (1rem = 16px)\n    </ColumnBase>\n    <ColumnBase paddingSize=\"medium\" mb={1}>\n      paddingSize=&quot;medium&quot; (1.5rem = 24px)\n    </ColumnBase>\n    <ColumnBase paddingSize=\"large\" mb={1}>\n      paddingSize=&quot;large&quot; (2rem = 32px)\n    </ColumnBase>\n  </VibesProvider>\n);\n\nexport const BorderOption = () => (\n  <>\n    <ColumnBase mb={1}>without border prop</ColumnBase>\n    <ColumnBase border=\"default\" mb={1}>\n      border=&quot;default&quot;\n    </ColumnBase>\n    <ColumnBase border=\"alert\" mb={1}>\n      border=&quot;alert&quot;\n    </ColumnBase>\n    <ColumnBase border=\"notice\" mb={1}>\n      border=&quot;notice&quot;\n    </ColumnBase>\n    <ColumnBase border=\"success\" mb={1}>\n      border=&quot;success&quot;\n    </ColumnBase>\n  </>\n);\n\nexport const InlineOption = () => (\n  <>\n    <Paragraph>\n      inline propを使用すると、\n      <ColumnBase inline paddingSize=\"small\" ml={0.5} mr={0.5}>\n        こんなふうに\n      </ColumnBase>\n      display:inline の表示になります\n    </Paragraph>\n  </>\n);\n\nexport const RoundedOption = () => (\n  <>\n    <ColumnBase mb={1} rounded>\n      rounded 左右に余白があるときに使用推奨です\n    </ColumnBase>\n    <ColumnBase>not rounded 横幅いっぱいにするときに使用推奨です</ColumnBase>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/bases/ColumnBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { BaseComponentBorderProps, BaseComponentProps } from './types';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * `true` にすると、`border-radius`が指定されます\n   */\n  rounded?: boolean;\n  /**\n   * `true` にすると、`overflow: hidden;`が指定されます。`ColumnBase`内で`Portal`を利用していない`DropDown`があった場合、`overflow: hidden;`によって見切れてしまう問題が発生しているので、それを避けるために暫定的にオンオフできるようにしています。デフォルトは`true`です。\n   */\n  overflowHidden?: boolean;\n} & BaseComponentProps &\n  BaseComponentBorderProps &\n  MarginClassProps &\n  CommonProps;\n\n/**\n * ColumnBaseは区切られたコンテンツを埋め込むための領域です。\n *\n * * `rounded` propによってColumnBaseに`border-radius`を指定できます\n *   * ColumnBaseの周囲に余白がある際は`rounded`propを使用することを推奨します\n *   * `border` propを使用する場合は周囲に余白があるはずなので、 `rounded` propを使用しなくても`border-radius`が指定されます\n */\nconst ColumnBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    small,\n    rounded,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    border,\n    inline,\n    overflowHidden = true,\n    paddingSize,\n  } = props;\n  const classModifiers = {\n    inline,\n    overflowHidden,\n    rounded: rounded || !!border,\n    borderDefault: border === 'default',\n    borderAlert: border === 'alert',\n    borderNotice: border === 'notice',\n    borderSuccess: border === 'success',\n    paddingSmall: small || paddingSize === 'small',\n    paddingLarge: paddingSize === 'large',\n    paddingZero: paddingSize === 'zero',\n    // レスポンシブなpaddingの変更は、inlineでなく、paddingSizeが無指定の場合のみ行う\n    paddingResponsive: useResponsive() && !inline && !small && !paddingSize,\n  };\n\n  return (\n    <div\n      {...commonProps(props, 'vb-columnBase', classModifiers, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default ColumnBase;\n"
  },
  {
    "path": "src/lv1/bases/Container.stories.tsx",
    "content": "import * as React from 'react';\n\nimport Container from './Container';\nimport ContentsBase from './ContentsBase';\nimport { select, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: Container,\n};\nexport const ContainerComponent = () => (\n  <Container\n    width={\n      select(\n        'width',\n        { none: '', narrow: 'narrow', normal: 'normal', wide: 'wide' },\n        '',\n        'Container'\n      ) || undefined\n    }\n    responsive={boolean('responsive', false, 'Container')}\n    {...commonKnobs()}\n  >\n    <div>Containerコンポーネントはwidthと中央寄せが設定された大枠です。</div>\n  </Container>\n);\n\nexport const Widths = () => (\n  <>\n    <Container width=\"normal\" mb={1}>\n      <ContentsBase>normal</ContentsBase>\n    </Container>\n    <Container width=\"wide\" mb={1}>\n      <ContentsBase>wide</ContentsBase>\n    </Container>\n    <Container width=\"narrow\" mb={1}>\n      <ContentsBase>narrow</ContentsBase>\n    </Container>\n    <Container width=\"normal\" responsive mb={1}>\n      <ContentsBase>normal responsive</ContentsBase>\n    </Container>\n    <Container width=\"wide\" responsive mb={1}>\n      <ContentsBase>wide resiponsive</ContentsBase>\n    </Container>\n    <Container width=\"narrow\" responsive mb={1}>\n      <ContentsBase>narrow responsive</ContentsBase>\n    </Container>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/bases/Container.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children: React.ReactNode;\n  width?: 'normal' | 'narrow' | 'wide';\n  responsive?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * Containerはコンテンツ領域全体（本文）を囲み、widthをnarrow/normal/wideで設定することができます\n * ＊コンテンツ領域全体（本文）はその画面の中心的な内容となり、Header/GlobalNavi/Footerを除く全体となります。（参考：[MDN}(https://developer.mozilla.org/ja/docs/Web/HTML/Element/main))\n *\n * ## accessibility\n * Containerはmain要素も含んでいます。（実装を確認ください）\n * もし、Containerが使われない場合には、main要素でコンテンツ領域全体（本文）を囲むよう同等の役割を果たす実装してください\n */\n\nconst Container: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    width,\n    responsive,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  return (\n    <main\n      {...commonProps(\n        props,\n        'vb-container',\n        {\n          responsive: useResponsive(responsive),\n          widthNarrow: width === 'narrow',\n          widthWide: width === 'wide',\n        },\n        { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n      )}\n      role=\"main\"\n    >\n      {children}\n    </main>\n  );\n};\n\nexport default Container;\n"
  },
  {
    "path": "src/lv1/bases/ContentsBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport ContentsBase from './ContentsBase';\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: ContentsBase,\n};\nexport const ContentsBaseComponent = () => (\n  <ContentsBase\n    paddingSize={\n      select(\n        'PaddingSize',\n        { none: '', small: 'small', large: 'large' },\n        '',\n        'ContentsBase'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <div>ContentsBaseは背景色が設定されたコンテンツエリアの地色です。</div>\n  </ContentsBase>\n);\n"
  },
  {
    "path": "src/lv1/bases/ContentsBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children: React.ReactNode;\n  paddingSize?: 'small' | 'large';\n} & MarginClassProps &\n  CommonProps;\n\nconst ContentsBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    paddingSize,\n  } = props;\n  const baseClass = 'vb-contentsBase';\n  const classModifiers = {\n    responsive: useResponsive(),\n    'padding-small': paddingSize === 'small',\n    'padding-large': paddingSize === 'large',\n  };\n\n  return (\n    <section\n      {...commonProps(props, baseClass, classModifiers, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {children}\n    </section>\n  );\n};\n\nexport default ContentsBase;\n"
  },
  {
    "path": "src/lv1/bases/DialogBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport DialogBase from './DialogBase';\nimport Paragraph from '../typography/Paragraph';\nimport { commonKnobs } from '../../../stories';\nimport { select, boolean } from '@storybook/addon-knobs';\n\nexport default {\n  component: DialogBase,\n};\nexport const DialogBaseComponent = () => (\n  <DialogBase\n    small={boolean('Small', false, 'DialogBase')}\n    inline={boolean('Inline', false, 'DialogBase')}\n    border={\n      select(\n        'Border',\n        {\n          none: '',\n          default: 'default',\n          notice: 'notice',\n          alert: 'alert',\n          success: 'success',\n        },\n        '',\n        'DialogBase'\n      ) || undefined // none時にundefinedにしたいが、selectのoptionにundefinedを渡せないので空文字を||でundefinedにしている\n    }\n    paddingSize={\n      select(\n        'PaddingSize',\n        {\n          none: '',\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n          zero: 'zero',\n        },\n        '',\n        'DialogBase'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    ダイアログベースは浮き上がるウインドウを配置するための領域です。\n    <br />\n    周囲に24dpのpaddingが入り、モーダルなどに使うことができます。\n  </DialogBase>\n);\n\nexport const PaddingSizeOption = () => (\n  <>\n    <DialogBase mb={1}>default (1.5rem = 24px)</DialogBase>\n    <DialogBase paddingSize=\"zero\" mb={1}>\n      paddingSize=&quot;zero&quot;\n    </DialogBase>\n    <DialogBase paddingSize=\"small\" mb={1}>\n      paddingSize=&quot;small&quot; (1rem = 16px)\n    </DialogBase>\n    <DialogBase paddingSize=\"medium\" mb={1}>\n      paddingSize=&quot;medium&quot; (1.5rem = 24px)\n    </DialogBase>\n    <DialogBase paddingSize=\"large\" mb={1}>\n      paddingSize=&quot;large&quot; (2rem = 32px)\n    </DialogBase>\n  </>\n);\n\nexport const BorderOption = () => (\n  <>\n    <DialogBase mb={1}>without border prop</DialogBase>\n    <DialogBase border=\"default\" mb={1}>\n      border=&quot;default&quot;\n    </DialogBase>\n    <DialogBase border=\"alert\" mb={1}>\n      border=&quot;alert&quot;\n    </DialogBase>\n    <DialogBase border=\"notice\" mb={1}>\n      border=&quot;notice&quot;\n    </DialogBase>\n    <DialogBase border=\"success\" mb={1}>\n      border=&quot;success&quot;\n    </DialogBase>\n  </>\n);\n\nexport const InlineOption = () => (\n  <>\n    <Paragraph>\n      inline propを使用すると、\n      <DialogBase inline paddingSize=\"small\" ml={0.5} mr={0.5}>\n        こんなふうに\n      </DialogBase>\n      display:inline の表示になります\n    </Paragraph>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/bases/DialogBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { BaseComponentBorderProps, BaseComponentProps } from './types';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * メッセージダイアログ・確認ダイアログの場合にz-indexを高いものにするためのオプションです。\n   * `true` にすることでz-indexが大きくなります\n   */\n  message?: boolean;\n} & BaseComponentProps &\n  BaseComponentBorderProps &\n  MarginClassProps &\n  CommonProps;\n\n/**\n * モーダルウィンドウに使用するコンポーネントです。\n *\n * - **z-indexが指定されているため注意が必要です**\n * - `CardBase` や `PopupBase` との混同に注意してください。\n *   - ポップアップコンテンツ（ドロップダウンメニューやコンボボックス等）に使用するべきなのは `PopupBase` です\n *   - 作ろうとしているものがモーダルダイアログでも、ポップアップコンテンツでもない場合は、`CardBase` を使用してください\n */\nconst DialogBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    small,\n    message,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    border,\n    inline,\n    paddingSize,\n  } = props;\n  const baseClass = 'vb-dialogBase';\n  const classModifiers = {\n    inline,\n    message,\n    borderDefault: border === 'default',\n    borderAlert: border === 'alert',\n    borderNotice: border === 'notice',\n    borderSuccess: border === 'success',\n    paddingSmall: small || paddingSize === 'small',\n    paddingLarge: paddingSize === 'large',\n    paddingZero: paddingSize === 'zero',\n  };\n\n  return (\n    <div\n      {...commonProps(props, baseClass, classModifiers, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default DialogBase;\n"
  },
  {
    "path": "src/lv1/bases/FloatingBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport FloatingBase from './FloatingBase';\nimport Paragraph from '../typography/Paragraph';\nimport { select, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../buttons/Button';\nimport TaskDialog from '../../lv2/dialogs/TaskDialog';\n\nexport default {\n  component: FloatingBase,\n};\nexport const FloatingBaseComponent = () => (\n  <FloatingBase\n    small={boolean('Small', false, 'FloatingBase')}\n    inline={boolean('Inline', false, 'FloatingBase')}\n    fitContent={boolean('fitContent', false, 'FloatingBase')}\n    border={\n      select(\n        'Border',\n        {\n          none: '',\n          default: 'default',\n          notice: 'notice',\n          alert: 'alert',\n          success: 'success',\n        },\n        '',\n        'FloatingBase'\n      ) || undefined // none時にundefinedにしたいが、selectのoptionにundefinedを渡せないので空文字を||でundefinedにしている\n    }\n    paddingSize={\n      select(\n        'PaddingSize',\n        {\n          none: '',\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n          zero: 'zero',\n        },\n        '',\n        'FloatingBase'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    FloatingBaseは浮き上がるコンテンツを配置するための領域です。\n    <br />\n    周囲に24dpのpaddingが入り、メニューなどに使うことができます。\n  </FloatingBase>\n);\n\nexport const PaddingSizeOption = () => (\n  <>\n    <FloatingBase mb={1}>default (1.5rem = 24px)</FloatingBase>\n    <FloatingBase paddingSize=\"zero\" mb={1}>\n      paddingSize=&quot;zero&quot;\n    </FloatingBase>\n    <FloatingBase paddingSize=\"small\" mb={1}>\n      paddingSize=&quot;small&quot; (1rem = 16px)\n    </FloatingBase>\n    <FloatingBase paddingSize=\"medium\" mb={1}>\n      paddingSize=&quot;medium&quot; (1.5rem = 24px)\n    </FloatingBase>\n    <FloatingBase paddingSize=\"large\" mb={1}>\n      paddingSize=&quot;large&quot; (2rem = 32px)\n    </FloatingBase>\n  </>\n);\n\nexport const BorderOption = () => (\n  <>\n    <FloatingBase mb={1}>without border prop</FloatingBase>\n    <FloatingBase border=\"default\" mb={1}>\n      border=&quot;default&quot;\n    </FloatingBase>\n    <FloatingBase border=\"alert\" mb={1}>\n      border=&quot;alert&quot;\n    </FloatingBase>\n    <FloatingBase border=\"notice\" mb={1}>\n      border=&quot;notice&quot;\n    </FloatingBase>\n    <FloatingBase border=\"success\" mb={1}>\n      border=&quot;success&quot;\n    </FloatingBase>\n  </>\n);\n\nexport const InlineOption = () => (\n  <>\n    <Paragraph>\n      inline propを使用すると、\n      <FloatingBase inline paddingSize=\"small\" ml={0.5} mr={0.5}>\n        こんなふうに\n      </FloatingBase>\n      display:inline の表示になります\n    </Paragraph>\n  </>\n);\n\nexport const DialogOnPopup = () => {\n  const [isOpen, setIsOpen] = React.useState<boolean>(false);\n  return (\n    <>\n      <FloatingBase>\n        <Button onClick={() => setIsOpen(true)}>open dialog</Button>\n      </FloatingBase>\n      <TaskDialog\n        title=\"ダイアログ\"\n        onRequestClose={() => setIsOpen(false)}\n        closeButtonLabel={'閉じる'}\n        isOpen={isOpen}\n      >\n        ポップアップの上にダイアログを配置することができます\n      </TaskDialog>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/bases/FloatingBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { BaseComponentBorderProps, BaseComponentProps } from './types';\n\ntype Props = {\n  children?: React.ReactNode;\n} & BaseComponentProps &\n  BaseComponentBorderProps &\n  MarginClassProps &\n  CommonProps;\n/**\n * PopupBaseと同様にポップアップコンテンツに使用するコンポーネントです。\n *\n * - **z-indexが指定されているため注意が必要です**\n * - z-index: 500;\n *   - FloatingBase（z-index: 500) < DialogBase（z-index: 1000) < PopupBase（z-index: 2000) となります。\n *   - ポップアップからダイアログが出てくるようなコンポーネントはPopupBaseでは実現できないのでFloatingBaseを使用して下さい\n */\nconst FloatingBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    border,\n    inline,\n    fitContent,\n    paddingSize,\n  } = props;\n  const baseClass = 'vb-floatingBase';\n\n  const classModifiers = {\n    inline,\n    fitContent,\n    borderDefault: border === 'default',\n    borderAlert: border === 'alert',\n    borderNotice: border === 'notice',\n    borderSuccess: border === 'success',\n    paddingSmall: small || paddingSize === 'small',\n    paddingLarge: paddingSize === 'large',\n    paddingZero: paddingSize === 'zero',\n  };\n\n  return (\n    <div\n      {...commonProps(props, baseClass, classModifiers, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default FloatingBase;\n"
  },
  {
    "path": "src/lv1/bases/MarginBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport MarginBase from './MarginBase';\nimport { boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport ColumnBase from './ColumnBase';\n\nexport default {\n  component: MarginBase,\n};\nexport const MarginBaseComponent = () => (\n  <MarginBase\n    fitContent={boolean('FitContent', false, 'MarginBase')}\n    marginTop={boolean('MarginTop (deprecated)', false, 'MarginBase')}\n    marginLeft={boolean('MarginLeft (deprecated)', false, 'MarginBase')}\n    marginRight={boolean('MarginRight (deprecated)', false, 'MarginBase')}\n    marginBottom={boolean('MarginBottom (deprecated)', false, 'MarginBase')}\n    marginSize={\n      select(\n        'MarginSize (deprecated)',\n        {\n          xSmall: 'xSmall',\n          small: 'small',\n          medium: '',\n          large: 'large',\n          xLarge: 'xLarge',\n          xxLarge: 'xxLarge',\n        },\n        '',\n        'MarginBase'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    MarginBaseは、マージンをつけるためのボックスです\n  </MarginBase>\n);\n\nexport const Fitcontent = () => (\n  <MarginBase fitContent>\n    <ColumnBase fitContent>\n      fitContentを使用すると、コンテンツに合わせた大きさになります\n    </ColumnBase>\n  </MarginBase>\n);\n\nexport const FunctionalMarginProps = () => (\n  <>\n    <MarginBase ml={1} mr={1.5}>\n      <ColumnBase>ml=1, mr={1.5}</ColumnBase>\n    </MarginBase>\n\n    <MarginBase mt={2} mb={3}>\n      <ColumnBase>mt=2, mb=3</ColumnBase>\n    </MarginBase>\n  </>\n);\n\nexport const DeprecatedMarginProps = () => (\n  <>\n    <MarginBase marginLeft marginRight>\n      <ColumnBase>marginLeft, marginRight</ColumnBase>\n    </MarginBase>\n    <MarginBase marginTop marginBottom marginSize=\"large\">\n      <ColumnBase>marginTop marginBottom marginSize=large</ColumnBase>\n    </MarginBase>\n    <MarginBase marginLeft marginRight marginBottom marginSize=\"xSmall\">\n      <ColumnBase>\n        marginLeft marginRight marginBottom marginSize=xSmall\n      </ColumnBase>\n    </MarginBase>\n    <MarginBase marginLeft marginRight marginBottom marginSize=\"small\">\n      <ColumnBase>\n        marginLeft marginRight marginBottom marginSize=small\n      </ColumnBase>\n    </MarginBase>\n    <MarginBase marginLeft marginRight marginBottom marginSize=\"large\">\n      <ColumnBase>\n        marginLeft marginRight marginBottom marginSize=large\n      </ColumnBase>\n    </MarginBase>\n    <MarginBase marginLeft marginRight marginBottom marginSize=\"xLarge\">\n      <ColumnBase>\n        marginLeft marginRight marginBottom marginSize=xLarge\n      </ColumnBase>\n    </MarginBase>\n    <MarginBase marginLeft marginRight marginBottom marginSize=\"xxLarge\">\n      <ColumnBase>\n        marginLeft marginRight marginBottom marginSize=xxLarge\n      </ColumnBase>\n    </MarginBase>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/bases/MarginBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { FitContentProps } from './types';\nimport { CommonStyleWithDeprecatedMarginProps } from '../../internal/CommonStyle';\nimport styled from 'styled-components';\n\ntype Props = {\n  children?: React.ReactNode;\n} & FitContentProps &\n  MarginClassProps &\n  CommonProps;\n\n/**\n * マージンをつけるためのボックスです。\n */\n\nconst Style = styled(CommonStyleWithDeprecatedMarginProps).attrs(\n  ({ fitContent }: FitContentProps) => ({\n    as: 'div',\n    fitContent,\n  })\n)`\n  ${({ fitContent }: FitContentProps) => ({\n    font: 'inherit',\n    maxWidth: fitContent ? 'fit-content' : undefined,\n  })}\n`;\n\nconst MarginBase: React.FC<Props> = (props: Props) => <Style {...props} />;\n\nexport default MarginBase;\n"
  },
  {
    "path": "src/lv1/bases/NegativeContentsBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { NegativeContentsBase } from './NegativeContentsBase';\nimport ContentsBase from './ContentsBase';\nimport ColumnBase from './ColumnBase';\nimport Paragraph from '../typography/Paragraph';\nimport { VibesProvider } from '../../utilities';\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: NegativeContentsBase,\n};\nexport const NegativeContentsBaseComponent = () => (\n  <NegativeContentsBase\n    contentsBasePaddingSize={\n      select(\n        'contentsBasePaddingSize',\n        { none: '', small: 'small', large: 'large' },\n        '',\n        'NegativeContentsBase'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <div>ContentsBaseを打ち消す専用のコンポーネントです。</div>\n  </NegativeContentsBase>\n);\n\nexport const Examples = () => {\n  const paddingSize = select(\n    'contentsBasePaddingSize',\n    { none: '', small: 'small', large: 'large' },\n    '',\n    'NegativeContentsBase'\n  );\n  return (\n    <ContentsBase paddingSize={paddingSize || undefined}>\n      <Paragraph mb={1}>ContentsBaseにはPaddingがついています</Paragraph>\n      <NegativeContentsBase\n        contentsBasePaddingSize={paddingSize || undefined}\n        mb={1}\n      >\n        <ColumnBase>\n          <Paragraph>\n            こういう感じでColumnBaseやListTableをContentsBase内で両サイド突き抜けて使いたい場合に使用します\n          </Paragraph>\n        </ColumnBase>\n      </NegativeContentsBase>\n\n      <NegativeContentsBase\n        contentsBasePaddingSize={paddingSize || undefined}\n        mb={1}\n      >\n        <ColumnBase>\n          <Paragraph>\n            paddingSizeにはContentsBaseへの指定と同じものを指定してください\n          </Paragraph>\n        </ColumnBase>\n      </NegativeContentsBase>\n      <NegativeContentsBase contentsBasePaddingSize={paddingSize || undefined}>\n        <ColumnBase>\n          <Paragraph>\n            最後に置いた場合には下方向にもネガティブマージンがつきます\n          </Paragraph>\n        </ColumnBase>\n      </NegativeContentsBase>\n    </ContentsBase>\n  );\n};\n\nexport const Responsive = () => {\n  const paddingSize = select(\n    'contentsBasePaddingSize',\n    { none: '', small: 'small', large: 'large' },\n    '',\n    'NegativeContentsBase'\n  );\n  return (\n    <VibesProvider fixedLayout={false}>\n      <ContentsBase paddingSize={paddingSize || undefined}>\n        <Paragraph mb={1}>ContentsBaseにはPaddingがついています</Paragraph>\n        <NegativeContentsBase\n          contentsBasePaddingSize={paddingSize || undefined}\n          mb={1}\n        >\n          <ColumnBase>\n            <Paragraph>\n              こういう感じでColumnBaseやListTableをContentsBase内で両サイド突き抜けて使いたい場合に使用します\n            </Paragraph>\n          </ColumnBase>\n        </NegativeContentsBase>\n\n        <NegativeContentsBase\n          contentsBasePaddingSize={paddingSize || undefined}\n          mb={1}\n        >\n          <ColumnBase>\n            <Paragraph>\n              paddingSizeにはContentsBaseへの指定と同じものを指定してください\n            </Paragraph>\n          </ColumnBase>\n        </NegativeContentsBase>\n        <NegativeContentsBase\n          contentsBasePaddingSize={paddingSize || undefined}\n        >\n          <ColumnBase>\n            <Paragraph>\n              最後に置いた場合には下方向にもネガティブマージンがつきます\n            </Paragraph>\n          </ColumnBase>\n        </NegativeContentsBase>\n      </ContentsBase>\n    </VibesProvider>\n  );\n};\n"
  },
  {
    "path": "src/lv1/bases/NegativeContentsBase.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children: React.ReactNode;\n  contentsBasePaddingSize?: 'small' | 'large';\n} & CommonProps;\n\n/**\n * `ContentsBase` のpaddingを打ち消すための専用コンポーネントです。 `ContentsBase` の左右のpaddingを打ち消します。末尾に置いた場合（ `:last-child` となる場合）には下方向のmarginを打ち消します。\n *\n * * 必ず `ContentsBase` の直下に配置してください（下側のマージンの打ち消しのため）\n * * `ContentsBase` に `paddingSize` を指定している場合は、`contentsBasePaddingSize` にそれと同じ値をセットしてください\n */\nexport const NegativeContentsBase: React.FC<Props> = (props: Props) => {\n  const { children, contentsBasePaddingSize } = props;\n  const baseClass = 'vb-negativeContentsBase';\n  const classModifiers = {\n    responsive: useResponsive(),\n    negativeMarginSmall: contentsBasePaddingSize === 'small',\n    negativeMarginLarge: contentsBasePaddingSize === 'large',\n  };\n\n  return (\n    <div {...commonProps(props, baseClass, classModifiers)}>{children}</div>\n  );\n};\n"
  },
  {
    "path": "src/lv1/bases/NegativeMarginBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport NegativeMarginBase from './NegativeMarginBase';\nimport Container from './Container';\nimport ColumnBase from './ColumnBase';\nimport { commonKnobs } from '../../../stories';\nimport { boolean, select } from '@storybook/addon-knobs';\n\nexport default {\n  component: NegativeMarginBase,\n};\nexport const NegativeMarginBaseComponent = () => (\n  <NegativeMarginBase\n    top={boolean('MarginTop (deprecated)', true, 'NegativeMarginBase')}\n    left={boolean('MarginLeft (deprecated)', true, 'NegativeMarginBase')}\n    right={boolean('MarginRight (deprecated)', true, 'NegativeMarginBase')}\n    bottom={boolean('MarginBottom (deprecated)', true, 'NegativeMarginBase')}\n    marginSize={select(\n      'MarginSize',\n      { small: 'small', medium: 'medium', large: 'large' },\n      'medium',\n      'NegativeMarginBase'\n    )}\n    {...commonKnobs()}\n  >\n    マイナスのマージンを持つ領域です。このコンポーネントは将来的に廃止する可能性があります。かわりに\n    マージンをつけたいコンポーネントや MarginBase コンポーネントに ma, mb, ml,\n    mr, mt 属性にマイナス値を渡してください。\n  </NegativeMarginBase>\n);\n\nexport const Examples = () => (\n  <Container marginTop marginBottom>\n    <NegativeMarginBase left right>\n      <ColumnBase marginBottom border=\"default\">\n        マイナスのマージンを持つ領域です。左右にマイナスのマージンを設定できます。\n      </ColumnBase>\n    </NegativeMarginBase>\n\n    <NegativeMarginBase marginSize=\"large\" left right>\n      <ColumnBase marginBottom border=\"default\">\n        マージン幅を調整できます。これはlargeです。\n      </ColumnBase>\n    </NegativeMarginBase>\n\n    <NegativeMarginBase marginSize=\"medium\" left right>\n      <ColumnBase marginBottom border=\"default\">\n        マージン幅を調整できます。これはmediumです。\n      </ColumnBase>\n    </NegativeMarginBase>\n\n    <NegativeMarginBase marginSize=\"small\" left right>\n      <ColumnBase marginBottom border=\"default\">\n        マージン幅を調整できます。これはsmallです。\n      </ColumnBase>\n    </NegativeMarginBase>\n\n    <ColumnBase marginBottom border=\"default\">\n      下のBaseは上部にマイナスのマージンを持ちます。\n    </ColumnBase>\n\n    <NegativeMarginBase top bottom>\n      <ColumnBase marginBottom border=\"default\">\n        上下のマージンも調節できます。\n      </ColumnBase>\n    </NegativeMarginBase>\n\n    <ColumnBase marginBottom border=\"default\">\n      上のBaseは下部にマイナスのマージンを持ちます。\n    </ColumnBase>\n  </Container>\n);\n"
  },
  {
    "path": "src/lv1/bases/NegativeMarginBase.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /** マージンの大きさを指定します。 `small` = 1rem, `medium` = 1.5rem, `large` = 2rem （サイズ指定が独特なので要注意）*/\n  marginSize?: 'small' | 'medium' | 'large';\n  top?: boolean;\n  left?: boolean;\n  right?: boolean;\n  bottom?: boolean;\n} & CommonProps;\n\n/**\n * マイナスのマージンを持つ領域です。このコンポーネントは将来的に廃止する可能性があります。かわりに\n * マージンをつけたいコンポーネントや `MarginBase` コンポーネントの `ma`, `mb`, `ml`, `mr`, `mt` 属性にマイナス値を渡してください。\n */\nconst NegativeMarginBase: React.FC<Props> = (props: Props) => {\n  const { children, marginSize = 'large', top, left, right, bottom } = props;\n\n  return (\n    <div\n      {...commonProps(props, `vb-negativeMargin--${marginSize}`, {\n        top,\n        left,\n        right,\n        bottom,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default NegativeMarginBase;\n"
  },
  {
    "path": "src/lv1/bases/PopupBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport PopupBase from './PopupBase';\nimport Paragraph from '../typography/Paragraph';\nimport { select, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: PopupBase,\n};\nexport const PopupBaseComponent = () => (\n  <PopupBase\n    small={boolean('Small', false, 'PopupBase')}\n    inline={boolean('Inline', false, 'PopupBase')}\n    fitContent={boolean('fitContent', false, 'PopupBase')}\n    border={\n      select(\n        'Border',\n        {\n          none: '',\n          default: 'default',\n          notice: 'notice',\n          alert: 'alert',\n          success: 'success',\n        },\n        '',\n        'PopupBase'\n      ) || undefined // none時にundefinedにしたいが、selectのoptionにundefinedを渡せないので空文字を||でundefinedにしている\n    }\n    paddingSize={\n      select(\n        'PaddingSize',\n        {\n          none: '',\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n          zero: 'zero',\n        },\n        '',\n        'PopupBase'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    ポップアップベースは浮き上がるコンテンツを配置するための領域です。\n    <br />\n    周囲に24dpのpaddingが入り、メニューなどに使うことができます。\n  </PopupBase>\n);\n\nexport const PaddingSizeOption = () => (\n  <>\n    <PopupBase mb={1}>default (1.5rem = 24px)</PopupBase>\n    <PopupBase paddingSize=\"zero\" mb={1}>\n      paddingSize=&quot;zero&quot;\n    </PopupBase>\n    <PopupBase paddingSize=\"small\" mb={1}>\n      paddingSize=&quot;small&quot; (1rem = 16px)\n    </PopupBase>\n    <PopupBase paddingSize=\"medium\" mb={1}>\n      paddingSize=&quot;medium&quot; (1.5rem = 24px)\n    </PopupBase>\n    <PopupBase paddingSize=\"large\" mb={1}>\n      paddingSize=&quot;large&quot; (2rem = 32px)\n    </PopupBase>\n  </>\n);\n\nexport const BorderOption = () => (\n  <>\n    <PopupBase mb={1}>without border prop</PopupBase>\n    <PopupBase border=\"default\" mb={1}>\n      border=&quot;default&quot;\n    </PopupBase>\n    <PopupBase border=\"alert\" mb={1}>\n      border=&quot;alert&quot;\n    </PopupBase>\n    <PopupBase border=\"notice\" mb={1}>\n      border=&quot;notice&quot;\n    </PopupBase>\n    <PopupBase border=\"success\" mb={1}>\n      border=&quot;success&quot;\n    </PopupBase>\n  </>\n);\n\nexport const InlineOption = () => (\n  <>\n    <Paragraph>\n      inline propを使用すると、\n      <PopupBase inline paddingSize=\"small\" ml={0.5} mr={0.5}>\n        こんなふうに\n      </PopupBase>\n      display:inline の表示になります\n    </Paragraph>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/bases/PopupBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { BaseComponentBorderProps, BaseComponentProps } from './types';\n\ntype Props = {\n  children?: React.ReactNode;\n} & BaseComponentProps &\n  BaseComponentBorderProps &\n  MarginClassProps &\n  CommonProps;\n/**\n * ポップアップコンテンツ（ドロップダウンやコンボボックスの選択部分など）に使用するコンポーネントです。\n *\n * - **z-indexが指定されているため注意が必要です**\n * - z-index: 1000;\n *   - FloatingBase（z-index: 500) < DialogBase（z-index: 1000) < PopupBase（z-index: 2000) となります。\n *   - ポップアップからダイアログが出てくるようなコンポーネントはPopupBaseでは実現できないのでFloatingBaseを使用して下さい\n * - `CardBase` や `DialogBase` との混同に注意してください。\n *   - モーダルダイアログに使用するべきなのは `DialogBase` です\n *   - 作ろうとしているものがモーダルダイアログでも、ポップアップコンテンツでもない場合は、`CardBase` を使用してください\n */\nconst PopupBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    border,\n    inline,\n    fitContent,\n    paddingSize,\n  } = props;\n  const baseClass = 'vb-popupBase';\n\n  const classModifiers = {\n    inline,\n    fitContent,\n    borderDefault: border === 'default',\n    borderAlert: border === 'alert',\n    borderNotice: border === 'notice',\n    borderSuccess: border === 'success',\n    paddingSmall: small || paddingSize === 'small',\n    paddingLarge: paddingSize === 'large',\n    paddingZero: paddingSize === 'zero',\n  };\n\n  return (\n    <div\n      {...commonProps(props, baseClass, classModifiers, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default PopupBase;\n"
  },
  {
    "path": "src/lv1/bases/ScrimBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport ScrimBase from './ScrimBase';\nimport { boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: ScrimBase,\n};\nexport const ScrimBaseComponent = () => (\n  <ScrimBase small={boolean('Small', false, 'ScrimBase')} {...commonKnobs()}>\n    スクリムはダイアログやモーダルウインドウを表示する際に、下のコンテンツを覆う目隠しです。\n  </ScrimBase>\n);\n"
  },
  {
    "path": "src/lv1/bases/ScrimBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  small?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\nconst ScrimBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n  const baseClass = 'vb-scrimBase';\n  const classModifiers = { small };\n\n  return (\n    <div\n      {...commonProps(props, baseClass, classModifiers, {\n        marginTop,\n        marginLeft,\n        marginRight,\n        marginBottom,\n        marginSize,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default ScrimBase;\n"
  },
  {
    "path": "src/lv1/bases/ScrollableBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport ScrollableBase from './ScrollableBase';\nimport { boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: ScrollableBase,\n};\nexport const ScrollableBaseComponent = () => (\n  <div style={{ width: '10rem', height: '10rem' }}>\n    <ScrollableBase\n      scrollableX={boolean('ScrollableX', true, 'ScrollableBase')}\n      scrollableY={boolean('ScrollableY', true, 'ScrollableBase')}\n      {...commonKnobs()}\n    >\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n    </ScrollableBase>\n  </div>\n);\n"
  },
  {
    "path": "src/lv1/bases/ScrollableBase.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  scrollableX?: boolean;\n  scrollableY?: boolean;\n  children?: React.ReactNode;\n} & CommonProps;\nconst ScrollableBase: React.FC<Props> = (props: Props) => {\n  const { scrollableX, scrollableY, children } = props;\n\n  return (\n    <div\n      {...commonProps(props, 'vb-scrollableBase', { scrollableX, scrollableY })}\n      // キーボードでスクロールできるようにするため、tabIndexをつけておく\n      // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n      tabIndex={0}\n    >\n      {children}\n    </div>\n  );\n};\nexport default ScrollableBase;\n"
  },
  {
    "path": "src/lv1/bases/ZebraBase.stories.tsx",
    "content": "import * as React from 'react';\n\nimport ZebraBase from './ZebraBase';\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\nimport { VibesProvider } from '../../utilities';\n\nexport default {\n  component: ZebraBase,\n};\nexport const ZebraBaseComponent = () => (\n  <>\n    <ZebraBase\n      {...commonKnobs()}\n      paddingSize={\n        select(\n          'PaddingSize',\n          {\n            none: '',\n            small: 'small',\n            medium: 'medium',\n            large: 'large',\n            zero: 'zero',\n          },\n          '',\n          'ZebraBase'\n        ) || undefined\n      }\n    >\n      ZebraBase\n      は要素をグルーピングして表示するときに、交互に背景色をつけてくれます。\n    </ZebraBase>\n    <ZebraBase>周囲に24dpのpaddingが入ります。</ZebraBase>\n    <ZebraBase>\n      CSSのnth-childで色を付けているので、他の要素・コンポーネントと兄弟になる場合は\n      <code>&lt;div&gt;</code>で囲うなどしてください\n    </ZebraBase>\n    <ZebraBase>hoge</ZebraBase>\n    <ZebraBase>hoge</ZebraBase>\n  </>\n);\n\nexport const PaddingSizeOptions = () => (\n  <>\n    <div>\n      <ZebraBase>default (1.5rem = 24px)</ZebraBase>\n      <ZebraBase>default (1.5rem = 24px)</ZebraBase>\n      <ZebraBase mb={1}>default (1.5rem = 24px)</ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"zero\">paddingSize=&quot;zero&quot;</ZebraBase>\n      <ZebraBase paddingSize=\"zero\">paddingSize=&quot;zero&quot;</ZebraBase>\n      <ZebraBase paddingSize=\"zero\" mb={1}>\n        paddingSize=&quot;zero&quot;\n      </ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"small\">\n        paddingSize=&quot;small&quot; (1rem = 16px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"small\">\n        paddingSize=&quot;small&quot; (1rem = 16px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"small\" mb={1}>\n        paddingSize=&quot;small&quot; (1rem = 16px)\n      </ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"medium\">\n        paddingSize=&quot;medium&quot; (1.5rem = 24px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"medium\">\n        paddingSize=&quot;medium&quot; (1.5rem = 24px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"medium\" mb={1}>\n        paddingSize=&quot;medium&quot; (1.5rem = 24px)\n      </ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"large\">\n        paddingSize=&quot;large&quot; (2rem = 32px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"large\">\n        paddingSize=&quot;large&quot; (2rem = 32px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"large\" mb={1}>\n        paddingSize=&quot;large&quot; (2rem = 32px)\n      </ZebraBase>\n    </div>\n  </>\n);\n\nexport const ResponsivePaddingSize = () => (\n  <VibesProvider fixedLayout={false}>\n    <div>\n      <ZebraBase>default (1.5rem = 24px)</ZebraBase>\n      <ZebraBase>モバイル向けには左右が (1rem = 16px) となります</ZebraBase>\n      <ZebraBase mb={1}>default (1.5rem = 24px)</ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"zero\">paddingSize=&quot;zero&quot;</ZebraBase>\n      <ZebraBase paddingSize=\"zero\">paddingSize=&quot;zero&quot;</ZebraBase>\n      <ZebraBase paddingSize=\"zero\" mb={1}>\n        paddingSize=&quot;zero&quot;\n      </ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"small\">\n        paddingSize=&quot;small&quot; (1rem = 16px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"small\">\n        paddingSize=&quot;small&quot; (1rem = 16px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"small\" mb={1}>\n        paddingSize=&quot;small&quot; (1rem = 16px)\n      </ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"medium\">\n        paddingSize=&quot;medium&quot; (1.5rem = 24px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"medium\">\n        paddingSize=&quot;medium&quot; (1.5rem = 24px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"medium\" mb={1}>\n        paddingSize=&quot;medium&quot; (1.5rem = 24px)\n      </ZebraBase>\n    </div>\n    <div>\n      <ZebraBase paddingSize=\"large\">\n        paddingSize=&quot;large&quot; (2rem = 32px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"large\">\n        paddingSize=&quot;large&quot; (2rem = 32px)\n      </ZebraBase>\n      <ZebraBase paddingSize=\"large\" mb={1}>\n        paddingSize=&quot;large&quot; (2rem = 32px)\n      </ZebraBase>\n    </div>\n  </VibesProvider>\n);\n"
  },
  {
    "path": "src/lv1/bases/ZebraBase.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { BaseComponentPaddingProps } from './types';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children?: React.ReactNode;\n} & BaseComponentPaddingProps &\n  MarginClassProps &\n  CommonProps;\n\nconst ZebraBase: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    paddingSize,\n  } = props;\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-zebraBase',\n        {\n          paddingSmall: paddingSize === 'small',\n          paddingLarge: paddingSize === 'large',\n          paddingZero: paddingSize === 'zero',\n          // レスポンシブなpaddingの変更は、paddingSizeが無指定の場合のみ行う\n          paddingResponsive: useResponsive() && !paddingSize,\n        },\n        { marginTop, marginBottom, marginLeft, marginRight, marginSize }\n      )}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default ZebraBase;\n"
  },
  {
    "path": "src/lv1/bases/types.ts",
    "content": "export type BaseComponentBorderProps = {\n  border?: 'default' | 'alert' | 'notice' | 'success';\n};\n\nexport type BaseComponentPaddingProps = {\n  /**\n   * paddingの大きさを調整します。\n   * 無指定または `medium` の場合は 1.5rem (24px)、`small` で 1rem (16px)、`large` で 2rem (32px)、0のときはpadding無しになります。\n   */\n  paddingSize?: 'small' | 'medium' | 'large' | 'zero';\n};\n\nexport type FitContentProps = {\n  /**\n   * `true` にすると `max-width: fit-content` の状態になります\n   */\n  fitContent?: boolean;\n};\n\nexport type BaseComponentProps = BaseComponentPaddingProps &\n  FitContentProps & {\n    /**\n     * `true` にすると `display: inline` の状態になります\n     */\n    inline?: boolean;\n    /**\n     * (deprecated) `paddingSize` を `small` にしたのと同じ状態になります。\n     * @deprecated\n     */\n    small?: boolean;\n  };\n"
  },
  {
    "path": "src/lv1/buttons/BackwardButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport BackwardButton from './BackwardButton';\n\nexport default {\n  component: BackwardButton,\n};\n\nexport const BackwardButtonComponent = () => (\n  <BackwardButton\n    small={boolean('Small', false, 'BackwardButton')}\n    large={boolean('Large', false, 'BackwardButton')}\n    disabled={boolean('Disabled', false, 'BackwardButton')}\n    url={text('URL', 'https://www.freee.co.jp/', 'BackwardButton')}\n    appearance={\n      select(\n        'Appearance',\n        {\n          primary: 'primary',\n          secondary: 'secondary',\n          tertiary: 'tertiary',\n          undefined: '',\n        },\n        '',\n        'BackwardButton'\n      ) || undefined\n    }\n    danger={boolean('Danger', false, 'BackwardButton')}\n    onClick={action('click')}\n    onSelfWindowNavigation={action('self window navigation')}\n    type={select(\n      'Type',\n      { submit: 'submit', button: 'button', reset: 'reset' },\n      'button',\n      'BackwardButton'\n    )}\n    rel={text('Rel', '', 'BackwardButton')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'ボタン', 'BackwardButton')}\n  </BackwardButton>\n);\n\nexport const Default = () => (\n  <>\n    <BackwardButton mr={1} mb={1}>\n      default\n    </BackwardButton>\n    <BackwardButton mr={1} mb={1} appearance=\"primary\">\n      primary\n    </BackwardButton>\n    <BackwardButton mr={1} mb={1} appearance=\"secondary\">\n      secondary\n    </BackwardButton>\n    <BackwardButton mr={1} mb={1} appearance=\"tertiary\">\n      tertiary\n    </BackwardButton>\n  </>\n);\n\nexport const Danger = () => (\n  <>\n    <BackwardButton mr={1} mb={1} danger>\n      default\n    </BackwardButton>\n    <BackwardButton mr={1} mb={1} danger appearance=\"primary\">\n      primary\n    </BackwardButton>\n    <BackwardButton mr={1} mb={1} danger appearance=\"secondary\">\n      secondary\n    </BackwardButton>\n    <BackwardButton mr={1} mb={1} danger appearance=\"tertiary\">\n      tertiary\n    </BackwardButton>\n  </>\n);\n\nexport const Disabled = () => (\n  <>\n    <div>\n      <BackwardButton mr={1} mb={1} disabled>\n        default\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} disabled appearance=\"primary\">\n        primary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} disabled appearance=\"secondary\">\n        secondary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} disabled appearance=\"tertiary\">\n        tertiary\n      </BackwardButton>\n    </div>\n    <div>\n      <BackwardButton mr={1} mb={1} disabled danger>\n        default\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} disabled danger appearance=\"primary\">\n        primary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} disabled danger appearance=\"secondary\">\n        secondary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} disabled danger appearance=\"tertiary\">\n        tertiary\n      </BackwardButton>\n    </div>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <div>\n      <BackwardButton mr={1} mb={1} small>\n        default\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} small appearance=\"primary\">\n        primary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} small appearance=\"secondary\">\n        secondary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} small appearance=\"tertiary\">\n        tertiary\n      </BackwardButton>\n    </div>\n    <div>\n      <BackwardButton mr={1} mb={1} small danger>\n        default\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} small danger appearance=\"primary\">\n        primary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} small danger appearance=\"secondary\">\n        secondary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} small danger appearance=\"tertiary\">\n        tertiary\n      </BackwardButton>\n    </div>\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <div>\n      <BackwardButton mr={1} mb={1} large>\n        default\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} large appearance=\"primary\">\n        primary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} large appearance=\"secondary\">\n        secondary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} large appearance=\"tertiary\">\n        tertiary\n      </BackwardButton>\n    </div>\n    <div>\n      <BackwardButton mr={1} mb={1} large danger>\n        default\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} large danger appearance=\"primary\">\n        primary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} large danger appearance=\"secondary\">\n        secondary\n      </BackwardButton>\n      <BackwardButton mr={1} mb={1} large danger appearance=\"tertiary\">\n        tertiary\n      </BackwardButton>\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/BackwardButton.tsx",
    "content": "import * as React from 'react';\nimport { MdChevronLeft } from 'react-icons/md';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\nimport Button, { ButtonAppearanceType } from './Button';\n\ntype Props = {\n  /**\n   * ボタンのラベルとなる文字列を指定します。アイコンを表示する場合はここに入れずにIconComponentを使用してください。\n   */\n  children?: React.ReactNode;\n  /**\n   * href を設定します\n   */\n  url?: string;\n  /**\n   * 導線の優先度から、ボタンの種類を指定するのに使います。\n   * primaryは背景ベタ塗り+白字、secondaryは白背景+グレーの枠線+リンク色字、tertiaryは枠線なし+リンク色字となります。\n   */\n  appearance?: ButtonAppearanceType;\n  /**\n   * ボタンを押したものの動作が危険性を伴うかどうか。 `true` にすると赤系の色になります。\n   */\n  danger?: boolean;\n  /**\n   * disabled に設定します\n   */\n  disabled?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * input type を指定します\n   */\n  type?: 'button' | 'submit' | 'reset';\n  /**\n   * click ハンドラを指定します\n   */\n  onClick?: React.MouseEventHandler;\n  /**\n   * rel を指定します\n   */\n  rel?: string;\n} & MarginClassProps &\n  SelfWindowNavigationProp &\n  CommonProps;\n\n/**\n * BackwardButton は前画面への遷移のためのボタンです。\n *\n * - 「次の画面」「他の画面」への遷移には JumpButton を使用してください\n * - `target=\"_blank\"` は指定できません\n * - ListTableの行内に入れる場合など、高さを小さくしたい場合には `small` を使用してください\n * - フォームの送信を伴う場合など、不可逆な遷移をする場合には `Button` を使用してください\n */\nconst BackwardButton: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    url,\n    appearance,\n    danger,\n    disabled,\n    small,\n    large,\n    type,\n    onClick,\n    onSelfWindowNavigation,\n    rel,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const buttonBaseClass = 'vb-backwardButton';\n\n  return (\n    <span\n      {...commonProps(\n        props,\n        buttonBaseClass,\n        {},\n        { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n      )}\n    >\n      <Button\n        href={url}\n        appearance={appearance}\n        danger={danger}\n        disabled={disabled}\n        small={small}\n        large={large}\n        type={type}\n        onClick={onClick}\n        onSelfWindowNavigation={onSelfWindowNavigation}\n        rel={rel}\n        IconComponent={MdChevronLeft}\n        iconPosition=\"left\"\n      >\n        {children}\n      </Button>\n    </span>\n  );\n};\nexport default BackwardButton;\n"
  },
  {
    "path": "src/lv1/buttons/Button.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { MdArrowDropDown } from 'react-icons/md';\nimport { expect, fn, userEvent, within } from '@storybook/test';\nimport { Meta, StoryObj } from '@storybook/react';\nimport Button from './Button';\n\nexport default {\n  component: Button,\n} as Meta<typeof Button>;\n\ntype Story = StoryObj<typeof Button>;\n\nexport const Basic: Story = {\n  args: {\n    onClick: fn(),\n    onKeyDown: fn(),\n    onFocus: fn(),\n    onBlur: fn(),\n    children: 'ボタン',\n  },\n  render: (args) => {\n    const ref = React.createRef<HTMLButtonElement | HTMLAnchorElement>();\n\n    return <Button {...args} ref={ref} />;\n  },\n};\n\nexport const Interaction: Story = {\n  ...Basic,\n  play: async ({ args, canvasElement }) => {\n    const canvas = within(canvasElement);\n    const button = canvas.getByRole('button');\n\n    expect(button).toBeInTheDocument();\n\n    await userEvent.click(button);\n    expect(args.onClick).toHaveBeenCalled();\n\n    await userEvent.keyboard('{enter}');\n    expect(args.onKeyDown).toHaveBeenCalled();\n\n    await userEvent.tab();\n    expect(args.onBlur).toHaveBeenCalled();\n    expect(button).not.toHaveFocus();\n\n    await userEvent.tab({ shift: true });\n    expect(args.onFocus).toHaveBeenCalled();\n    expect(button).toHaveFocus();\n  },\n};\n\nexport const Default: Story = {\n  render: () => (\n    <>\n      <Button mr={1} mb={1}>\n        default\n      </Button>\n      <Button mr={1} mb={1} appearance=\"primary\">\n        primary\n      </Button>\n      <Button mr={1} mb={1} appearance=\"secondary\">\n        secondary\n      </Button>\n      <Button mr={1} mb={1} appearance=\"tertiary\">\n        tertiary\n      </Button>\n    </>\n  ),\n};\n\nexport const Danger: Story = {\n  render: () => (\n    <>\n      <Button mr={1} mb={1} danger>\n        default\n      </Button>\n      <Button mr={1} mb={1} danger appearance=\"primary\">\n        primary\n      </Button>\n      <Button mr={1} mb={1} danger appearance=\"secondary\">\n        secondary\n      </Button>\n      <Button mr={1} mb={1} danger appearance=\"tertiary\">\n        tertiary\n      </Button>\n    </>\n  ),\n};\n\nexport const Disabled: Story = {\n  render: () => (\n    <>\n      <div>\n        <Button mr={1} mb={1} disabled>\n          default\n        </Button>\n        <Button mr={1} mb={1} disabled appearance=\"primary\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} disabled appearance=\"secondary\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} disabled appearance=\"tertiary\">\n          tertiary\n        </Button>\n      </div>\n      <div>\n        <Button mr={1} mb={1} disabled danger>\n          default\n        </Button>\n        <Button mr={1} mb={1} disabled danger appearance=\"primary\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} disabled danger appearance=\"secondary\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} disabled danger appearance=\"tertiary\">\n          tertiary\n        </Button>\n      </div>\n    </>\n  ),\n};\n\nexport const Hover: Story = {\n  parameters: {\n    pseudo: {\n      hover: \"[data-test='hover']\",\n    },\n  },\n  render: () => (\n    <>\n      <div>\n        <Button mr={1} mb={1} data-test=\"hover\">\n          default\n        </Button>\n        <Button mr={1} mb={1} appearance=\"primary\" data-test=\"hover\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} appearance=\"secondary\" data-test=\"hover\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} appearance=\"tertiary\" data-test=\"hover\">\n          tertiary\n        </Button>\n      </div>\n      <div>\n        <Button mr={1} mb={1} danger data-test=\"hover\">\n          default\n        </Button>\n        <Button mr={1} mb={1} danger appearance=\"primary\" data-test=\"hover\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} danger appearance=\"secondary\" data-test=\"hover\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} danger appearance=\"tertiary\" data-test=\"hover\">\n          tertiary\n        </Button>\n      </div>\n    </>\n  ),\n};\n\nexport const Focus: Story = {\n  parameters: {\n    pseudo: {\n      focus: \"[data-test='focus']\",\n    },\n  },\n  render: () => (\n    <>\n      <div>\n        <Button mr={1} mb={1} data-test=\"focus\">\n          default\n        </Button>\n        <Button mr={1} mb={1} appearance=\"primary\" data-test=\"focus\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} appearance=\"secondary\" data-test=\"focus\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} appearance=\"tertiary\" data-test=\"focus\">\n          tertiary\n        </Button>\n      </div>\n      <div>\n        <Button mr={1} mb={1} danger data-test=\"focus\">\n          default\n        </Button>\n        <Button mr={1} mb={1} danger appearance=\"primary\" data-test=\"focus\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} danger appearance=\"secondary\" data-test=\"focus\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} danger appearance=\"tertiary\" data-test=\"focus\">\n          tertiary\n        </Button>\n      </div>\n    </>\n  ),\n};\n\nexport const Small: Story = {\n  render: () => (\n    <>\n      <div>\n        <Button mr={1} mb={1} small>\n          default\n        </Button>\n        <Button mr={1} mb={1} small appearance=\"primary\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} small appearance=\"secondary\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} small appearance=\"tertiary\">\n          tertiary\n        </Button>\n      </div>\n      <div>\n        <Button mr={1} mb={1} small danger>\n          default\n        </Button>\n        <Button mr={1} mb={1} small danger appearance=\"primary\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} small danger appearance=\"secondary\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} small danger appearance=\"tertiary\">\n          tertiary\n        </Button>\n      </div>\n    </>\n  ),\n};\n\nexport const Large: Story = {\n  render: () => (\n    <>\n      <div>\n        <Button mr={1} mb={1} large>\n          default\n        </Button>\n        <Button mr={1} mb={1} large appearance=\"primary\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} large appearance=\"secondary\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} large appearance=\"tertiary\">\n          tertiary\n        </Button>\n      </div>\n      <div>\n        <Button mr={1} mb={1} large danger>\n          default\n        </Button>\n        <Button mr={1} mb={1} large danger appearance=\"primary\">\n          primary\n        </Button>\n        <Button mr={1} mb={1} large danger appearance=\"secondary\">\n          secondary\n        </Button>\n        <Button mr={1} mb={1} large danger appearance=\"tertiary\">\n          tertiary\n        </Button>\n      </div>\n    </>\n  ),\n};\n\nexport const WithLeftIcon: Story = {\n  render: () => (\n    <>\n      <div>\n        <Button mr={1} mb={1} IconComponent={MdArrowDropDown}>\n          default\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          appearance=\"primary\"\n        >\n          primary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          appearance=\"secondary\"\n        >\n          secondary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          appearance=\"tertiary\"\n        >\n          tertiary\n        </Button>\n      </div>\n      <div>\n        <Button mr={1} mb={1} IconComponent={MdArrowDropDown} danger>\n          default\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          danger\n          appearance=\"primary\"\n        >\n          primary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          danger\n          appearance=\"secondary\"\n        >\n          secondary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          danger\n          appearance=\"tertiary\"\n        >\n          tertiary\n        </Button>\n      </div>\n    </>\n  ),\n};\n\nexport const WithRightIcon: Story = {\n  render: () => (\n    <>\n      <div>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n        >\n          default\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n          appearance=\"primary\"\n        >\n          primary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n          appearance=\"secondary\"\n        >\n          secondary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n          appearance=\"tertiary\"\n        >\n          tertiary\n        </Button>\n      </div>\n      <div>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n          danger\n        >\n          default\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n          danger\n          appearance=\"primary\"\n        >\n          primary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n          danger\n          appearance=\"secondary\"\n        >\n          secondary\n        </Button>\n        <Button\n          mr={1}\n          mb={1}\n          IconComponent={MdArrowDropDown}\n          iconPosition=\"right\"\n          danger\n          appearance=\"tertiary\"\n        >\n          tertiary\n        </Button>\n      </div>\n    </>\n  ),\n};\n\nexport const WidthFull: Story = {\n  render: () => (\n    <>\n      <Button mr={1} mb={1} width=\"full\">\n        default\n      </Button>\n      <Button\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        iconPosition=\"right\"\n        width=\"full\"\n      >\n        default\n      </Button>\n    </>\n  ),\n};\n\nexport const Download: Story = {\n  render: () => (\n    <>\n      <div>\n        <Button mr={1} mb={1} href=\"/logo\" download>\n          hrefのファイル名のまま保存\n        </Button>\n        <Button mr={1} mb={1} href=\"/logo\" download=\"freee_logo.png\">\n          downloadでファイル名を指定\n        </Button>\n      </div>\n    </>\n  ),\n};\n"
  },
  {
    "path": "src/lv1/buttons/Button.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport {\n  filterButtonAriaProps,\n  filterLinkAriaProps,\n  LinkAriaProps,\n  ButtonAriaProps,\n} from '../../utilities/AriaProps';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\n\nexport type ButtonAppearanceType = 'primary' | 'secondary' | 'tertiary';\n\ntype Props = {\n  /**\n   * ボタンのラベルとなる文字列を指定します。アイコンを表示する場合はここに入れずにIconComponentを使用してください。\n   */\n  children?: React.ReactNode;\n  /**\n   * 導線の優先度から、ボタンの種類を指定するのに使います。\n   * primaryは背景ベタ塗り+白字、secondaryは白背景+グレーの枠線+リンク色字、tertiaryは枠線なし+リンク色字となります。\n   */\n  appearance?: ButtonAppearanceType;\n  /**\n   * ボタンを押したものの動作が危険性を伴うかどうか。 `true` にすると赤系の色になります。\n   * appearance無指定時には `appearance: 'primary', danger: true` の見た目になります。\n   */\n  danger?: boolean;\n  /**\n   * (廃止予定) appearanceを使用してください。appearance指定時は無視されます。\n   */\n  primary?: boolean;\n  /**\n   * disabled に設定します\n   */\n  disabled?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * 押下時に遷移させるURLを指定します。指定した場合は `<a>` 要素、空文字列もしくはundefinedの場合は `<button>` 要素となります\n   */\n  href?: string;\n  /**\n   * target を設定します\n   */\n  target?: string;\n  /**\n   * 未指定の場合、`target=\"_blank\"` であれば `noopener noreferrer`となります\n   *\n   * （空文字列を渡した場合には `\"\"` が指定されます）\n   */\n  rel?: string;\n  /**\n   * download を設定します。hrefと異なる名前でファイルを保存したい場合は文字列を指定してください。\n   */\n  download?: boolean | string;\n  /**\n   * 押下時に意図しないフォーム送信が発生する場合は `button` にしてください。\n   */\n  type?: 'button' | 'submit' | 'reset';\n  /**\n   * click ハンドラを設定します\n   */\n  onClick?: React.MouseEventHandler;\n  /**\n   * keydown ハンドラを設定します\n   */\n  onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n  /**\n   * focus ハンドラを設定します\n   */\n  onFocus?: React.FocusEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n  /**\n   * blur ハンドラを設定します\n   */\n  onBlur?: React.FocusEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n  /**\n   * アイコンの配置箇所を設定します。ボタンの意味を説明するアイコンは左側 (left) に、ボタンの挙動を説明するアイコンは右側 (right) につけてください。\n   */\n  iconPosition?: 'left' | 'right';\n  /**\n   * 'full' で包括している要素に対して横幅を100%にします。\n   */\n  width?: 'default' | 'full';\n  /**\n   * ダイアログ等でボタンが並ぶ場合などで、ボタンラベルの長さによる幅の違いを避けるために、ボタンに最小幅を設定することが可能です。\n   */\n  hasMinWidth?: boolean;\n  /**\n   * アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n   */\n  IconComponent?: React.ElementType;\n} & MarginClassProps &\n  SelfWindowNavigationProp &\n  LinkAriaProps &\n  ButtonAriaProps &\n  CommonProps;\n\nfunction ButtonInner(\n  props: Props,\n  ref?: React.Ref<HTMLButtonElement | HTMLAnchorElement>\n): React.ReactElement {\n  const {\n    children,\n    appearance,\n    primary,\n    danger,\n    disabled,\n    small,\n    large,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    href,\n    target,\n    rel,\n    type,\n    download,\n    onClick,\n    onSelfWindowNavigation,\n    onKeyDown,\n    onFocus,\n    onBlur,\n    iconPosition,\n    IconComponent,\n    width,\n    hasMinWidth,\n  } = props;\n\n  const buttonBaseClass = 'vb-button';\n\n  const classModifier = {\n    appearancePrimary: appearance\n      ? appearance === 'primary'\n      : primary || danger,\n    appearanceSecondary:\n      appearance === 'secondary' || (!appearance && !primary && !danger),\n    appearanceTertiary: appearance === 'tertiary',\n    small,\n    large,\n    danger,\n    disabled,\n    leftIcon: IconComponent && iconPosition !== 'right',\n    rightIcon: IconComponent && iconPosition === 'right',\n    widthFull: width === 'full',\n    hasMinWidth,\n  };\n\n  const content = (\n    <>\n      {IconComponent && (\n        <IconComponent\n          className={`${buttonBaseClass}__icon ${buttonBaseClass}__icon--${\n            iconPosition === 'right' ? 'right' : 'left'\n          }`}\n          focusable={false}\n        />\n      )}\n      {children}\n    </>\n  );\n\n  if (href) {\n    return (\n      <a\n        href={href}\n        target={target}\n        rel={\n          rel || rel === ''\n            ? rel\n            : target === '_blank'\n            ? 'noopener noreferrer'\n            : undefined\n        }\n        onClick={(e: React.MouseEvent): void => {\n          disabled ? e.preventDefault() : onClick && onClick(e);\n          if (href) {\n            const navigator = selfWindowNavigator(onSelfWindowNavigation);\n            navigator && navigator(e, href);\n          }\n        }}\n        onKeyDown={onKeyDown}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        aria-disabled={disabled && true}\n        download={download}\n        ref={ref as React.Ref<HTMLAnchorElement>}\n        {...filterLinkAriaProps(props)}\n        {...commonProps(props, buttonBaseClass, classModifier, {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginSize,\n          marginTop,\n        })}\n      >\n        {content}\n      </a>\n    );\n  }\n  return (\n    <button\n      type={type}\n      disabled={disabled && true}\n      onClick={onClick}\n      onKeyDown={onKeyDown}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      ref={ref as React.Ref<HTMLButtonElement>}\n      {...filterButtonAriaProps(props)}\n      {...commonProps(props, buttonBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {content}\n    </button>\n  );\n}\n/**\n * ボタン\n *\n * - 見た目はボタンですが、セマンティクス上はリンクにもボタンにもなります\n *   - `href` が存在する場合はリンク `<a>` 要素、存在しない場合は `<button>` 要素となります\n *   - クリックでURLに移動する場合には `href` を渡してください（「別のタブで開く」など、リンクとしての挙動を期待できるので）\n *   - `href` に `\"#\"` や `\"javascript:void(0)\"` を **渡さないで** ください\n * - 他の画面に遷移するボタン用に `JumpButton` と `BackwardButton` も用意されています\n *   - 内部的には `Button` を使用していますが、遷移ボタン用の便利な機能を備えてあります。\n * - 右側または左側にアイコン（Material Design Iconsを想定）を表示できます\n *   - 「編集」「削除」「新規作成」など、ボタン押下によりもたらされれる動作のメタファーやアイキャッチが必要な際には左側 (left) にアイコンを表示してください\n *   - 「別ウインドウで開く」「ドロップダウンメニューを表示」などボタン押下時の挙動を示す必要がある際には右側 (right) にアイコンを表示してください\n *\n * ## `appearance` の使い分け\n *\n * `appearance` は、デフォルトでは `\"secondary\"` になっています。\n *\n * フォームの送信ボタンなど、「この場所のメインタスクはこれ」というものが明確な場合にのみ、そのボタンは `\"primary\"` としてください。\n *\n * `appearance=\"tertiary\"` は、特に単体配置された場合にボタンとして認識することが困難なため、使用できる場所は非常に限定的です。\n *\n *  以下は、`\"tertiary\"` の使用で問題のないケースです。\n *\n *  - `appearance=\"secondary\"` や `appearance=\"primary\"` な `Button` と並んでいる場所（ボタンとして認識しやすくなるため）\n *  - 「詳細画面で実行できるアクションへのショートカットを一覧画面にも配置する」のような、その場所でそのボタンを認識できしなくても問題のない場所\n *  - 「画面上に複数並んでいるコメントの『編集』ボタン」のような、コンテンツよりも目立つ必要のないボタン\n *  - ほとんどの画面で同じ表示になっていて、ユーザーの学習が特に期待できる場所（ページ上部の見出しの右に必ず関連メニューとして配置されちえるなど）\n *\n * 一方、以下のような場所では、 `\"tertiary\"` が不向きです。 `\"secondary\"` や `InlineLink` を使用してください。\n * `InlineLink` も `Button` 同様、`href` を与えなければ `<button>` 要素となる仕様のため、ページ遷移以外に用いても問題ありません。\n *\n *  - 注意文や説明文の文中や末尾のリンクや、そういった箇所でモーダルダイアログを開いたり状態を変更したりするなどのアクションをするもの\n *    - `Button` には `\"tertiary\"` でも上下左右にpaddingがあるため、文中・文尾で使用すると不自然になります\n *    - `\"tertiary\"` の `Button` ではアンダーラインがないため、インタラクティブな要素であることがわかりにくくなります\n *  - 上にあげたような `\"tertiary\"` で問題のないケースに該当せず、それによって不利益のある場所\n *    - 同じアクションを `\"primary\"` や `\"secondary\"` のボタンで実行できる場所がなく、ボタンとして認識できないことがユーザーにとって大きな不利益になる場所\n *    - ユーザーによる学習効果や推測が期待できない場所\n *    - 画面の構成を理解する・メインのタスクを完了する上でボタンの存在に気付く必要がある場所\n *\n */\nconst Button = React.forwardRef(ButtonInner);\nexport default Button;\n"
  },
  {
    "path": "src/lv1/buttons/GlobalNaviButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { MdHome, MdRouter } from 'react-icons/md';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\nimport GlobalNaviButton from './GlobalNaviButton';\n\nexport default {\n  component: GlobalNaviButton,\n};\n\nexport const GlobalNaviButtonComponent = () => (\n  <>\n    <GlobalNaviButton\n      href={text('Href', '#', 'GlobalNaviButton')}\n      IconComponent={MdHome}\n      current={boolean('Current', true, 'GlobalNaviButton')}\n      {...commonKnobs()}\n    >\n      {text('Children', 'ホーム', 'GlobalNaviButton')}\n    </GlobalNaviButton>\n    <GlobalNaviButton\n      href=\"#\"\n      IconComponent={MdRouter}\n      current={true}\n      onSelfWindowNavigation={action('onSelfWindowNavigation')}\n      {...commonKnobs()}\n    >\n      リンク（with react-router）\n    </GlobalNaviButton>\n    <GlobalNaviButton href=\"#\" {...commonKnobs()} current={true}>\n      アイコンなし（without IconComponent）\n    </GlobalNaviButton>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/GlobalNaviButton.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n   */\n  IconComponent?: React.ElementType;\n  /**\n   * href を指定します\n   */\n  href?: string;\n  /**\n   * 選択状態にします\n   */\n  current?: boolean;\n} & SelfWindowNavigationProp &\n  CommonProps;\n\n/**\n * グローバルナビ専用のボタンです。直接使用せず、 `lv2/GlobalNavi` を使用してください。\n */\nconst GlobalNaviButton: React.FC<Props> = (props: Props) => {\n  const { children, IconComponent, href, current, onSelfWindowNavigation } =\n    props;\n\n  const buttonClass = 'vb-globalNaviButton';\n  const classModifier = { current };\n\n  return !href ? (\n    <span\n      aria-current={current}\n      {...commonProps(props, buttonClass, classModifier)}\n    >\n      {!!IconComponent && (\n        <IconComponent className={buttonClass + '__icon'} focusable={false} />\n      )}\n      <span className={buttonClass + '__text'}>{children}</span>\n    </span>\n  ) : (\n    <a\n      href={href}\n      aria-current={current}\n      onClick={(e: React.MouseEvent<HTMLAnchorElement>): void => {\n        const navigator = selfWindowNavigator(onSelfWindowNavigation);\n        navigator && navigator(e, href);\n      }}\n      {...commonProps(props, buttonClass, classModifier)}\n    >\n      {!!IconComponent && (\n        <IconComponent className={buttonClass + '__icon'} focusable={false} />\n      )}\n      <span className={buttonClass + '__text'}>{children}</span>\n    </a>\n  );\n};\n\nexport default GlobalNaviButton;\n"
  },
  {
    "path": "src/lv1/buttons/IconOnlyBackwardButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport IconOnlyBackwardButton from './IconOnlyBackwardButton';\n\nexport default {\n  component: IconOnlyBackwardButton,\n};\n\nexport const IconOnlyBackwardButtonComponent = () => (\n  <IconOnlyBackwardButton\n    buttonLabel={text('buttonLabel', 'ボタンラベル', 'IconOnlyBackwardButton')}\n    small={boolean('Small', false, 'IconOnlyBackwardButton')}\n    large={boolean('Large', false, 'IconOnlyBackwardButton')}\n    disabled={boolean('Disabled', false, 'IconOnlyBackwardButton')}\n    url={text('URL', 'https://www.freee.co.jp/', 'IconOnlyBackwardButton')}\n    appearance={\n      select(\n        'Appearance',\n        {\n          primary: 'primary',\n          secondary: 'secondary',\n          tertiary: 'tertiary',\n          undefined: '',\n        },\n        '',\n        'IconOnlyBackwardButton'\n      ) || undefined\n    }\n    danger={boolean('Danger', false, 'IconOnlyBackwardButton')}\n    onClick={action('click')}\n    onSelfWindowNavigation={action('self window navigation')}\n    type={select(\n      'Type',\n      { submit: 'submit', button: 'button', reset: 'reset' },\n      'button',\n      'IconOnlyBackwardButton'\n    )}\n    rel={text('Rel', '', 'IconOnlyBackwardButton')}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <IconOnlyBackwardButton mr={1} mb={1} buttonLabel=\"default\" />\n    <IconOnlyBackwardButton\n      mr={1}\n      mb={1}\n      appearance=\"primary\"\n      buttonLabel=\"primary\"\n    />\n    <IconOnlyBackwardButton\n      mr={1}\n      mb={1}\n      appearance=\"secondary\"\n      buttonLabel=\"secondary\"\n    />\n    <IconOnlyBackwardButton\n      mr={1}\n      mb={1}\n      appearance=\"tertiary\"\n      buttonLabel=\"tertiary\"\n    />\n  </>\n);\n\nexport const Danger = () => (\n  <>\n    <IconOnlyBackwardButton mr={1} mb={1} danger buttonLabel=\"default\" />\n    <IconOnlyBackwardButton\n      mr={1}\n      mb={1}\n      danger\n      appearance=\"primary\"\n      buttonLabel=\"primary\"\n    />\n    <IconOnlyBackwardButton\n      mr={1}\n      mb={1}\n      danger\n      appearance=\"secondary\"\n      buttonLabel=\"secondary\"\n    />\n    <IconOnlyBackwardButton\n      mr={1}\n      mb={1}\n      danger\n      appearance=\"tertiary\"\n      buttonLabel=\"tertiary\"\n    />\n  </>\n);\n\nexport const Disabled = () => (\n  <>\n    <div>\n      <IconOnlyBackwardButton mr={1} mb={1} disabled buttonLabel=\"default\" />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        disabled\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        disabled\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        disabled\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        disabled\n        danger\n        buttonLabel=\"default\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        disabled\n        danger\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        disabled\n        danger\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        disabled\n        danger\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <div>\n      <IconOnlyBackwardButton mr={1} mb={1} small buttonLabel=\"default\" />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        small\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        small\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        small\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        small\n        danger\n        buttonLabel=\"default\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        small\n        danger\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        small\n        danger\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        small\n        danger\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <div>\n      <IconOnlyBackwardButton mr={1} mb={1} large buttonLabel=\"default\" />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        large\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        large\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        large\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        large\n        danger\n        buttonLabel=\"default\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        large\n        danger\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        large\n        danger\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyBackwardButton\n        mr={1}\n        mb={1}\n        large\n        danger\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/IconOnlyBackwardButton.tsx",
    "content": "import * as React from 'react';\nimport { MdChevronLeft } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport IconOnlyButton from './IconOnlyButton';\n\ntype Props = {\n  /**\n   * ボタンのaria-labelに使用される文字列です。必ず遷移先を表す文字列を指定してください。\n   */\n  buttonLabel: string;\n  /**\n   * href を設定します\n   */\n  url?: string;\n  /**\n   * click ハンドラを指定します\n   */\n  onClick?: React.MouseEventHandler;\n} & Pick<\n  Parameters<typeof IconOnlyButton>[0],\n  | 'appearance'\n  | 'danger'\n  | 'disabled'\n  | 'small'\n  | 'large'\n  | 'rel'\n  | 'type'\n  | 'onSelfWindowNavigation'\n> &\n  CommonProps;\n\n/**\n * IconOnlyBackwardButton は前画面への遷移のためのボタンです。\n *\n * - 文字列として遷移先を表現できないので、「次の画面へ進む」のように遷移先が自明な場合にのみ使用してください。\n * - `buttonLabel` に必ず代替テキストを設定してください\n * - 「次の画面」「他の画面」への遷移には IconOnlyJumpButton を使用してください\n * - `target=\"_blank\"` は指定できません\n * - ListTableの行内に入れる場合など、高さを小さくしたい場合には `small` を使用してください\n */\nconst IconOnlyBackwardButton: React.FC<Props> = (props: Props) => {\n  const {\n    buttonLabel,\n    url,\n    appearance,\n    danger,\n    disabled,\n    small,\n    large,\n    type,\n    onClick,\n    onSelfWindowNavigation,\n    rel,\n  } = props;\n\n  const buttonBaseClass = 'vb-backwardButton';\n\n  return (\n    <span {...commonProps(props, buttonBaseClass)}>\n      <IconOnlyButton\n        label={buttonLabel}\n        href={url}\n        appearance={appearance}\n        danger={danger}\n        disabled={disabled}\n        small={small}\n        large={large}\n        type={type}\n        onClick={onClick}\n        onSelfWindowNavigation={onSelfWindowNavigation}\n        rel={rel}\n        IconComponent={MdChevronLeft}\n      />\n    </span>\n  );\n};\nexport default IconOnlyBackwardButton;\n"
  },
  {
    "path": "src/lv1/buttons/IconOnlyButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { MdArrowDropDown } from 'react-icons/md';\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport IconOnlyButton from './IconOnlyButton';\n\nexport default {\n  component: IconOnlyButton,\n};\n\nexport const IconOnlyButtonComponent = () => (\n  <IconOnlyButton\n    appearance={\n      select(\n        'Appearance',\n        {\n          primary: 'primary',\n          secondary: 'secondary',\n          tertiary: 'tertiary',\n          undefined: '',\n        },\n        '',\n        'IconOnlyButton'\n      ) || undefined\n    }\n    primary={boolean('Primary', false, 'IconOnlyButton')}\n    danger={boolean('Danger', false, 'IconOnlyButton')}\n    small={boolean('Small', false, 'IconOnlyButton')}\n    large={boolean('Large', false, 'IconOnlyButton')}\n    disabled={boolean('Disabled', false, 'IconOnlyButton')}\n    IconComponent={MdArrowDropDown}\n    label=\"Icon Only Button\"\n    type={select(\n      'Type',\n      { submit: 'submit', button: 'button', reset: 'reset' },\n      'button',\n      'IconOnlyButton'\n    )}\n    onSelfWindowNavigation={action('self window navigation')}\n    onClick={action('click')}\n    onKeyDown={action('keydown')}\n    onFocus={action('focus')}\n    onBlur={action('blur')}\n    href={text('Href', '', 'IconOnlyButton')}\n    download={text('Download', '', 'Button') || undefined}\n    target={select(\n      'Target',\n      {\n        _blank: '_blank',\n        _self: '_self',\n      },\n      '_self',\n      'IconOnlyButton'\n    )}\n    rel={text('Rel', '', 'IconOnlyButton') || undefined}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      label=\"default\"\n    />\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      appearance=\"primary\"\n      label=\"primary\"\n    />\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      appearance=\"secondary\"\n      label=\"secondary\"\n    />\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      appearance=\"tertiary\"\n      label=\"tertiary\"\n    />\n  </>\n);\n\nexport const Danger = () => (\n  <>\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      danger\n      label=\"default\"\n    />\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      danger\n      appearance=\"primary\"\n      label=\"primary\"\n    />\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      danger\n      appearance=\"secondary\"\n      label=\"secondary\"\n    />\n    <IconOnlyButton\n      mr={1}\n      mb={1}\n      IconComponent={MdArrowDropDown}\n      danger\n      appearance=\"tertiary\"\n      label=\"tertiary\"\n    />\n  </>\n);\n\nexport const Disabled = () => (\n  <>\n    <div>\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        label=\"default\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        appearance=\"primary\"\n        label=\"primary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        appearance=\"secondary\"\n        label=\"secondary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        appearance=\"tertiary\"\n        label=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        danger\n        label=\"default\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        danger\n        appearance=\"primary\"\n        label=\"primary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        danger\n        appearance=\"secondary\"\n        label=\"secondary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        disabled\n        danger\n        appearance=\"tertiary\"\n        label=\"tertiary\"\n      />\n    </div>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <div>\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        label=\"default\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        appearance=\"primary\"\n        label=\"primary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        appearance=\"secondary\"\n        label=\"secondary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        appearance=\"tertiary\"\n        label=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        danger\n        label=\"default\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        danger\n        appearance=\"primary\"\n        label=\"primary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        danger\n        appearance=\"secondary\"\n        label=\"secondary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        small\n        danger\n        appearance=\"tertiary\"\n        label=\"tertiary\"\n      />\n    </div>\n  </>\n);\nexport const Large = () => (\n  <>\n    <div>\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        label=\"default\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        appearance=\"primary\"\n        label=\"primary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        appearance=\"secondary\"\n        label=\"secondary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        appearance=\"tertiary\"\n        label=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        danger\n        label=\"default\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        danger\n        appearance=\"primary\"\n        label=\"primary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        danger\n        appearance=\"secondary\"\n        label=\"secondary\"\n      />\n      <IconOnlyButton\n        mr={1}\n        mb={1}\n        IconComponent={MdArrowDropDown}\n        large\n        danger\n        appearance=\"tertiary\"\n        label=\"tertiary\"\n      />\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/IconOnlyButton.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport {\n  filterButtonAriaProps,\n  ButtonAriaProps,\n  filterLinkAriaProps,\n  LinkAriaProps,\n} from '../../utilities/AriaProps';\nimport { ButtonAppearanceType } from './Button';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\n\ntype Props = {\n  /**\n   * アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n   */\n  IconComponent: React.ElementType;\n  /**\n   * ボタンの代替テキストとして使用されます（`aria-label` になります）。\n   * ボタンが何を表現しているのか、必ず指定してください。\n   */\n  label: string;\n  /**\n   * 導線の優先度から、ボタンの種類を指定するのに使います。\n   * primaryは背景ベタ塗り+白字、secondaryは白背景+グレーの枠線+リンク色字、tertiaryは枠線なし+リンク色字となります。\n   */\n  appearance?: ButtonAppearanceType;\n  /**\n   * ボタンを押したものの動作が危険性を伴うかどうか。 `true` にすると赤系の色になります。\n   * appearance無指定時には `appearance: 'primary', danger: true` の見た目になります。\n   */\n  danger?: boolean;\n  /**\n   * (廃止予定) appearanceを使用してください。appearance指定時は無視されます。\n   */\n  primary?: boolean;\n  /**\n   * disabled に設定します\n   */\n  disabled?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n  /**\n   * input type を指定します\n   */\n  type?: 'button' | 'submit' | 'reset';\n  /**\n   * 押下時に遷移させるURLを指定します。指定した場合は `<a>` 要素、空文字列もしくはundefinedの場合は `<button>` 要素となります\n   */\n  href?: string;\n  /**\n   * target を設定します\n   */\n  target?: string;\n  /**\n   * 未指定の場合、`target=\"_blank\"` であれば `noopener noreferrer`となります\n   *\n   * （空文字列を渡した場合には `\"\"` が指定されます）\n   */\n  rel?: string;\n  /**\n   * download を設定します。hrefと異なる名前でファイルを保存したい場合は文字列を指定してください。\n   */\n  download?: boolean | string;\n  /**\n   * click ハンドラを設定します\n   */\n  onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n  /**\n   * keydown ハンドラを設定します\n   */\n  onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n  /**\n   * focus ハンドラを設定します\n   */\n  onFocus?: React.FocusEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n  /**\n   * blur ハンドラを設定します\n   */\n  onBlur?: React.FocusEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n} & MarginClassProps &\n  SelfWindowNavigationProp &\n  ButtonAriaProps &\n  LinkAriaProps &\n  CommonProps;\n\n/**\n * アイコン単体でボタンを配置する場合に使用します\n */\nfunction IconOnlyButtonInner(\n  props: Props,\n  ref?: React.Ref<HTMLButtonElement>\n): React.ReactElement {\n  const {\n    IconComponent,\n    appearance,\n    primary,\n    danger,\n    disabled,\n    small,\n    large,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    label,\n    type,\n    href,\n    target,\n    rel,\n    download,\n    onSelfWindowNavigation,\n    onClick,\n    onKeyDown,\n    onFocus,\n    onBlur,\n  } = props;\n\n  const buttonBaseClass = 'vb-iconOnlyButton';\n  const classModifier = {\n    appearancePrimary: appearance\n      ? appearance === 'primary'\n      : primary || danger,\n    appearanceSecondary:\n      appearance === 'secondary' || (!appearance && !primary && !danger),\n    appearanceTertiary: appearance === 'tertiary',\n    small,\n    large,\n    danger,\n    disabled,\n  };\n\n  if (href) {\n    return (\n      <a\n        href={href}\n        target={target}\n        rel={\n          rel || rel === ''\n            ? rel\n            : target === '_blank'\n            ? 'noopener noreferrer'\n            : undefined\n        }\n        download={download}\n        onClick={(e: React.MouseEvent): void => {\n          disabled\n            ? e.preventDefault()\n            : onClick && onClick(e as React.MouseEvent<HTMLAnchorElement>);\n          if (href) {\n            const navigator = selfWindowNavigator(onSelfWindowNavigation);\n            navigator && navigator(e, href);\n          }\n        }}\n        onKeyDown={onKeyDown}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        aria-disabled={disabled && true}\n        ref={ref as React.Ref<HTMLAnchorElement>}\n        {...filterLinkAriaProps(props)}\n        {...commonProps(props, buttonBaseClass, classModifier, {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginSize,\n          marginTop,\n        })}\n        aria-label={label}\n      >\n        <IconComponent className={buttonBaseClass + '__icon'} />\n      </a>\n    );\n  }\n\n  return (\n    <button\n      disabled={disabled && true}\n      onClick={onClick}\n      onKeyDown={onKeyDown}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      ref={ref}\n      aria-label={label}\n      type={type}\n      {...filterButtonAriaProps(props)}\n      {...commonProps(props, buttonBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      <IconComponent className={buttonBaseClass + '__icon'} />\n    </button>\n  );\n}\n\nconst IconOnlyButton = React.forwardRef(IconOnlyButtonInner);\nexport default IconOnlyButton;\n"
  },
  {
    "path": "src/lv1/buttons/IconOnlyJumpButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport IconOnlyJumpButton from './IconOnlyJumpButton';\n\nexport default {\n  component: IconOnlyJumpButton,\n};\n\nexport const IconOnlyJumpButtonComponent = () => (\n  <IconOnlyJumpButton\n    buttonLabel={text('buttonLabel', 'ボタンラベル', 'IconOnlyJumpButton')}\n    target={select(\n      'Target',\n      {\n        _blank: '_blank',\n        _self: '_self',\n      },\n      '_self',\n      'IconOnlyJumpButton'\n    )}\n    small={boolean('Small', false, 'IconOnlyJumpButton')}\n    large={boolean('Large', false, 'IconOnlyJumpButton')}\n    disabled={boolean('Disabled', false, 'IconOnlyJumpButton')}\n    url={text('Url', 'https://www.freee.co.jp/', 'IconOnlyJumpButton')}\n    appearance={\n      select(\n        'Appearance',\n        {\n          primary: 'primary',\n          secondary: 'secondary',\n          tertiary: 'tertiary',\n          undefined: '',\n        },\n        '',\n        'IconOnlyJumpButton'\n      ) || undefined\n    }\n    danger={boolean('Danger', false, 'IconOnlyJumpButton')}\n    onClick={action('click')}\n    onSelfWindowNavigation={action('self window navigation')}\n    type={select(\n      'Type',\n      { submit: 'submit', button: 'button', reset: 'reset' },\n      'button',\n      'IconOnlyJumpButton'\n    )}\n    rel={text('Rel', '', 'IconOnlyJumpButton')}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <IconOnlyJumpButton mr={1} mb={1} buttonLabel=\"default\" />\n    <IconOnlyJumpButton\n      mr={1}\n      mb={1}\n      appearance=\"primary\"\n      buttonLabel=\"primary\"\n    />\n    <IconOnlyJumpButton\n      mr={1}\n      mb={1}\n      appearance=\"secondary\"\n      buttonLabel=\"secondary\"\n    />\n    <IconOnlyJumpButton\n      mr={1}\n      mb={1}\n      appearance=\"tertiary\"\n      buttonLabel=\"tertiary\"\n    />\n  </>\n);\n\nexport const Danger = () => (\n  <>\n    <IconOnlyJumpButton mr={1} mb={1} danger buttonLabel=\"default\" />\n    <IconOnlyJumpButton\n      mr={1}\n      mb={1}\n      danger\n      appearance=\"primary\"\n      buttonLabel=\"primary\"\n    />\n    <IconOnlyJumpButton\n      mr={1}\n      mb={1}\n      danger\n      appearance=\"secondary\"\n      buttonLabel=\"secondary\"\n    />\n    <IconOnlyJumpButton\n      mr={1}\n      mb={1}\n      danger\n      appearance=\"tertiary\"\n      buttonLabel=\"tertiary\"\n    />\n  </>\n);\n\nexport const Disabled = () => (\n  <>\n    <div>\n      <IconOnlyJumpButton mr={1} mb={1} disabled buttonLabel=\"default\" />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        disabled\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        disabled\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        disabled\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyJumpButton mr={1} mb={1} disabled danger buttonLabel=\"default\" />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        disabled\n        danger\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        disabled\n        danger\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        disabled\n        danger\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <div>\n      <IconOnlyJumpButton mr={1} mb={1} small buttonLabel=\"default\" />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        small\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        small\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        small\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyJumpButton mr={1} mb={1} small danger buttonLabel=\"default\" />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        small\n        danger\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        small\n        danger\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        small\n        danger\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <div>\n      <IconOnlyJumpButton mr={1} mb={1} large buttonLabel=\"default\" />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        large\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        large\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        large\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyJumpButton mr={1} mb={1} large danger buttonLabel=\"default\" />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        large\n        danger\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        large\n        danger\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        large\n        danger\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n  </>\n);\n\nexport const TargetBlank = () => (\n  <>\n    <div>\n      <IconOnlyJumpButton mr={1} mb={1} target=\"_blank\" buttonLabel=\"default\" />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        target=\"_blank\"\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        target=\"_blank\"\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        target=\"_blank\"\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n    <div>\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        target=\"_blank\"\n        danger\n        buttonLabel=\"default\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        target=\"_blank\"\n        danger\n        appearance=\"primary\"\n        buttonLabel=\"primary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        target=\"_blank\"\n        danger\n        appearance=\"secondary\"\n        buttonLabel=\"secondary\"\n      />\n      <IconOnlyJumpButton\n        mr={1}\n        mb={1}\n        target=\"_blank\"\n        danger\n        appearance=\"tertiary\"\n        buttonLabel=\"tertiary\"\n      />\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/IconOnlyJumpButton.tsx",
    "content": "import * as React from 'react';\nimport { MdChevronRight, MdOpenInNew } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport IconOnlyButton from './IconOnlyButton';\n\ntype Props = {\n  /**\n   * ボタンのaria-labelに使用される文字列です。必ず遷移先を表す文字列を指定してください。\n   */\n  buttonLabel: string;\n  /**\n   * href を設定します\n   */\n  url?: string;\n  /**\n   * click ハンドラを指定します\n   */\n  onClick?: React.MouseEventHandler;\n} & Pick<\n  Parameters<typeof IconOnlyButton>[0],\n  | 'appearance'\n  | 'danger'\n  | 'disabled'\n  | 'small'\n  | 'large'\n  | 'rel'\n  | 'target'\n  | 'type'\n  | 'onSelfWindowNavigation'\n> &\n  CommonProps;\n\n/**\n * IconOnlyJumpButton は遷移のためのボタンです。別URLへ遷移させることが目的の際に使用してください。\n *\n * - 文字列として遷移先を表現できないので、「次の画面へ進む」のように遷移先が自明な場合にのみ使用してください。\n * - `buttonLabel` に必ず代替テキストを設定してください\n * - 前の画面に戻るボタンには `IconOnlyBackwardButton` を使用してください\n * - `target=\"_self\"`（同じウィンドウ・タブで開く） の場合は RightChevron アイコン、`target=\"_blank\"` （新しいウィンドウ・タブで開く）の場合は OpenInNew アイコンになります\n * - ListTableの行内に入れる場合など、高さを小さくしたい場合には `small` を使用してください\n */\nexport default function IconOnlyJumpButton(props: Props): React.ReactElement {\n  const {\n    buttonLabel,\n    url,\n    appearance,\n    danger,\n    disabled,\n    small,\n    large,\n    target,\n    type,\n    rel,\n    onClick,\n    onSelfWindowNavigation,\n  } = props;\n\n  const buttonBaseClass = 'vb-jumpButton';\n  return (\n    <span {...commonProps(props, buttonBaseClass)}>\n      <IconOnlyButton\n        label={buttonLabel}\n        href={url}\n        disabled={disabled}\n        appearance={appearance}\n        danger={danger}\n        small={small}\n        large={large}\n        target={target}\n        rel={rel}\n        type={type}\n        onClick={onClick}\n        onSelfWindowNavigation={onSelfWindowNavigation}\n        IconComponent={target === '_blank' ? MdOpenInNew : MdChevronRight}\n      />\n    </span>\n  );\n}\n"
  },
  {
    "path": "src/lv1/buttons/InlineLink.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Paragraph from '../typography/Paragraph';\nimport Note from '../typography/Note';\nimport InlineLink from './InlineLink';\n\nexport default {\n  component: InlineLink,\n};\n\nexport const InlineLinkComponent = () => (\n  <InlineLink\n    href={text('Href', 'https://www.freee.co.jp/', 'InlineLink') || undefined}\n    target={select(\n      'Target',\n      {\n        _blank: '_blank',\n        _self: '_self',\n      },\n      '_self',\n      'InlineLink'\n    )}\n    rel={text('Rel', '', 'InlineLink' || undefined)}\n    onClick={action('onClick')}\n    onSelfWindowNavigation={action('self window navigation')}\n    {...commonKnobs()}\n  >\n    {text('Children', '文中リンク', 'InlineLink')}\n  </InlineLink>\n);\n\nexport const TargetBlank = () => (\n  <InlineLink href=\"https://www.freee.co.jp/\" target=\"_blank\">\n    target=_blankにするとアイコンが変わります\n  </InlineLink>\n);\n\nexport const NoHref = () => (\n  <InlineLink>hrefなしではbutton要素になります</InlineLink>\n);\n\nexport const Disabled = () => (\n  <InlineLink href=\"https://www.freee.co.jp/\" target=\"_blank\" disabled>\n    disabledになります\n  </InlineLink>\n);\n\nexport const WithinComponent = () => (\n  <>\n    <Paragraph>\n      Paragraphの中で使うと0.875rem = 14px で\n      <InlineLink href=\"https://www.freee.co.jp/\" target=\"_blank\">\n        こんな感じ\n      </InlineLink>\n    </Paragraph>\n    <Note>\n      Noteの中で使うと0.75rem = 12px で\n      <InlineLink href=\"https://www.freee.co.jp/\" target=\"_blank\">\n        ちょっと小さい\n      </InlineLink>\n    </Note>\n  </>\n);\n\nexport const CustomLineHeight = () => (\n  <div style={{ lineHeight: 3 }}>\n    <InlineLink target=\"_blank\" href=\"https://www.freee.co.jp/\">\n      大きなline-heightのときでもアイコンは文字に対して中央に並ぶ\n    </InlineLink>\n  </div>\n);\n"
  },
  {
    "path": "src/lv1/buttons/InlineLink.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport {\n  ButtonAriaProps,\n  LinkAriaProps,\n  filterButtonAriaProps,\n  filterLinkAriaProps,\n} from '../../utilities/AriaProps';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\nimport { MdOpenInNew } from 'react-icons/md';\n\ntype Props = {\n  /**\n   * 遷移先画面のURLを指定します。  指定した場合には `<a>` 要素、渡さなかった場合には `<button>` 要素となります。\n   *\n   * **指定できない場合は何も指定しないでください**\n   */\n  href?: string;\n  /**\n   * `<a>` 要素の `target` 属性に渡されます。 `\"_blank\"` とした場合、 OpenInNew アイコンがつきます\n   */\n  target?: string;\n  /**\n   * 未指定の場合、`target=\"_blank\"` であれば `noopener noreferrer`となります\n   */\n  /**\n   * disabled に設定します\n   */\n  disabled?: boolean;\n  rel?: string;\n  children?: React.ReactNode;\n  /**\n   * クリック時の処理を指定します。 `onSelfWindowNavigation` とは違い、すべての状況でクリック時に発火します。\n   */\n  onClick?: (\n    event: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>\n  ) => void;\n} & SelfWindowNavigationProp &\n  ButtonAriaProps &\n  LinkAriaProps &\n  CommonProps;\n\n/**\n *\n * 配置された場所のフォントにスタイルをあわせつつ、「青文字」・「アンダーライン」でボタンまたはリンクであることを表現するコンポーネントです。\n *\n * 本文や注釈などの中にリンクを配置したい場合には、こちらを使用してください。\n *\n *\n * - 文字サイズは配置された場所に従います\n * - 見た目はボタンですが、セマンティクス上はリンクにもボタンにもなります\n *   - `href` を指定すると `<a>` 要素、指定しないと `<button>` 要素となります。\n *   - `href` を指定できない（遷移先のURLが存在しない）場合は `href` を指定しないでください（`#` を入れたりしないでください）\n * - `target` に `_blank` を指定すると OpenInNew アイコンが表示されます\n * - react-router 等を使用している場合は、遷移時の処理を `onSelfWindowNavigation` に指定してください\n * - `Button` コンポーネント（特に `appearance=\"tertiary\"` を指定したもの）との使い分け方については、 `Button` コンポーネントの解説を参照してください。\n *\n * 名称は「インライン」の「リンク」ですが、これは配置場所や目的を制限するものではありません。\n * 文中や文尾以外の場所への配置も、「ボタン」としての使用もすることができます。\n */\nconst InlineLink: React.FC<Props> = (props: Props) => {\n  const {\n    href,\n    children,\n    rel,\n    target,\n    disabled,\n    onClick,\n    onSelfWindowNavigation,\n  } = props;\n  const baseClassName = 'vb-inlineLink';\n\n  const classModifier = {\n    disabled,\n  };\n\n  const icon = target === '_blank' && (\n    <span\n      className={`${baseClassName}__iconWrapper`}\n      role=\"img\"\n      aria-hidden=\"true\"\n    >\n      <span className={`${baseClassName}__icon`}>\n        <MdOpenInNew />\n      </span>\n    </span>\n  );\n\n  if (href) {\n    return (\n      <a\n        href={href}\n        {...commonProps(props, baseClassName, classModifier)}\n        {...filterLinkAriaProps(props)}\n        rel={\n          rel ? rel : target === '_blank' ? 'noopener noreferrer' : undefined\n        }\n        target={target}\n        aria-disabled={disabled && true}\n        onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n          if (disabled) {\n            e.preventDefault();\n            return;\n          }\n          if (onClick) {\n            onClick(e);\n          }\n          const navigator = selfWindowNavigator(onSelfWindowNavigation);\n          if (navigator) {\n            navigator(e, href);\n          }\n        }}\n      >\n        {children}\n        {icon}\n      </a>\n    );\n  }\n  return (\n    <button\n      disabled={disabled && true}\n      onClick={onClick}\n      type=\"button\"\n      {...commonProps(props, baseClassName, classModifier)}\n      {...filterButtonAriaProps(props)}\n    >\n      {children}\n      {icon}\n    </button>\n  );\n};\n\nexport default InlineLink;\n"
  },
  {
    "path": "src/lv1/buttons/JumpButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport JumpButton from './JumpButton';\n\nexport default {\n  component: JumpButton,\n};\n\nexport const JumpButtonComponent = () => {\n  const ref = React.createRef<HTMLButtonElement | HTMLAnchorElement>();\n  return (\n    <JumpButton\n      target={select(\n        'Target',\n        {\n          _blank: '_blank',\n          _self: '_self',\n        },\n        '_self',\n        'JumpButton'\n      )}\n      small={boolean('Small', false, 'JumpButton')}\n      large={boolean('Large', false, 'JumpButton')}\n      disabled={boolean('Disabled', false, 'JumpButton')}\n      appearance={\n        select(\n          'Appearance',\n          {\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n            undefined: '',\n          },\n          '',\n          'JumpButton'\n        ) || undefined\n      }\n      danger={boolean('Danger', false, 'JumpButton')}\n      url={text('Url', 'https://www.freee.co.jp/', 'JumpButton')}\n      onClick={action('click')}\n      onSelfWindowNavigation={action('onSelfWindowNavigation')}\n      type={select(\n        'Type',\n        { submit: 'submit', button: 'button', reset: 'reset' },\n        'button',\n        'JumpButton'\n      )}\n      rel={text('Rel', '', 'JumpButton')}\n      ref={ref}\n      {...commonKnobs()}\n    >\n      ボタン\n    </JumpButton>\n  );\n};\n\nexport const Default = () => (\n  <>\n    <JumpButton mr={1} mb={1}>\n      default\n    </JumpButton>\n    <JumpButton mr={1} mb={1} appearance=\"primary\">\n      primary\n    </JumpButton>\n    <JumpButton mr={1} mb={1} appearance=\"secondary\">\n      secondary\n    </JumpButton>\n    <JumpButton mr={1} mb={1} appearance=\"tertiary\">\n      tertiary\n    </JumpButton>\n  </>\n);\n\nexport const Danger = () => (\n  <>\n    <JumpButton mr={1} mb={1} danger>\n      default\n    </JumpButton>\n    <JumpButton mr={1} mb={1} danger appearance=\"primary\">\n      primary\n    </JumpButton>\n    <JumpButton mr={1} mb={1} danger appearance=\"secondary\">\n      secondary\n    </JumpButton>\n    <JumpButton mr={1} mb={1} danger appearance=\"tertiary\">\n      tertiary\n    </JumpButton>\n  </>\n);\n\nexport const Disabled = () => (\n  <>\n    <div>\n      <JumpButton mr={1} mb={1} disabled>\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} disabled appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} disabled appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} disabled appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n    <div>\n      <JumpButton mr={1} mb={1} disabled danger>\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} disabled danger appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} disabled danger appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} disabled danger appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <div>\n      <JumpButton mr={1} mb={1} small>\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} small appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} small appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} small appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n    <div>\n      <JumpButton mr={1} mb={1} small danger>\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} small danger appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} small danger appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} small danger appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <div>\n      <JumpButton mr={1} mb={1} large>\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} large appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} large appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} large appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n    <div>\n      <JumpButton mr={1} mb={1} large danger>\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} large danger appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} large danger appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} large danger appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n  </>\n);\n\nexport const TargetBlank = () => (\n  <>\n    <div>\n      <JumpButton mr={1} mb={1} target=\"_blank\">\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} target=\"_blank\" appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} target=\"_blank\" appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} target=\"_blank\" appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n    <div>\n      <JumpButton mr={1} mb={1} target=\"_blank\" danger>\n        default\n      </JumpButton>\n      <JumpButton mr={1} mb={1} target=\"_blank\" danger appearance=\"primary\">\n        primary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} target=\"_blank\" danger appearance=\"secondary\">\n        secondary\n      </JumpButton>\n      <JumpButton mr={1} mb={1} target=\"_blank\" danger appearance=\"tertiary\">\n        tertiary\n      </JumpButton>\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/JumpButton.tsx",
    "content": "import * as React from 'react';\nimport { MdChevronRight, MdOpenInNew } from 'react-icons/md';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\nimport Button, { ButtonAppearanceType } from './Button';\n\ntype Props = {\n  /**\n   * ボタンのラベルとなる文字列を指定します\n   */\n  children?: React.ReactNode;\n  /**\n   * href を設定します\n   */\n  url?: string;\n  /**\n   * 導線の優先度から、ボタンの種類を指定するのに使います。\n   * primaryは背景ベタ塗り+白字、secondaryは白背景+グレーの枠線+リンク色字、tertiaryは枠線なし+リンク色字となります。\n   */\n  appearance?: ButtonAppearanceType;\n  /**\n   * ボタンを押したものの動作が危険性を伴うかどうか。 `true` にすると赤系の色になります。\n   */\n  danger?: boolean;\n  /**\n   * disabled に設定します\n   */\n  disabled?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * rel を指定します\n   */\n  rel?: string;\n  /**\n   * `<a>` 要素の `target` 属性に渡されます。 `\"_blank\"` とした場合、アイコンが OpenInNew になります\n   */\n  target?: string;\n  /**\n   * input type を指定します\n   */\n  type?: 'button' | 'submit' | 'reset';\n  /**\n   * click ハンドラを指定します\n   */\n  onClick?: React.MouseEventHandler;\n} & MarginClassProps &\n  SelfWindowNavigationProp &\n  CommonProps;\n\n/**\n * JumpButton は遷移のためのボタンです。別URLへ遷移させることが目的の際に使用してください。\n *\n * - 前の画面に戻るボタンには `BackwardButton` を使用してください\n * - `target=\"_self\"`（同じウィンドウ・タブで開く） の場合は RightChevron アイコン、`target=\"_blank\"` （新しいウィンドウ・タブで開く）の場合は OpenInNew アイコンになります\n * - ListTableの行内に入れる場合など、高さを小さくしたい場合には `small` を使用してください\n * - フォームの送信を伴う場合など、不可逆な遷移をする場合には `Button` を使用してください\n */\nconst RenderJumpButton: React.ForwardRefRenderFunction<\n  HTMLButtonElement | HTMLAnchorElement,\n  Props\n> = (\n  props: Props,\n  ref?: React.Ref<HTMLButtonElement | HTMLAnchorElement>\n): React.ReactElement => {\n  const {\n    children,\n    url,\n    appearance,\n    danger,\n    disabled,\n    small,\n    large,\n    target,\n    type,\n    rel,\n    onClick,\n    onSelfWindowNavigation,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const buttonBaseClass = 'vb-jumpButton';\n  return (\n    <span\n      {...commonProps(\n        props,\n        buttonBaseClass,\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginSize,\n          marginTop,\n        }\n      )}\n    >\n      <Button\n        href={url}\n        disabled={disabled}\n        appearance={appearance}\n        danger={danger}\n        small={small}\n        large={large}\n        target={target}\n        rel={rel}\n        type={type}\n        onClick={onClick}\n        onSelfWindowNavigation={onSelfWindowNavigation}\n        IconComponent={target === '_blank' ? MdOpenInNew : MdChevronRight}\n        iconPosition=\"right\"\n        ref={ref}\n      >\n        {children}\n      </Button>\n    </span>\n  );\n};\n\nconst JumpButton = React.forwardRef<\n  HTMLButtonElement | HTMLAnchorElement,\n  Props\n>(RenderJumpButton);\n\nexport default JumpButton;\n"
  },
  {
    "path": "src/lv1/buttons/LeftIconButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport LeftIconButton from './LeftIconButton';\nimport { commonKnobs } from '../../../stories';\nimport { MdArrowDropDown } from 'react-icons/md';\nimport { text, boolean, select } from '@storybook/addon-knobs';\n\nexport default {\n  title: 'deprecated/buttons/LeftIconButton',\n  component: LeftIconButton,\n};\n\nexport const LeftIconButtonComponent = () => (\n  <LeftIconButton\n    primary={boolean('Primary', false, 'LeftIconButton')}\n    danger={boolean('Danger', false, 'LeftIconButton')}\n    small={boolean('Small', false, 'LeftIconButton')}\n    disabled={boolean('Disabled', false, 'LeftIconButton')}\n    IconComponent={MdArrowDropDown}\n    type={select(\n      'Type',\n      { submit: 'submit', button: 'button', reset: 'reset' },\n      'button',\n      'LeftIconButton'\n    )}\n    {...commonKnobs()}\n  >\n    {text('Label', 'ボタン', 'LeftIconButton')}\n  </LeftIconButton>\n);\n"
  },
  {
    "path": "src/lv1/buttons/LeftIconButton.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport Button from './Button';\n\ntype Props = {\n  children?: React.ReactNode;\n  IconComponent: React.ElementType;\n  primary?: boolean;\n  danger?: boolean;\n  disabled?: boolean;\n  small?: boolean;\n  type?: 'button' | 'submit' | 'reset';\n  onClick?: React.MouseEventHandler;\n} & MarginClassProps &\n  CommonProps;\n/**\n * (廃止予定) Buttonコンポーネントを使用してください\n *\n * 編集・削除・新規作成など、ボタン押下によりもたらされれる動作のメタファーやアイキャッチが必要な際に使用してください\n */\nexport default function LeftIconButton(props: Props): React.ReactElement {\n  return <Button {...props} iconPosition=\"left\" />;\n}\n"
  },
  {
    "path": "src/lv1/buttons/ListButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport ListButton from './ListButton';\n\nexport default {\n  title: 'deprecated/buttons/ListButton',\n  component: ListButton,\n};\n\nexport const ListButtonComponent = () => (\n  <ListButton\n    selected={boolean('Selected', false, 'ListButton')}\n    href={text('Href', '#', 'ListButton')}\n    target={select(\n      'Target',\n      {\n        _blank: '_blank',\n        _self: '_self',\n      },\n      '_self',\n      'ListButton'\n    )}\n    rel={text('Rel', '', 'ListButton')}\n    statusIconText={text('StatusIconText', '', 'ListButton')}\n    statusIconType={select(\n      'StatusIconType',\n      {\n        done: 'done',\n        success: 'success',\n        progress: 'progress',\n        required: 'required',\n        disabled: 'disabled',\n        emphasis: 'emphasis',\n        warning: 'warning',\n        error: 'error',\n      },\n      'success',\n      'ListButton'\n    )}\n    actionButton={boolean('ActionButton', false, 'ListButton')}\n    bgTransparent={boolean('BgTransparent', false, 'ListButton')}\n    onClick={action('click')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'リスト', 'ListButton')}\n  </ListButton>\n);\n"
  },
  {
    "path": "src/lv1/buttons/ListButton.tsx",
    "content": "import * as React from 'react';\nimport StatusIcon, { StatusType } from '../icons/StatusIcon';\nimport { MdOpenInNew } from 'react-icons/md';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  selectableItemIndex?: number;\n  children?: React.ReactNode;\n  selected?: boolean;\n  href?: string;\n  target?: string;\n  rel?: string;\n  statusIconText?: string;\n  statusIconType?: StatusType;\n  actionButton?: boolean;\n  LeftIconComponent?: React.ElementType;\n  FarRightIconComponent?: React.ElementType;\n  bgTransparent?: boolean;\n  onClick?: React.MouseEventHandler;\n  selectableItemRef?: React.Ref<HTMLAnchorElement | HTMLButtonElement>;\n  onKeyDown?: (\n    e: React.KeyboardEvent<HTMLAnchorElement | HTMLButtonElement>,\n    selectableItemIndex: number\n  ) => void;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * `lv2/ListButtons` および `lv2/ListButtonSelector` で使用される想定のボタンです。単独で使用しないでください\n */\nconst ListButton: React.FC<Props> = (props: Props) => {\n  const {\n    selectableItemIndex,\n    children,\n    selected,\n    href,\n    target,\n    rel,\n    statusIconText,\n    statusIconType,\n    actionButton,\n    LeftIconComponent,\n    FarRightIconComponent,\n    bgTransparent,\n    onClick,\n    selectableItemRef,\n    onKeyDown,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const buttonBaseClass = 'vb-listButton';\n  const classModifier = {\n    selected,\n    bgTransparent,\n    actionButton,\n  };\n\n  const buttonValue = (\n    <React.Fragment>\n      {LeftIconComponent ? (\n        <LeftIconComponent className={buttonBaseClass + '__leftIcon'} />\n      ) : null}\n      {children}\n      {statusIconText && (\n        <StatusIcon type={statusIconType} marginLeft marginSize=\"small\">\n          {statusIconText}\n        </StatusIcon>\n      )}\n      {FarRightIconComponent ? (\n        <FarRightIconComponent className={buttonBaseClass + '__farRightIcon'} />\n      ) : null}\n    </React.Fragment>\n  );\n\n  return selected ? (\n    <span\n      aria-selected=\"true\"\n      role=\"option\"\n      {...commonProps(props, buttonBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {buttonValue}\n    </span>\n  ) : href ? (\n    <a\n      href={href}\n      target={target ? target : '_self'}\n      rel={rel}\n      onClick={onClick}\n      aria-selected={selected && true}\n      role=\"option\"\n      ref={selectableItemRef as React.Ref<HTMLAnchorElement>}\n      onKeyDown={(e: React.KeyboardEvent<HTMLAnchorElement>): void => {\n        onKeyDown &&\n          typeof selectableItemIndex === 'number' && // 0だと通らなくなってしまうのでtypeをみる\n          onKeyDown(e, selectableItemIndex);\n      }}\n      {...commonProps(props, buttonBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {buttonValue}\n      {target === '_blank' && (\n        <MdOpenInNew className={buttonBaseClass + '__farRightIcon'} />\n      )}\n    </a>\n  ) : (\n    <button\n      onClick={onClick}\n      aria-selected={selected && true}\n      role=\"option\"\n      type=\"button\"\n      ref={selectableItemRef as React.Ref<HTMLButtonElement>}\n      onKeyDown={(e: React.KeyboardEvent<HTMLButtonElement>): void => {\n        onKeyDown &&\n          typeof selectableItemIndex === 'number' && // 0だと通らなくなってしまうのでtypeをみる\n          onKeyDown(e, selectableItemIndex);\n      }}\n      {...commonProps(props, buttonBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {buttonValue}\n    </button>\n  );\n};\n\nexport default ListButton;\n"
  },
  {
    "path": "src/lv1/buttons/PagerButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport PagerButton from './PagerButton';\n\nexport default {\n  component: PagerButton,\n};\n\nexport const PagerButtonComponent = () => (\n  <PagerButton\n    small={boolean('Small', false, 'PagerButton')}\n    disabled={boolean('Disabled', false, 'PagerButton')}\n    current={boolean('Current', false, 'PagerButton')}\n    onClick={action('click')}\n    label={text('Label', 'Pager Button', 'PagerButton')}\n    {...commonKnobs()}\n  >\n    {text('Children', '1', 'PagerButton')}\n  </PagerButton>\n);\n\nexport const Default = () => (\n  <>\n    <PagerButton mr={1} mb={1} label={'ページ 1'}>\n      1\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 2'}>\n      2\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 3'} current>\n      3\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 4'}>\n      4\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 5'}>\n      5\n    </PagerButton>\n  </>\n);\n\nexport const Disabled = () => (\n  <>\n    <PagerButton mr={1} mb={1} label={'ページ 1'} disabled>\n      1\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 2'} disabled>\n      2\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 3'} disabled current>\n      3\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 4'} disabled>\n      4\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 5'} disabled>\n      5\n    </PagerButton>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <PagerButton mr={1} mb={1} label={'ページ 1'} small>\n      1\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 2'} small>\n      2\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 3'} small current>\n      3\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 4'} small>\n      4\n    </PagerButton>\n    <PagerButton mr={1} mb={1} label={'ページ 5'} small>\n      5\n    </PagerButton>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/PagerButton.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * 選択状態にします\n   */\n  current?: boolean;\n  /**\n   * disabled に設定します\n   */\n  disabled?: boolean;\n  /**\n   * click ハンドラを指定します\n   */\n  onClick?: React.MouseEventHandler;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * ボタンの代替テキストとして使用されます（`aria-label` になります）。\n   */\n  label?: string;\n} & MarginClassProps &\n  CommonProps;\n\nexport default function PagerButton(props: Props): React.ReactElement {\n  const {\n    children,\n    current,\n    disabled,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    marginTop,\n    marginSize,\n    onClick,\n    small,\n    label,\n  } = props;\n  const buttonBaseClass = 'vb-pagerButton';\n  const classModifier = {\n    current,\n    small,\n    disabled,\n  };\n\n  return (\n    <button\n      disabled={disabled}\n      onClick={onClick}\n      tabIndex={current || disabled ? -1 : undefined}\n      aria-current={current ? 'true' : 'false'}\n      aria-label={label}\n      type=\"button\"\n      {...commonProps(props, buttonBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {children}\n    </button>\n  );\n}\n"
  },
  {
    "path": "src/lv1/buttons/RightIconButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport RightIconButton from './RightIconButton';\nimport { commonKnobs } from '../../../stories';\nimport { MdArrowDropDown } from 'react-icons/md';\nimport { text, boolean, select } from '@storybook/addon-knobs';\n\nexport default {\n  title: 'deprecated/buttons/RightIconButton',\n  component: RightIconButton,\n};\n\nexport const RightIconButtonComponent = () => (\n  <RightIconButton\n    primary={boolean('Primary', false, 'RightIconButton')}\n    danger={boolean('Danger', false, 'RightIconButton')}\n    small={boolean('Small', false, 'RightIconButton')}\n    disabled={boolean('Disabled', false, 'RightIconButton')}\n    IconComponent={MdArrowDropDown}\n    type={select(\n      'Type',\n      { submit: 'submit', button: 'button', reset: 'reset' },\n      'button',\n      'RightIconButton'\n    )}\n    {...commonKnobs()}\n  >\n    {text('Label', 'ボタン', 'RightIconButton')}\n  </RightIconButton>\n);\n"
  },
  {
    "path": "src/lv1/buttons/RightIconButton.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { ButtonAriaProps } from '../../utilities/AriaProps';\nimport Button from './Button';\n\ntype Props = {\n  children?: React.ReactNode;\n  IconComponent: React.ElementType;\n  primary?: boolean;\n  danger?: boolean;\n  disabled?: boolean;\n  small?: boolean;\n  type?: 'button' | 'submit' | 'reset';\n  onClick?: React.MouseEventHandler;\n} & MarginClassProps &\n  CommonProps &\n  ButtonAriaProps;\n\n/**\n * (廃止予定) Buttonコンポーネントを使用してください\n *\n * 「別ウインドウで開く」「ポップアップ表示」などボタン押下時の挙動を示す必要がある際に使用してください\n */\nexport default function RightIconButton(props: Props): React.ReactElement {\n  return <Button {...props} iconPosition=\"right\" />;\n}\n"
  },
  {
    "path": "src/lv1/buttons/TabButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TabButton from './TabButton';\n\nexport default {\n  title: 'deprecated/buttons/TabButton',\n  component: TabButton,\n};\n\nexport const TabButtonComponent = () => (\n  <TabButton\n    current={boolean('Current', false, 'TabButton')}\n    small={boolean('Small', false, 'TabButton')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'タブ', 'TabButton')}\n  </TabButton>\n);\n\nexport const Default = () => (\n  <>\n    <TabButton mr={1} mb={1}>\n      タブ1\n    </TabButton>\n    <TabButton mr={1} mb={1} current>\n      タブ2\n    </TabButton>\n    <TabButton mr={1} mb={1}>\n      タブ3\n    </TabButton>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <TabButton mr={1} mb={1} small>\n      タブ1\n    </TabButton>\n    <TabButton mr={1} mb={1} small current>\n      タブ2\n    </TabButton>\n    <TabButton mr={1} mb={1} small>\n      タブ3\n    </TabButton>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/buttons/TabButton.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * 選択状態にします\n   */\n  current?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\nexport default function TabButton(props: Props): React.ReactElement {\n  const {\n    children,\n    current,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const buttonBaseClass = 'vb-tabButton';\n  const classModifier = {\n    current,\n    small,\n  };\n  return (\n    <button\n      type=\"button\"\n      {...commonProps(props, buttonBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {children}\n    </button>\n  );\n}\n"
  },
  {
    "path": "src/lv1/buttons/TextButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport TextButton from './TextButton';\nimport { commonKnobs } from '../../../stories';\nimport { MdChevronRight } from 'react-icons/md';\nimport { text, boolean, select } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\n\nexport default {\n  title: 'deprecated/buttons/TextButton',\n  component: TextButton,\n};\n\nexport const TextButtonComponent = () => (\n  <TextButton\n    id={text('ID', '', 'TextButton')}\n    url={text('URL', '', 'TextButton')}\n    onClick={action('click')}\n    target={select(\n      'Target',\n      {\n        _blank: '_blank',\n        _self: '_self',\n      },\n      '_self',\n      'TextButton'\n    )}\n    rel={text('rel', '', 'TextButton')}\n    noBorder={boolean('NoBorder', false, 'TextButton')}\n    disabled={boolean('Disabled', false, 'TextButton')}\n    small={boolean('Small', false, 'TextButton')}\n    iconPosition={select(\n      'IconPosition',\n      { right: 'right', left: 'left' },\n      'left',\n      'TextButton'\n    )}\n    IconComponent={MdChevronRight}\n    {...commonKnobs()}\n  >\n    テキストボタン\n  </TextButton>\n);\n"
  },
  {
    "path": "src/lv1/buttons/TextButton.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { KeyCodes } from '../../utilities/keyboard';\nimport {\n  filterButtonAriaProps,\n  filterLinkAriaProps,\n  ButtonAriaProps,\n  LinkAriaProps,\n} from '../../utilities/AriaProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  IconComponent?: React.ElementType;\n  iconPosition?: 'left' | 'right';\n  id?: string;\n  url?: string;\n  target?: string;\n  rel?: string;\n  noBorder?: boolean;\n  disabled?: boolean;\n  small?: boolean;\n  onClick?: (\n    event: React.SyntheticEvent<HTMLSpanElement | HTMLAnchorElement>\n  ) => void;\n} & ButtonAriaProps &\n  LinkAriaProps &\n  MarginClassProps &\n  CommonProps;\n\n/**\n * このコンポーネントの使用は **非推奨** です。\n * 文中にリンクを配置したい場合は `InlineLink` を、それ以外の場所では `Button` を `appearance=\"tertiary\"` で使用してください。\n */\nconst TextButton: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    IconComponent,\n    iconPosition,\n    id,\n    url,\n    target,\n    rel,\n    noBorder,\n    disabled,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    onClick,\n  } = props;\n\n  const buttonClass = 'vb-textButton';\n  const classModifier = {\n    noBorder,\n    small,\n    disabled,\n  };\n\n  return (\n    <span\n      {...commonProps(props, buttonClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginSize,\n        marginTop,\n      })}\n    >\n      {!!IconComponent && iconPosition !== 'right' && (\n        <IconComponent className={`${buttonClass}__icon`} focusable={false} />\n      )}\n\n      {url ? (\n        <a\n          className={buttonClass + '__link'}\n          id={id}\n          href={!disabled ? url : undefined}\n          target={target ? target : '_self'}\n          onClick={!disabled ? onClick : undefined}\n          aria-disabled={disabled && true}\n          rel={rel}\n          {...filterLinkAriaProps(props)}\n        >\n          {children}\n        </a>\n      ) : (\n        <span\n          id={id}\n          role=\"button\"\n          tabIndex={0}\n          onClick={!disabled ? onClick : undefined}\n          onKeyDown={(e: React.KeyboardEvent<HTMLSpanElement>): void => {\n            !disabled && e.keyCode === KeyCodes.ENTER && onClick && onClick(e);\n          }}\n          className={buttonClass + '__button'}\n          aria-disabled={disabled && true}\n          {...filterButtonAriaProps(props)}\n        >\n          {children}\n        </span>\n      )}\n\n      {!!IconComponent && iconPosition === 'right' && (\n        <IconComponent\n          className={`${buttonClass}__icon ${buttonClass}__icon--right`}\n          focusable={false}\n        />\n      )}\n    </span>\n  );\n};\nexport default TextButton;\n"
  },
  {
    "path": "src/lv1/calendar/CalendarDate.stories.tsx",
    "content": "import * as React from 'react';\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport CalendarDate from './CalendarDate';\n\nexport default {\n  component: CalendarDate,\n};\n\nexport const CalendarDateComponent = () => (\n  <table style={{ width: '9.5rem' }}>\n    <tbody>\n      <tr>\n        <CalendarDate\n          date={text('Date', '2020-01-01', 'CalendarDate')}\n          dateLabel={text('DateLabel', '通常勤務', 'CalendarDate')}\n          today={boolean('Today', false, 'CalendarDate')}\n          disabled={boolean('Disabled', false, 'CalendarDate')}\n          secondaryHoliday={boolean('SecondaryHoliday', false, 'CalendarDate')}\n          primaryHoliday={boolean('PrimaryHoliday', false, 'CalendarDate')}\n          nationalHoliday={boolean('NationalHoliday', false, 'CalendarDate')}\n          onClickDate={action('click date')}\n          onKeyDown={action('key down')}\n          {...commonKnobs()}\n        />\n      </tr>\n    </tbody>\n  </table>\n);\n\nexport const Default = () => (\n  <table style={{ width: `${9.5 * 5}rem` }}>\n    <tbody>\n      <tr>\n        <CalendarDate date=\"2020-01-01\" dateLabel=\"default\" />\n        <CalendarDate date=\"2020-01-01\" dateLabel=\"today\" today />\n        <CalendarDate\n          date=\"2020-01-01\"\n          dateLabel=\"primaryHoliday\"\n          primaryHoliday\n        />\n        <CalendarDate\n          date=\"2020-01-01\"\n          dateLabel=\"secondaryHoliday\"\n          secondaryHoliday\n        />\n        <CalendarDate\n          date=\"2020-01-01\"\n          dateLabel=\"nationalHoliday\"\n          nationalHoliday\n        />\n      </tr>\n    </tbody>\n  </table>\n);\n\nexport const Disabled = () => (\n  <table style={{ width: `${9.5 * 5}rem` }}>\n    <tbody>\n      <tr>\n        <CalendarDate disabled date=\"2020-01-01\" dateLabel=\"default\" />\n        <CalendarDate disabled date=\"2020-01-01\" dateLabel=\"today\" today />\n        <CalendarDate\n          disabled\n          date=\"2020-01-01\"\n          dateLabel=\"primaryHoliday\"\n          primaryHoliday\n        />\n        <CalendarDate\n          disabled\n          date=\"2020-01-01\"\n          dateLabel=\"secondaryHoliday\"\n          secondaryHoliday\n        />\n        <CalendarDate\n          disabled\n          date=\"2020-01-01\"\n          dateLabel=\"nationalHoliday\"\n          nationalHoliday\n        />\n      </tr>\n    </tbody>\n  </table>\n);\n\nexport const TimeRecord = () => (\n  <table style={{ width: `${9.5 * 4}rem` }}>\n    <tbody>\n      <tr>\n        <CalendarDate\n          date=\"2020-01-01\"\n          dateLabel=\"default\"\n          content={{\n            type: 'TimeRecord',\n            date: '2020-01-01',\n            dateLabel: '通常',\n            openingTime: '10:00',\n            endingTime: '19:00',\n          }}\n        />\n        <CalendarDate\n          date=\"2020-01-01\"\n          dateLabel=\"alert\"\n          content={{\n            type: 'TimeRecord',\n            date: '2020-01-01',\n            status: 'alert',\n            dateLabel: '通常',\n            openingTime: '10:00',\n            endingTime: '19:00',\n          }}\n        />\n        <CalendarDate\n          date=\"2020-01-01\"\n          dateLabel=\"notice\"\n          content={{\n            type: 'TimeRecord',\n            date: '2020-01-01',\n            status: 'notice',\n            dateLabel: '通常',\n            openingTime: '10:00',\n            endingTime: '19:00',\n          }}\n        />\n        <CalendarDate\n          date=\"2020-01-01\"\n          dateLabel=\"success\"\n          content={{\n            type: 'TimeRecord',\n            date: '2020-01-01',\n            status: 'success',\n            dateLabel: '通常',\n            openingTime: '10:00',\n            endingTime: '19:00',\n          }}\n        />\n      </tr>\n    </tbody>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/calendar/CalendarDate.tsx",
    "content": "import * as React from 'react';\nimport { getDate } from 'date-fns';\nimport { MdError, MdWarning, MdCheckCircle } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\n\nexport type TimeRecord = {\n  type: 'TimeRecord';\n  date: string;\n  status?: 'alert' | 'notice' | 'success';\n  dateLabel?: string;\n  openingTime: string;\n  endingTime: string;\n};\n\ntype Props = {\n  /**\n   * 日付を設定します\n   */\n  date: string;\n  /**\n   * ラベルを設定します\n   */\n  dateLabel?: string;\n  /**\n   * 現在日に設定します\n   */\n  today?: boolean;\n  /**\n   * disabled に設定します\n   */\n  disabled?: boolean;\n  /**\n   * 休日に設定します\n   */\n  secondaryHoliday?: boolean;\n  /**\n   * 休日に設定します\n   */\n  primaryHoliday?: boolean;\n  /**\n   * 祝日に設定します\n   */\n  nationalHoliday?: boolean;\n  /**\n   * 勤務情報を設定します\n   */\n  content?: TimeRecord; // 用途に合わせてunionで足していく\n  /**\n   * click ハンドラを設定します\n   */\n  onClickDate?: (date: string) => void;\n  /**\n   * ref を設定します\n   */\n  selectableDateRef?: (el: HTMLDivElement) => void;\n  /**\n   * keydown ハンドラを設定します\n   */\n  onKeyDown?: (\n    e: React.KeyboardEvent<HTMLDivElement>,\n    date: string,\n    onClickDate?: (date: string) => void\n  ) => void;\n} & CommonProps;\n\nexport default function CalendarDate(props: Props): React.ReactElement {\n  const {\n    date,\n    dateLabel,\n    today,\n    disabled,\n    secondaryHoliday,\n    primaryHoliday,\n    nationalHoliday,\n    content,\n    onClickDate,\n    selectableDateRef,\n    onKeyDown,\n  } = props;\n\n  const dateNumber = getDate(new Date(date));\n  const dateBaseClass = 'vb-calendarDate';\n  const statusBaseClass = dateBaseClass + '__status';\n  const dateNumberBaseClass = dateBaseClass + '__number';\n\n  const dateClassModifier = {\n    input: !!content,\n    disabled: !!disabled,\n    'primary-holiday': !content && !!primaryHoliday,\n    'secondary-holiday': (!content && secondaryHoliday) || nationalHoliday,\n  };\n\n  const statusName = content && content.status ? content.status : '';\n  const statusClass = vbClassNames(statusBaseClass, {\n    modifier: {\n      alert: statusName === 'alert',\n      notice: statusName === 'notice',\n      success: statusName === 'success',\n    },\n  });\n\n  const numberClassName = vbClassNames(dateNumberBaseClass, {\n    modifier: {\n      today,\n      'today--input': today && !!content,\n    },\n  });\n\n  const tabIndex = !disabled ? 0 : -1;\n  return (\n    <td {...commonProps(props, dateBaseClass, dateClassModifier)}>\n      <div\n        className={`${dateBaseClass}__inner`}\n        role=\"button\"\n        ref={\n          disabled\n            ? undefined\n            : selectableDateRef\n            ? selectableDateRef\n            : undefined\n        }\n        onClick={(): false | void | undefined =>\n          !disabled && onClickDate && onClickDate(date)\n        }\n        aria-disabled={disabled && true}\n        onKeyDown={(\n          e: React.KeyboardEvent<HTMLDivElement>\n        ): false | void | undefined =>\n          !disabled &&\n          onKeyDown &&\n          onKeyDown(e, date, onClickDate && onClickDate)\n        }\n        tabIndex={tabIndex}\n      >\n        {dateNumber && <span className={numberClassName}>{dateNumber}</span>}\n        {dateLabel && (\n          <span className={`${dateBaseClass}__type`}>{dateLabel}</span>\n        )}\n\n        {content && content.type === 'TimeRecord' && (\n          <span className={`${dateBaseClass}__time`}>\n            {content.openingTime}-{content.endingTime}\n          </span>\n        )}\n        <div className={statusClass}>\n          {statusName === 'alert' ? (\n            <MdError className={`${dateBaseClass}__icon`} />\n          ) : statusName === 'notice' ? (\n            <MdWarning className={`${dateBaseClass}__icon`} />\n          ) : statusName === 'success' ? (\n            <MdCheckCircle className={`${dateBaseClass}__icon`} />\n          ) : null}\n        </div>\n      </div>\n    </td>\n  );\n}\n"
  },
  {
    "path": "src/lv1/calendar/CalendarHead.stories.tsx",
    "content": "import * as React from 'react';\nimport { select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport CalendarHead from './CalendarHead';\n\nexport default {\n  component: CalendarHead,\n};\n\nexport const CalendarHeadComponent = () => (\n  <table style={{ width: `${9.5 * 7}rem`, borderCollapse: 'collapse' }}>\n    <thead>\n      <CalendarHead\n        weekStartsOn={select('WeekStartsOn', [0, 1], 0, 'CalendarHead')}\n        {...commonKnobs()}\n      />\n    </thead>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/calendar/CalendarHead.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * 週の始まりを指定する(1: 月曜日, それ以外: 日曜日)\n   */\n  weekStartsOn: number;\n} & CommonProps;\n\nexport default function CalendarHead(props: Props): React.ReactElement {\n  const { weekStartsOn } = props;\n  const headBaseClass = 'vb-calendarHead';\n  const cellBaseClass = 'vb-calendarHead__cell';\n\n  if (weekStartsOn === 1) {\n    return (\n      <tr {...commonProps(props, headBaseClass)}>\n        <th className={cellBaseClass}>月</th>\n        <th className={cellBaseClass}>火</th>\n        <th className={cellBaseClass}>水</th>\n        <th className={cellBaseClass}>木</th>\n        <th className={cellBaseClass}>金</th>\n        <th className={`${cellBaseClass} ${cellBaseClass}--secondary-holiday`}>\n          土\n        </th>\n        <th className={`${cellBaseClass} ${cellBaseClass}--primary-holiday`}>\n          日\n        </th>\n      </tr>\n    );\n  } else {\n    return (\n      <tr {...commonProps(props, headBaseClass)}>\n        <th className={`${cellBaseClass} ${cellBaseClass}--primary-holiday`}>\n          日\n        </th>\n        <th className={cellBaseClass}>月</th>\n        <th className={cellBaseClass}>火</th>\n        <th className={cellBaseClass}>水</th>\n        <th className={cellBaseClass}>木</th>\n        <th className={cellBaseClass}>金</th>\n        <th className={`${cellBaseClass} ${cellBaseClass}--secondary-holiday`}>\n          土\n        </th>\n      </tr>\n    );\n  }\n}\n"
  },
  {
    "path": "src/lv1/forms/CheckBox.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport CheckBox from './CheckBox';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: CheckBox,\n};\n\nexport const CheckBoxComponent = () => (\n  <CheckBox\n    name=\"checkbox\"\n    value=\"チェックボックス\"\n    disabled={boolean('Disabled', false, 'CheckBox')}\n    checked={boolean('Checked', false, 'CheckBox')}\n    error={boolean('Error', false, 'CheckBox')}\n    small={boolean('Small', false, 'CheckBox')}\n    {...handlers}\n    {...commonKnobs()}\n  >\n    {text('Children', 'チェックボックス', 'CheckBox')}\n  </CheckBox>\n);\n\nexport const Default = () => (\n  <>\n    <CheckBox mr={1}>default</CheckBox>\n    <CheckBox mr={1} disabled>\n      disabled\n    </CheckBox>\n    <CheckBox mr={1} disabled checked>\n      disabled\n    </CheckBox>\n    <CheckBox mr={1} error>\n      error\n    </CheckBox>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <CheckBox mr={1} small>\n      default\n    </CheckBox>\n    <CheckBox mr={1} small disabled>\n      disabled\n    </CheckBox>\n    <CheckBox mr={1} small disabled checked>\n      disabled\n    </CheckBox>\n    <CheckBox mr={1} small error>\n      error\n    </CheckBox>\n  </>\n);\n\nexport const WithParagraph = () => (\n  <>\n    <CheckBox>\n      改行あり\n      <br />\n      のテキスト\n    </CheckBox>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/forms/CheckBox.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { FormHandlers } from './types';\nimport vbClassNames from '../../utilities/vbClassNames';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * input name を指定します\n   */\n  name?: string;\n  /**\n   * input value を指定します\n   */\n  value?: string;\n  /**\n   * input checked を指定します\n   */\n  checked?: boolean;\n  /**\n   * input required を指定します\n   */\n  required?: boolean;\n  /**\n   * input autofocus を指定します\n   */\n  autofocus?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n} & FormHandlers<HTMLInputElement> &\n  MarginClassProps &\n  CommonProps;\n\nconst CheckBoxInternal: React.ForwardRefRenderFunction<\n  HTMLInputElement,\n  Props\n> = (props: Props, ref?: React.Ref<HTMLInputElement>) => {\n  const {\n    children,\n    name,\n    value,\n    checked,\n    required,\n    autofocus,\n    disabled,\n    error,\n    small,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onKeyUp,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const className = 'vb-checkbox';\n  const classModifier = {\n    disabled,\n    error,\n    small,\n  };\n\n  return (\n    <label\n      {...commonProps(props, className, classModifier, {\n        marginTop,\n        marginLeft,\n        marginRight,\n        marginBottom,\n        marginSize,\n      })}\n    >\n      <input\n        type=\"checkbox\"\n        name={name && name}\n        value={value && value}\n        className={vbClassNames(className + '__control', {\n          modifier: classModifier,\n        })}\n        disabled={disabled && true}\n        checked={checked && true}\n        required={required && true}\n        autoFocus={autofocus && true}\n        onChange={onChange}\n        onInput={onInput}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n        ref={ref}\n      />\n      <span className={className + '__label'}>{children}</span>\n    </label>\n  );\n};\n\n/**\n * 複数の選択肢から個数に制限なく選択させるときに使用するコンポーネントです。\n *\n * - 「いくつかの選択肢の中からひとつだけを選ぶ」用途には `RadioButton` を使用してください。\n *   - 例外として、ある状態に対して boolean 値のどちらかを選ぶ際に `CheckBox` をひとつだけ置いて選ばせるのはOKです。\n *     - その際には「選択/選択解除したときに何が起こるのか」が明確になるラベルを配置してください\n *     - ON/OFF のふたつの `RadioButton` を置くのもOKです。どちらを使うべきかはスペースの都合や「デフォルト値を設定するべきか」などを考慮して決定してください。\n * - 基本的に、チェックボックスのラベルには句読点は使わないようにしてください。\n *\n * ## accessibility\n * VibesのCheckBoxコンポーネントはブラウザのデフォルト表示の見た目から変更していません。\n * a11yチェックにある「クリックやタッチに反応するサイズが、充分な大きさになっているか」の項目OKにして問題ありません。\n *\n */\nconst CheckBox = React.forwardRef(CheckBoxInternal);\nexport default CheckBox;\n"
  },
  {
    "path": "src/lv1/forms/FormControlLabel.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport FormControlLabel from './FormControlLabel';\n\nexport default {\n  component: FormControlLabel,\n};\n\nexport const FormControlLabelComponent = () => (\n  <FormControlLabel\n    id={text('Id', 'id_of_this_label_element', 'FormControlLabel')}\n    htmlFor={text(\n      'HtmlFor',\n      'id_of_this_label_describes_for',\n      'FormControlLabel'\n    )}\n    required={boolean('Required', false, 'FormControlLabel')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'ラベル', 'FormControlLabel')}\n  </FormControlLabel>\n);\n"
  },
  {
    "path": "src/lv1/forms/FormControlLabel.tsx",
    "content": "import * as React from 'react';\nimport { RequiredIcon } from '../../lv1/icons/RequiredIcon';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * label id を指定します\n   */\n  id?: string;\n  /**\n   * label htmlfor を指定します\n   */\n  htmlFor?: string;\n  /**\n   * 必須ラベルを表示します\n   */\n  required?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\nconst FormControlLabel: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    id,\n    htmlFor,\n    required,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const inner = (\n    <React.Fragment>\n      <span className=\"vb-formControlLabel__text\">{children}</span>\n      {required ? <RequiredIcon ml={0.5} /> : null}\n    </React.Fragment>\n  );\n  return htmlFor ? (\n    <label\n      id={id}\n      htmlFor={htmlFor}\n      {...commonProps(\n        props,\n        'vb-formControlLabel',\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      {inner}\n    </label>\n  ) : (\n    <span\n      id={id}\n      {...commonProps(\n        props,\n        'vb-formControlLabel',\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      {inner}\n    </span>\n  );\n};\nexport default FormControlLabel;\n"
  },
  {
    "path": "src/lv1/forms/NumeralField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport NumeralField from './NumeralField';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n});\n\nexport default {\n  title: 'deprecated/forms/NumeralField',\n  component: NumeralField,\n};\n\nexport const NumeralFieldComponent = () => (\n  <NumeralField\n    value={number('Value', 1000000, undefined, 'NumeralField')}\n    placeholder={text('Placeholder', '', 'NumeralField')}\n    required={boolean('Required', false, 'NumeralField')}\n    disabled={boolean('Disabled', false, 'NumeralField')}\n    error={boolean('Error', false, 'NumeralField')}\n    small={boolean('Small', false, 'NumeralField')}\n    width={\n      select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n          undefined: '',\n        },\n        '',\n        'NumeralField'\n      ) || undefined\n    }\n    autoComplete={\n      select(\n        'Autocomplete',\n        {\n          off: 'off',\n          on: 'on',\n          name: 'name',\n          'honorific-prefix': 'honorific-prefix',\n          'given-name': 'given-name',\n          'additional-name': 'additional-name',\n          'family-name': 'family-name',\n          'honorific-suffix': 'honorific-suffix',\n          nickname: 'nickname',\n          email: 'email',\n          username: 'username',\n          'new-password': 'new-password',\n          'current-password': 'current-password',\n          'one-time-code': 'one-time-code',\n          'organization-title': 'organization-title',\n          organization: 'organization',\n          'street-address': 'street-address',\n          'address-line1': 'address-line1',\n          'address-line2': 'address-line2',\n          'address-line3': 'address-line3',\n          'address-level4': 'address-level4',\n          'address-level3': 'address-level3',\n          'address-level2': 'address-level2',\n          'address-level1': 'address-level1',\n          country: 'country',\n          'country-name': 'country-name',\n          'postal-code': 'postal-code',\n          'cc-name': 'cc-name',\n          'cc-given-name': 'cc-given-name',\n          'cc-additional-name': 'cc-additional-name',\n          'cc-family-name': 'cc-family-name',\n          'cc-number': 'cc-number',\n          'cc-exp': 'cc-exp',\n          'cc-exp-month': 'cc-exp-month',\n          'cc-exp-year': 'cc-exp-year',\n          'cc-csc': 'cc-csc',\n          'cc-type': 'cc-type',\n          'transaction-currency': 'transaction-currency',\n          'transaction-amount': 'transaction-amount',\n          language: 'language',\n          bday: 'bday',\n          'bday-day': 'bday-day',\n          'bday-month': 'bday-month',\n          'bday-year': 'bday-year',\n          sex: 'sex',\n          tel: 'tel',\n          'tel-country-code': 'tel-country-code',\n          'tel-national': 'tel-national',\n          'tel-area-code': 'tel-area-code',\n          'tel-local': 'tel-local',\n          'tel-local-prefix': 'tel-local-prefix',\n          'tel-local-suffix': 'tel-local-suffix',\n          'tel-extension': 'tel-extension',\n          impp: 'impp',\n          url: 'url',\n          photo: 'photo',\n          undefined: '',\n        },\n        '',\n        'NumeralField'\n      ) || undefined\n    }\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <NumeralField mr={1} />\n    <NumeralField mr={1} disabled />\n    <NumeralField mr={1} error />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [value, setValue] = React.useState<number | null>(null);\n  return <NumeralField value={value} onChange={(v) => setValue(v)} />;\n};\n"
  },
  {
    "path": "src/lv1/forms/NumeralField.tsx",
    "content": "import React from 'react';\nimport TextField from './TextField';\nimport { Ascii, Digits } from '../../utilities';\n\ntype Props = Omit<\n  React.ComponentProps<typeof TextField>,\n  'alignCenter' | 'alignRight' | 'onChange' | 'value'\n> & {\n  onChange?: (value: number | null) => void;\n  value?: number | null;\n};\n\n/**\n * (Deprecated) NumeralCodeInput, DigitsInputまたはTextFieldを使用してください\n */\nconst NumeralField: React.FC<Props> = ({\n  onChange,\n  value,\n  ...props\n}: Props) => {\n  const onFieldChange = React.useCallback(\n    (e) => {\n      if (!onChange) {\n        return;\n      }\n      const numValue = Number(\n        Digits.numberize(Ascii.zenkakuToHankaku(e.target.value))\n      );\n\n      onChange(\n        (e.target.value !== 0 && numValue === 0) || isNaN(numValue)\n          ? null\n          : numValue\n      );\n    },\n    [onChange]\n  );\n\n  return (\n    <TextField\n      {...props}\n      alignRight\n      onChange={onFieldChange}\n      value={`${value ?? ''}`}\n    />\n  );\n};\nexport default NumeralField;\n"
  },
  {
    "path": "src/lv1/forms/OptionButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { OptionButton } from './OptionButton';\nimport { MarginBase, CheckBox, RadioButton, SectionTitle, Paragraph } from '..';\nimport { action } from '@storybook/addon-actions';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: OptionButton,\n};\n\nexport const OptionButtonComponent = () => {\n  const [checked, setChecked] = React.useState(false);\n  return (\n    <>\n      <OptionButton\n        checked={checked}\n        size={\n          select(\n            'size',\n            {\n              meduim: 'medium',\n              large: 'large',\n              small: 'small',\n              none: 'none',\n              undefined: '',\n            },\n            'medium',\n            'OptionButton'\n          ) || undefined\n        }\n        {...commonKnobs()}\n      >\n        <CheckBox\n          name=\"name\"\n          value=\"value\"\n          checked={checked}\n          onChange={(e) => {\n            setChecked(e.target.checked);\n          }}\n        >\n          チェックボックス\n        </CheckBox>\n      </OptionButton>\n    </>\n  );\n};\n\nexport const WithRadioButton = () => {\n  const [answer, setAnswer] = React.useState<'yes' | 'no' | undefined>(\n    undefined\n  );\n  return (\n    <form>\n      <OptionButton checked={answer === 'yes'} mr={2} size=\"medium\">\n        <RadioButton\n          name=\"question\"\n          value=\"yes\"\n          checked={answer === 'yes'}\n          onChange={(e) => e.target.checked && setAnswer('yes')}\n        >\n          はい\n        </RadioButton>\n      </OptionButton>\n      <OptionButton checked={answer === 'no'} size=\"medium\">\n        <RadioButton\n          name=\"question\"\n          value=\"yes\"\n          checked={answer === 'no'}\n          onChange={(e) => e.target.checked && setAnswer('no')}\n        >\n          いいえ\n        </RadioButton>\n      </OptionButton>\n    </form>\n  );\n};\n\nexport const Sizes = () => (\n  <>\n    <MarginBase mb={1}>\n      <OptionButton checked={false} size=\"small\" mr={1}>\n        <CheckBox checked={false} onChange={action('onChange')}>\n          small\n        </CheckBox>\n      </OptionButton>\n      <OptionButton checked={false} size=\"medium\" mr={1}>\n        <CheckBox checked={false} onChange={action('onChange')}>\n          medium\n        </CheckBox>\n      </OptionButton>\n      <OptionButton checked={false} size=\"large\" mr={1}>\n        <CheckBox checked={false} onChange={action('onChange')}>\n          large\n        </CheckBox>\n      </OptionButton>\n      <OptionButton checked={false} size=\"none\">\n        <CheckBox checked={false} onChange={action('onChange')}>\n          none\n        </CheckBox>\n      </OptionButton>\n    </MarginBase>\n    <MarginBase mb={1}>\n      <OptionButton checked={true} size=\"small\" mr={1}>\n        <CheckBox checked={true} onChange={action('onChange')}>\n          small\n        </CheckBox>\n      </OptionButton>\n      <OptionButton checked={true} size=\"medium\" mr={1}>\n        <CheckBox checked={true} onChange={action('onChange')}>\n          medium\n        </CheckBox>\n      </OptionButton>\n      <OptionButton checked={true} size=\"large\" mr={1}>\n        <CheckBox checked={true} onChange={action('onChange')}>\n          large\n        </CheckBox>\n      </OptionButton>\n      <OptionButton checked={true} size=\"none\">\n        <CheckBox checked={true} onChange={action('onChange')}>\n          none\n        </CheckBox>\n      </OptionButton>\n    </MarginBase>\n  </>\n);\n\nexport const Width = () => (\n  <>\n    <OptionButton checked={false} mb={1} size=\"medium\" width=\"default\">\n      <CheckBox checked={false} onChange={action('onChange')}>\n        default\n      </CheckBox>\n    </OptionButton>\n    <OptionButton checked={false} size=\"medium\" width=\"full\">\n      <CheckBox checked={false} onChange={action('onChange')}>\n        full\n      </CheckBox>\n    </OptionButton>\n  </>\n);\n\nexport const CustomizedButton = () => {\n  const [checked, setChecked] = React.useState(false);\n  return (\n    <>\n      <OptionButton checked={checked} size=\"none\" {...commonKnobs()}>\n        <span style={{ display: 'block', minWidth: '15rem', padding: '1rem' }}>\n          <SectionTitle headlineLevel={-1} mb={0.5}>\n            コイツの中身はカスタマイズ可能\n          </SectionTitle>\n          <CheckBox\n            name=\"name\"\n            value=\"value\"\n            checked={checked}\n            onChange={(e) => {\n              setChecked(e.target.checked);\n            }}\n            mb={0.5}\n          >\n            チェックボックス\n          </CheckBox>\n          <Paragraph>\n            さえあれば、中身は自由に変えられます。大きさもいい感じに変えてOK。\n          </Paragraph>\n        </span>\n      </OptionButton>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/forms/OptionButton.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport useUniqueId from '../../hooks/useUniqueId';\n\ntype Props = {\n  /**\n   * ボタン内部のコンテンツです。\n   * `<CheckBox>` `<RadioButton>` を1つ含むようにしてください。 また、リンクやボタンなどは含めないでください\n   */\n  children: React.ReactNode;\n  /**\n   * idを指定できます。 `<CheckBox>` `<RadioButton>` の `id` とは別になります\n   */\n  id?: string;\n  /**\n   * 選択済み状態であるかを指定します。\n   * 必ず `children` 内の `<CheckBox>` `<RadioButton>` の `checked` と連動させてください。\n   */\n  checked: boolean;\n\n  /**\n   * 最小サイズを指定します。\n   * サイズはButtonコンポーネントに `small` や `large` を指定した場合と同じです。`none`にした場合は最小サイズが未指定となります\n   */\n  size?: 'small' | 'medium' | 'large' | 'none';\n  /**\n   * 'full' で包括している要素に対して横幅を100%にします。\n   */\n  width?: 'default' | 'full';\n} & CommonProps;\n\nconst dispatchClickToInput = (elm: HTMLElement) => {\n  const input = elm.querySelector('input');\n  const evt = new MouseEvent('click', {\n    bubbles: true,\n    cancelable: false,\n  });\n  input && input.dispatchEvent(evt);\n};\n\n/**\n * チェックボックス・ラジオボタンをボタン風に見せるためのコンポーネントです\n *\n * * `<CheckBox>` `<RadioButton>` を `children` 内で使用してください\n *   * 領域内でのクリック時、 `<input>` に click イベントをdispatchします。必ず `<input>` が内部に1つだけ配置されるようにしてください（`<CheckBox>` `<RadioButton>` を1つだけ配置すれば、この条件を満たします）\n * * `checked` propをtrueにすると、枠線の色と太さが変わり、選択済みであることを示す見た目になります\n *   * `children` に入れた `<CheckBox>` `<RadioButton>` のステートとは連動しないので、必ず連動するようにコードを記述してください\n * * 内部には、リンクやボタンなどの、`<CheckBox>` `<RadioButton>`以外のクリッカブルな要素は配置できません\n */\nexport const OptionButton: React.FC<Props> = (props: Props) => {\n  const { children, id, checked, size, width } = props;\n  const className = 'vb-optionButton';\n  const selfRef = React.useRef<HTMLSpanElement>(null);\n  const internalId = useUniqueId(className, id);\n  return (\n    <span\n      {...commonProps(props, className, {\n        checked,\n        sizeSmall: size === 'small',\n        sizeMedium: size === 'medium',\n        sizeLarge: size === 'large',\n        widthFull: width === 'full',\n      })}\n      id={internalId}\n      ref={selfRef}\n    >\n      <span\n        className={`${className}__button`}\n        id={`${internalId}__button`}\n        onClick={() => {\n          selfRef.current && dispatchClickToInput(selfRef.current);\n        }}\n        // ラジオボタンのクリック可能領域を視覚的に巨大にするための要素なのでaria-hiddenだけど、ロール的にはbuttonだしaria-labelledbyするよ\n        role=\"button\"\n        aria-hidden=\"true\"\n        aria-labelledby={`${internalId}__children`}\n      ></span>\n      <span className={`${className}__children`} id={`${internalId}__children`}>\n        {/* flexで安全に中央寄せするため、spanを一層噛ませてある */}\n        <span className={`${className}__children__inner`}>{children}</span>\n      </span>\n    </span>\n  );\n};\n"
  },
  {
    "path": "src/lv1/forms/RadioButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport RadioButton from './RadioButton';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: RadioButton,\n};\n\nexport const RadioButtonComponent = () => (\n  <RadioButton\n    name=\"radio\"\n    value=\"ラジオボタン\"\n    disabled={boolean('Disabled', false, 'RadioButton')}\n    checked={boolean('Checked', false, 'RadioButton')}\n    error={boolean('Error', false, 'RadioButton')}\n    small={boolean('Small', false, 'RadioButton')}\n    {...handlers}\n    {...commonKnobs()}\n  >\n    {text('Children', 'ラジオボタン', 'RadioButton')}\n  </RadioButton>\n);\n\nexport const Default = () => (\n  <>\n    <RadioButton mr={1}>default</RadioButton>\n    <RadioButton mr={1} disabled>\n      disabled\n    </RadioButton>\n    <RadioButton mr={1} disabled checked>\n      disabled\n    </RadioButton>\n    <RadioButton mr={1} error>\n      error\n    </RadioButton>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <RadioButton mr={1} small>\n      default\n    </RadioButton>\n    <RadioButton mr={1} small disabled>\n      disabled\n    </RadioButton>\n    <RadioButton mr={1} small disabled checked>\n      disabled\n    </RadioButton>\n    <RadioButton mr={1} small error>\n      error\n    </RadioButton>\n  </>\n);\n\nexport const WithParagraph = () => (\n  <>\n    <RadioButton mr={1}>\n      改行あり\n      <br />\n      のテキスト\n    </RadioButton>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/forms/RadioButton.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { FormHandlers } from './types';\nimport vbClassNames from '../../utilities/vbClassNames';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * input name を指定します\n   */\n  name?: string;\n  /**\n   * input value を指定します\n   */\n  value?: string;\n  /**\n   * input checked を指定します\n   */\n  checked?: boolean;\n  /**\n   * input required を指定します\n   */\n  required?: boolean;\n  /**\n   * input autofocus を指定します\n   */\n  autofocus?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n} & FormHandlers<HTMLInputElement> &\n  MarginClassProps &\n  CommonProps;\n\n/**\n * 複数の選択肢からひとつだけを選ばせるコンポーネントです。\n *\n * - 「いくつかの選択肢の中からひとつ以上のものを選ぶ」用途には `CheckBox` を使用してください。\n * - ある状態に対して ON/OFF の選択肢からどちらかを選ぶ用途の場合は、`RadioButton` ふたつを使用しても、`CheckBox`ひとつを使用してもOKです。\n *     - スペースの都合や「デフォルト値を設定するべきか」などを考慮して決定してください。\n * - `RadioButton` を使うべきか `SelectBox` を使うべきかは、スペース上の都合などを考慮して決定してください。\n *   - `RadioButton` は `SelectBox` よりスペースが必要ですが、はじめから選択肢が表示されているという特徴があります。\n * - 基本的にラジオボタンのラベルには句読点は使わないようにしてください。\n *\n *  ## accessibility\n * VibesのRadioButtonコンポーネントはブラウザのデフォルト表示の見た目から変更していません。\n * a11yチェックにある「クリックやタッチに反応するサイズが、充分な大きさになっているか」の項目OKにして問題ありません。\n *\n * ラジオボタンを実装する際は、グループ単位で使用してください。\n   - 一つのグループ内に複数の選択肢があるイメージです。\n * グループ内を上下左右キーを使って移動できるようにしてください。\n   - グループ内の最後の選択肢まで移動したら最初の選択肢に戻るようになっていれば、name属性の指定によって正しい挙動が設定できています。\n * `name`属性を正しく指定することが必要です。\n   - `name`属性は、選択肢がどのグループに属しているのかを判別するために使われます。\n     - 複数のグループが並んでいる際、グループごとに別々のname 属性がないと全ての選択肢が１つのグループとして認識されてしまうため、キーボード操作やスクリーンリーダーで不便になります。\n * 以下のように設定してください\n \n  ```jsx\n      <FormControl label=\"性別\">\n          <RadioButton name=\"sex\">男性</RadioButton>\n          <RadioButton name=\"sex\">女性</RadioButton>\n          <RadioButton name=\"sex\">その他</RadioButton>\n          <RadioButton name=\"sex\">回答しない</RadioButton>\n      </FormControl>\n      <FormControl label=\"年齢\">\n          <RadioButton name=\"age\">10代</RadioButton>\n          <RadioButton name=\"age\">20代</RadioButton>\n          <RadioButton name=\"age\">30代</RadioButton>\n          <RadioButton name=\"age\">40代</RadioButton>\n         <RadioButton name=\"age\">50代</RadioButton>\n          <RadioButton name=\"age\">60代以上</RadioButton>\n      </FormControl>\n  ```  \n */\nconst RadioButton: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    name,\n    value,\n    checked,\n    required,\n    autofocus,\n    disabled,\n    error,\n    small,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onKeyUp,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const className = 'vb-radio';\n  const classModifier = {\n    disabled,\n    error,\n    small,\n  };\n\n  return (\n    <label\n      {...commonProps(props, className, classModifier, {\n        marginTop,\n        marginLeft,\n        marginRight,\n        marginBottom,\n        marginSize,\n      })}\n    >\n      <input\n        type=\"radio\"\n        name={name && name}\n        value={value && value}\n        className={vbClassNames(className + '__control', {\n          modifier: classModifier,\n        })}\n        disabled={disabled && true}\n        checked={checked && true}\n        required={required && true}\n        autoFocus={autofocus && true}\n        onChange={onChange}\n        onInput={onInput}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n      />\n      <span className={className + '__label'}>{children}</span>\n    </label>\n  );\n};\n\nexport default RadioButton;\n"
  },
  {
    "path": "src/lv1/forms/ReadOnlyField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport ReadOnlyField from './ReadOnlyField';\nimport TextField from './TextField';\n\nexport default {\n  component: ReadOnlyField,\n};\n\nexport const ReadOnlyFieldComponent = () => (\n  <ReadOnlyField\n    id={text('Id', '', 'ReadOnlyField')}\n    label={text('Label', '', 'ReadOnlyField')}\n    labelledby={text('Labelledby', '', 'ReadOnlyField')}\n    name={text('Name', 'name_of_field', 'ReadOnlyField')}\n    value={text('Value', 'read_only_field', 'ReadOnlyField')}\n    valueText={text('ValueText', 'read only なフィールド', 'ReadOnlyField')}\n    small={boolean('Small', false, 'ReadOnlyField')}\n    large={boolean('Large', false, 'ReadOnlyField')}\n    alignRight={boolean('AlignRight', false, 'ReadOnlyField')}\n    alignCenter={boolean('AlignCenter', false, 'ReadOnlyField')}\n    width={select(\n      'Width',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'ReadOnlyField'\n    )}\n    {...commonKnobs()}\n  />\n);\n\nexport const VerticalAlign = () => (\n  // TextFieldと位置が揃うよ！\n  <>\n    Hoge\n    <ReadOnlyField value=\"Fuga\" ml={0.5} />\n    <TextField value=\"Moge\" ml={0.5} />\n  </>\n);\n\nexport const LongValue = () => (\n  <ReadOnlyField\n    id={text('Id', '', 'ReadOnlyField')}\n    label={text('Label', '', 'ReadOnlyField')}\n    labelledby={text('Labelledby', '', 'ReadOnlyField')}\n    name={text('Name', 'name_of_field', 'ReadOnlyField')}\n    small={boolean('Small', false, 'ReadOnlyField')}\n    large={boolean('Large', false, 'ReadOnlyField')}\n    alignRight={boolean('AlignRight', false, 'ReadOnlyField')}\n    alignCenter={boolean('AlignCenter', false, 'ReadOnlyField')}\n    width={select(\n      'Width',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'ReadOnlyField'\n    )}\n    {...commonKnobs()}\n    value={Array(50).fill('長いテキスト').join(' ')}\n  />\n);\n"
  },
  {
    "path": "src/lv1/forms/ReadOnlyField.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { TextFieldWidth } from './TextField';\n\ntype Props = {\n  /**\n   * id を指定します\n   */\n  id?: string;\n  /**\n   * aria-label を指定します\n   */\n  label?: string;\n  /**\n   * aria-labelledby を指定します\n   */\n  labelledby?: string;\n  /**\n   * input name を指定します\n   */\n  name?: string;\n  /**\n   * input value を指定します\n   */\n  value?: string;\n  /**\n   * 表示用のテキストを指定します\n   */\n  valueText?: string;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * 中央寄せにします\n   */\n  alignCenter?: boolean;\n  /**\n   * 右寄せにします\n   */\n  alignRight?: boolean;\n  /**\n   * 幅を指定します\n   */\n  width?: TextFieldWidth;\n} & CommonProps;\n\n/**\n * ユーザーの入力内容が readonly で表示するためのコンポーネントです。\n *\n * - 高さが TextField などと揃うようにつくられているため、それらと並べて使用してもOKです。\n * - 幅の指定も TextField などと同様に行えます。\n */\nconst ReadOnlyField: React.FC<Props> = (props: Props) => {\n  const {\n    id,\n    label,\n    labelledby,\n    name,\n    value,\n    valueText,\n    small,\n    large,\n    alignRight,\n    alignCenter,\n    width,\n  } = props;\n  const classModifier = {\n    small,\n    large,\n    alignCenter,\n    alignRight,\n    widthXSmall: width === 'xSmall',\n    widthSmall: width === 'small',\n    widthMedium: width === 'medium' || !width,\n    widthLarge: width === 'large',\n    widthFull: width === 'full',\n  };\n\n  /**\n   * ユーザーの入力内容が表示される想定のコンポーネントのため、\n   * data-masking が明示的に false でない限りは true にして行動追跡ツールに保存されないようにする。\n   * props 自体は readonly のため、コピーした配列で data-masking が undefined のときに true で上書きしている。\n   */\n  const checkedProps = {\n    ...props,\n    'data-masking':\n      props['data-masking'] !== undefined ? props['data-masking'] : true,\n  };\n\n  return (\n    <span\n      {...commonProps(checkedProps, 'vb-readOnlyField', classModifier)}\n      id={id}\n      aria-label={label}\n      aria-labelledby={labelledby}\n    >\n      <span className=\"vb-readOnlyField__inner\">{valueText || value}</span>\n      <input type=\"hidden\" name={name} value={value} />\n    </span>\n  );\n};\n\nexport default ReadOnlyField;\n"
  },
  {
    "path": "src/lv1/forms/SearchField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { FocusHighlight } from '../a11y/FocusHighlight';\nimport SearchField from './SearchField';\nimport ColumnBase from '../bases/ColumnBase';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: SearchField,\n};\n\nexport const SearchFieldComponent = () => (\n  <SearchField\n    id={text('Id', 'id', 'SearchField')}\n    label={text('Label', '検索フォーム', 'SearchField')}\n    placeholder={text('Placeholder', '検索', 'SearchField')}\n    name={text('Name', 'search', 'SearchField')}\n    width={select(\n      'Width',\n      {\n        xSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'SearchField'\n    )}\n    required={boolean('Required', false, 'SearchField')}\n    disabled={boolean('Disabled', false, 'SearchField')}\n    error={boolean('Error', false, 'SearchField')}\n    small={boolean('Small', false, 'SearchField')}\n    large={boolean('Large', false, 'SearchField')}\n    maxLength={number('MaxLength', 100, undefined, 'SearchField')}\n    borderless={boolean('Borderless', false, 'SearchField')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <SearchField marginRight />\n    <SearchField marginRight disabled />\n    <SearchField marginRight error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <SearchField marginRight small />\n    <SearchField marginRight small disabled />\n    <SearchField marginRight small error />\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <SearchField marginRight large />\n    <SearchField marginRight large disabled />\n    <SearchField marginRight large error />\n  </>\n);\n\nexport const MaxWidth = () => (\n  <div style={{ width: `${number('parent element width (rem)', 15)}rem` }}>\n    <ColumnBase>\n      <SearchField\n        value=\"親要素よりも幅が大きいとき、SearchFieldの幅は小さくなります。\"\n        width={select(\n          'Width',\n          {\n            XSmall: 'xSmall',\n            Small: 'small',\n            Medium: 'medium',\n            Large: 'large',\n            Full: 'full',\n          },\n          'large',\n          'TextField'\n        )}\n      />\n    </ColumnBase>\n  </div>\n);\n\nexport const Borderless = () => (\n  <>\n    <div>\n      <SearchField\n        borderless\n        marginRight\n        width={'full'}\n        value={\n          'borderless を指定すると、ボーダーやフォーカスインジケーターが非表示になります。必ずFocusHighlightコンポーネント等でフォーカスインジケーターを表示してください。'\n        }\n        mb={1}\n      />\n    </div>\n    <FocusHighlight highlightStyle=\"inset\" width={'full'}>\n      <SearchField\n        borderless\n        marginRight\n        width={'full'}\n        value={'これはFocusHighlightコンポーネントを使用している例です'}\n      />\n    </FocusHighlight>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/forms/SearchField.tsx",
    "content": "import * as React from 'react';\nimport { MdSearch } from 'react-icons/md';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { FormHandlers } from './types';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  /**\n   * label id を指定します\n   */\n  id?: string;\n  /**\n   * input aria-label を指定します\n   */\n  label?: string;\n  /**\n   * input aria-labelledby を指定します\n   */\n  labelledby?: string;\n  /**\n   * input placeholder を指定します\n   */\n  placeholder?: string;\n  /**\n   * input name を指定します\n   */\n  name?: string;\n  /**\n   * input value を指定します\n   */\n  value?: string;\n  /**\n   * input required を指定します\n   */\n  required?: boolean;\n  /**\n   * input autofocus を指定します\n   */\n  autofocus?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * 幅を指定します\n   */\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full';\n  /**\n   * input maxlength を指定します\n   */\n  maxLength?: number;\n  /**\n   * ボーダーやフォーカスインジケーターを非表示にします。\n   *\n   * - 必ず、FocusHighlightコンポーネント等で、フォーカスインジケーターを用意してください\n   * - 編集に使用しない場合（閲覧専用モード等）には、disabledを使用してください\n   */\n  borderless?: boolean;\n} & FormHandlers<HTMLInputElement> &\n  MarginClassProps &\n  CommonProps;\n\nconst SearchFieldInner = (\n  props: Props,\n  ref: React.Ref<HTMLInputElement>\n): React.ReactElement => {\n  const {\n    id,\n    label,\n    labelledby,\n    placeholder,\n    name,\n    value,\n    required,\n    autofocus,\n    disabled,\n    error,\n    small,\n    large,\n    width,\n    maxLength,\n    borderless = false,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onKeyUp,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n  const fieldClass = 'vb-searchField';\n  const inputClass = fieldClass + '__input';\n\n  const inputClassName = vbClassNames(inputClass, {\n    modifier: {\n      error,\n      small,\n      large,\n      widthXSmall: width === 'xSmall',\n      widthSmall: width === 'small',\n      widthMedium: width === 'medium' || !width,\n      widthLarge: width === 'large',\n      widthFull: width === 'full',\n      borderless: borderless,\n      responsive: useResponsive(),\n    },\n  });\n\n  const iconClassName = small\n    ? fieldClass + '__icon--small'\n    : fieldClass + '__icon';\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        fieldClass,\n        { widthFull: width === 'full' },\n        { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n      )}\n    >\n      <input\n        id={id}\n        type=\"search\"\n        name={name && name}\n        value={value && value}\n        className={inputClassName}\n        placeholder={placeholder && placeholder}\n        disabled={disabled && true}\n        required={required && true}\n        autoFocus={autofocus && true}\n        maxLength={maxLength}\n        onChange={onChange}\n        onInput={onInput}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n        aria-label={label ? label : placeholder ? placeholder : undefined}\n        aria-labelledby={labelledby}\n        aria-required={required && true}\n        ref={ref}\n      />\n      <MdSearch className={iconClassName} />\n    </div>\n  );\n};\nconst SearchField = React.forwardRef(SearchFieldInner);\nexport default SearchField;\n"
  },
  {
    "path": "src/lv1/forms/SelectBox.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, number } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport SelectBox from './SelectBox';\nimport ColumnBase from '../bases/ColumnBase';\nimport Button from '../../lv1/buttons/Button';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nconst optionsSamples = [\n  { name: '選択してください' },\n  { name: '選択肢1', value: 'value1' },\n  { name: '選択肢2', value: 'value2', disabled: true },\n  { name: '選択肢3', value: 'value3' },\n  {\n    name: 'abcdefghijllmnabcdefghijllmnabcdefghijllmnabcdefghijllmnabcdefghijllmn',\n    value: 'value4',\n  },\n  {\n    name: '選択肢グループ1',\n    options: [\n      { name: '選択肢1-1', value: 'value1-1' },\n      { name: '選択肢1-2', value: 'value1-2' },\n      { name: '選択肢1-3', value: 'value1-3' },\n    ],\n  },\n  {\n    name: '選択肢グループ2',\n    options: [\n      { name: '選択肢2-1', value: 'value2-1' },\n      { name: '選択肢2-2', value: 'value2-2' },\n      { name: '選択肢2-3', value: 'value2-3' },\n    ],\n    disabled: true,\n  },\n];\n\nexport default {\n  component: SelectBox,\n};\n\nexport const SelectBoxComponent = () => (\n  <SelectBox\n    label=\"テキストフィールド\"\n    options={optionsSamples}\n    disabled={boolean('Disabled', false, 'SelectBox')}\n    small={boolean('Small', false, 'SelectBox')}\n    large={boolean('Large', false, 'SelectBox')}\n    width={select(\n      'Width',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'SelectBox'\n    )}\n    defaultValue=\"\"\n    autoComplete={select(\n      'AutoComplete',\n      {\n        off: 'off',\n        on: 'on',\n        name: 'name',\n        'honorific-prefix': 'honorific-prefix',\n        'given-name': 'given-name',\n        'additional-name': 'additional-name',\n        'family-name': 'family-name',\n        'honorific-suffix': 'honorific-suffix',\n        nickname: 'nickname',\n        email: 'email',\n        username: 'username',\n        'new-password': 'new-password',\n        'current-password': 'current-password',\n        'one-time-code': 'one-time-code',\n        'organization-title': 'organization-title',\n        organization: 'organization',\n        'street-address': 'street-address',\n        'address-line1': 'address-line1',\n        'address-line2': 'address-line2',\n        'address-line3': 'address-line3',\n        'address-level4': 'address-level4',\n        'address-level3': 'address-level3',\n        'address-level2': 'address-level2',\n        'address-level1': 'address-level1',\n        country: 'country',\n        'country-name': 'country-name',\n        'postal-code': 'postal-code',\n        'cc-name': 'cc-name',\n        'cc-given-name': 'cc-given-name',\n        'cc-additional-name': 'cc-additional-name',\n        'cc-family-name': 'cc-family-name',\n        'cc-number': 'cc-number',\n        'cc-exp': 'cc-exp',\n        'cc-exp-month': 'cc-exp-month',\n        'cc-exp-year': 'cc-exp-year',\n        'cc-csc': 'cc-csc',\n        'cc-type': 'cc-type',\n        'transaction-currency': 'transaction-currency',\n        'transaction-amount': 'transaction-amount',\n        language: 'language',\n        bday: 'bday',\n        'bday-day': 'bday-day',\n        'bday-month': 'bday-month',\n        'bday-year': 'bday-year',\n        sex: 'sex',\n        tel: 'tel',\n        'tel-country-code': 'tel-country-code',\n        'tel-national': 'tel-national',\n        'tel-area-code': 'tel-area-code',\n        'tel-local': 'tel-local',\n        'tel-extension': 'tel-extension',\n        impp: 'impp',\n        url: 'url',\n        photo: 'photo',\n      },\n      'off',\n      'SelectBox'\n    )}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <SelectBox options={optionsSamples} marginRight />\n    <SelectBox options={optionsSamples} marginRight disabled />\n    <SelectBox options={optionsSamples} marginRight error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <SelectBox options={optionsSamples} marginRight small />\n    <SelectBox options={optionsSamples} marginRight small disabled />\n    <SelectBox options={optionsSamples} marginRight small error />\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <SelectBox options={optionsSamples} marginRight large />\n    <SelectBox options={optionsSamples} marginRight large disabled />\n    <SelectBox options={optionsSamples} marginRight large error />\n  </>\n);\n\nexport const MaxWidth = () => (\n  <div style={{ width: `${number('parent element width (rem)', 15)}rem` }}>\n    <ColumnBase>\n      <SelectBox\n        options={[\n          {\n            name: '親要素よりも幅が大きいとき、SelectBoxの幅は小さくなります。',\n          },\n        ]}\n        width={select(\n          'Width',\n          {\n            XSmall: 'xSmall',\n            Small: 'small',\n            Medium: 'medium',\n            Large: 'large',\n            Full: 'full',\n          },\n          'large',\n          'SelectBox'\n        )}\n      />\n    </ColumnBase>\n  </div>\n);\n\nexport const ManualFocus = () => {\n  const ref = React.useRef<HTMLSelectElement>(null);\n  const onClick = () => {\n    ref.current?.focus();\n  };\n\n  return (\n    <>\n      <Button mr={1} onClick={onClick}>\n        フォーカスを当てる\n      </Button>\n      <SelectBox ref={ref} options={optionsSamples} marginRight />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/forms/SelectBox.tsx",
    "content": "import * as React from 'react';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { FormHandlers, AutocompleteAttribute } from './types';\n\nexport type SelectBoxOption = {\n  name: string;\n  value?: string;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n};\nexport type SelectBoxOptionGroup = {\n  name: string;\n  options: SelectBoxOption[];\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n};\n\ntype Props = {\n  /**\n   * select要素のaria-label を指定します。 `<label>` 要素 (`FormControlLabel` コンポーネントなど)が使用できない場合にのみ使用してください。\n   */\n  label?: string;\n  /**\n   * select要素のaria-labelledby を指定します。 `<label>` 要素 (`FormControlLabel` コンポーネントなど)が使用できない場合にのみ使用してください。\n   */\n  labelledby?: string;\n  /**\n   * select id を指定します\n   */\n  id?: string;\n  /**\n   * 選択要素を指定します。optgroup を使用したい場合は SelectBoxOptionGroup を渡してください。\n   *\n   * `SelectBoxOption = { name: string; value?: string; disabled?: boolean;}`\n   *\n   * `SelectBoxOptionGroup = {name: string; options: SelectBoxOption[]; disabled?: boolean;}`\n   */\n  options?: Array<SelectBoxOption | SelectBoxOptionGroup>;\n  /**\n   * select value を指定します\n   */\n  value?: string;\n  /**\n   * 非制御の場合の初期値を指定します\n   */\n  defaultValue?: string;\n  /**\n   * select name を指定します\n   */\n  name?: string;\n  /**\n   * select required を指定します\n   */\n  required?: boolean;\n  /**\n   * select autofocus を指定します\n   */\n  autofocus?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * 中央寄せにします\n   */\n  alignCenter?: boolean;\n  /**\n   * 右寄せにします\n   */\n  alignRight?: boolean;\n  /**\n   * select autocomplete を指定します\n   */\n  autoComplete?: AutocompleteAttribute;\n  /**\n   * 幅を指定します。\n   *\n   * - xSmall: 4rem(64px)\n   *   - 2文字程度しか入らないことがわかっている入力欄に使います\n   * - small: 7rem(112px)\n   *   - 都道府県や郵便番号など、数文字しか入らないことがわかっている入力欄に使います\n   * - medium(default): 11rem(176px)\n   *   - 10文字程度であることがわかっている入力欄に使います\n   *   - たとえば会計帳簿の金額入力欄は12,3桁が前提になっているので medium が使われます\n   * - large: 24rem(384px)\n   *   - 入力量がユーザー次第の場合に使います\n   *   - 住所や備考など\n   * - full: 親要素に対して100%\n   *   - table 要素の中に配置するなど、柔軟に幅を変えたい場合に使います\n   */\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full';\n} & FormHandlers<HTMLSelectElement> &\n  MarginClassProps &\n  CommonProps;\n\nconst SelectBoxInner = (\n  props: Props,\n  ref?: React.Ref<HTMLSelectElement> | React.MutableRefObject<HTMLSelectElement>\n): React.ReactElement => {\n  const {\n    label,\n    labelledby,\n    id,\n    options,\n    name,\n    value,\n    defaultValue,\n    required,\n    autofocus,\n    disabled,\n    error,\n    small,\n    large,\n    alignCenter,\n    alignRight,\n    width,\n    autoComplete,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onKeyUp,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const wrapClassName = vbClassNames('vb-select', {\n    modifier: {\n      widthXSmall: width === 'xSmall',\n      widthSmall: width === 'small',\n      widthMedium: width === 'medium' || !width,\n      widthLarge: width === 'large',\n      widthFull: width === 'full',\n    },\n  });\n\n  const classModifier = {\n    error,\n    small,\n    alignCenter,\n    alignRight,\n  };\n\n  const className = vbClassNames('vb-select__body', {\n    modifier: {\n      error,\n      small,\n      large,\n      alignCenter,\n      alignRight,\n    },\n  });\n\n  const makeOptionItems = (\n    opts: Array<SelectBoxOption | SelectBoxOptionGroup>\n  ): Array<React.ReactElement> =>\n    opts.map(\n      (\n        opt: SelectBoxOption | SelectBoxOptionGroup,\n        index: number\n      ): React.ReactElement =>\n        (opt as SelectBoxOptionGroup).options ? ( // optionsあればSelectBoxOptionGroupなんだぜ\n          <optgroup\n            key={index}\n            label={(opt as SelectBoxOptionGroup).name}\n            disabled={!!(opt as SelectBoxOptionGroup).disabled}\n          >\n            {makeOptionItems((opt as SelectBoxOptionGroup).options)}\n          </optgroup>\n        ) : (\n          <option\n            key={index}\n            value={(opt as SelectBoxOption).value}\n            disabled={!!(opt as SelectBoxOption).disabled}\n          >\n            {opt.name}\n          </option>\n        )\n    );\n\n  return (\n    <div\n      {...commonProps(props, wrapClassName, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginTop,\n        marginSize,\n      })}\n    >\n      <select\n        name={name && name}\n        className={className}\n        id={id}\n        ref={ref}\n        value={value}\n        defaultValue={defaultValue}\n        disabled={disabled && true}\n        required={required && true}\n        autoFocus={autofocus && true}\n        onChange={onChange}\n        onInput={onInput}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n        aria-label={label}\n        aria-labelledby={labelledby}\n        aria-required={required && true}\n        autoComplete={autoComplete}\n      >\n        {makeOptionItems(options || [])}\n      </select>\n    </div>\n  );\n};\n\n/**\n * 汎用のselectコンポーネントです。\n * 「複数のうちからひとつを選ぶ」入力欄の場合に使用してください。\n *\n * - 必ず `<label>` 要素によるラベル付けを行ってください\n *   - `FormControl` を使用する場合は、`SelectBox` に `id` を指定し、同じ文字列を `FormControl` の `fieldId` に指定してください\n *   - どうしても `<label>` 要素が使用できない場合に限り、 `label` または `labelledby` を使ってラベル付けをしてください\n * - 大量に選択肢がある場合は `SingleComboBox` の仕様を検討してください。テキストを入力することで選択肢を絞り込むことができます。\n * - 幅を変えたいときは width オプションを変更します。特に柔軟に選択したい場合は、widthオプションを full にすることで親要素に対して100%にすることができます。\n *\n * 似ているコンポーネントに `DropdownButton` が存在します。\n * `DropdownButton` は「押下するとドロップダウンメニューを開く **ボタン**」で、`SelectBox` は「選択肢のなかから一つを選ぶ **フォームの部品** 」です。\n * 両者の違いについては、 `DropdownButton` のドキュメントを参照してください。\n */\nconst SelectBox = React.forwardRef(SelectBoxInner);\nexport default SelectBox;\n"
  },
  {
    "path": "src/lv1/forms/TextArea.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TextArea from './TextArea';\nimport Button from '../buttons/Button';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: TextArea,\n};\n\nexport const TextAreaComponent = () => {\n  return (\n    <TextArea\n      id=\"textarea_id\"\n      name=\"textarea_name\"\n      placeholder={text('Placeholder', 'プレースホルダー', 'TextArea')}\n      disabled={boolean('Disabled', false, 'TextArea')}\n      required={boolean('Required', false, 'TextArea')}\n      small={boolean('Small', false, 'TextArea')}\n      large={boolean('Large', false, 'TextArea')}\n      label={text(\n        'Label',\n        'labelはlabel要素による関連付けができない場合に使用してください',\n        'TextArea'\n      )}\n      aria-required={boolean('Required', false, 'TextArea')}\n      autoComplete={select(\n        'AutoComplete',\n        {\n          off: 'off',\n          on: 'on',\n          name: 'name',\n          'honorific-prefix': 'honorific-prefix',\n          'given-name': 'given-name',\n          'additional-name': 'additional-name',\n          'family-name': 'family-name',\n          'honorific-suffix': 'honorific-suffix',\n          nickname: 'nickname',\n          email: 'email',\n          username: 'username',\n          'new-password': 'new-password',\n          'current-password': 'current-password',\n          'one-time-code': 'one-time-code',\n          'organization-title': 'organization-title',\n          organization: 'organization',\n          'street-address': 'street-address',\n          'address-line1': 'address-line1',\n          'address-line2': 'address-line2',\n          'address-line3': 'address-line3',\n          'address-level4': 'address-level4',\n          'address-level3': 'address-level3',\n          'address-level2': 'address-level2',\n          'address-level1': 'address-level1',\n          country: 'country',\n          'country-name': 'country-name',\n          'postal-code': 'postal-code',\n          'cc-name': 'cc-name',\n          'cc-given-name': 'cc-given-name',\n          'cc-additional-name': 'cc-additional-name',\n          'cc-family-name': 'cc-family-name',\n          'cc-number': 'cc-number',\n          'cc-exp': 'cc-exp',\n          'cc-exp-month': 'cc-exp-month',\n          'cc-exp-year': 'cc-exp-year',\n          'cc-csc': 'cc-csc',\n          'cc-type': 'cc-type',\n          'transaction-currency': 'transaction-currency',\n          'transaction-amount': 'transaction-amount',\n          language: 'language',\n          bday: 'bday',\n          'bday-day': 'bday-day',\n          'bday-month': 'bday-month',\n          'bday-year': 'bday-year',\n          sex: 'sex',\n          tel: 'tel',\n          'tel-country-code': 'tel-country-code',\n          'tel-national': 'tel-national',\n          'tel-area-code': 'tel-area-code',\n          'tel-local': 'tel-local',\n          'tel-extension': 'tel-extension',\n          impp: 'impp',\n          url: 'url',\n          photo: 'photo',\n        },\n        'off',\n        'TextArea'\n      )}\n      maxLength={number('MaxLength', 255, undefined, 'TextArea')}\n      resize={select(\n        'Resize',\n        ['none', 'horizontal', 'vertical', 'both'],\n        'both',\n        'TextArea'\n      )}\n      width={select(\n        'Width',\n        {\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n        },\n        'medium',\n        'TextArea'\n      )}\n      height={number('Height', 10, undefined, 'TextArea')}\n      {...handlers}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const Default = () => (\n  <>\n    <TextArea width=\"full\" />\n    <TextArea width=\"full\" disabled />\n    <TextArea width=\"full\" error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <TextArea width=\"full\" small />\n    <TextArea width=\"full\" small disabled />\n    <TextArea width=\"full\" small error />\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <TextArea width=\"full\" large />\n    <TextArea width=\"full\" large disabled />\n    <TextArea width=\"full\" large error />\n  </>\n);\n\nexport const AutoResize = () => {\n  const [value, setValue] = React.useState<string>('');\n\n  return (\n    <TextArea\n      value={value}\n      autoResize\n      resize=\"both\"\n      width=\"full\"\n      onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) =>\n        setValue(e.target.value)\n      }\n    />\n  );\n};\n\nexport const ManualFocus = () => {\n  const ref = React.useRef<HTMLTextAreaElement>(null);\n  const onClick = () => ref?.current?.focus();\n\n  return (\n    <>\n      <Button mr={1} onClick={onClick}>\n        フォーカスを当てる\n      </Button>\n      <TextArea ref={ref} />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/forms/TextArea.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { FormHandlers, AutocompleteAttribute } from './types';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  /**\n   * textarea id を指定します\n   */\n  id?: string;\n  /**\n   * textarea要素のaria-label を指定します。 `<label>` 要素 (`FormControlLabel` コンポーネントなど)が使用できない場合にのみ使用してください。\n   */\n  label?: string;\n  /**\n   * textarea要素のaria-labelledby を指定します。 `<label>` 要素 (`FormControlLabel` コンポーネントなど)が使用できない場合にのみ使用してください。\n   */\n  labelledby?: string;\n  /**\n   * textarea 要素の placeholder を指定します。\n   * 廃止予定はありませんが、ユーザビリティ・アクセシビリティ上の問題があるため、原則として使用しないでください。\n   *\n   * - placeholder のテキストの色はアクセシビリティー・ガイドラインのコントラスト比の要件を満たしていません\n   * - 「何のフィールドであるか（ラベル）」は入力中に確認できる場所にテキストで記載し、`<label>` 要素を使用して紐付けてください\n   * - 入力規則や記入例などの注釈は placeholder ではない場所に記載してください\n   *\n   * @deprecated\n   */\n  placeholder?: string;\n  /**\n   * textarea name を指定します\n   */\n  name?: string;\n  /**\n   * textarea value を指定します\n   */\n  value?: string;\n  /**\n   * 非制御の場合の初期値を指定します\n   */\n  defaultValue?: string;\n  /**\n   * textarea required を指定します\n   */\n  required?: boolean;\n  /**\n   * textarea autofocus を指定します\n   */\n  autofocus?: boolean;\n  /**\n   * 高さの自動リサイズを有効にします。入力される行数に応じて自動で大きくなっていきます（自動で小さくはなりません）。\n   */\n  autoResize?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * textarea autocomplete を指定します\n   */\n  autoComplete?: AutocompleteAttribute;\n  /**\n   * textarea maxlength を指定します\n   */\n  maxLength?: number;\n  /**\n   * 設定した方向のリサイズを有効にします。デフォルトは 'both' です。\n   * ユーザーの利便性を優先するため、なるべくリサイズ可能な選択肢を取ってください。レイアウトの仕様上制限が必要な場合は horizontal や vertical を使用し、none の使用は避けてください\n   */\n  resize?: 'none' | 'horizontal' | 'vertical' | 'both';\n  /**\n   * 幅を指定します。デフォルトは 'medium' です。\n   *\n   * - small: 24rem(384px)\n   * - medium: 55rem(880px)\n   * - large: 67rem(1072px)\n   * - full: 親要素に対して100%\n   */\n  width?: 'small' | 'medium' | 'large' | 'full';\n  /**\n   * 高さを指定します(rem)\n   */\n  height?: number;\n} & FormHandlers<HTMLTextAreaElement> &\n  MarginClassProps &\n  CommonProps;\n\nconst useAutoResize = (\n  {\n    autoResize,\n    resize,\n    onInput,\n    height,\n  }: Pick<Props, 'autoResize' | 'resize' | 'onInput' | 'height'>,\n  ref?:\n    | React.Ref<HTMLTextAreaElement>\n    | React.MutableRefObject<HTMLTextAreaElement>\n) => {\n  const autoResizable =\n    autoResize && (!resize || ['vertical', 'both'].includes(resize));\n  const tmpTextAreaRef = React.useRef<HTMLTextAreaElement>(null);\n  const textAreaRef = (ref ||\n    tmpTextAreaRef) as React.MutableRefObject<HTMLTextAreaElement>;\n  const [autoResizeHeight, setAutoResizeHeight] = React.useState<number>(\n    height || 0\n  );\n  const baseFontSize = React.useMemo(\n    () =>\n      parseInt(\n        getComputedStyle(document.documentElement).fontSize.split('px')[0]\n      ) || 16,\n    []\n  );\n\n  const onInputWithResize = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n    onInput && onInput(e);\n    if (\n      autoResizable &&\n      textAreaRef.current &&\n      textAreaRef.current.scrollHeight > textAreaRef.current.offsetHeight\n    ) {\n      setAutoResizeHeight(\n        Math.ceil(textAreaRef.current.scrollHeight / baseFontSize)\n      );\n    }\n  };\n\n  return { textAreaRef, autoResizeHeight, onInputWithResize };\n};\n\n/**\n * 複数行の入力欄 コンポーネントです。`<textarea>`要素を返します。\n * コメント欄など、ユーザーが長い文章を入力することなどが想定される場所で使用することを想定しています。\n *\n * - 必ず `<label>` 要素によるラベル付けを行ってください\n *   - `FormControl` を使用する場合は、`SelectBox` に `id` を指定し、同じ文字列を `FormControl` の `fieldId` に指定してください\n *   - どうしても `<label>` 要素が使用できない場合に限り、 `label` または `labelledby` を使ってラベル付けをしてください\n * - resize オプションを指定すると、右下をドラッグして領域を広げるやつの方向固定などができます（デフォルトは垂直・水平方向どちらもリサイズできます）。\n * - autoResize オプションを指定すると、入力される行数に応じて自動で大きくなっていきます（自動で小さくはなりません）。\n */\nconst TextAreaInner: React.ForwardRefRenderFunction<\n  HTMLTextAreaElement,\n  Props\n> = (props, ref) => {\n  const {\n    id,\n    label,\n    labelledby,\n    placeholder,\n    name,\n    value,\n    defaultValue,\n    required,\n    autofocus,\n    disabled,\n    error,\n    small,\n    large,\n    autoComplete,\n    autoResize,\n    maxLength,\n    resize,\n    width,\n    height,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onKeyUp,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const { autoResizeHeight, onInputWithResize, textAreaRef } = useAutoResize(\n    {\n      autoResize,\n      resize,\n      onInput,\n      height,\n    },\n    ref\n  );\n\n  const classModifier = {\n    error,\n    small,\n    large,\n    responsive: useResponsive(),\n    [`resize${(resize || 'both')\n      .split('')\n      .map((char, i) => (i === 0 ? char.toUpperCase() : char))\n      .join('')}`]: true,\n    [`width${(width || 'medium')\n      .split('')\n      .map((char, i) => (i === 0 ? char.toUpperCase() : char))\n      .join('')}`]: true,\n    [`height${autoResizeHeight || height || ''}`]: true,\n  };\n\n  return (\n    <textarea\n      ref={textAreaRef}\n      id={id}\n      name={name && name}\n      placeholder={placeholder && placeholder}\n      disabled={disabled && true}\n      required={required && true}\n      autoFocus={autofocus && true}\n      onChange={onChange}\n      onInput={onInputWithResize}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      onKeyDown={onKeyDown}\n      onKeyUp={onKeyUp}\n      aria-label={label}\n      aria-labelledby={labelledby}\n      aria-required={required && true}\n      value={value}\n      autoComplete={autoComplete}\n      maxLength={maxLength}\n      {...commonProps(props, 'vb-textarea', classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginTop,\n        marginSize,\n      })}\n    >\n      {defaultValue}\n    </textarea>\n  );\n};\n\nconst TextArea = React.forwardRef(TextAreaInner);\nexport default TextArea;\n"
  },
  {
    "path": "src/lv1/forms/TextField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { MdDateRange, MdExpandMore, MdFavorite } from 'react-icons/md';\nimport { action, actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TextField from './TextField';\nimport ColumnBase from '../bases/ColumnBase';\nimport { FocusHighlight } from '../a11y/FocusHighlight';\nimport CheckBox from './CheckBox';\nimport Paragraph from '../typography/Paragraph';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: TextField,\n};\n\nexport const TextFieldComponent = () => {\n  const ref = React.createRef<HTMLInputElement>();\n  return (\n    <TextField\n      type={select(\n        'Type',\n        {\n          Text: 'text',\n          Email: 'email',\n          Password: 'password',\n          Number: 'number',\n        },\n        'text',\n        'TextField'\n      )}\n      label={text('Label', 'テキストフィールドのサンプル', 'TextField')}\n      placeholder={text('Placeholder', '入力してください', 'TextField')}\n      required={boolean('Required', false, 'TextField')}\n      disabled={boolean('Disabled', false, 'TextField')}\n      error={boolean('Error', false, 'TextField')}\n      small={boolean('Small', false, 'TextField')}\n      large={boolean('Large', false, 'TextField')}\n      width={select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n        },\n        'medium',\n        'TextField'\n      )}\n      min={number('Min', 0, undefined, 'TextField')}\n      max={number('Max', 100, undefined, 'TextField')}\n      step={number('Step', 10, undefined, 'TextField')}\n      autoComplete={select(\n        'AutoComplete',\n        {\n          off: 'off',\n          on: 'on',\n          name: 'name',\n          'honorific-prefix': 'honorific-prefix',\n          'given-name': 'given-name',\n          'additional-name': 'additional-name',\n          'family-name': 'family-name',\n          'honorific-suffix': 'honorific-suffix',\n          nickname: 'nickname',\n          email: 'email',\n          username: 'username',\n          'new-password': 'new-password',\n          'current-password': 'current-password',\n          'one-time-code': 'one-time-code',\n          'organization-title': 'organization-title',\n          organization: 'organization',\n          'street-address': 'street-address',\n          'address-line1': 'address-line1',\n          'address-line2': 'address-line2',\n          'address-line3': 'address-line3',\n          'address-level4': 'address-level4',\n          'address-level3': 'address-level3',\n          'address-level2': 'address-level2',\n          'address-level1': 'address-level1',\n          country: 'country',\n          'country-name': 'country-name',\n          'postal-code': 'postal-code',\n          'cc-name': 'cc-name',\n          'cc-given-name': 'cc-given-name',\n          'cc-additional-name': 'cc-additional-name',\n          'cc-family-name': 'cc-family-name',\n          'cc-number': 'cc-number',\n          'cc-exp': 'cc-exp',\n          'cc-exp-month': 'cc-exp-month',\n          'cc-exp-year': 'cc-exp-year',\n          'cc-csc': 'cc-csc',\n          'cc-type': 'cc-type',\n          'transaction-currency': 'transaction-currency',\n          'transaction-amount': 'transaction-amount',\n          language: 'language',\n          bday: 'bday',\n          'bday-day': 'bday-day',\n          'bday-month': 'bday-month',\n          'bday-year': 'bday-year',\n          sex: 'sex',\n          tel: 'tel',\n          'tel-country-code': 'tel-country-code',\n          'tel-national': 'tel-national',\n          'tel-area-code': 'tel-area-code',\n          'tel-local': 'tel-local',\n          'tel-extension': 'tel-extension',\n          impp: 'impp',\n          url: 'url',\n          photo: 'photo',\n        },\n        'off',\n        'TextField'\n      )}\n      suffix={text('Suffix', '', 'TextField')}\n      loading={boolean('Loading', false, 'TextField')}\n      ref={ref}\n      {...handlers}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const Widths = () => (\n  <>\n    <TextField mr={1} mb={1} value=\"xSmall\" label=\"xSmall\" width=\"xSmall\" />\n    <TextField mr={1} mb={1} value=\"small\" label=\"small\" width=\"small\" />\n    <TextField mr={1} mb={1} value=\"medium\" label=\"medium\" width=\"medium\" />\n    <TextField mr={1} mb={1} value=\"large\" label=\"large\" width=\"large\" />\n    <TextField value=\"full\" label=\"full\" width=\"full\" />\n  </>\n);\n\nexport const Default = () => (\n  <>\n    <TextField mr={1} />\n    <TextField mr={1} disabled />\n    <TextField mr={1} error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <TextField mr={1} small />\n    <TextField mr={1} small disabled />\n    <TextField mr={1} small error />\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <TextField mr={1} large />\n    <TextField mr={1} large disabled />\n    <TextField mr={1} large error />\n  </>\n);\n\nexport const MaxWidth = () => (\n  <div style={{ width: `${number('parent element width (rem)', 15)}rem` }}>\n    <ColumnBase>\n      <TextField\n        value=\"親要素よりも幅が大きいとき、TextFieldの幅は小さくなります。\"\n        width={select(\n          'Width',\n          {\n            XSmall: 'xSmall',\n            Small: 'small',\n            Medium: 'medium',\n            Large: 'large',\n            Full: 'full',\n          },\n          'large',\n          'TextField'\n        )}\n      />\n    </ColumnBase>\n  </div>\n);\n\nexport const Suffix = () => (\n  <>\n    <TextField mr={1} suffix=\"円\" />\n    <TextField mr={1} small suffix=\"円\" />\n    <TextField mr={1} large suffix=\"円\" />\n  </>\n);\n\nexport const Borderless = () => (\n  <>\n    <TextField\n      borderless\n      width=\"large\"\n      value=\"borderless を指定すると、テキストフィールドのボーダーやフォーカスインジケーターが非表示になります。必ずFocusHighlightコンポーネント等でフォーカスインジケーターを表示してください。\"\n    />\n    <FocusHighlight highlightStyle=\"inset\">\n      <TextField\n        borderless\n        width=\"large\"\n        value=\"これはFocusHighlightコンポーネントを使用している例です\"\n      />\n    </FocusHighlight>\n  </>\n);\n\nexport const WithIcon = () => (\n  <>\n    <Paragraph mb={1}>\n      テキストフィールドの右脇にアイコンを表示できますが、これはコンボボックス等の動作を示すためのものです。\n      通常のフィールドには使用しないでください。\n    </Paragraph>\n    <TextField\n      IconComponent={MdExpandMore}\n      mr={1}\n      onIconClick={action('onIconClick')}\n      onIconBlur={action('onIconBlur')}\n      onIconFocus={action('onIconFocus')}\n      iconLabel=\"メニューを開く\"\n    />\n    <TextField IconComponent={MdExpandMore} mr={1} />\n    <TextField IconComponent={MdDateRange} width=\"xSmall\" mr={1} small />\n    <TextField IconComponent={MdDateRange} width=\"small\" mr={1} />\n    <TextField IconComponent={MdDateRange} width=\"small\" mr={1} large />\n    <TextField\n      IconComponent={MdFavorite}\n      iconLabel=\"お気に入り\"\n      width=\"small\"\n      large\n    />\n  </>\n);\n\nexport const WithLoading = () => {\n  const [loading, setLoading] = React.useState<boolean>(true);\n  return (\n    <>\n      <TextField IconComponent={MdExpandMore} loading={loading} mr={1} />\n      <CheckBox\n        onChange={(e) => setLoading(e.target.checked)}\n        checked={loading}\n      >\n        Loading\n      </CheckBox>\n    </>\n  );\n};\n\nexport const DeprecatedMarginProps = () => (\n  <TextField\n    width=\"large\"\n    label=\"marginBottom, marginLeft, marginRight, marginTop, marginSizeは使わず、ma, mb, ml, mr, mt を使ってください\"\n    value=\"marginBottom, marginLeft, marginRight, marginTop, marginSizeは使わず、ma, mb, ml, mr, mt を使ってください\"\n    marginBottom={boolean('marginBottom', true, 'MarginProps')}\n    marginRight={boolean('marginRight', true, 'MarginProps')}\n    marginLeft={boolean('marginLeft', true, 'MarginProps')}\n    marginTop={boolean('marginTop', true, 'MarginProps')}\n    marginSize={\n      select(\n        'marginSize',\n        {\n          undefined: '',\n          xSmall: 'xSmall',\n          small: 'small',\n          large: 'large',\n          xLarge: 'xLarge',\n          xxLarge: 'xxLarge',\n        },\n        '',\n        'MarginProps'\n      ) || undefined\n    }\n  />\n);\n"
  },
  {
    "path": "src/lv1/forms/TextField.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, {\n  CommonProps,\n  pickCommonDataProps,\n} from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport functionalMarginClasses from '../../utilities/functionalMarginClasses';\nimport { FormHandlers, AutocompleteAttribute } from './types';\nimport {\n  filterTextBoxAriaProps,\n  TextBoxAriaProps,\n  filterNumberInputAriaProps,\n  NumberInputAriaProps,\n  ButtonAriaProps,\n} from '../../utilities/AriaProps';\nimport InlineSpinner from '../InlineSpinner';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\nexport type TextFieldType = 'text' | 'email' | 'password' | 'number' | 'tel';\nexport type TextFieldWidth = 'xSmall' | 'small' | 'medium' | 'large' | 'full';\n\ntype NumberInputProps = {\n  min?: number;\n  max?: number;\n  step?: number;\n  /**\n   * type=\"number\" 時に右側に表示される spinner を非表示にします\n   * @default false\n   */\n  hideSpinner?: boolean;\n};\n\ntype Props = {\n  /**\n   * input id を指定します\n   */\n  id?: string;\n  /**\n   * input type を指定します。\n   *\n   * `tel` は電話番号の入力欄以外に使用しないでください（IMEをオフにするために使用しないでください）\n   */\n  type?: TextFieldType;\n  /**\n   * input要素のaria-label を指定します。 `<label>` 要素 (`FormControlLabel` コンポーネントなど)が使用できない場合にのみ使用してください。\n   */\n  label?: string;\n  /**\n   * input要素のaria-labelledby を指定します。 `<label>` 要素 (`FormControlLabel` コンポーネントなど)が使用できない場合にのみ使用してください。\n   */\n  labelledby?: string;\n  /**\n   * input 要素の placeholder を指定します。\n   * 廃止予定はありませんが、ユーザビリティ・アクセシビリティ上の問題があるため、原則として使用しないでください。\n   *\n   * - placeholder のテキストの色はアクセシビリティー・ガイドラインのコントラスト比の要件を満たしていません\n   * - 「何のフィールドであるか（ラベル）」は入力中に確認できる場所にテキストで記載し、`<label>` 要素を使用して紐付けてください\n   * - 入力規則や記入例などの注釈は placeholder ではない場所に記載してください\n   *\n   * @deprecated\n   */\n  placeholder?: string;\n  /**\n   * input name を指定します\n   */\n  name?: string;\n  /**\n   * input value を指定します\n   */\n  value?: string;\n  /**\n   * input required を指定します\n   */\n  required?: boolean;\n  /**\n   * input autofocus を指定します\n   */\n  autofocus?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * 中央寄せにします\n   */\n  alignCenter?: boolean;\n  /**\n   * 右寄せにします\n   */\n  alignRight?: boolean;\n  /**\n   * input maxlength を指定します。郵便番号やクレジットカード番号など、ユーザーにとって桁数制限が明確かつ、現在何文字入力しているのか認識できる程度の桁数の場合にのみ使用してください。\n   */\n  maxLength?: number;\n  /**\n   * 幅を指定します。\n   *\n   * - xSmall: 4rem(64px)\n   *   - 2文字程度しか入らないことがわかっている入力欄に使います\n   * - small: 7rem(112px)\n   *   - 都道府県や郵便番号など、数文字しか入らないことがわかっている入力欄に使います\n   * - medium(default): 11rem(176px)\n   *   - 10文字程度であることがわかっている入力欄に使います\n   *   - たとえば会計帳簿の金額入力欄は12,3桁が前提になっているので medium が使われます\n   * - large: 24rem(384px)\n   *   - 入力量がユーザー次第の場合に使います\n   *   - 住所や備考など\n   * - full: 親要素に対して100%\n   *   - table 要素の中に配置するなど、柔軟に幅を変えたい場合に使います\n   */\n  width?: TextFieldWidth;\n  /**\n   * input role を指定します\n   */\n  role?: 'textbox' | 'combobox';\n  /**\n   * input autocomplete を指定します\n   */\n  autoComplete?: AutocompleteAttribute;\n  /**\n   * 入力欄の右側に文字列を表示します\n   */\n  suffix?: string;\n\n  /**\n   * ボーダーやフォーカスインジケーターを非表示にします。\n   * スプレッドシートや、複雑なコンボボックスの実装に使用する想定の実装です。\n   *\n   * - 必ず、FocusHighlightコンポーネント等で、フォーカスインジケーターを用意してください\n   * - 編集に使用しない場合（閲覧専用モード等）には、ReadOnlyFieldを使用してください\n   */\n  borderless?: boolean;\n\n  /**\n   * Shows a loading spinner instead of the icon component /\n   * IconComponent のかわりに読込中を示すスピナーを表示します\n   */\n  loading?: boolean;\n\n  /**\n   * Provide a react-icon component to show over the input field /\n   * アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n   */\n  IconComponent?: React.ElementType;\n\n  /**\n   * Alternative Text for IconComponent\n   *\n   * アイコンの代替テキストを指定します\n   */\n  iconLabel?: string;\n\n  /**\n   * Callback for onClick of the icon. If provided, the icon will be rendered as a button.\n   *\n   * アイコンをクリックしたときの処理を渡します。渡された場合、アイコンはボタンとして配置されます。\n   */\n  onIconClick?: React.MouseEventHandler;\n\n  /**\n   * Callback function for onFocus of the icon.\n   *\n   * アイコンにfocusしたときの処理\n   */\n  onIconFocus?: React.FocusEventHandler;\n  /**\n   * Callback function for onBlur of the icon.\n   *\n   * アイコンからblurしたときの処理\n   */\n  onIconBlur?: React.FocusEventHandler;\n  /**\n   * WAI-ARIA Attributes for the icon as a button\n   *\n   * アイコンのボタンがもつWAI-ARIA属性を指定できます\n   */\n  iconAriaProps?: ButtonAriaProps;\n} & FormHandlers<HTMLInputElement> &\n  NumberInputProps &\n  NumberInputAriaProps &\n  TextBoxAriaProps &\n  MarginClassProps &\n  CommonProps;\n\nfunction filterNumberInputProps(props: Props): NumberInputProps {\n  if (props.type != 'number') {\n    return {};\n  }\n\n  return {\n    min: props['min'],\n    max: props['max'],\n    step: props['step'],\n  };\n}\n\nfunction TextFieldInner(\n  props: Props,\n  ref?: React.Ref<HTMLInputElement> | React.MutableRefObject<HTMLInputElement>\n): React.ReactElement {\n  const {\n    type,\n    label,\n    id,\n    labelledby,\n    placeholder,\n    name,\n    value,\n    required,\n    autofocus,\n    disabled,\n    error,\n    small,\n    large,\n    role,\n    alignCenter,\n    alignRight,\n    maxLength,\n    width,\n    autoComplete,\n    suffix,\n    hideSpinner,\n    borderless,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onKeyUp,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    loading,\n    IconComponent,\n    onIconClick,\n    onIconBlur,\n    onIconFocus,\n    iconLabel,\n    iconAriaProps,\n    ma,\n    mt,\n    mb,\n    mr,\n    ml,\n  } = props;\n\n  const inputBaseClass = 'vb-textField';\n\n  const wrapperBaseClass = `${inputBaseClass}__wrapper`;\n\n  // 水平方向のマージンはwrapperに対してつける\n  const wrapperClassBase = vbClassNames(wrapperBaseClass, {\n    modifier: {\n      widthFull: width === 'full',\n    },\n    margin: {\n      marginLeft,\n      marginRight,\n      marginSize,\n      marginTop,\n      marginBottom,\n    },\n  });\n  const functionalMarginClass = functionalMarginClasses({\n    ma,\n    mr,\n    ml,\n    mt,\n    mb,\n  });\n  const wrapperClass = `${wrapperClassBase} ${functionalMarginClass}`.trim();\n\n  const suffixBaseClass = `${inputBaseClass}__suffix`;\n  const suffixClass = vbClassNames(suffixBaseClass, {\n    modifier: {\n      small,\n      large,\n    },\n  });\n  const iconClass = `${inputBaseClass}__${\n    !loading && onIconClick ? 'iconButton' : 'icon'\n  }`;\n\n  return (\n    <span className={wrapperClass}>\n      <input\n        id={id}\n        type={type || 'text'}\n        name={name && name}\n        value={value && value}\n        placeholder={placeholder && placeholder}\n        disabled={disabled && true}\n        required={required && true}\n        autoFocus={autofocus && true}\n        maxLength={maxLength}\n        onChange={onChange}\n        onInput={onInput}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n        role={role}\n        aria-label={label}\n        aria-labelledby={labelledby}\n        aria-required={required && true}\n        autoComplete={autoComplete}\n        ref={ref}\n        {...commonProps(\n          pickCommonDataProps(props),\n          inputBaseClass,\n          {\n            error,\n            small,\n            large,\n            alignCenter,\n            alignRight,\n            hideSpinner,\n            borderless,\n            widthXSmall: width === 'xSmall',\n            widthSmall: width === 'small',\n            widthMedium: width === 'medium' || !width,\n            widthLarge: width === 'large',\n            widthFull: width === 'full',\n            withIcon: !!IconComponent || loading,\n            responsive: useResponsive(),\n          },\n          { marginTop, marginBottom, marginSize }\n        )}\n        {...filterNumberInputProps(props)}\n        {...filterNumberInputAriaProps(props)}\n        {...filterTextBoxAriaProps(props)}\n      />\n\n      {(IconComponent || loading) &&\n        (loading ? (\n          <span className={iconClass} aria-hidden=\"true\">\n            <InlineSpinner isLoading />\n          </span>\n        ) : (\n          IconComponent &&\n          (onIconClick ? (\n            <button\n              type=\"button\"\n              disabled={disabled}\n              className={iconClass}\n              onClick={onIconClick}\n              onBlur={onIconBlur}\n              onFocus={onIconFocus}\n              aria-label={iconLabel}\n              {...iconAriaProps}\n            >\n              <IconComponent focusable={false} />\n            </button>\n          ) : (\n            <span\n              className={iconClass}\n              role={iconLabel ? 'img' : 'presentation'}\n              aria-label={iconLabel}\n              aria-hidden={!iconLabel}\n            >\n              <IconComponent focusable={false} />\n            </span>\n          ))\n        ))}\n\n      {!!suffix && <span className={suffixClass}>{suffix}</span>}\n    </span>\n  );\n}\n\n/**\n * 汎用のinputコンポーネントです。\n *\n * - typeオプションでnumber, text, email, tel, passwordを切り替えられます（デザイナーはどのtypeを使うのか必要に応じて指定してください）。\n * - 幅を変えたいときは width オプションを変更します。特に柔軟に選択したい場合は、widthオプションを full にすることで親要素に対して100%にすることができます。\n * - 必ず `<label>` 要素によるラベル付けを行ってください\n *   - `FormControl` を使用する場合は、`SelectBox` に `id` を指定し、同じ文字列を `FormControl` の `fieldId` に指定してください\n *   - どうしても `<label>` 要素が使用できない場合に限り、 `label` または `labelledby` を使ってラベル付けをしてください\n * - 特定の用途に応じたコンポーネントが別途用意されている場合があります。適したコンポーネントを検討してください。\n *   - 日付の場合は `DateInput`, `DateField`\n *   - 数字の場合は `DigitsInput`, `DecimalInput`, `NumeralCodeInput`\n *     - 数値入力を `TextField` で行う場合は `alignRight` を指定してください。\n *   - 時間、時刻の場合は `TimeInput`, `TimeLengthInput`\n *   - 名前の場合は `NameField`\n *   - 電話番号の場合は `PhoneNumberField`\n *   - 検索欄の場合は `SearchField`\n *   - セレクトボックスの場合は `SelectBox`\n *   - 複数行の場合は `TextArea`\n *   - readonly の場合は `ReadOnlyField`\n * - 入力欄の右や下に入力規則などの補足を追記したい場合、それらの補足が先に読み上げられる必要があります。\n *   - `WithDescriptionContent` などを使用してレイアウト調整を行ってください。\n */\nconst TextField = React.forwardRef<HTMLInputElement, Props>(TextFieldInner);\nexport default TextField;\n"
  },
  {
    "path": "src/lv1/forms/ToggleButton.stories.tsx",
    "content": "import * as React from 'react';\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport ToggleButton from './ToggleButton';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: ToggleButton,\n};\n\nexport const ToggleButtonComponent = () => {\n  const props = {\n    name: text('Name', 'toggle', 'ToggleButton'),\n    type: select(\n      'Type',\n      { checkbox: 'checkbox', radio: 'radio' },\n      'checkbox',\n      'ToggleButton'\n    ),\n    small: boolean('Small', false, 'ToggleButton'),\n    disabled: boolean('Disabled', false, 'ToggleButton'),\n    ...handlers,\n    ...commonKnobs(),\n  };\n  return (\n    <div>\n      <ToggleButton {...props}>ボタン1</ToggleButton>\n      <ToggleButton {...props}>ボタン2</ToggleButton>\n      <ToggleButton {...props}>ボタン3</ToggleButton>\n    </div>\n  );\n};\n\nexport const Checkbox = () => (\n  <div>\n    <ToggleButton name=\"toggle\" type=\"checkbox\">\n      ボタン1\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"checkbox\">\n      ボタン2\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"checkbox\">\n      ボタン3\n    </ToggleButton>\n  </div>\n);\n\nexport const Radio = () => (\n  <div>\n    <ToggleButton name=\"toggle\" type=\"radio\">\n      ボタン1\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"radio\">\n      ボタン2\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"radio\">\n      ボタン3\n    </ToggleButton>\n  </div>\n);\n\nexport const Disabled = () => (\n  <div>\n    <ToggleButton name=\"toggle\" type=\"radio\" disabled>\n      ボタン1\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"radio\" disabled>\n      ボタン2\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"radio\" disabled>\n      ボタン3\n    </ToggleButton>\n  </div>\n);\n\nexport const Small = () => (\n  <div>\n    <ToggleButton name=\"toggle\" type=\"radio\" small>\n      ボタン1\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"radio\" small>\n      ボタン2\n    </ToggleButton>\n    <ToggleButton name=\"toggle\" type=\"radio\" small>\n      ボタン3\n    </ToggleButton>\n  </div>\n);\n"
  },
  {
    "path": "src/lv1/forms/ToggleButton.tsx",
    "content": "import * as React from 'react';\n\nimport { FormHandlers } from '../../lv1/forms/types';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactChild;\n  /**\n   * input type を指定します\n   */\n  type: 'checkbox' | 'radio';\n  /**\n   * input name を指定します\n   */\n  name?: string;\n  /**\n   * input value を指定します\n   */\n  value?: string;\n  /**\n   * 選択状態にします\n   */\n  toggled?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n} & FormHandlers<HTMLInputElement> &\n  CommonProps;\n\n/**\n * **ラジオボタンやチェックボックスの代替** として、オンオフを制御するボタンとして使用します。\n * 複数のオンオフ制御をグループ化して、くっつけて表示できます。\n *\n * - `last-child` `first-child` のスタイル指定があるので、グループごとに同一の親要素をもつようにしてください\n * - グループ内で複数選択可能な場合は `type=\"checkbox\"` ひとつしか選択できない場合は `type=\"radio\"` で使用し、同一グループ内で違うtypeが混在しないようにしてください。\n * - ラジオボタンやチェックボックスの代替なので、アクションボタンとしては使用しないでください\n */\nconst ToggleButton: React.FC<Props> = (props: Props) => {\n  const {\n    type,\n    name,\n    children,\n    value,\n    toggled,\n    small,\n    disabled,\n    onBlur,\n    onChange,\n    onFocus,\n    onInput,\n    onKeyDown,\n    onKeyUp,\n  } = props;\n  const className = 'vb-toggleButton';\n  return (\n    <label {...commonProps(props, className, { small, disabled })}>\n      <input\n        className={`${className}__input`}\n        type={type}\n        name={name}\n        value={value}\n        checked={toggled}\n        disabled={disabled}\n        onChange={onChange}\n        onInput={onInput}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n      ></input>\n      <span className={`${className}__body`}>{children}</span>\n    </label>\n  );\n};\nexport default ToggleButton;\n"
  },
  {
    "path": "src/lv1/forms/types.ts",
    "content": "import * as React from 'react';\n\nexport type FormHandlers<T = Element> = {\n  onChange?: React.ChangeEventHandler<T>;\n  onInput?: React.FormEventHandler<T>;\n  onFocus?: React.FocusEventHandler<T>;\n  onBlur?: React.FocusEventHandler<T>;\n  onKeyDown?: React.KeyboardEventHandler<T>;\n  onKeyUp?: React.KeyboardEventHandler<T>;\n};\n\nexport type AutocompleteAttribute =\n  | 'off'\n  | 'on'\n  | 'name'\n  | 'honorific-prefix'\n  | 'given-name'\n  | 'additional-name'\n  | 'family-name'\n  | 'honorific-suffix'\n  | 'nickname'\n  | 'email'\n  | 'username'\n  | 'new-password'\n  | 'current-password'\n  | 'one-time-code'\n  | 'organization-title'\n  | 'organization'\n  | 'street-address'\n  | 'address-line1'\n  | 'address-line2'\n  | 'address-line3'\n  | 'address-level4'\n  | 'address-level3'\n  | 'address-level2'\n  | 'address-level1'\n  | 'country'\n  | 'country-name'\n  | 'postal-code'\n  | 'cc-name'\n  | 'cc-given-name'\n  | 'cc-additional-name'\n  | 'cc-family-name'\n  | 'cc-number'\n  | 'cc-exp'\n  | 'cc-exp-month'\n  | 'cc-exp-year'\n  | 'cc-csc'\n  | 'cc-type'\n  | 'transaction-currency'\n  | 'transaction-amount'\n  | 'language'\n  | 'bday'\n  | 'bday-day'\n  | 'bday-month'\n  | 'bday-year'\n  | 'sex'\n  | 'tel'\n  | 'tel-country-code'\n  | 'tel-national'\n  | 'tel-area-code'\n  | 'tel-local'\n  | 'tel-local-prefix'\n  | 'tel-local-suffix'\n  | 'tel-extension'\n  | 'impp'\n  | 'url'\n  | 'photo';\n"
  },
  {
    "path": "src/lv1/grids/GridBlock.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\nexport type GridSize =\n  | 'half'\n  | 'oneThird'\n  | 'twoThirds'\n  | 'oneQuarter'\n  | 'threeQuarters';\ntype Props = {\n  children?: React.ReactNode;\n  size: GridSize;\n} & CommonProps;\n\nexport default function GridBlock(props: Props): React.ReactElement {\n  const { size, children } = props;\n\n  const classModifier = {\n    half: size === 'half',\n    oneThird: size === 'oneThird',\n    twoThirds: size === 'twoThirds',\n    oneQuarter: size === 'oneQuarter',\n    threeQuarters: size === 'threeQuarters',\n  };\n  return (\n    <div {...commonProps(props, 'vb-gridBlock', classModifier, {})}>\n      {children}\n    </div>\n  );\n}\n"
  },
  {
    "path": "src/lv1/grids/GridWrapper.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n} & MarginClassProps &\n  CommonProps;\n\nexport default function GridWrapper(props: Props): React.ReactElement {\n  const {\n    marginTop,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    marginSize,\n    children,\n  } = props;\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-gridWrapper',\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      {children}\n    </div>\n  );\n}\n"
  },
  {
    "path": "src/lv1/grids/Grids.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport GridBlock, { GridSize } from '../grids/GridBlock';\nimport GridWrapper from '../grids/GridWrapper';\n\nexport default {\n  component: GridWrapper,\n};\n\nconst Column = ({ children }: { children?: React.ReactNode }) => {\n  return (\n    <div\n      style={{\n        background: 'white',\n        border: '1px solid lightgray',\n        fontSize: 'smaller',\n        padding: '0.5rem',\n      }}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport const Grids = () => {\n  const columns = select('Columns', [2, 3, 4], 2, 'Grids');\n\n  const size = {\n    2: 'half',\n    3: 'oneThird',\n    4: 'oneQuarter',\n  }[columns] as GridSize;\n\n  return (\n    <>\n      <GridWrapper {...commonKnobs()}>\n        {Array(columns)\n          .fill(1)\n          .map((_, index) => (\n            <GridBlock key={index} size={size}>\n              <Column>{`${index + 1} of ${columns}`}</Column>\n            </GridBlock>\n          ))}\n      </GridWrapper>\n    </>\n  );\n};\n\nexport const TwoColumns = () => {\n  return (\n    <>\n      <GridWrapper marginBottom marginSize=\"large\">\n        <GridBlock size=\"half\">\n          <Column>{'size=\"half\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"half\">\n          <Column>{'size=\"half\"'}</Column>\n        </GridBlock>\n      </GridWrapper>\n      <GridWrapper marginBottom marginSize=\"large\">\n        <GridBlock size=\"oneThird\">\n          <Column>{'size=\"oneThird\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"twoThirds\">\n          <Column>{'size=\"twoThirds\"'}</Column>\n        </GridBlock>\n      </GridWrapper>\n      <GridWrapper marginBottom marginSize=\"large\">\n        <GridBlock size=\"oneQuarter\">\n          <Column>{'size=\"oneQuarter\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"threeQuarters\">\n          <Column>{'size=\"threeQuarters\"'}</Column>\n        </GridBlock>\n      </GridWrapper>\n    </>\n  );\n};\n\nexport const ThreeColumns = () => {\n  return (\n    <>\n      <GridWrapper marginBottom marginSize=\"large\">\n        <GridBlock size=\"half\">\n          <Column>{'size=\"half\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"oneQuarter\">\n          <Column>{'size=\"oneQuarter\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"oneQuarter\">\n          <Column>{'size=\"oneQuarter\"'}</Column>\n        </GridBlock>\n      </GridWrapper>\n      <GridWrapper marginBottom marginSize=\"large\">\n        <GridBlock size=\"oneThird\">\n          <Column>{'size=\"oneThird\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"oneThird\">\n          <Column>{'size=\"oneThird\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"oneThird\">\n          <Column>{'size=\"oneThird\"'}</Column>\n        </GridBlock>\n      </GridWrapper>\n    </>\n  );\n};\n\nexport const FourColumns = () => {\n  return (\n    <>\n      <GridWrapper marginBottom marginSize=\"large\">\n        <GridBlock size=\"oneQuarter\">\n          <Column>{'size=\"oneQuarter\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"oneQuarter\">\n          <Column>{'size=\"oneQuarter\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"oneQuarter\">\n          <Column>{'size=\"oneQuarter\"'}</Column>\n        </GridBlock>\n        <GridBlock size=\"oneQuarter\">\n          <Column>{'size=\"oneQuarter\"'}</Column>\n        </GridBlock>\n      </GridWrapper>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/icons/Avatar.stories.tsx",
    "content": "import * as React from 'react';\nimport Avatar from './Avatar';\n\nimport { commonKnobs } from '../../../stories';\nimport { select, text } from '@storybook/addon-knobs';\nimport dsSquare from './storyAssets/ds_square.jpeg';\nimport dsLandscape from './storyAssets/ds_landscape.jpeg';\nimport dsPortlait from './storyAssets/ds_portlait.jpeg';\n\nexport default {\n  component: Avatar,\n};\n\nexport const AvatarComponent = () => (\n  <Avatar\n    imageUrl={text('imageUrl', dsSquare, 'Avatar')}\n    size={\n      select(\n        'size',\n        {\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n          xLarge: 'xLarge',\n          default: '',\n        },\n        '',\n        'Avatar'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  />\n);\n\nexport const ImageCropping = () => (\n  <>\n    <Avatar imageUrl={dsSquare} />\n    <Avatar imageUrl={dsPortlait} />\n    <Avatar imageUrl={dsLandscape} />\n    <Avatar imageUrl=\"\" />\n  </>\n);\n\nexport const Size = () => (\n  <>\n    <div>\n      <Avatar imageUrl={dsSquare} size=\"small\" />\n      <Avatar imageUrl={dsSquare} size=\"medium\" />\n      <Avatar imageUrl={dsSquare} size=\"large\" />\n      <Avatar imageUrl={dsSquare} size=\"xLarge\" />\n    </div>\n    <div>\n      <Avatar size=\"small\" />\n      <Avatar size=\"medium\" />\n      <Avatar size=\"large\" />\n      <Avatar size=\"xLarge\" />\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/icons/Avatar.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  imageUrl?: string;\n  size?: 'small' | 'medium' | 'large' | 'xLarge';\n  /**\n   * 画像のprefetchでのチェックを有効にします、falseの場合は描画の際に一度だけ画像のfetchが行われます(キャッシュの効かない画像に対して有効です)\n   */\n  prefetch?: boolean;\n} & CommonProps;\n\n/**\n * 人のアバターを表現するためのコンポーネントです。\n *\n * - imageUrlが指定されない場合または画像の読み込みに失敗した場合はMdPersonアイコンが表示されます、prefetchがfalseの場合は画像の読み込みチェックを行わないため、画像が取得できなかった場合にMdPersonアイコンは出ません\n * - サイズは `small` (1.5rem = 24px), `medium` (2rem = 32px), `large` (3rem = 48px), XLarge (6rem = 96px) が用意されています\n */\nconst Avatar: React.FC<Props> = (props: Props) => {\n  const { imageUrl, size, prefetch = true } = props;\n\n  const classModifiers = {\n    small: size === 'small',\n    large: size === 'large',\n    xLarge: size === 'xLarge',\n  };\n\n  const [imageLoaded, setImageLoaded] = React.useState(false);\n\n  // 画像の読み込みに失敗してなんも出なくなるとマズいので、img要素を作って読み込み、imageLoadedフラグが立つのを待ってから表示する\n  React.useEffect(() => {\n    if (!prefetch) {\n      return;\n    }\n    setImageLoaded(false);\n    if (imageUrl) {\n      const img = document.createElement('img');\n      img.src = imageUrl;\n      img.addEventListener('load', () => setImageLoaded(true));\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [imageUrl]);\n\n  return (\n    <span\n      {...commonProps(props, 'vb-avatar', classModifiers)}\n      role=\"img\"\n      aria-label=\"アバター画像\"\n    >\n      <svg viewBox=\"0 0 96 96\" className=\"vb-avatar__image\">\n        <g clipPath=\"path('M96,48c0-7-.38-14.11-2.48-20.83A35.9,35.9,0,0,0,73.1,4.05C66.15,1,58.49.11,51,0A119.93,119.93,0,0,0,37.56.43C22.25,1.87,9.31,9.35,3.56,24.1.59,31.58,0,39.74,0,47.72s.51,16.43,3.51,24c5.78,15,18.91,22.47,34.43,23.84A124.8,124.8,0,0,0,51.48,96c7.3-.12,14.73-1.07,21.49-4A35.89,35.89,0,0,0,93.48,69C95.61,62.21,96,55.05,96,48Z')\">\n          <rect\n            x={0}\n            y={0}\n            width={96}\n            height={96}\n            className=\"vb-avatar__background\"\n          />\n\n          {imageUrl && (imageLoaded || !prefetch) ? (\n            <image\n              href={imageUrl}\n              width=\"100%\"\n              height=\"100%\"\n              x={0}\n              y={0}\n              preserveAspectRatio=\"xMidYMid slice\"\n            />\n          ) : (\n            <g className=\"vb-avatar__placeholderIcon\">\n              <path d=\"M80.85,67.34c-3.38-3.41-10.06-9.45-23.26-11A69.79,69.79,0,0,0,48,55.66h0a69.79,69.79,0,0,0-9.59.64c-13.2,1.59-19.88,7.63-23.26,11-6,6.07-6.9,11.27-6.9,18.43s7,16.17,7,16.17h65.5s7-9,7-16.17S86.87,73.41,80.85,67.34Z\" />\n              <circle cx=\"48\" cy=\"33\" r=\"15\" />\n            </g>\n          )}\n        </g>\n      </svg>\n    </span>\n  );\n};\n\nexport default Avatar;\n"
  },
  {
    "path": "src/lv1/icons/MaterialIcon.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { MdInfo } from 'react-icons/md';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport MaterialIcon from './MaterialIcon';\nimport MarginBase from '../bases/MarginBase';\nimport { Text } from '../typography/Text';\n\nexport default {\n  component: MaterialIcon,\n};\n\nexport const MaterialIconComponent = () => (\n  <MaterialIcon\n    label={text(\n      'Label',\n      'このテキストはスクリンリーダー用(aria-label)です',\n      'MaterialIcon'\n    )}\n    small={boolean('Small', false, 'MaterialIcon')}\n    error={boolean('Error', false, 'MaterialIcon')}\n    notice={boolean('Notice', false, 'MaterialIcon')}\n    success={boolean('Success', false, 'MaterialIcon')}\n    IconComponent={MdInfo}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <MaterialIcon marginRight IconComponent={MdInfo} />\n    <MaterialIcon success marginRight IconComponent={MdInfo} />\n    <MaterialIcon notice marginRight IconComponent={MdInfo} />\n    <MaterialIcon error marginRight IconComponent={MdInfo} />\n  </>\n);\n\nexport const Colors = () => (\n  <>\n    <MarginBase mb={1}>\n      <MaterialIcon color=\"P1\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P3\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P6\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P8\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P9\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"P10\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase mb={1}>\n      <MaterialIcon color=\"S1\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S3\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S6\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S8\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S9\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"S10\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase mb={1}>\n      <MaterialIcon color=\"white\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GY1\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase mb={1}>\n      <MaterialIcon color=\"RE2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"OR2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YE2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YG2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GR2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"BG2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"PU2\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GY2\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase mb={1}>\n      <MaterialIcon color=\"RE4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"OR4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YE4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YG4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GR4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"BG4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"PU4\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GY4\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase mb={1}>\n      <MaterialIcon color=\"RE5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"OR5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YE5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YG5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GR5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"BG5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"PU5\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GY5\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase mb={0.5}>\n      <MaterialIcon color=\"RE7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"OR7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YE7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YG7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GR7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"BG7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"PU7\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GY7\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase mb={0.5}>\n      <MaterialIcon color=\"RE10\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"OR10\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YE10\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"YG10\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GR10\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"BG10\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"PU10\" mr={1} IconComponent={MdInfo} />\n      <MaterialIcon color=\"GY10\" mr={1} IconComponent={MdInfo} />\n    </MarginBase>\n    <MarginBase>\n      <Text color=\"P5\">\n        <MaterialIcon color=\"inherit\" IconComponent={MdInfo} />\n      </Text>\n    </MarginBase>\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <MaterialIcon small marginRight IconComponent={MdInfo} />\n    <MaterialIcon small success marginRight IconComponent={MdInfo} />\n    <MaterialIcon small notice marginRight IconComponent={MdInfo} />\n    <MaterialIcon small error marginRight IconComponent={MdInfo} />\n  </>\n);\n\nexport const PointerEvent = () => (\n  <>\n    <MaterialIcon IconComponent={MdInfo} />\n    <MaterialIcon pointerEvents=\"none\" IconComponent={MdInfo} />\n  </>\n);\n"
  },
  {
    "path": "src/lv1/icons/MaterialIcon.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * aria-label を設定します\n   */\n  label?: string;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * error color にします\n   */\n  error?: boolean;\n  /**\n   * notice color にします\n   */\n  notice?: boolean;\n  /**\n   * success color にします\n   */\n  success?: boolean;\n  /**\n   * SVG のアイコンに対して pointer-events の指定を与えます\n   */\n  pointerEvents?: 'auto' | 'none';\n  /**\n   * icon component を指定します\n   */\n  IconComponent: React.ElementType;\n  /**\n   * アイコンの色を指定します。 `success` `error` `notice` を表現するために使用する場合はこちらのpropではなく、`success` `error` `notice` propを使用してください。\n   */\n  color?:\n    | 'inherit'\n    | 'white'\n    | 'P1'\n    | 'P2'\n    | 'P3'\n    | 'P4'\n    | 'P5'\n    | 'P6'\n    | 'P7'\n    | 'P8'\n    | 'P9'\n    | 'P10'\n    | 'S1'\n    | 'S2'\n    | 'S3'\n    | 'S4'\n    | 'S5'\n    | 'S6'\n    | 'S7'\n    | 'S8'\n    | 'S9'\n    | 'S10'\n    | 'RE2'\n    | 'RE4'\n    | 'RE5'\n    | 'RE7'\n    | 'RE10'\n    | 'OR2'\n    | 'OR4'\n    | 'OR5'\n    | 'OR7'\n    | 'OR10'\n    | 'YE2'\n    | 'YE4'\n    | 'YE5'\n    | 'YE7'\n    | 'YE10'\n    | 'YG2'\n    | 'YG4'\n    | 'YG5'\n    | 'YG7'\n    | 'YG10'\n    | 'GR2'\n    | 'GR4'\n    | 'GR5'\n    | 'GR7'\n    | 'GR10'\n    | 'BG2'\n    | 'BG4'\n    | 'BG5'\n    | 'BG7'\n    | 'BG10'\n    | 'PU2'\n    | 'PU4'\n    | 'PU5'\n    | 'PU7'\n    | 'PU10'\n    | 'GY1'\n    | 'GY2'\n    | 'GY4'\n    | 'GY5'\n    | 'GY7'\n    | 'GY10';\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * Material Design Iconsを表示するためのコンポーネントです。\n *\n * - [react-icons](https://react-icons.github.io/react-icons/) の Material Design iconsのアイコンを使う想定です\n *   - UIの統一感を損なわないよう、Material Design icons 以外を使用しないでください。\n * - freeeのブランドカラーを使用することができます\n *   - `success` `error` `notice` の状態を表現する場合は、`color` propを使用せず、 `success` `error` `notice` のpropを使用してください。\n * - アイコンを単体で使用する（近くにアイコンの内容を説明するテキストがない）場合には、\n *   - 代替テキストを `label` propに指定してください\n *   - 背景色と 3:1 以上のコントラスト比をもつ色を使用してください\n */\nconst MaterialIcon: React.FC<Props> = (props: Props) => {\n  const {\n    label,\n    small,\n    error,\n    notice,\n    success,\n    color,\n    pointerEvents,\n    IconComponent,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const colorClass = success\n    ? 'P7'\n    : notice\n    ? 'YE7'\n    : error\n    ? 'RE5'\n    : color === 'inherit'\n    ? 'Inherit'\n    : color === 'white'\n    ? 'White'\n    : color;\n\n  const classModifier = {\n    small,\n    error,\n    notice,\n    success,\n    pointerEventsNone: pointerEvents === 'none',\n    [`color${colorClass}`]: !!colorClass,\n  };\n\n  return (\n    <IconComponent\n      focusable={false}\n      role={label ? 'img' : 'presentation'}\n      aria-label={label}\n      {...commonProps(props, 'vb-materialIcon', classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginTop,\n        marginSize,\n      })}\n    />\n  );\n};\n\nexport default MaterialIcon;\n"
  },
  {
    "path": "src/lv1/icons/RequiredIcon.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { RequiredIcon } from './RequiredIcon';\nimport { commonKnobs } from '../../../stories';\nimport { Text, Paragraph, Note } from '..';\n\nexport default {\n  component: RequiredIcon,\n};\n\nexport const RequiredIconComponent = () => <RequiredIcon {...commonKnobs()} />;\nexport const VerticalAlignment = () => (\n  <>\n    <Note mb={1.5}>\n      日本語の文字と並べたときの位置が自然になるように調整してあります。\n    </Note>\n    <Paragraph mb={1}>\n      <Text size={0.75}>\n        FontSize=0.75(12px) 日本語の文字\n        <RequiredIcon ml={0.5} />\n      </Text>\n    </Paragraph>\n    <Paragraph mb={1}>\n      <Text size={0.875}>\n        FontSize=0.875(14px) 日本語の文字\n        <RequiredIcon ml={0.5} />\n      </Text>\n    </Paragraph>\n    <Paragraph mb={1}>\n      <Text size={1}>\n        FontSize=1(16px) 日本語の文字\n        <RequiredIcon ml={0.5} />\n      </Text>\n    </Paragraph>\n    <Paragraph mb={1}>\n      <Text size={1.5}>\n        FontSize=1.5(24px) 日本語の文字\n        <RequiredIcon ml={0.5} />\n      </Text>\n    </Paragraph>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/icons/RequiredIcon.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { useLang } from '../../utilities/VibesProvider';\n\ntype Props = CommonProps;\n/**\n * フォームのフィールドが必須項目であることを表現するマークを提供するコンポーネントです。\n *\n * このコンポーネントは、そのフィールドの入力を行わないとフォームを送信できないことを予期できるようになることを目的としています。\n * 下に示す目安を参考に、それぞれのフィールドについて必須マークが必要かどうかを判断してください。\n *\n * ## 必須マークを使用する目安\n *\n * - ユーザーが「未入力」または「未選択」のまま送信できないフィールドには、必須マークを付ける\n *   - 空欄状態で送信するとエラーとなるテキストフィールド\n *   - デフォルトで0が表示されているが、0のまま送信しようとするとエラーとなる数値フィールド\n *   - 未選択状態で送信するとエラーとなるラジオボタンやセレクトボックス\n *   - 未チェック状態で送信するとエラーとなるチェックボックス\n * - 「未入力」や「未選択」の状態にすることができないフィールドには、必須マークを付けない\n *   - 「未選択」の選択肢が存在しないセレクトボックス\n *   - デフォルトでどれか一つの選択肢が選択状態になっているラジオボタン\n *\n * 必須マークが目立ちすぎている場合など、フォームの突破率やユーザーの感情面へのネガティブな影響がみられる場合には、「必須フィールドであること」の表示方式について個別に工夫をしても問題ありません。\n * ただし、必須マークを表示する目的は必須項目を事前に明示してエラーとなりづらくなることです。表示方式の変更は突破率やエモーショナルな部分だけでなく、フォームのエラー率やその内訳も計測しながら進めてください。\n *\n */\nexport const RequiredIcon: React.VFC<Props> = ({ ...props }: Props) => (\n  <span {...commonProps(props, 'vb-requiredIcon')}>\n    <span className=\"vb-requiredIcon__content\">\n      {useLang() === 'en' ? 'Required' : '必須'}\n    </span>\n  </span>\n);\n"
  },
  {
    "path": "src/lv1/icons/StatusIcon.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport StatusIcon from './StatusIcon';\n\nexport default {\n  component: StatusIcon,\n};\n\nexport const StatusIconComponent = () => (\n  <StatusIcon\n    type={\n      select(\n        'Type',\n        [\n          '',\n          'done',\n          'success',\n          'progress',\n          'required',\n          'disabled',\n          'emphasis',\n          'warning',\n          'error',\n        ],\n        '',\n        'StatusIcon'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text('Children', 'ラベル', 'StatusIcon')}\n  </StatusIcon>\n);\n\nexport const Samples = () => (\n  <div>\n    <StatusIcon type=\"done\" marginRight marginBottom>\n      done\n    </StatusIcon>\n    <StatusIcon type=\"success\" marginRight marginBottom>\n      success\n    </StatusIcon>\n    <StatusIcon type=\"progress\" marginRight marginBottom>\n      progress\n    </StatusIcon>\n    <StatusIcon type=\"required\" marginRight marginBottom>\n      required\n    </StatusIcon>\n    <StatusIcon type=\"disabled\" marginRight marginBottom>\n      disabled\n    </StatusIcon>\n    <StatusIcon type=\"emphasis\" marginRight marginBottom>\n      emphasis\n    </StatusIcon>\n    <StatusIcon type=\"warning\" marginRight marginBottom>\n      warning\n    </StatusIcon>\n    <StatusIcon type=\"error\" marginRight marginBottom>\n      error\n    </StatusIcon>\n  </div>\n);\n"
  },
  {
    "path": "src/lv1/icons/StatusIcon.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\nexport type StatusType =\n  | 'done'\n  | 'success'\n  | 'progress'\n  | 'required'\n  | 'disabled'\n  | 'emphasis'\n  | 'warning'\n  | 'error';\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * color type を指定します\n   */\n  type?: StatusType;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * オブジェクトのステータスを表示するためのコンポーネントです。\n *\n * ## 用途\n * - ユーザーの操作やシステムによる処理の進捗などによって変わっていくステータス表示に使用することを想定しています。\n *  - そのオブジェクトの属性（例：取引における収入か支出）を示す場合は別の方法を検討してください。\n *  - たとえば、あるフォームが入力必須であることを示す場合は `RequiredIcon` を使用してください。\n * - ボタンとして使うことは想定していません。\n *  - 「ステータスを変更するためのボタン」が必要な場合は、`StatusSelector` コンポーネントを使用してください。\n *\n * ## type の使い分け\n * - filled 系か outlined 系かの使い分け\n *   - ユーザーが何かしらの操作をしなければならないステータスの場合は、他のステータスと比べてユーザーの注意を引けるよう filled 系を使用してください。\n *     - 例：ワークフローが自分の承認待ちである場合、何かしらの修正を必要としている場合\n *   - そうではない場合は基本的に outlined 系を使用してください。\n * - 色の使い分け\n *   - type 名が意味をもった名称になっていますが、それにとらわれなくてOKです（type名変更したほうがいいかもしれない）。\n *   - そのオブジェクトのステータスとして異常であるためユーザーの注意を喚起しておきたい場合は、赤系の色（`error`, `required`）を使ってください。\n *   - ユーザーがそのオブジェクトのステータスに注意を払う必要がなくなった場合は、グレー系の色（`done`, `disabled`）を使ってください。\n *\n */\nconst StatusIcon: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    type,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const statusIconBaseClass = 'vb-statusIcon';\n\n  const classModifier = [\n    'done',\n    'success',\n    'progress',\n    'required',\n    'disabled',\n    'emphasis',\n    'warning',\n    'error',\n  ].reduce((acm, mod) => ({ ...acm, [mod]: type === mod }), {});\n\n  return (\n    <span\n      {...commonProps(props, statusIconBaseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginTop,\n        marginSize,\n      })}\n    >\n      {children}\n    </span>\n  );\n};\nexport default StatusIcon;\n"
  },
  {
    "path": "src/lv1/images/AlertSwallow.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { Vibes2021BackgroundColor } from '../../constants';\nimport AlertSwallow from './AlertSwallow';\n\nexport default {\n  component: AlertSwallow,\n};\n\nexport const AlertSwallowComponent = () => <AlertSwallow {...commonKnobs()} />;\n\nexport const FitWidth = () => (\n  <>\n    <div\n      style={{\n        width: '10rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <AlertSwallow size=\"fit-width\" />\n    </div>\n    <div\n      style={{\n        width: '20rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <AlertSwallow size=\"fit-width\" />\n    </div>\n    <div\n      style={{\n        width: '30rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <AlertSwallow size=\"fit-width\" />\n    </div>\n  </>\n);\n\nexport const FitHeight = () => (\n  <>\n    <div\n      style={{\n        height: '10rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <AlertSwallow size=\"fit-height\" />\n    </div>\n    <div\n      style={{\n        height: '20rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <AlertSwallow size=\"fit-height\" />\n    </div>\n    <div\n      style={{\n        height: '30rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <AlertSwallow size=\"fit-height\" />\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/images/AlertSwallow.tsx",
    "content": "import * as React from 'react';\nimport { SwallowProps, SwallowContainer } from './SwallowContainer';\n\ntype Props = SwallowProps;\n\nconst AlertSwallow: React.FC<Props> = (props: Props) => {\n  return (\n    <SwallowContainer\n      {...props}\n      mediumHeightRem={12}\n      renderSVG={({ className, styles }) => (\n        <svg\n          className={className}\n          viewBox=\"0 0 213 192\"\n          role=\"presentation\"\n          aria-hidden=\"true\"\n          style={styles}\n        >\n          <path\n            d=\"M201.4102,0.999225148 C193.5062,37.6782251 169.4242,67.2172251 137.7622,83.3792251 C150.9302,86.7762251 164.7352,88.5832251 178.9632,88.5832251 C190.2102,88.5832251 201.1922,87.4542251 211.8052,85.3032251 L211.3412,86.3252251 C210.7022,87.7322251 209.5412,88.8452251 208.0962,89.3932251 C200.6752,92.2032251 192.9972,94.4922251 185.1072,96.2152251 C183.4092,96.5862251 181.8142,97.3612251 180.5552,98.5622251 C178.8832,100.155225 177.1242,101.657225 175.2862,103.062225 L205.9782,106.636225 C208.0662,106.879225 209.7942,108.372225 210.3392,110.403225 L165.4052,110.403225 C163.8272,110.403225 162.2792,110.753225 160.8182,111.350225 C153.9342,114.158225 146.4452,115.789225 138.6012,115.991225 C155.9162,136.052225 165.4542,162.831225 163.1142,190.999225 L92.0062,98.5282251 C89.4932,95.2602251 85.9092,92.9812251 81.8832,92.0942251 L63.1572,87.9632251 L72.5592,85.6782251 L72.5552,85.6742251 C77.7372,79.4772251 85.5242,75.5352251 94.2312,75.5352251 C95.5892,75.5352251 96.9252,75.6302251 98.2312,75.8162251 C101.4052,76.2662251 104.6262,75.4972251 107.1662,73.5412251 L201.4102,0.999225148 Z\"\n            fill=\"#FFFFFF\"\n          ></path>\n          <path\n            d=\"M201.4102,0.999225148 C193.5062,37.6782251 169.4242,67.2172251 137.7622,83.3792251 C150.9302,86.7762251 164.7352,88.5832251 178.9632,88.5832251 C190.2102,88.5832251 201.1922,87.4542251 211.8052,85.3032251 L211.3412,86.3252251 C210.7022,87.7322251 209.5412,88.8452251 208.0962,89.3932251 C200.6752,92.2032251 192.9972,94.4922251 185.1072,96.2152251 C183.4092,96.5862251 181.8142,97.3612251 180.5552,98.5622251 C178.8832,100.155225 177.1242,101.657225 175.2862,103.062225 L205.9782,106.636225 C208.0662,106.879225 209.7942,108.372225 210.3392,110.403225 L165.4052,110.403225 C163.8272,110.403225 162.2792,110.753225 160.8182,111.350225 C153.9342,114.158225 146.4452,115.789225 138.6012,115.991225 C155.9162,136.052225 165.4542,162.831225 163.1142,190.999225 L92.0062,98.5282251 C89.4932,95.2602251 85.9092,92.9812251 81.8832,92.0942251 L63.1572,87.9632251 L72.5592,85.6782251 L72.5552,85.6742251 C77.7372,79.4772251 85.5242,75.5352251 94.2312,75.5352251 C95.5892,75.5352251 96.9252,75.6302251 98.2312,75.8162251 C101.4052,76.2662251 104.6262,75.4972251 107.1662,73.5412251 L201.4102,0.999225148 Z\"\n            fill=\"#AAC8FF\"\n          ></path>\n          <path\n            d=\"M163.1143,191.999225 C162.8093,191.999225 162.5143,191.859225 162.3223,191.608225 L91.2133,99.1382251 C88.8473,96.0612251 85.4573,93.9062251 81.6683,93.0702251 L62.9423,88.9402251 C62.4873,88.8402251 62.1623,88.4392251 62.1572415,87.9742251 C62.1523,87.5092251 62.4683,87.1022251 62.9213,86.9922251 L71.9953,84.7862251 C77.5693,78.2672251 85.6553,74.5352251 94.2313,74.5352251 C95.6183,74.5352251 97.0113,74.6332251 98.3723,74.8262251 C98.9063,74.9022251 99.4523,74.9402251 99.9933,74.9402251 C102.4233,74.9402251 104.6933,74.1832251 106.5563,72.7492251 L141.5133,45.8412251 C141.9503,45.5052251 142.5783,45.5862251 142.9163,46.0242251 C143.2533,46.4612251 143.1713,47.0892251 142.7333,47.4262251 L107.7763,74.3332251 C105.5593,76.0392251 102.8683,76.9402251 99.9933,76.9402251 C99.3583,76.9402251 98.7183,76.8952251 98.0913,76.8062251 C96.8233,76.6262251 95.5243,76.5352251 94.2313,76.5352251 C86.1713,76.5352251 78.5753,80.0732251 73.3793,86.2472251 C73.2423,86.4452251 73.0373,86.5912251 72.7963,86.6502251 L67.5863,87.9162251 L82.0983,91.1172251 C86.3463,92.0542251 90.1463,94.4702251 92.7993,97.9192251 L162.3013,188.301225 C162.4093,186.391225 162.4643,184.474225 162.4643,182.574225 C162.4643,158.453225 153.7203,135.039225 137.8443,116.645225 C137.5913,116.352225 137.5303,115.940225 137.6863,115.587225 C137.8433,115.233225 138.1893,115.002225 138.5753,114.991225 C146.1333,114.797225 153.4893,113.260225 160.4403,110.424225 C162.0973,109.747225 163.7683,109.403225 165.4053,109.403225 L208.7993,109.403225 C208.1383,108.430225 207.0823,107.771225 205.8633,107.629225 L175.1713,104.055225 C174.7653,104.008225 174.4293,103.720225 174.3223,103.326225 C174.2143,102.934225 174.3553,102.515225 174.6783,102.267225 C176.4823,100.889225 178.2263,99.3982251 179.8643,97.8382251 C181.2023,96.5632251 182.9413,95.6652251 184.8933,95.2382251 C192.6413,93.5462251 200.3283,91.2652251 207.7413,88.4572251 C208.6483,88.1142251 209.4383,87.4842251 209.9963,86.6772251 C199.8243,88.6062251 189.3943,89.5832251 178.9633,89.5832251 C164.9253,89.5832251 150.9793,87.8222251 137.5123,84.3482251 C137.1103,84.2442251 136.8143,83.9022251 136.7683,83.4892251 C136.7223,83.0762251 136.9373,82.6782251 137.3073,82.4892251 C168.9793,66.3212251 191.6363,37.6312251 199.8193,3.48622515 L168.2923,27.7532251 C167.8523,28.0902251 167.2253,28.0082251 166.8893,27.5712251 C166.5523,27.1332251 166.6343,26.5052251 167.0713,26.1682251 L200.8003,0.207225148 C201.1333,-0.0477748521 201.5893,-0.0697748521 201.9443,0.154225148 C202.2993,0.378225148 202.4763,0.799225148 202.3873,1.20922515 C194.8313,36.2772251 172.3613,65.9622251 140.5553,83.0452251 C153.0683,86.0582251 165.9753,87.5832251 178.9633,87.5832251 C189.9493,87.5832251 200.9313,86.4862251 211.6063,84.3232251 C211.9723,84.2452251 212.3533,84.3862251 212.5873,84.6812251 C212.8213,84.9752251 212.8703,85.3742251 212.7153,85.7172251 L212.2513,86.7382251 C211.5033,88.3882251 210.1173,89.6962251 208.4503,90.3282251 C200.9453,93.1702251 193.1633,95.4792251 185.3203,97.1912251 C183.7253,97.5402251 182.3163,98.2652251 181.2443,99.2852251 C180.1363,100.342225 178.9813,101.366225 177.7933,102.347225 L206.0933,105.643225 C208.6043,105.935225 210.6493,107.702225 211.3043,110.145225 C211.3853,110.444225 211.3213,110.766225 211.1323,111.012225 C210.9433,111.259225 210.6493,111.403225 210.3393,111.403225 L165.4053,111.403225 C164.0293,111.403225 162.6133,111.696225 161.1963,112.275225 C154.6523,114.945225 147.7623,116.500225 140.6843,116.905225 C156.0343,135.417225 164.4643,158.654225 164.4643,182.574225 C164.4643,185.397225 164.3453,188.260225 164.1113,191.082225 C164.0763,191.493225 163.7933,191.842225 163.3963,191.958225 C163.3033,191.985225 163.2083,191.999225 163.1143,191.999225\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M95.0142,94.6672251 C105.6442,105.602225 120.5072,112.394225 136.9552,112.394225 C151.7412,112.394225 165.2442,106.905225 175.5452,97.8552251 C155.9612,98.0492251 134.5672,93.5932251 121.6832,92.9062251 C112.5652,92.3072251 103.6152,92.9382251 95.0142,94.6672251\"\n            fill=\"#FFFFFF\"\n          ></path>\n          <path\n            d=\"M136.9556,113.393725 C120.7496,113.393725 105.5996,106.990725 94.2976,95.3647251 C94.0416,95.1017251 93.9506,94.7207251 94.0596,94.3717251 C94.1676,94.0217251 94.4576,93.7587251 94.8166,93.6867251 C102.3826,92.1647251 110.1416,91.4977251 117.9176,91.7267251 C118.4696,91.7437251 118.9046,92.2037251 118.8886,92.7557251 C118.8726,93.3077251 118.4146,93.7297251 117.8596,93.7267251 C110.8636,93.5207251 103.8936,94.0537251 97.0596,95.2937251 C107.8266,105.691725 121.9206,111.393725 136.9556,111.393725 C150.0166,111.393725 162.6386,106.958725 172.7956,98.8527251 C161.3406,98.7267251 149.5626,97.1867251 139.1216,95.8217251 C135.5696,95.3567251 132.2146,94.9177251 129.1236,94.5697251 C128.5746,94.5067251 128.1796,94.0117251 128.2416,93.4627251 C128.3036,92.9147251 128.7976,92.5247251 129.3476,92.5817251 C132.4566,92.9317251 135.8196,93.3727251 139.3806,93.8377251 C150.2166,95.2547251 162.4986,96.8617251 174.2896,96.8617251 C174.7066,96.8617251 175.1226,96.8587251 175.5356,96.8547251 L175.5446,96.8547251 C175.9586,96.8547251 176.3306,97.1107251 176.4786,97.4977251 C176.6276,97.8877251 176.5186,98.3307251 176.2056,98.6057251 C165.3526,108.141725 151.4136,113.393725 136.9556,113.393725\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M91.9995,82.6247251 C89.8255,82.6247251 88.0625,84.3887251 88.0625,86.5647251 C88.0625,88.7407251 89.8255,90.5047251 91.9995,90.5047251 C94.1745,90.5047251 95.9375,88.7407251 95.9375,86.5647251 C95.9375,84.3887251 94.1745,82.6247251 91.9995,82.6247251\"\n            fill=\"#FFFFFF\"\n          ></path>\n          <path\n            d=\"M91.9995,83.6247251 C90.3795,83.6247251 89.0625,84.9437251 89.0625,86.5647251 C89.0625,88.1857251 90.3795,89.5047251 91.9995,89.5047251 C93.6195,89.5047251 94.9375,88.1857251 94.9375,86.5647251 C94.9375,84.9437251 93.6195,83.6247251 91.9995,83.6247251 M91.9995,91.5047251 C89.2775,91.5047251 87.0625,89.2887251 87.0625,86.5647251 C87.0625,83.8407251 89.2775,81.6247251 91.9995,81.6247251 C94.7225,81.6247251 96.9365,83.8407251 96.9365,86.5647251 C96.9365,89.2887251 94.7225,91.5047251 91.9995,91.5047251\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M33.1309,9.19552515 C50.8769,9.19552515 65.2619,23.5915251 65.2619,41.3495251 C65.2619,48.8095251 62.7159,55.6705251 58.4559,61.1265251 L62.3429,73.4285251 L51.3819,67.8085251 C46.1979,71.3965251 39.9119,73.5035251 33.1309,73.5035251 C15.3849,73.5035251 0.9999,59.1075251 0.9999,41.3495251 C0.9999,23.5915251 15.3849,9.19552515 33.1309,9.19552515\"\n            fill=\"#FFD278\"\n          ></path>\n          <path\n            d=\"M33.1309,74.5036251 C21.3929,74.5036251 10.4209,68.1936251 4.4969,58.0376251 C4.2189,57.5606251 4.3799,56.9486251 4.8569,56.6706251 C5.3349,56.3916251 5.9469,56.5536251 6.2249,57.0296251 C11.7909,66.5746251 22.1009,72.5036251 33.1309,72.5036251 C39.4829,72.5036251 45.5969,70.5956251 50.8129,66.9856251 C51.1159,66.7766251 51.5119,66.7516251 51.8379,66.9186251 L60.6679,71.4456251 L57.5029,61.4276251 C57.4029,61.1136251 57.4649,60.7706251 57.6679,60.5106251 C61.9819,54.9856251 64.2619,48.3606251 64.2619,41.3496251 C64.2619,24.1706251 50.2969,10.1956251 33.1309,10.1956251 C15.9649,10.1956251 1.9999,24.1706251 1.9999,41.3496251 C1.9999,43.6076251 2.2419,45.8596251 2.7199,48.0436251 C2.8379,48.5826251 2.4969,49.1156251 1.9569,49.2336251 C1.4169,49.3506251 0.8839,49.0106251 0.7659,48.4706251 C0.2579,46.1466251 -0.0001,43.7506251 -0.0001,41.3496251 C-0.0001,23.0676251 14.8619,8.19562515 33.1309,8.19562515 C51.3999,8.19562515 66.2619,23.0676251 66.2619,41.3496251 C66.2619,48.6336251 63.9489,55.5276251 59.5669,61.3216251 L63.2969,73.1276251 C63.4189,73.5116251 63.2969,73.9316251 62.9889,74.1916251 C62.6799,74.4526251 62.2449,74.5026251 61.8869,74.3176251 L51.4529,68.9686251 C46.0119,72.5916251 39.6909,74.5036251 33.1309,74.5036251\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M35.6025,53.7726251 C35.6025,54.9836251 34.6225,55.9646251 33.4125,55.9646251 C32.2025,55.9646251 31.2215,54.9836251 31.2215,53.7726251 C31.2215,52.5616251 32.2025,51.5806251 33.4125,51.5806251 C34.6225,51.5806251 35.6025,52.5616251 35.6025,53.7726251\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M35.6025,46.5666251 C35.6025,47.7776251 34.6225,48.7586251 33.4125,48.7586251 C32.2025,48.7586251 31.2215,47.7776251 31.2215,46.5666251 C31.2215,45.3556251 32.2025,44.3746251 33.4125,44.3746251 C34.6225,44.3746251 35.6025,45.3556251 35.6025,46.5666251\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M36.333,29.6574251 C36.333,31.2714251 35.025,32.5804251 33.412,32.5804251 C31.799,32.5804251 30.491,31.2714251 30.491,29.6574251 C30.491,28.0424251 31.799,26.7344251 33.412,26.7344251 C35.025,26.7344251 36.333,28.0424251 36.333,29.6574251\"\n            fill=\"#2864F0\"\n          ></path>\n          <polygon\n            fill=\"#2864F0\"\n            points=\"35.6025 46.5666251 31.2215 46.5666251 30.4915 29.7586251 36.3325 29.7586251\"\n          ></polygon>\n        </svg>\n      )}\n    />\n  );\n};\n\nexport default AlertSwallow;\n"
  },
  {
    "path": "src/lv1/images/AppStoreBadge.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport AppStoreBadge from './AppStoreBadge';\n\nexport default {\n  component: AppStoreBadge,\n};\n\nexport const AppStoreBadgeComponent = () => (\n  <AppStoreBadge {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/AppStoreBadge.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport useUniqueId from '../../hooks/useUniqueId';\n\ntype Props = MarginClassProps & CommonProps;\n\nconst AppStoreBadge: React.FC<Props> = (props: Props) => {\n  const { marginTop, marginLeft, marginRight, marginBottom, marginSize } =\n    props;\n\n  const labelId = useUniqueId('vb-storeBadge--appStore');\n\n  return (\n    <figure\n      aria-labelledby={labelId}\n      {...commonProps(\n        props,\n        'vb-storeBadge',\n        { appStore: true },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <svg className=\"vb-storeBadge__svg\" viewBox=\"0 0 109 40\" role=\"img\">\n        <title id={labelId}>AppStoreからダウンロード</title>\n        <defs>\n          <polygon\n            id=\"vb-badge-appstore1\"\n            points=\"0 0 108.8508 0 108.8508 40 0 40\"\n          />\n          <polygon\n            id=\"vb-badge-appstore2\"\n            points=\"0 40 108.852 40 108.852 0 0 0\"\n          />\n        </defs>\n        <g stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n          <g>\n            <g id=\"AppStore\">\n              <mask id=\"vb-badge-appstore-mask-2\" fill=\"white\">\n                <use xlinkHref=\"#vb-badge-appstore1\" />\n              </mask>\n              <g />\n              <path\n                d=\"M99.3218,0 L9.5348,0 C9.1678,0 8.8058,0 8.4398,0.002 C8.1338,0.004 7.8298,0.01 7.5208,0.015 C6.8558,0.031 6.1818,0.072 5.5168,0.191 C4.8478,0.309 4.2258,0.509 3.6158,0.818 C3.0178,1.125 2.4708,1.523 1.9978,1.997 C1.5188,2.471 1.1228,3.02 0.8198,3.618 C0.5088,4.227 0.3108,4.852 0.1948,5.521 C0.0738,6.184 0.0318,6.854 0.0148,7.523 C0.0058,7.83 0.0048,8.138 -0.0002,8.444 L-0.0002,9.536 L-0.0002,30.465 L-0.0002,31.559 C0.0048,31.869 0.0058,32.17 0.0148,32.48 C0.0318,33.15 0.0738,33.82 0.1948,34.482 C0.3108,35.152 0.5088,35.78 0.8198,36.387 C1.1228,36.982 1.5188,37.531 1.9978,38.001 C2.4708,38.479 3.0178,38.876 3.6158,39.18 C4.2258,39.492 4.8478,39.689 5.5168,39.811 C6.1818,39.93 6.8558,39.969 7.5208,39.987 C7.8298,39.994 8.1338,39.998 8.4398,39.998 C8.8058,40 9.1678,40 9.5348,40 L99.3218,40 C99.6818,40 100.0468,40 100.4058,39.998 C100.7118,39.998 101.0238,39.994 101.3288,39.987 C101.9988,39.969 102.6708,39.93 103.3288,39.811 C103.9988,39.689 104.6208,39.492 105.2368,39.18 C105.8338,38.876 106.3808,38.479 106.8538,38.001 C107.3298,37.531 107.7258,36.982 108.0348,36.387 C108.3418,35.78 108.5418,35.152 108.6538,34.482 C108.7778,33.82 108.8158,33.15 108.8408,32.48 C108.8428,32.17 108.8428,31.869 108.8428,31.559 C108.8508,31.195 108.8508,30.834 108.8508,30.465 L108.8508,9.536 C108.8508,9.17 108.8508,8.807 108.8428,8.444 C108.8428,8.138 108.8428,7.83 108.8408,7.523 C108.8158,6.854 108.7778,6.184 108.6538,5.521 C108.5418,4.852 108.3418,4.227 108.0348,3.618 C107.7258,3.02 107.3298,2.471 106.8538,1.997 C106.3808,1.523 105.8338,1.125 105.2368,0.818 C104.6208,0.509 103.9988,0.309 103.3288,0.191 C102.6708,0.072 101.9988,0.031 101.3288,0.015 C101.0238,0.01 100.7118,0.004 100.4058,0.002 C100.0468,0 99.6818,0 99.3218,0\"\n                fill=\"#B3B1B1\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M8.4448,39.125 C8.1398,39.125 7.8428,39.121 7.5408,39.114 C6.9818,39.099 6.3188,39.067 5.6718,38.951 C5.0608,38.841 4.5188,38.661 4.0148,38.403 C3.4928,38.139 3.0248,37.797 2.6178,37.387 C2.2038,36.98 1.8628,36.514 1.5968,35.99 C1.3378,35.485 1.1608,34.943 1.0538,34.333 C0.9318,33.66 0.9008,32.978 0.8878,32.458 C0.8818,32.247 0.8728,31.545 0.8728,31.545 L0.8728,8.444 C0.8728,8.444 0.8818,7.753 0.8878,7.55 C0.9008,7.026 0.9318,6.344 1.0528,5.678 C1.1598,5.064 1.3378,4.522 1.5968,4.016 C1.8618,3.491 2.2028,3.022 2.6118,2.618 C3.0258,2.204 3.4958,1.861 4.0138,1.595 C4.5278,1.334 5.0698,1.156 5.6678,1.051 C6.3408,0.931 7.0238,0.9 7.5428,0.887 L8.4448,0.875 L100.4008,0.875 L101.3138,0.888 C101.8268,0.9 102.5088,0.931 103.1728,1.05 C103.7748,1.156 104.3208,1.335 104.8428,1.598 C105.3568,1.861 105.8258,2.204 106.2348,2.614 C106.6448,3.02 106.9868,3.492 107.2578,4.018 C107.5158,4.529 107.6918,5.071 107.7948,5.667 C107.9098,6.298 107.9458,6.946 107.9668,7.554 C107.9698,7.837 107.9698,8.142 107.9698,8.444 C107.9788,8.819 107.9788,9.176 107.9788,9.536 L107.9788,30.465 C107.9788,30.828 107.9788,31.183 107.9698,31.54 C107.9698,31.865 107.9698,32.163 107.9658,32.47 C107.9458,33.059 107.9098,33.706 107.7958,34.323 C107.6918,34.937 107.5158,35.479 107.2558,35.993 C106.9868,36.513 106.6428,36.982 106.2408,37.379 C105.8268,37.797 105.3578,38.138 104.8408,38.401 C104.3218,38.665 103.7928,38.84 103.1728,38.951 C102.5328,39.067 101.8698,39.099 101.3028,39.114 C101.0108,39.121 100.7038,39.125 100.4058,39.125 L99.3218,39.127 L8.4448,39.125 Z\"\n                fill=\"#0A0A05\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M37.5357,15.229 L40.7467,15.229 L39.1637,10.566 L39.1197,10.566 L37.5357,15.229 Z M41.1677,16.555 L37.1157,16.555 L36.1427,19.428 L34.4267,19.428 L38.2647,8.798 L40.0477,8.798 L43.8847,19.428 L42.1397,19.428 L41.1677,16.555 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M50.5376,15.5532 C50.5376,13.9842 49.7266,12.9522 48.4896,12.9522 C47.2746,12.9522 46.4566,14.0062 46.4566,15.5532 C46.4566,17.1152 47.2746,18.1602 48.4896,18.1602 C49.7266,18.1602 50.5376,17.1362 50.5376,15.5532 M52.1726,15.5532 C52.1726,17.9612 50.8836,19.5092 48.9386,19.5092 C47.8346,19.5092 46.9576,19.0142 46.5006,18.1532 L46.4636,18.1532 L46.4636,21.9912 L44.8726,21.9912 L44.8726,11.6782 L46.4126,11.6782 L46.4126,12.9672 L46.4416,12.9672 C46.8846,12.1352 47.8276,11.5972 48.9096,11.5972 C50.8766,11.5972 52.1726,13.1522 52.1726,15.5532\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M59.0674,15.5532 C59.0674,13.9842 58.2564,12.9522 57.0194,12.9522 C55.8034,12.9522 54.9864,14.0062 54.9864,15.5532 C54.9864,17.1152 55.8034,18.1602 57.0194,18.1602 C58.2564,18.1602 59.0674,17.1362 59.0674,15.5532 M60.7024,15.5532 C60.7024,17.9612 59.4134,19.5092 57.4684,19.5092 C56.3634,19.5092 55.4874,19.0142 55.0294,18.1532 L54.9934,18.1532 L54.9934,21.9912 L53.4024,21.9912 L53.4024,11.6782 L54.9424,11.6782 L54.9424,12.9672 L54.9714,12.9672 C55.4134,12.1352 56.3564,11.5972 57.4394,11.5972 C59.4054,11.5972 60.7024,13.1522 60.7024,15.5532\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M66.3394,16.4658 C66.4564,17.5198 67.4814,18.2128 68.8804,18.2128 C70.2214,18.2128 71.1864,17.5198 71.1864,16.5698 C71.1864,15.7448 70.6044,15.2508 69.2264,14.9118 L67.8494,14.5798 C65.8974,14.1088 64.9904,13.1958 64.9904,11.7148 C64.9904,9.8808 66.5894,8.6208 68.8584,8.6208 C71.1054,8.6208 72.6444,9.8808 72.6954,11.7148 L71.0904,11.7148 C70.9944,10.6538 70.1174,10.0138 68.8354,10.0138 C67.5544,10.0138 66.6774,10.6618 66.6774,11.6048 C66.6774,12.3558 67.2374,12.7988 68.6084,13.1368 L69.7784,13.4238 C71.9594,13.9398 72.8644,14.8158 72.8644,16.3708 C72.8644,18.3598 71.2814,19.6048 68.7624,19.6048 C66.4044,19.6048 64.8134,18.3888 64.7114,16.4658 L66.3394,16.4658 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M76.2993,9.8442 L76.2993,11.6782 L77.7733,11.6782 L77.7733,12.9372 L76.2993,12.9372 L76.2993,17.2102 C76.2993,17.8732 76.5943,18.1832 77.2423,18.1832 C77.4043,18.1832 77.6623,18.1602 77.7663,18.1462 L77.7663,19.3982 C77.5893,19.4432 77.2363,19.4712 76.8823,19.4712 C75.3133,19.4712 74.7013,18.8832 74.7013,17.3802 L74.7013,12.9372 L73.5743,12.9372 L73.5743,11.6782 L74.7013,11.6782 L74.7013,9.8442 L76.2993,9.8442 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M84.357,15.5532 C84.357,13.8802 83.59,12.8932 82.301,12.8932 C81.012,12.8932 80.246,13.8882 80.246,15.5532 C80.246,17.2322 81.012,18.2122 82.301,18.2122 C83.59,18.2122 84.357,17.2322 84.357,15.5532 M78.626,15.5532 C78.626,13.1152 80.062,11.5822 82.301,11.5822 C84.548,11.5822 85.978,13.1152 85.978,15.5532 C85.978,17.9982 84.556,19.5242 82.301,19.5242 C80.047,19.5242 78.626,17.9982 78.626,15.5532\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M87.2896,11.6782 L88.8066,11.6782 L88.8066,12.9972 L88.8436,12.9972 C89.0866,12.1202 89.7936,11.5972 90.7076,11.5972 C90.9356,11.5972 91.1266,11.6272 91.2526,11.6562 L91.2526,13.1442 C91.1266,13.0922 90.8466,13.0482 90.5376,13.0482 C89.5136,13.0482 88.8796,13.7412 88.8796,14.8312 L88.8796,19.4282 L87.2896,19.4282 L87.2896,11.6782 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M93.2085,14.8384 L97.0835,14.8384 C97.0465,13.6524 96.2875,12.8714 95.1825,12.8714 C94.0845,12.8714 93.2895,13.6674 93.2085,14.8384 Z M98.5865,17.1514 C98.3725,18.5584 97.0025,19.5244 95.2495,19.5244 C92.9945,19.5244 91.5955,18.0134 91.5955,15.5894 C91.5955,13.1594 93.0025,11.5824 95.1825,11.5824 C97.3265,11.5824 98.6745,13.0554 98.6745,15.4054 L98.6745,15.9504 L93.2015,15.9504 L93.2015,16.0464 C93.2015,17.3724 94.0335,18.2414 95.2855,18.2414 C96.1695,18.2414 96.8625,17.8214 97.0755,17.1514 L98.5865,17.1514 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M39.4678,25.7373 L40.1548,25.2753 C41.2378,26.2263 41.6338,27.5823 41.7648,28.7593 L40.8618,28.9003 C40.7668,27.7143 40.4468,26.5933 39.4678,25.7373 M36.4368,30.8113 L36.5028,29.9923 C36.8508,30.1053 37.1898,30.1433 37.4528,30.1433 C37.7448,30.1433 37.8578,30.1153 37.9998,29.9173 C38.2538,29.5503 38.4318,28.7403 38.4318,27.6013 C38.4318,26.7543 38.1688,26.5083 37.5008,26.5083 C37.3498,26.5083 37.1798,26.5183 36.9918,26.5283 C36.5588,28.1473 35.9378,29.6163 35.2218,30.6513 L34.4408,30.2273 C35.1278,29.3143 35.6928,28.0343 36.0878,26.6123 C35.5798,26.6693 35.0428,26.7543 34.5538,26.8673 L34.3848,26.0383 C34.9588,25.9343 35.6458,25.8413 36.2858,25.7843 C36.4078,25.1723 36.5208,24.5323 36.5778,23.8913 L37.5008,23.9953 C37.4158,24.5693 37.3118,25.1443 37.1798,25.7093 L37.5478,25.7093 C38.7428,25.7093 39.3178,26.3013 39.3178,27.5633 C39.3178,28.8633 39.0818,29.8413 38.7718,30.3593 C38.5078,30.7933 38.1878,30.9623 37.6418,30.9623 C37.2458,30.9623 36.8218,30.9063 36.4368,30.8113\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M44.0112,24.6924 L44.2462,23.8634 C45.4142,24.0434 47.1182,24.4194 47.9472,24.7114 L47.7202,25.5304 C46.9772,25.2484 45.1592,24.8334 44.0112,24.6924 M44.8862,30.9434 L44.6982,30.0954 C44.9342,30.1154 45.2442,30.1244 45.4332,30.1244 C47.2972,30.1244 48.0032,29.5974 48.0032,28.8154 C48.0032,28.1944 47.5982,27.8374 46.6942,27.8374 C45.9042,27.8374 45.0002,28.2794 44.1152,29.0984 L43.3892,28.7784 C43.3892,26.9794 43.5782,26.1514 44.1902,25.2484 L45.0282,25.5204 C44.4532,26.2834 44.3122,27.0074 44.3122,27.9684 C45.0842,27.4414 46.0452,27.0924 46.8832,27.0924 C48.1442,27.0924 48.9262,27.7424 48.9262,28.7964 C48.9262,30.1334 47.8712,30.9534 45.3392,30.9534 C45.2162,30.9534 45.0372,30.9434 44.8862,30.9434\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M56.8018,23.6279 L57.3388,23.3739 C57.6308,23.7789 57.8378,24.1369 58.0258,24.5609 L57.4328,24.8149 C57.2818,24.4099 57.0748,24.0149 56.8018,23.6279 Z M55.6248,23.7229 L56.1528,23.4679 C56.4348,23.8549 56.6608,24.2399 56.8208,24.6259 L56.2278,24.8989 C56.0868,24.4849 55.8698,24.0899 55.6248,23.7229 Z M51.6528,30.2939 C52.6878,29.9549 53.5348,29.3609 54.1848,28.6549 C53.6198,28.1849 53.0458,27.8089 52.4248,27.4699 L52.9418,26.8199 C53.6298,27.1779 54.2128,27.5449 54.7308,27.9489 C55.2018,27.2529 55.5118,26.4999 55.6538,25.7739 L53.2528,25.7739 C52.6978,26.6689 51.9908,27.4879 51.1998,28.1379 L50.5128,27.5449 C51.6428,26.6119 52.6688,25.2379 53.1308,23.9479 L54.0338,24.1649 C53.9308,24.4289 53.8268,24.7009 53.7048,24.9559 L56.0398,24.9559 L56.7078,25.2669 C56.2278,27.9779 54.6558,30.1519 52.1978,31.0279 L51.6528,30.2939 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M60.9214,30.9902 L60.4414,30.2272 C62.9644,29.6162 63.7084,27.9592 63.7554,26.0762 L59.8014,26.0762 L59.8014,27.9692 L58.8504,27.9692 L58.8504,25.2752 L61.2134,25.2752 L61.2134,23.8912 L62.1644,23.8912 L62.1644,25.2752 L63.9244,25.2752 L64.7914,25.5202 C64.6774,28.1942 63.7834,30.2372 60.9214,30.9902\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <path\n                d=\"M66.8013,29.9834 C69.0513,29.6634 71.1893,28.1844 72.2343,26.0664 L72.8553,26.7634 C71.6873,28.9474 69.4653,30.5294 67.1593,30.8584 L66.8013,29.9834 Z M66.6223,25.3414 L67.1503,24.5694 C68.0063,24.9644 68.8723,25.4924 69.4653,25.9724 L68.8633,26.7824 C68.2603,26.2644 67.4603,25.7554 66.6223,25.3414 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-2)\"\n              />\n              <mask id=\"vb-badge-appstore-mask-4\" fill=\"white\">\n                <use xlinkHref=\"#vb-badge-appstore2\" />\n              </mask>\n              <g />\n              <path\n                d=\"M75.582,29.569 L79.63,29.569 L79.63,25.699 L75.582,25.699 L75.582,29.569 Z M74.649,30.436 L80.571,30.436 L80.571,24.833 L74.649,24.833 L74.649,30.436 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-4)\"\n              />\n              <polygon\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-4)\"\n                points=\"82.393 27.921 89.049 27.921 89.049 26.961 82.393 26.961\"\n              />\n              <path\n                d=\"M94.5992,24.0234 L95.1642,23.7594 C95.4752,24.1934 95.6732,24.5694 95.8702,25.0404 L95.2582,25.3134 C95.0792,24.8334 94.8722,24.4374 94.5992,24.0234 Z M93.5262,24.4284 L94.0812,24.1654 C94.3642,24.5694 94.5802,25.0124 94.7502,25.4454 L94.1382,25.7184 C93.9972,25.2854 93.7812,24.8144 93.5262,24.4284 Z M91.3142,23.9194 L92.2452,23.9194 L92.2452,26.3304 C93.5742,26.8854 94.8162,27.5164 95.8422,28.1284 L95.3152,28.9574 C94.4302,28.3824 93.3672,27.8084 92.2452,27.3094 L92.2452,30.9434 L91.3142,30.9434 L91.3142,23.9194 Z\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-4)\"\n              />\n              <path\n                d=\"M24.7691,20.3008 C24.7441,17.5498 27.0211,16.2118 27.1251,16.1488 C25.8361,14.2678 23.8361,14.0108 23.1341,13.9908 C21.4551,13.8148 19.8271,14.9958 18.9711,14.9958 C18.0991,14.9958 16.7821,14.0088 15.3631,14.0378 C13.5371,14.0658 11.8271,15.1238 10.8901,16.7658 C8.9561,20.1138 10.3981,25.0348 12.2511,27.7408 C13.1781,29.0678 14.2611,30.5478 15.6791,30.4948 C17.0661,30.4378 17.5841,29.6108 19.2581,29.6108 C20.9171,29.6108 21.4031,30.4948 22.8491,30.4618 C24.3371,30.4378 25.2751,29.1298 26.1691,27.7918 C27.2411,26.2728 27.6711,24.7768 27.6881,24.6998 C27.6531,24.6878 24.7971,23.5988 24.7691,20.3008\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-4)\"\n              />\n              <path\n                d=\"M22.0371,12.2109 C22.7831,11.2779 23.2931,10.0089 23.1521,8.7199 C22.0721,8.7679 20.7221,9.4669 19.9441,10.3799 C19.2561,11.1839 18.6411,12.5029 18.8001,13.7409 C20.0131,13.8319 21.2591,13.1289 22.0371,12.2109\"\n                fill=\"#FFFFFE\"\n                mask=\"url(#vb-badge-appstore-mask-4)\"\n              />\n            </g>\n          </g>\n        </g>\n      </svg>\n    </figure>\n  );\n};\n\nexport default AppStoreBadge;\n"
  },
  {
    "path": "src/lv1/images/CloudSkeletonIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport CloudSkeletonIllust from './CloudSkeletonIllust';\n\nexport default {\n  component: CloudSkeletonIllust,\n};\n\nexport const CloudSkeletonIllustComponent = () => (\n  <CloudSkeletonIllust {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/CloudSkeletonIllust.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\ntype Props = MarginClassProps & CommonProps;\n\nconst CloudSkeletonIllust: React.FC<Props> = (props: Props) => {\n  const { marginTop, marginLeft, marginRight, marginBottom, marginSize } =\n    props;\n\n  const illustBaseClass = 'vb-illust';\n\n  return (\n    <figure\n      {...commonProps(\n        props,\n        illustBaseClass,\n        { cloudSkeleton: true },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <svg\n        className={illustBaseClass + '__svg'}\n        viewBox=\"0 0 128 128\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <title>アップロード中</title>\n        <g>\n          <path\n            className={illustBaseClass + '__frame'}\n            d=\"M103.2,53.47A26.8,26.8,0,0,1,101.33,107H32a32.25,32.25,0,0,1-3.47-64.29A39.87,39.87,0,0,1,103.2,53.47Zm-2.94.57A36.87,36.87,0,0,0,31.2,44.09l-.74,1.44-1.61.17A29.25,29.25,0,0,0,32,104h69.33A23.8,23.8,0,0,0,103,56.46l-2.29-.16Z\"\n          />\n        </g>\n      </svg>\n    </figure>\n  );\n};\n\nexport default CloudSkeletonIllust;\n"
  },
  {
    "path": "src/lv1/images/CloudUploadIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport CloudUploadIllust from './CloudUploadIllust';\n\nexport default {\n  component: CloudUploadIllust,\n};\n\nexport const CloudUploadIllustComponent = () => (\n  <CloudUploadIllust {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/CloudUploadIllust.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\ntype Props = MarginClassProps & CommonProps;\n\nconst CloudUploadIllust: React.FC<Props> = (props: Props) => {\n  const { marginTop, marginLeft, marginRight, marginBottom, marginSize } =\n    props;\n\n  const illustBaseClass = 'vb-illust';\n\n  return (\n    <figure\n      {...commonProps(\n        props,\n        illustBaseClass,\n        { cloudUpload: true },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <svg\n        className={illustBaseClass + '__svg'}\n        viewBox=\"0 0 128 128\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <title>アップロード</title>\n        <g>\n          <path\n            className={illustBaseClass + '__frame'}\n            d=\"M74.67,65.7V87.2H53.33V65.7h-16L64,38.83,90.67,65.7ZM103.2,49.79A39.87,39.87,0,0,0,28.53,39,32.25,32.25,0,0,0,32,103.33h69.33a26.81,26.81,0,0,0,1.87-53.54Z\"\n          />\n        </g>\n      </svg>\n    </figure>\n  );\n};\n\nexport default CloudUploadIllust;\n"
  },
  {
    "path": "src/lv1/images/CsvUploadIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport CsvUploadIllust from './CsvUploadIllust';\n\nexport default {\n  component: CsvUploadIllust,\n};\n\nexport const CsvUploadIllustComponent = () => (\n  <CsvUploadIllust {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/CsvUploadIllust.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\ntype Props = MarginClassProps & CommonProps;\n\nconst CsvUploadIllust: React.FC<Props> = (props: Props) => {\n  const { marginTop, marginLeft, marginRight, marginBottom, marginSize } =\n    props;\n\n  const illustBaseClass = 'vb-illust';\n\n  return (\n    <figure\n      {...commonProps(\n        props,\n        illustBaseClass,\n        { csvUpload: true },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <svg\n        className={illustBaseClass + '__svg'}\n        viewBox=\"0 0 128 128\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <title>CSVをアップロード</title>\n        <g>\n          <path\n            className={illustBaseClass + '__background'}\n            d=\"M28.21,51h73V82h-73Zm-18-51h79l14,13.93,16,16V128h-109Z\"\n          />\n          <path\n            className={illustBaseClass + '__frame'}\n            d=\"M28.21,51h73V82h-73Zm-18-51h79l14,13.93,16,16V128h-109Zm3,3V125h103V31.16H87.94V3Z\"\n          />\n          <path\n            className={illustBaseClass + '__border'}\n            d=\"M28.21,107.89h73v8h-73Zm0-18h73v8h-73Zm0-55h73v8h-73Zm0-17h53v8h-53Z\"\n          />\n          <path\n            className={illustBaseClass + '__background'}\n            d=\"M39.08,66c0-5.91,3.36-9.47,8.67-9.47,4.4,0,7.75,2.79,8,6.89H52.06a4.24,4.24,0,0,0-4.31-3.72C44.85,59.73,43,62.16,43,66s1.84,6.32,4.77,6.32a4.15,4.15,0,0,0,4.32-3.51h3.73c-.43,4.09-3.57,6.68-8.06,6.68C42.41,75.51,39.08,71.94,39.08,66Zm22.1,4c.18,1.51,1.75,2.5,3.78,2.5s3.44-1,3.44-2.33c0-1.19-.87-1.85-3.08-2.34l-2.39-.53c-3.38-.72-5-2.43-5-5.11,0-3.38,2.92-5.61,7-5.61,4.26,0,6.94,2.19,7,5.51h-3.6c-.12-1.55-1.48-2.49-3.4-2.49s-3.16.9-3.16,2.26c0,1.13.89,1.76,3,2.25l2.22.47c3.67.78,5.27,2.36,5.27,5.15,0,3.55-2.89,5.8-7.43,5.8S57.6,73.42,57.48,70Zm18.39,5.21L73.42,56.87h4.29L81.9,71.25H82l4.18-14.38h4.18L84.19,75.19Z\"\n          />\n        </g>\n      </svg>\n    </figure>\n  );\n};\n\nexport default CsvUploadIllust;\n"
  },
  {
    "path": "src/lv1/images/DiscoveryIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport DiscoveryIllust from './DiscoveryIllust';\nimport { commonKnobs } from '../../../stories';\nimport { number } from '@storybook/addon-knobs';\n\nexport default {\n  component: DiscoveryIllust,\n};\n\nexport const DiscoveryIllustComponent = () => (\n  <DiscoveryIllust\n    animationDelay={number('animationDelay', 0, undefined, 'DiscoveryIllust')}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv1/images/DiscoveryIllust.tsx",
    "content": "import lottie from 'lottie-web';\nimport * as React from 'react';\n\nimport animDiscoveryIllust from './discovery-illust.json';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * アニメーションの開始を遅らせたいときに使います。単位はミリ秒です。\n   */\n  animationDelay?: number;\n} & CommonProps;\n\nconst DiscoveryIllust: React.FC<Props> = ({\n  animationDelay = 0,\n  ...otherProps\n}) => {\n  const lottieRef = React.useRef<HTMLDivElement>(null);\n  React.useEffect(() => {\n    if (lottieRef.current == null) return;\n\n    const anim = lottie.loadAnimation({\n      animationData: animDiscoveryIllust,\n      autoplay: false,\n      container: lottieRef.current,\n      loop: true,\n      renderer: 'svg',\n    });\n\n    const timer = setTimeout(() => {\n      anim.play();\n    }, animationDelay);\n\n    return () => {\n      clearTimeout(timer);\n      anim.destroy();\n    };\n  }, [lottieRef, animationDelay]);\n\n  return (\n    <div\n      {...commonProps(otherProps, 'vb-discoveryIllust', {})}\n      ref={lottieRef}\n    />\n  );\n};\n\nexport default DiscoveryIllust;\n"
  },
  {
    "path": "src/lv1/images/FileUploadIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport FileUploadIllust from './FileUploadIllust';\n\nexport default {\n  component: FileUploadIllust,\n};\n\nexport const FileUploadIllustComponent = () => (\n  <FileUploadIllust {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/FileUploadIllust.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\ntype Props = MarginClassProps & CommonProps;\n\nconst FileUploadIllust: React.FC<Props> = (props: Props) => {\n  const { marginTop, marginLeft, marginRight, marginBottom, marginSize } =\n    props;\n\n  const illustBaseClass = 'vb-illust';\n\n  return (\n    <figure\n      {...commonProps(\n        props,\n        illustBaseClass,\n        { fileUpload: true },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <svg\n        className={illustBaseClass + '__svg'}\n        viewBox=\"0 0 128 128\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <title>ファイルをアップロード</title>\n        <g>\n          <path\n            className={illustBaseClass + '__background'}\n            d=\"M9.5,0h79l14,13.93,16,16V128H9.5Z\"\n          />\n          <path\n            className={illustBaseClass + '__frame'}\n            d=\"M43.5,83.12h41V89h-41Zm11.71-5.88H72.79V59.59H84.5L64,39,43.5,59.59H55.21ZM9.5,0h79l14,13.93,16,16V128H9.5Zm3,3V125h103V31.16H87.23V3Z\"\n          />\n        </g>\n      </svg>\n    </figure>\n  );\n};\n\nexport default FileUploadIllust;\n"
  },
  {
    "path": "src/lv1/images/FinishTaskIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport FinishTaskIllust from './FinishTaskIllust';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: FinishTaskIllust,\n};\n\nexport const FinishTaskIllustComponent = () => (\n  <FinishTaskIllust {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/FinishTaskIllust.tsx",
    "content": "import lottie from 'lottie-web';\nimport * as React from 'react';\n\nimport animFinishTaskIllust from './finish-task-illust.json';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = CommonProps;\n\nconst FinishTaskIllust: React.FC<Props> = (props: Props) => {\n  const lottieRef = React.useRef<HTMLDivElement>(null);\n  React.useEffect(() => {\n    if (lottieRef.current != null) {\n      const anim = lottie.loadAnimation({\n        animationData: animFinishTaskIllust,\n        autoplay: true,\n        container: lottieRef.current,\n        loop: false,\n        renderer: 'svg',\n      });\n      return (): void => anim.destroy();\n    }\n  }, [lottieRef]);\n\n  return (\n    <div {...commonProps(props, 'vb-finishTaskIllust', {})} ref={lottieRef} />\n  );\n};\n\nexport default FinishTaskIllust;\n"
  },
  {
    "path": "src/lv1/images/GooglePlayBadge.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport GooglePlayBadge from './GooglePlayBadge';\n\nexport default {\n  component: GooglePlayBadge,\n};\n\nexport const GooglePlayBadgeComponent = () => (\n  <GooglePlayBadge {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/GooglePlayBadge.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport useUniqueId from '../../hooks/useUniqueId';\n\ntype Props = MarginClassProps & CommonProps;\n\nconst GooglePlayBadge: React.FC<Props> = (props: Props) => {\n  const { marginTop, marginLeft, marginRight, marginBottom, marginSize } =\n    props;\n\n  const baseBadgeClass = 'vb-storeBadge vb-storeBadge--googlePlayStore';\n  const labelId = useUniqueId('vb-storeBadge--googlePlayStore');\n\n  return (\n    <figure\n      aria-labelledby={labelId}\n      {...commonProps(\n        props,\n        baseBadgeClass,\n        {},\n        {\n          marginTop,\n          marginLeft,\n          marginRight,\n          marginBottom,\n          marginSize,\n        }\n      )}\n    >\n      <svg\n        className=\"vb-storeBadge__svg\"\n        viewBox=\"0 0 861.33331 255.21052\"\n        role=\"img\"\n      >\n        <title id={labelId}>GooglePlayで手に入れよう</title>\n        <g transform=\"matrix(1.3333333,0,0,-1.3333333,-1.2393167e-6,294.272)\">\n          <g transform=\"scale(0.1)\">\n            <path\n              d=\"M 6220.74,292.969 H 239.262 C 107.668,292.969 0,400.629 0,532.23 v 1435.55 c 0,131.6 107.668,239.26 239.262,239.26 H 6220.74 c 131.59,0 239.26,-107.66 239.26,-239.26 V 532.23 c 0,-131.601 -107.67,-239.261 -239.26,-239.261\"\n              fill=\"#100f0d\"\n            />\n            <path\n              d=\"M 6220.74,2207.04 H 239.262 C 107.668,2207.04 0,2099.36 0,1967.77 V 532.219 C 0,400.621 107.668,292.961 239.262,292.961 H 6220.74 c 131.59,0 239.26,107.66 239.26,239.258 V 1967.77 c 0,131.59 -107.67,239.27 -239.26,239.27 m 0,-38.29 c 110.83,0 200.98,-90.15 200.98,-200.98 V 532.219 c 0,-110.828 -90.15,-200.981 -200.98,-200.981 H 239.262 c -110.828,0 -200.9768,90.153 -200.9768,200.981 V 1967.77 c 0,110.83 90.1488,200.98 200.9768,200.98 H 6220.74\"\n              fill=\"#a2a2a1\"\n            />\n            <path\n              d=\"m 5117.09,1297.85 h 89.29 v 598.2 h -89.29 z m 804.24,382.72 -102.35,-259.36 h -3.07 l -106.23,259.36 h -96.18 l 159.3,-362.48 -90.82,-201.65 h 93.12 l 245.53,564.13 z M 5414.97,1365.8 c -29.29,0 -70.06,14.64 -70.06,50.82 0,46.17 50.77,63.83 94.65,63.83 39.24,0 57.71,-8.47 81.59,-20 -6.94,-55.41 -54.65,-94.65 -106.18,-94.65 m 10.76,327.83 c -64.65,0 -131.64,-28.47 -159.34,-91.54 l 79.28,-33.11 c 16.94,33.11 48.48,43.88 81.59,43.88 46.18,0 93.12,-27.71 93.89,-76.95 v -6.17 c -16.17,9.23 -50.82,23.06 -93.12,23.06 -85.42,0 -172.41,-46.94 -172.41,-134.65 0,-80.06 70.05,-131.59 148.53,-131.59 60.05,0 93.12,26.89 113.94,58.47 h 3.06 v -46.18 h 86.18 v 229.36 c 0,106.18 -79.24,165.42 -181.6,165.42 m -551.83,-85.89 h -127 v 205.09 h 127 c 66.76,0 104.65,-55.32 104.65,-102.55 0,-46.37 -37.89,-102.54 -104.65,-102.54 m -2.29,288.31 h -213.95 v -598.2 h 89.24 v 226.63 h 124.71 c 98.96,0 196.24,71.68 196.24,185.8 0,114.13 -97.28,185.77 -196.24,185.77 M 3704.93,1365.7 c -61.68,0 -113.31,51.63 -113.31,122.55 0,71.73 51.63,124.13 113.31,124.13 60.91,0 108.67,-52.4 108.67,-124.13 0,-70.92 -47.76,-122.55 -108.67,-122.55 m 102.5,281.37 h -3.06 c -20.05,23.88 -58.57,45.51 -107.14,45.51 -101.79,0 -195.05,-89.44 -195.05,-204.33 0,-114.08 93.26,-202.75 195.05,-202.75 48.57,0 87.09,21.58 107.14,46.27 h 3.06 v -29.28 c 0,-77.9 -41.59,-119.49 -108.67,-119.49 -54.75,0 -88.67,39.29 -102.55,72.45 l -77.86,-32.39 c 22.35,-53.98 81.74,-120.26 180.41,-120.26 104.84,0 193.51,61.68 193.51,211.99 v 365.44 h -84.84 z m 146.47,-349.22 h 89.44 v 598.24 h -89.44 z m 221.27,197.34 c -2.29,78.67 60.91,118.72 106.37,118.72 35.51,0 65.56,-17.71 75.56,-43.16 z m 277.54,67.85 c -16.99,45.51 -68.62,129.54 -174.23,129.54 -104.84,0 -191.93,-82.5 -191.93,-203.56 0,-114.08 86.33,-203.52 201.94,-203.52 93.31,0 147.23,57.04 169.63,90.2 l -69.38,46.28 c -23.17,-33.93 -54.75,-56.28 -100.25,-56.28 -45.47,0 -77.86,20.82 -98.68,61.63 l 272.14,112.6 z m -2168.07,67.04 v -86.32 h 206.58 c -6.18,-48.57 -22.35,-84.03 -46.99,-108.67 -30.1,-30.1 -77.14,-63.22 -159.59,-63.22 -127.24,0 -226.67,102.5 -226.67,229.74 0,127.19 99.43,229.69 226.67,229.69 68.62,0 118.72,-26.94 155.71,-61.63 l 60.91,60.87 c -51.67,49.33 -120.25,87.13 -216.62,87.13 -174.23,0 -320.7,-141.88 -320.7,-316.06 0,-174.28 146.47,-316.11 320.7,-316.11 94.03,0 164.95,30.87 220.45,88.67 57.04,57.04 74.8,137.19 74.8,201.99 0,20.04 -1.54,38.52 -4.65,53.92 z m 530.1,-264.38 c -61.63,0 -114.84,50.87 -114.84,123.32 0,73.26 53.21,123.36 114.84,123.36 61.68,0 114.89,-50.1 114.89,-123.36 0,-72.45 -53.21,-123.32 -114.89,-123.32 m 0,326.88 c -112.55,0 -204.28,-85.61 -204.28,-203.56 0,-117.15 91.73,-203.52 204.28,-203.52 112.55,0 204.33,86.37 204.33,203.52 0,117.95 -91.78,203.56 -204.33,203.56 m 445.69,-326.88 c -61.67,0 -114.89,50.87 -114.89,123.32 0,73.26 53.22,123.36 114.89,123.36 61.69,0 114.85,-50.1 114.85,-123.36 0,-72.45 -53.16,-123.32 -114.85,-123.32 m 0,326.88 c -112.54,0 -204.28,-85.61 -204.28,-203.56 0,-117.15 91.74,-203.52 204.28,-203.52 112.55,0 204.28,86.37 204.28,203.52 0,117.95 -91.73,203.56 -204.28,203.56\"\n              fill=\"#ffffff\"\n            />\n            <path\n              d=\"M 991.355,1277.56 481.879,736.828 c 0.047,-0.09 0.047,-0.238 0.098,-0.328 15.644,-58.719 69.238,-101.93 132.882,-101.93 25.457,0 49.336,6.891 69.817,18.95 l 1.625,0.96 573.459,330.899 -268.405,292.181\"\n              fill=\"#eb3131\"\n            />\n            <path\n              d=\"m 1506.77,1369.64 -0.48,0.33 -247.59,143.51 -278.927,-248.21 279.927,-279.84 246.25,142.07 c 43.16,23.36 72.5,68.86 72.5,121.31 0,52.16 -28.91,97.43 -71.68,120.83\"\n              fill=\"#f6b60b\"\n            />\n            <path\n              d=\"m 481.871,1763.11 c -3.066,-11.29 -4.691,-23.16 -4.691,-35.41 V 772.191 c 0,-12.242 1.625,-24.113 4.738,-35.363 l 526.942,526.902 -526.989,499.38\"\n              fill=\"#5778c5\"\n            />\n            <path\n              d=\"m 995.121,1249.95 263.659,263.62 -572.784,332.09 c -20.816,12.49 -45.125,19.67 -71.109,19.67 -63.641,0 -117.332,-43.31 -132.981,-102.07 0,-0.05 -0.047,-0.1 -0.047,-0.15 l 513.262,-513.16\"\n              fill=\"#3bad49\"\n            />\n            <g transform=\"scale(10)\">\n              <g transform=\"matrix(1,0,0,-1,196.573,62.1559)\">\n                <path\n                  d=\"m 3.746799,-25.852913 c 0.3330488,-0.04163 0.7909909,-0.333049 0.9158842,-0.666098 5.3704118,-0.499573 17.6515858,-1.415457 22.2310068,-1.748506 -7.618491,4.787577 -13.405214,11.906495 -13.405214,17.77648 0,7.4103356 4.412897,11.8232322 16.236129,13.5301073 l 1.373826,-2.914177 c -10.324512,-1.3321952 -14.40436,-4.7875765 -14.40436,-10.6159303 0,-5.370412 6.036509,-12.073019 12.281174,-15.819818 2.664391,-1.706875 4.704315,-2.123186 7.118918,-2.123186 0.499574,0 0.999147,0 1.540351,0.04163 l -0.04163,-3.122332 c -5.412043,0.04163 -31.0568003,1.873399 -34.1791328,1.998292 z m 29.724605,2.123186 c 1.956662,1.49872 4.371266,4.079848 5.495305,5.745092 l 1.581982,-1.248933 c -1.207302,-1.831768 -3.621906,-4.246372 -5.661829,-5.745092 z m -4.496159,3.663537 c 1.790138,1.373826 4.329635,3.954954 5.495306,5.786723 l 1.581981,-1.290564 c -1.290564,-1.790138 -3.663536,-4.246372 -5.661829,-5.745092 z\"\n                  fill=\"#ffffff\"\n                />\n                <path\n                  d=\"m 63.029665,-12.406068 v -7.035656 h 15.236983 v -2.66439 H 63.029665 v -6.744238 c 0.541204,-0.08326 0.74936,-0.208156 0.832622,-0.499573 4.496159,-0.666098 8.576007,-1.457089 11.573446,-2.456235 0.166524,0.04163 0.291417,0.04163 0.37468,0.04163 0.249786,0 0.37468,-0.04163 0.499573,-0.124893 l -2.414604,-2.372973 c -6.161403,2.206448 -18.276053,3.538643 -28.350779,4.204741 0.333049,0.624467 0.666098,1.706875 0.74936,2.414604 4.454528,-0.249787 9.283735,-0.666098 13.863156,-1.207302 v 6.744238 H 45.41971 v 2.66439 h 14.737409 v 7.035656 H 42.630426 v 2.7476529 h 17.526693 v 9.2837352 c 0,1.20730189 -0.291418,1.20730189 -3.830061,1.20730189 -1.457089,0 -3.372119,0 -5.370412,-0.0832622 0.457942,0.79099091 0.999146,1.99829281 1.207302,2.78928371 4.496159,0.041631 7.20218,0 8.742531,-0.4995732 1.49872,-0.4579421 2.123186,-1.2905641 2.123186,-3.4137502 V -9.6584151 H 80.63962 v -2.7476529 z\"\n                  fill=\"#ffffff\"\n                />\n                <path\n                  d=\"m 88.591767,-32.805307 c -1.332195,7.202181 -2.206448,14.820672 -2.206448,20.274346 0,5.5369363 0.499573,10.3661438 1.831768,14.3210983 L 91.172895,1.248933 C 91.048002,0.83262199 90.96474,0.416311 90.96474,-0.0416311 c 0,-0.5828354 0.124893,-1.248933 0.333049,-1.9566617 0.582835,-1.8733995 1.831768,-4.2463722 3.538643,-8.4511132 l -1.748506,-1.831768 c -0.582836,1.457088 -2.372973,5.8283535 -3.163964,7.8682774 -0.416311,-1.9566617 -0.541204,-5.1206252 -0.541204,-8.2429574 0,-4.496159 0.74936,-11.948126 2.206448,-18.733995 0.832622,0.04163 1.248933,-0.208156 1.373827,-0.666098 z m 11.698343,8.617638 c 4.78757,-0.124893 13.15542,-0.666098 18.31768,-1.540351 l -0.24979,-2.914177 c -5.53693,0.957516 -12.78074,1.457089 -18.15116,1.581982 z m 19.23356,19.608248 c -1.7485,0.1248933 -3.6219,0.2081555 -5.37041,0.2081555 -4.32963,0 -11.40692,0 -11.40692,-4.8292075 0,-2.372973 1.45709,-4.371266 3.53864,-6.536083 l -2.70602,-1.16567 c -2.33134,2.747652 -3.91332,5.162256 -3.91332,8.0348018 0,3.3304879 2.37297,6.1614027 7.4936,6.9107625 1.99829,0.2914177 4.78757,0.4579421 7.74338,0.4579421 1.54035,0 3.0807,-0.041631 4.57942,-0.1248933 z\"\n                  fill=\"#ffffff\"\n                />\n                <path\n                  d=\"m 143.46156,-32.513889 h -10.53267 v 2.830915 h 10.61593 c 0.0416,1.665244 0.20816,3.580274 0.54121,5.661829 l -1.70688,-0.416311 c -2.62276,12.11465 -7.99317,20.9820747 -17.19364,25.7696512 0.70773,0.4995732 1.79013,1.5403507 2.33134,2.1231861 8.74253,-4.8292076 14.15457,-13.1554275 17.15201,-24.2709313 1.83177,8.118065 6.32793,17.6515864 17.15202,24.2293002 0.49957,-0.7077287 1.62361,-1.8733995 2.24807,-2.3729727 C 147.24999,-8.9506864 146.29248,-25.103553 146.29248,-32.55552 h -2.83092 z\"\n                  fill=\"#ffffff\"\n                />\n                <path\n                  d=\"m 167.73256,-22.647318 c 3.16396,-0.04163 6.20303,-0.37468 7.66012,-0.707729 -0.0416,1.332195 -0.0833,2.456235 -0.0833,3.663537 -1.83177,4.288003 -5.70346,9.325366 -9.15884,12.572592 l 1.49871,2.6227592 c 3.28886,-3.3304879 6.11978,-7.1189182 7.57687,-10.0330952 -0.0416,2.664391 0,14.529254 -0.0416,16.9438578 h 2.91418 c -0.0416,-5.6618296 -0.0416,-13.0721658 -0.0416,-19.1086748 4.32963,-4.579421 9.57515,-7.95154 12.69749,-7.95154 2.03992,0 3.28885,1.623613 3.28885,5.245519 0,0.04163 -0.74936,11.4901831 -0.74936,13.6550002 0,4.3296344 1.16567,6.4111894 4.66269,6.4111894 1.91503,0 4.41289,-1.1656708 6.53608,-2.7060215 -0.16653,-0.6244665 -0.49957,-2.3313416 -0.58284,-3.1639636 -1.79013,1.5403507 -4.288,2.7892837 -5.53693,2.7892837 -1.74851,0 -2.03993,-1.3321952 -2.03993,-3.8300612 0,-3.3304879 0.41631,-8.534375 0.70773,-12.197912 0.0416,-0.541204 0.0833,-1.082409 0.0833,-1.623613 0,-4.829208 -1.95666,-7.57686 -5.86998,-7.57686 -3.45538,0 -8.53438,3.03907 -13.1138,7.327073 0.24979,-1.498719 0.6661,-3.954954 1.66525,-5.953247 l -1.29057,-0.499573 c 0.0833,-1.540351 0.24979,-4.121479 0.41631,-5.953247 0.70773,-0.08326 1.08241,-0.37468 1.16567,-0.832622 l -4.288,-0.333049 c -0.16652,3.78843 -0.20815,5.162256 -0.29142,7.660122 -1.37382,0.333049 -4.45452,0.624467 -7.82664,0.624467 z\"\n                  fill=\"#ffffff\"\n                />\n                <path\n                  d=\"m 242.50105,-2.8725459 c -4.07985,-2.9974392 -9.15884,-5.8283539 -14.52925,-7.4103361 -0.62447,-8.617637 -0.70773,-9.575153 -0.70773,-11.948125 3.16396,-0.04163 9.32536,-0.457942 14.07131,-1.207302 l -0.29142,-2.955808 c -5.03736,0.874253 -11.1155,1.332195 -13.82152,1.332195 0,-1.248933 -0.0416,-6.744238 0,-7.868278 0.70772,-0.08326 1.0824,-0.457942 1.0824,-0.874253 l -4.32963,-0.249787 c 0.0416,5.994879 0.37468,14.73741 0.74936,20.191084 0.0416,0.957515 0.24979,1.91503 0.24979,3.03907 -1.54035,-0.291418 -3.41375,-0.37468 -4.87084,-0.37468 -5.24552,0.04163 -9.65842,2.6227595 -9.57515,6.8275005 0.0416,4.2047411 4.288,6.8275004 9.65841,6.8275004 3.83006,0 7.03566,-1.3321952 7.3687,-4.7875765 0.33305,-1.0824086 0.62447,-3.2055947 0.54121,-4.8292075 4.37126,1.4154573 8.90905,4.1214788 12.48933,6.9523936 z m -17.4018,-5.2038874 c 0.0833,1.2073018 0.0833,2.9141769 0.0833,3.8716922 0,2.9558081 -2.4146,3.9965856 -5.32878,3.9965856 -3.33049,0 -6.61934,-1.3321952 -6.61934,-4.3712655 0,-2.3729727 2.78928,-4.0382166 6.78587,-4.1214788 1.58198,0 3.41375,0.1248933 5.07899,0.6244665 z\"\n                  fill=\"#ffffff\"\n                />\n                <path\n                  d=\"m 255.61509,-31.389849 c 5.41205,0.457942 12.15628,1.831768 16.56918,3.330488 l 0.87425,-2.914177 c -4.45452,-1.540351 -11.03224,-2.747653 -16.7357,-3.247226 z m -3.87169,15.278613 c 0.41631,-0.208155 0.83262,-0.624466 0.79099,-0.957515 5.12063,-1.790137 11.73997,-3.288857 15.07046,-3.288857 4.9541,0 6.86913,2.872546 6.86913,6.869132 0,6.3279269 -6.03651,11.3236588 -16.69407,13.8631559 0.62447,0.7077287 1.49872,1.8317684 1.8734,2.5394971 11.94812,-3.2055947 17.90137,-8.742531 17.98463,-16.319391 v -0.333049 c 0,-6.161403 -3.66353,-9.491891 -9.9082,-9.491891 -3.12233,0 -10.99061,1.706875 -17.23527,3.413751 z\"\n                  fill=\"#ffffff\"\n                />\n              </g>\n            </g>\n          </g>\n        </g>\n      </svg>\n    </figure>\n  );\n};\n\nexport default GooglePlayBadge;\n"
  },
  {
    "path": "src/lv1/images/ImageUploadIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport ImageUploadIllust from './ImageUploadIllust';\n\nexport default {\n  component: ImageUploadIllust,\n};\n\nexport const ImageUploadIllustComponent = () => (\n  <ImageUploadIllust {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv1/images/ImageUploadIllust.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\ntype Props = MarginClassProps & CommonProps;\n\nconst ImageUploadIllust: React.FC<Props> = (props: Props) => {\n  const { marginTop, marginLeft, marginRight, marginBottom, marginSize } =\n    props;\n\n  const illustBaseClass = 'vb-illust';\n\n  return (\n    <figure\n      {...commonProps(\n        props,\n        illustBaseClass,\n        { imageUpload: true },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <svg\n        className={illustBaseClass + '__svg'}\n        viewBox=\"0 0 128 128\"\n        role=\"presentation\"\n        aria-hidden=\"true\"\n      >\n        <title>画像をアップロード</title>\n        <g>\n          <path\n            className={illustBaseClass + '__background'}\n            d=\"M0,16v96H128V16Z\"\n          />\n          <path\n            className={illustBaseClass + '__frame'}\n            d=\"M0,16v96H128V16Zm125,93H3V19H125ZM33,51a7,7,0,1,1,7,7A7,7,0,0,1,33,51ZM53,82H33L55,57l8.17,9.28L75,48,97,82H53Z\"\n          />\n        </g>\n      </svg>\n    </figure>\n  );\n};\n\nexport default ImageUploadIllust;\n"
  },
  {
    "path": "src/lv1/images/NoDataIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\nimport NoDataIllust from './NoDataIllust';\n\nexport default {\n  component: NoDataIllust,\n};\n\nexport const NoDataIllustComponent = () => (\n  <NoDataIllust\n    size={\n      select(\n        'Size',\n        {\n          medium: 'medium',\n          'fit-height': 'fit-height',\n          'fit-width': 'fit-width',\n        },\n        '',\n        'NoDataIllust'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv1/images/NoDataIllust.tsx",
    "content": "import * as React from 'react';\nimport { SwallowProps, SwallowContainer } from './SwallowContainer';\n\ntype Props = SwallowProps;\n\nconst NoDataIllust: React.FC<Props> = (props: Props) => {\n  return (\n    <SwallowContainer\n      {...props}\n      mediumHeightRem={10}\n      renderSVG={({ className, styles }) => (\n        <svg\n          className={className}\n          viewBox=\"0 0 240 191\"\n          fill=\"none\"\n          role=\"presentation\"\n          aria-hidden=\"true\"\n          style={styles}\n        >\n          <path\n            d=\"M70 190H59L89 88H100L70 190Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M97 190H108L91 88H80L97 190Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M66 190L87.07 110.91\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M101 190L89.83 112.35\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M131 190H120L135 88H146L131 190Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M156 190H167L135 88H124L156 190Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M160 190L136.93 110.91\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M127 190L136.17 112.35\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M100 33H94.92H91L86 1H95L100 33Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M89 2L94.91 33\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path d=\"M61.8 22H141.48L161.1 123.07H81.43\" fill=\"white\" />\n          <path\n            d=\"M61.8 22H141.48L161.1 123.07H81.43\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M156.2 127H76.52L81.43 123.07H161.1L156.2 127Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          />\n          <path\n            d=\"M104.11 123H134.1L131.99 115H102L104.11 123Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M81.43 123.07L76.52 127L56.9 25.92L61.8 22L81.43 123.07Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M172 83L169.17 77.86L165.74 79.74C162.43 81.62 159.83 86.31 161.25 88.88C162.67 91.45 168.04 91.83 171.4 90.04L174.83 88.15L172 83Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"140 20\"\n          />\n          <path\n            d=\"M221.78 57.82C222.126 57.5209 222.36 57.1119 222.441 56.6615C222.522 56.211 222.447 55.7463 222.227 55.3449C222.007 54.9435 221.656 54.6297 221.232 54.4559C220.809 54.2821 220.339 54.2589 219.9 54.39C219.04 54.86 179.21 72.16 169.13 77.85L172 83L174.83 88.15C185 82.68 220.92 58.29 221.78 57.82Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"260 50\"\n          />\n          <path\n            d=\"M156.23 99.33C157.811 98.4553 158.993 97.0031 159.527 95.2772C160.062 93.5514 159.909 91.6855 159.1 90.07C158.19 88.4984 156.695 87.3499 154.943 86.8742C153.19 86.3985 151.32 86.6342 149.74 87.53C143.84 90.77 144.74 101.04 138.92 101.13C144 102.26 149.6 103.07 156.23 99.33Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"260 50\"\n          />\n        </svg>\n      )}\n    />\n  );\n};\n\nexport default NoDataIllust;\n"
  },
  {
    "path": "src/lv1/images/NoSearchResultsIllust.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\nimport NoSearchResultsIllust from './NoSearchResultsIllust';\n\nexport default {\n  component: NoSearchResultsIllust,\n};\n\nexport const NoSearchResultsIllustComponent = () => (\n  <NoSearchResultsIllust\n    size={\n      select(\n        'Size',\n        {\n          medium: 'medium',\n          'fit-height': 'fit-height',\n          'fit-width': 'fit-width',\n        },\n        '',\n        'NoSearchResultsIllust'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv1/images/NoSearchResultsIllust.tsx",
    "content": "import * as React from 'react';\nimport { SwallowProps, SwallowContainer } from './SwallowContainer';\n\ntype Props = SwallowProps;\n\nconst NoSearchResultsIllust: React.FC<Props> = (props: Props) => {\n  return (\n    <SwallowContainer\n      {...props}\n      mediumHeightRem={10}\n      renderSVG={({ className, styles }) => (\n        <svg\n          className={className}\n          viewBox=\"0 0 214 194\"\n          fill=\"none\"\n          role=\"presentation\"\n          aria-hidden=\"true\"\n          style={styles}\n        >\n          <path\n            d=\"M182.86 151.25L191.52 153.25C192.42 146.94 191.42 141.76 188.95 140.72L182.34 139.17C183.33 142.08 183.54 146.39 182.86 151.25Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"180 90\"\n          />\n          <path\n            d=\"M130.1 134.72L146.81 138.65V138.73C148.36 139.38 149.53 141.11 150.28 143.57L182.88 151.25C183.56 146.39 183.35 142.08 182.37 139.16C181.75 137.3 180.82 136 179.61 135.49V135.43L129.26 123.57C130.203 127.207 130.487 130.983 130.1 134.72Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"254 14.83\"\n          />\n          <path\n            d=\"M127.37 134.07C127.565 134.129 127.756 134.202 127.94 134.29V134.21L130.08 134.72C130.467 130.983 130.183 127.207 129.24 123.57C128.49 121.11 127.32 119.38 125.77 118.73V118.65L107 114.21V114.29C106.816 114.202 106.625 114.129 106.43 114.07C101.55 112.92 95.23 122.07 92.32 134.38C89.41 146.69 91.01 157.7 95.89 158.85C96.0875 158.89 96.2885 158.91 96.49 158.91V159L112 162.65C112.231 159.865 112.669 157.1 113.31 154.38C116.17 142 122.49 132.92 127.37 134.07ZM111 138.8C109.35 145.8 106.36 151.52 103.28 154.27C101.74 155.64 100.18 156.27 98.74 155.94C94.44 154.94 92.96 145.61 95.43 135.13C97.9 124.65 103.43 116.97 107.68 117.98C109.11 118.32 110.23 119.59 110.99 121.5C112.54 125.34 112.66 131.8 111 138.8Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"254 14.83\"\n          />\n          <path\n            d=\"M107.69 118C103.39 117 97.91 124.66 95.44 135.15C92.97 145.64 94.44 154.95 98.75 155.96C100.19 156.3 101.75 155.66 103.29 154.29C106.37 151.54 109.36 145.81 111.01 138.82C112.66 131.83 112.54 125.36 111.01 121.52C110.24 119.59 109.12 118.32 107.69 118Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"254 14.83\"\n          />\n          <path\n            d=\"M124.7 81.91C124.657 78.0659 125.777 74.2985 127.912 71.1015C130.047 67.9045 133.098 65.427 136.665 63.9937C140.232 62.5603 144.149 62.238 147.903 63.0688C151.656 63.8997 155.071 65.8451 157.7 68.65C158.27 66.91 158.6 65.09 159.04 63.3V58.54C158.935 58.2355 158.848 57.9249 158.78 57.61C157.09 47.26 151.21 40.41 141.43 36.85C140.17 36.39 138.43 36.48 137.65 35.65C136.87 34.82 136.81 33.06 136.37 31.74C134.414 25.8559 130.346 20.9056 124.953 17.8453C119.56 14.785 113.225 13.8318 107.17 15.17C104.457 15.9571 101.787 16.885 99.17 17.95C95.3247 11.6536 89.5188 6.79344 82.644 4.11604C75.7691 1.43864 68.2055 1.09199 61.1146 3.12932C54.0236 5.16665 47.7975 9.47532 43.3924 15.3936C38.9873 21.312 36.6466 28.5127 36.73 35.89L34.73 36.39C29.6891 37.5931 25.1449 40.3289 21.7228 44.2208C18.3007 48.1128 16.1688 52.9696 15.6206 58.123C15.0724 63.2765 16.1347 68.4731 18.6614 72.9979C21.1881 77.5227 25.055 81.1533 29.73 83.39C31.6077 81.1802 34.0752 79.5499 36.8444 78.6894C39.6137 77.8289 42.5705 77.7736 45.37 78.53C47.3648 79.0853 49.2293 80.0316 50.8551 81.3141C52.4809 82.5965 53.8354 84.1893 54.84 86H116.84C118.68 84.1475 120.989 82.8305 123.52 82.19L124.7 81.91Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"260 50\"\n          />\n          <path\n            d=\"M193.85 94.22C193.506 91.5214 192.395 88.9782 190.649 86.892C188.903 84.8058 186.596 83.2642 184 82.45C183.28 82.19 182.31 82.24 181.85 81.77C181.39 81.3 181.38 80.31 181.13 79.56C180.023 76.2241 177.718 73.4174 174.66 71.6829C171.603 69.9484 168.012 69.4093 164.58 70.17C163.037 70.6125 161.518 71.1366 160.03 71.74C159.335 70.6354 158.534 69.6006 157.64 68.65C155.011 65.8451 151.596 63.8997 147.843 63.0688C144.089 62.2379 140.172 62.5603 136.605 63.9937C133.038 65.427 129.987 67.9045 127.852 71.1015C125.717 74.2985 124.597 78.0659 124.64 81.91L123.51 82.19C120.979 82.8305 118.67 84.1475 116.83 86C114.437 88.3609 112.956 91.4923 112.65 94.84C112.509 96.8135 112.775 98.795 113.431 100.662C114.088 102.528 115.121 104.24 116.467 105.69C117.812 107.141 119.441 108.299 121.253 109.094C123.065 109.889 125.021 110.303 127 110.31H179.64C182.623 110.272 185.523 109.318 187.947 107.578C190.37 105.838 192.2 103.395 193.19 100.58C193.53 99.58 193.72 98.49 193.98 97.44V94.74C193.926 94.5694 193.883 94.3958 193.85 94.22V94.22Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"180 90\"\n          />\n          <path\n            d=\"M66.36 103.87C66.1262 101.483 65.1627 99.2265 63.6006 97.4067C62.0385 95.587 59.9538 94.2927 57.63 93.7L56.72 93.47C56.7543 90.8588 56.1062 88.2839 54.84 86C53.8353 84.1865 52.4797 82.5911 50.8521 81.3068C49.2245 80.0226 47.3575 79.0753 45.36 78.52C42.5605 77.7636 39.6037 77.8189 36.8344 78.6794C34.0652 79.5399 31.5977 81.1702 29.72 83.38C29.1984 83.9829 28.7237 84.6247 28.3 85.3C27.1048 84.7999 25.8829 84.3659 24.64 84C21.8804 83.3881 18.992 83.8214 16.5334 85.216C14.0749 86.6107 12.2209 88.8675 11.33 91.55C11.13 92.15 11.14 92.93 10.75 93.33C10.36 93.73 9.6 93.67 9.03 93.88C6.94507 94.5356 5.09181 95.7751 3.68986 97.4518C2.28791 99.1285 1.39605 101.172 1.12 103.34C1.08929 103.482 1.0492 103.623 1 103.76V106C1.21 106.85 1.36 107.71 1.64 108.53C2.43504 110.792 3.90603 112.756 5.85384 114.154C7.80165 115.553 10.1322 116.32 12.53 116.35H54.86C56.4519 116.341 58.0248 116.004 59.481 115.361C60.9371 114.718 62.2452 113.782 63.324 112.611C64.4027 111.44 65.229 110.06 65.7513 108.556C66.2736 107.052 66.4808 105.457 66.36 103.87V103.87Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"180 90\"\n          />\n          <path\n            d=\"M210 160.76L203.39 159.21C204.65 162.96 204.65 169.02 203.11 175.58C202.119 180.257 200.22 184.694 197.52 188.64L203.13 189.96C206.25 190.16 210.13 184.41 211.93 176.67C213.73 168.93 212.84 162 210 160.76Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"180 90\"\n          />\n          <path\n            d=\"M203.35 159.16C202.73 157.3 201.8 156 200.59 155.49V155.43L150.24 143.57C151.63 148.14 151.58 155.27 149.77 162.98C147.96 170.69 144.82 177.09 141.53 180.56L191.88 192.42V192.36C193.66 192.47 195.62 191.06 197.45 188.59C200.15 184.644 202.049 180.207 203.04 175.53C204.61 169 204.61 162.91 203.35 159.16Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"254 14.83\"\n          />\n          <path\n            d=\"M150.26 143.57C149.51 141.11 148.34 139.38 146.79 138.73V138.65L128 134.21V134.29C127.816 134.202 127.625 134.129 127.43 134.07C122.55 132.92 116.23 142.07 113.32 154.38C110.41 166.69 112.01 177.7 116.89 178.85C117.088 178.89 117.289 178.91 117.49 178.91V179L136.34 183.44V183.36C138.01 183.47 139.83 182.44 141.6 180.57C144.89 177.1 148.02 170.7 149.84 162.99C151.66 155.28 151.65 148.14 150.26 143.57ZM119.75 175.94C115.45 174.94 113.97 165.61 116.44 155.13C118.91 144.65 124.39 137 128.69 138C130.12 138.34 131.24 139.61 132 141.52C133.54 145.36 133.66 151.82 132 158.82C130.34 165.82 127.36 171.54 124.28 174.29C122.75 175.64 121.19 176.28 119.75 175.94Z\"\n            fill=\"#D7D2D2\"\n            fillOpacity=\"0.2\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"180 90\"\n          />\n          <path\n            d=\"M132 141.5C131.24 139.59 130.12 138.32 128.69 137.98C124.39 136.98 118.91 144.64 116.44 155.13C113.97 165.62 115.44 174.93 119.75 175.94C121.19 176.28 122.75 175.64 124.29 174.27C127.37 171.52 130.36 165.79 132.01 158.8C133.66 151.81 133.54 145.34 132 141.5Z\"\n            fill=\"white\"\n            stroke=\"#D7D2D2\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeDasharray=\"254 14.83\"\n          />\n        </svg>\n      )}\n    />\n  );\n};\n\nexport default NoSearchResultsIllust;\n"
  },
  {
    "path": "src/lv1/images/NotFoundSwallow.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { Vibes2021BackgroundColor } from '../../constants';\nimport NotFoundSwallow from './NotFoundSwallow';\n\nexport default {\n  component: NotFoundSwallow,\n};\n\nexport const NotFoundSwallowComponent = () => (\n  <NotFoundSwallow {...commonKnobs()} />\n);\n\nexport const FitWidth = () => (\n  <>\n    <div\n      style={{\n        width: '10rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <NotFoundSwallow size=\"fit-width\" />\n    </div>\n    <div\n      style={{\n        width: '20rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <NotFoundSwallow size=\"fit-width\" />\n    </div>\n    <div\n      style={{\n        width: '30rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <NotFoundSwallow size=\"fit-width\" />\n    </div>\n  </>\n);\n\nexport const FitHeight = () => (\n  <>\n    <div\n      style={{\n        height: '10rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <NotFoundSwallow size=\"fit-height\" />\n    </div>\n    <div\n      style={{\n        height: '20rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <NotFoundSwallow size=\"fit-height\" />\n    </div>\n    <div\n      style={{\n        height: '30rem',\n        background: Vibes2021BackgroundColor,\n        marginBottom: '1rem',\n      }}\n    >\n      <NotFoundSwallow size=\"fit-height\" />\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/images/NotFoundSwallow.tsx",
    "content": "import * as React from 'react';\nimport { SwallowProps, SwallowContainer } from './SwallowContainer';\n\ntype Props = SwallowProps;\n\nconst NotFoundSwallow: React.FC<Props> = (props: Props) => {\n  return (\n    <SwallowContainer\n      {...props}\n      mediumHeightRem={12}\n      renderSVG={({ className, styles }) => (\n        <svg\n          className={className}\n          viewBox=\"0 0 196 192\"\n          role=\"presentation\"\n          aria-hidden=\"true\"\n          style={styles}\n        >\n          <path\n            d=\"M41.7359,70.342869 L56.8569,98.976869 C57.7609,100.689869 57.1059,102.810869 55.3929,103.715869 C53.6809,104.620869 51.5589,103.965869 50.6539,102.252869 L35.5359,73.621869\"\n            fill=\"#B4DC7D\"\n          ></path>\n          <path\n            d=\"M53.7584,105.122569 C52.0824,105.122569 50.5534,104.201569 49.7704,102.720569 L34.6604,74.104569 C34.4024,73.616569 34.5894,73.011569 35.0774,72.753569 C35.5664,72.494569 36.1714,72.682569 36.4284,73.170569 L51.5384,101.785569 C52.1664,102.972569 53.7264,103.466569 54.9254,102.831569 C55.7514,102.396569 56.2624,101.546569 56.2624,100.612569 C56.2624,100.202569 56.1654,99.809569 55.9724,99.443569 L40.8514,70.809569 C40.5934,70.321569 40.7804,69.716569 41.2694,69.458569 C41.7584,69.200569 42.3624,69.387569 42.6204,69.875569 L57.7404,98.510569 C58.0824,99.156569 58.2624,99.884569 58.2624,100.612569 C58.2624,102.291569 57.3414,103.818569 55.8594,104.600569 C55.2134,104.941569 54.4864,105.122569 53.7584,105.122569\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M34.3028,24.887269 C47.8738,29.074269 55.4818,43.470269 51.2948,57.041269 C47.1088,70.612269 32.7128,78.220269 19.1418,74.033269 C5.5708,69.846269 -2.0372,55.451269 2.1488,41.880269 C6.3358,28.308269 20.7318,20.700269 34.3028,24.887269\"\n            fill=\"#B4DC7D\"\n          ></path>\n          <path\n            d=\"M26.731,76.183169 C24.067,76.183169 21.415,75.781169 18.847,74.989169 C7.574,71.511169 0,61.255169 0,49.469169 C0,46.806169 0.401,44.153169 1.193,41.585169 C4.379,31.259169 13.387,23.910169 24.143,22.863169 C24.692,22.808169 25.182,23.212169 25.235,23.762169 C25.289,24.311169 24.886,24.800169 24.336,24.853169 C14.386,25.823169 6.052,32.621169 3.105,42.175169 C2.371,44.552169 2,47.006169 2,49.469169 C2,60.372169 9.007,69.860169 19.437,73.078169 C21.814,73.811169 24.268,74.183169 26.731,74.183169 C37.634,74.183169 47.122,67.176169 50.339,56.746169 C51.073,54.370169 51.445,51.915169 51.445,49.452169 C51.445,38.548169 44.438,29.060169 34.008,25.843169 C33.482,25.681169 33.144,25.111169 33.304,24.584169 C33.463,24.057169 33.976,23.747169 34.505,23.903169 C34.515,23.906169 34.609,23.935169 34.619,23.938169 C45.871,27.409169 53.445,37.665169 53.445,49.452169 C53.445,52.116169 53.043,54.768169 52.251,57.336169 C48.773,68.609169 38.517,76.183169 26.731,76.183169\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M32.2354,31.588969 C42.1054,34.633969 47.6384,45.103969 44.5934,54.973969 C41.5484,64.842969 31.0794,70.376969 21.2094,67.331969 C11.3394,64.286969 5.8064,53.817969 8.8504,43.946969 C11.8954,34.076969 22.3654,28.544969 32.2354,31.588969\"\n            fill=\"#EBF3FF\"\n          ></path>\n          <path\n            d=\"M26.733,31.756369 C19.169,31.756369 12.15,36.646369 9.806,44.242369 C8.413,48.760369 8.862,53.551369 11.071,57.732369 C13.28,61.912369 16.985,64.982369 21.504,66.376369 C26.022,67.770369 30.812,67.321369 34.994,65.111369 C39.174,62.902369 42.244,59.197369 43.638,54.678369 C46.515,45.351369 41.268,35.422369 31.941,32.544369 C30.21,32.010369 28.457,31.756369 26.733,31.756369 M26.747,69.172369 C24.795,69.172369 22.833,68.879369 20.914,68.287369 C15.885,66.735369 11.762,63.319369 9.303,58.666369 C6.844,54.013369 6.344,48.681369 7.895,43.652369 C11.098,33.272369 22.148,27.430369 32.53,30.633369 C42.911,33.836369 48.752,44.887369 45.549,55.268369 C43.998,60.297369 40.581,64.421369 35.928,66.880369 C33.05,68.400369 29.912,69.172369 26.747,69.172369\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M184.421,0.999568959 C176.511,37.678569 152.412,67.217569 120.728,83.379569 C133.904,86.776569 147.72,88.583569 161.958,88.583569 C173.212,88.583569 184.203,87.454569 194.823,85.303569 L194.359,86.325569 C193.72,87.732569 192.557,88.845569 191.111,89.393569 C183.685,92.203569 176.002,94.492569 168.107,96.215569 C166.407,96.586569 164.811,97.361569 163.551,98.562569 C161.878,100.155569 160.117,101.657569 158.278,103.062569 L188.993,106.636569 C191.082,106.879569 192.811,108.372569 193.356,110.403569 L148.39,110.403569 C146.811,110.403569 145.262,110.753569 143.8,111.350569 C136.911,114.158569 129.417,115.789569 121.567,115.991569 C138.895,136.052569 148.44,162.831569 146.098,190.999569 L74.94,98.528569 C72.424,95.260569 68.837,92.981569 64.809,92.094569 L46.07,87.963569 L55.479,85.678569 L55.474,85.674569 C60.66,79.477569 68.453,75.535569 77.166,75.535569 C78.525,75.535569 79.861,75.630569 81.169,75.816569 C84.345,76.266569 87.568,75.497569 90.11,73.541569 L184.421,0.999568959 Z\"\n            fill=\"#FFFFFF\"\n          ></path>\n          <path\n            d=\"M184.421,0.999568959 C176.511,37.678569 152.412,67.217569 120.728,83.379569 C133.904,86.776569 147.72,88.583569 161.958,88.583569 C173.212,88.583569 184.203,87.454569 194.823,85.303569 L194.359,86.325569 C193.72,87.732569 192.557,88.845569 191.111,89.393569 C183.685,92.203569 176.002,94.492569 168.107,96.215569 C166.407,96.586569 164.811,97.361569 163.551,98.562569 C161.878,100.155569 160.117,101.657569 158.278,103.062569 L188.993,106.636569 C191.082,106.879569 192.811,108.372569 193.356,110.403569 L148.39,110.403569 C146.811,110.403569 145.262,110.753569 143.8,111.350569 C136.911,114.158569 129.417,115.789569 121.567,115.991569 C138.895,136.052569 148.44,162.831569 146.098,190.999569 L74.94,98.528569 C72.424,95.260569 68.837,92.981569 64.809,92.094569 L46.07,87.963569 L55.479,85.678569 L55.474,85.674569 C60.66,79.477569 68.453,75.535569 77.166,75.535569 C78.525,75.535569 79.861,75.630569 81.169,75.816569 C84.345,76.266569 87.568,75.497569 90.11,73.541569 L184.421,0.999568959 Z\"\n            fill=\"#AAC8FF\"\n          ></path>\n          <path\n            d=\"M146.0977,191.999569 C145.7927,191.999569 145.4977,191.859569 145.3057,191.609569 L74.1467,99.138569 C71.7787,96.061569 68.3857,93.906569 64.5937,93.070569 L45.8547,88.940569 C45.3997,88.840569 45.0747,88.439569 45.0696417,87.974569 C45.0647,87.509569 45.3817,87.102569 45.8337,86.992569 L54.9147,84.786569 C60.4927,78.267569 68.5827,74.535569 77.1657,74.535569 C78.5537,74.535569 79.9477,74.633569 81.3097,74.826569 C81.8447,74.902569 82.3897,74.940569 82.9317,74.940569 C85.3647,74.940569 87.6357,74.183569 89.5007,72.748569 L124.2557,46.015569 C124.6927,45.678569 125.3217,45.760569 125.6587,46.198569 C125.9947,46.636569 125.9127,47.264569 125.4757,47.600569 L90.7207,74.333569 C88.5017,76.039569 85.8087,76.940569 82.9317,76.940569 C82.2967,76.940569 81.6557,76.895569 81.0287,76.806569 C79.7597,76.626569 78.4597,76.535569 77.1657,76.535569 C69.0987,76.535569 61.4987,80.074569 56.2977,86.248569 C56.1607,86.445569 55.9557,86.591569 55.7147,86.650569 L50.5017,87.916569 L65.0247,91.117569 C69.2747,92.054569 73.0767,94.470569 75.7317,97.918569 L145.2847,188.302569 C145.3927,186.393569 145.4477,184.475569 145.4477,182.575569 C145.4477,158.453569 136.6987,135.039569 120.8107,116.645569 C120.5577,116.353569 120.4967,115.940569 120.6527,115.587569 C120.8087,115.233569 121.1557,115.002569 121.5417,114.991569 C129.1037,114.797569 136.4657,113.260569 143.4227,110.424569 C145.0807,109.747569 146.7527,109.403569 148.3897,109.403569 L191.8147,109.403569 C191.1547,108.430569 190.0977,107.771569 188.8767,107.629569 L158.1617,104.055569 C157.7577,104.008569 157.4217,103.720569 157.3137,103.326569 C157.2057,102.934569 157.3477,102.514569 157.6707,102.267569 C159.4757,100.889569 161.2227,99.398569 162.8617,97.838569 C164.1987,96.563569 165.9377,95.665569 167.8927,95.238569 C175.6457,93.546569 183.3377,91.265569 190.7577,88.457569 C191.6647,88.114569 192.4557,87.484569 193.0147,86.677569 C182.8347,88.606569 172.3977,89.583569 161.9577,89.583569 C147.9097,89.583569 133.9537,87.822569 120.4777,84.348569 C120.0757,84.244569 119.7787,83.902569 119.7337,83.489569 C119.6877,83.076569 119.9027,82.677569 120.2727,82.489569 C151.9687,66.321569 174.6417,37.629569 182.8297,3.48556896 L151.0407,27.937569 C150.6027,28.274569 149.9747,28.192569 149.6387,27.754569 C149.3017,27.316569 149.3837,26.688569 149.8207,26.352569 L183.8107,0.207568959 C184.1447,-0.0484310406 184.6007,-0.0694310406 184.9547,0.154568959 C185.3097,0.378568959 185.4867,0.800568959 185.3987,1.21056896 C177.8367,36.277569 155.3507,65.962569 123.5227,83.045569 C136.0447,86.058569 148.9607,87.583569 161.9577,87.583569 C172.9517,87.583569 183.9427,86.486569 194.6237,84.323569 C194.9937,84.247569 195.3707,84.387569 195.6047,84.681569 C195.8397,84.975569 195.8887,85.374569 195.7337,85.717569 L195.2697,86.738569 C194.5197,88.388569 193.1337,89.696569 191.4657,90.328569 C183.9547,93.170569 176.1677,95.479569 168.3197,97.191569 C166.7227,97.540569 165.3127,98.265569 164.2407,99.285569 C163.1317,100.342569 161.9757,101.366569 160.7867,102.347569 L189.1087,105.643569 C191.6197,105.935569 193.6657,107.702569 194.3217,110.145569 C194.4017,110.444569 194.3387,110.766569 194.1487,111.012569 C193.9597,111.259569 193.6667,111.403569 193.3557,111.403569 L148.3897,111.403569 C147.0127,111.403569 145.5957,111.696569 144.1777,112.275569 C137.6287,114.945569 130.7337,116.500569 123.6517,116.905569 C139.0127,135.416569 147.4477,158.653569 147.4477,182.575569 C147.4477,185.398569 147.3287,188.261569 147.0947,191.082569 C147.0597,191.493569 146.7767,191.842569 146.3807,191.958569 C146.2867,191.985569 146.1917,191.999569 146.0977,191.999569\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M77.9493,94.667569 C88.5873,105.602569 103.4603,112.394569 119.9203,112.394569 C134.7163,112.394569 148.2293,106.905569 158.5373,97.855569 C138.9393,98.049569 117.5303,93.593569 104.6373,92.906569 C95.5123,92.307569 86.5563,92.938569 77.9493,94.667569\"\n            fill=\"#FFFFFF\"\n          ></path>\n          <path\n            d=\"M77.9493,94.667569 C88.5873,105.602569 103.4603,112.394569 119.9203,112.394569 C134.7163,112.394569 148.2293,106.905569 158.5373,97.855569 C138.9393,98.049569 117.5303,93.593569 104.6373,92.906569 C95.5123,92.307569 86.5563,92.938569 77.9493,94.667569\"\n            fill=\"#FFFFFF\"\n          ></path>\n          <path\n            d=\"M119.9205,113.394069 C103.7035,113.394069 88.5435,106.991069 77.2325,95.365069 C76.9775,95.102069 76.8855,94.721069 76.9945,94.372069 C77.1025,94.022069 77.3935,93.759069 77.7525,93.687069 C85.3525,92.160069 93.1405,91.492069 100.9625,91.730069 C101.5155,91.747069 101.9495,92.207069 101.9325,92.760069 C101.9165,93.313069 101.4605,93.720069 100.9035,93.730069 C93.8665,93.518069 86.8645,94.049069 79.9955,95.294069 C90.7715,105.692069 104.8745,111.394069 119.9205,111.394069 C132.9895,111.394069 145.6225,106.958069 155.7865,98.853069 C144.3255,98.727069 132.5425,97.187069 122.0945,95.822069 C118.5685,95.362069 115.2385,94.926069 112.1665,94.580069 C111.6175,94.517069 111.2235,94.022069 111.2855,93.473069 C111.3465,92.924069 111.8415,92.532069 112.3915,92.591069 C115.4815,92.941069 118.8185,93.377069 122.3535,93.839069 C133.5785,95.306069 146.3485,96.969069 158.5275,96.855069 C158.9835,96.884069 159.3225,97.108069 159.4715,97.498069 C159.6205,97.888069 159.5115,98.331069 159.1965,98.606069 C148.3375,108.142069 134.3885,113.394069 119.9205,113.394069\"\n            fill=\"#2864F0\"\n          ></path>\n          <path\n            d=\"M74.9327,82.625069 C72.7567,82.625069 70.9927,84.389069 70.9927,86.565069 C70.9927,88.741069 72.7567,90.505069 74.9327,90.505069 C77.1087,90.505069 78.8727,88.741069 78.8727,86.565069 C78.8727,84.389069 77.1087,82.625069 74.9327,82.625069\"\n            fill=\"#FFFFFF\"\n          ></path>\n          <path\n            d=\"M74.9327,83.625069 C73.3117,83.625069 71.9927,84.944069 71.9927,86.565069 C71.9927,88.186069 73.3117,89.505069 74.9327,89.505069 C76.5537,89.505069 77.8727,88.186069 77.8727,86.565069 C77.8727,84.944069 76.5537,83.625069 74.9327,83.625069 M74.9327,91.505069 C72.2087,91.505069 69.9927,89.289069 69.9927,86.565069 C69.9927,83.841069 72.2087,81.625069 74.9327,81.625069 C77.6567,81.625069 79.8727,83.841069 79.8727,86.565069 C79.8727,89.289069 77.6567,91.505069 74.9327,91.505069\"\n            fill=\"#2864F0\"\n          ></path>\n        </svg>\n      )}\n    />\n  );\n};\n\nexport default NotFoundSwallow;\n"
  },
  {
    "path": "src/lv1/images/SwallowContainer.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\nexport type SwallowProps = {\n  /**\n   * ロゴの大きさを指定します。`fit-width` と `fit-height` でそれぞれ親要素に対して100%となるよう表示します。\n   */\n  size?: 'medium' | 'fit-width' | 'fit-height';\n} & CommonProps &\n  MarginClassProps;\n\ntype Props = SwallowProps & {\n  /**\n   * サイズ無指定で配置した場合の高さを指定します。\n   */\n  mediumHeightRem: number;\n  renderSVG: (props: {\n    className: string;\n    styles: React.CSSProperties;\n  }) => React.ReactNode;\n};\n\nexport const SwallowContainer: React.FC<Props> = (props: Props) => {\n  const {\n    size,\n    mediumHeightRem,\n    renderSVG,\n    marginTop,\n    marginRight,\n    marginLeft,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const className = 'vb-swallow';\n\n  const width = size === 'fit-width' ? '100%' : 'auto';\n  const height =\n    size === 'fit-height'\n      ? '100%'\n      : size === 'fit-width'\n      ? 'auto'\n      : `${mediumHeightRem}rem`;\n\n  const styles: React.CSSProperties = {\n    width: size === 'fit-width' ? '100%' : 'auto',\n    height: size === 'fit-width' ? 'auto' : '100%',\n  };\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        className,\n        {},\n        { marginTop, marginRight, marginLeft, marginBottom, marginSize }\n      )}\n      style={{\n        width,\n        height,\n      }}\n    >\n      {renderSVG({ className: `${className}__svg`, styles })}\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv1/images/discovery-illust.json",
    "content": "{\"v\":\"5.7.4\",\"fr\":29.9700012207031,\"ip\":0,\"op\":150.000006109625,\"w\":800,\"h\":800,\"nm\":\"InitialSetting\",\"ddd\":0,\"assets\":[],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"Huttアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.594],\"y\":[1]},\"o\":{\"x\":[0.569],\"y\":[0]},\"t\":0,\"s\":[-10]},{\"i\":{\"x\":[0.282],\"y\":[1.173]},\"o\":{\"x\":[0.425],\"y\":[0]},\"t\":10,\"s\":[-4.477]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.493],\"y\":[3.847]},\"t\":19,\"s\":[-10]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.589],\"y\":[0]},\"t\":38,\"s\":[-10]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[1],\"y\":[0]},\"t\":64,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":102,\"s\":[24]},{\"t\":145.000005905971,\"s\":[-10]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":11,\"s\":[155.932,580.658,0],\"to\":[-11,-5.583,0],\"ti\":[62.682,4.158,0]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":37,\"s\":[89.932,547.158,0],\"to\":[-62.682,-4.158,0],\"ti\":[-81.568,-15.092,0]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":93,\"s\":[198.432,487.658,0],\"to\":[81.568,15.092,0],\"ti\":[7.083,-15.5,0]},{\"t\":145.000005905971,\"s\":[155.932,580.658,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[37.78,77.44,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":8,\"s\":[100,100,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[0.833,0.833,0.833]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0.167,0.167,0.167]},\"t\":74,\"s\":[82,82,100]},{\"t\":129.000005254278,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-5.895,-3.541],[15.559,-4.963],[20.461,7.446],[-4.859,1.703],[-37.875,10.014],[0,0]],\"o\":[[-11.163,14.765],[-27.499,8.771],[0.718,-6.701],[0,0],[39.495,-10.443],[5.321,-1.483]],\"v\":[[68.78,-20.892],[13.59,8.087],[-68.78,18.513],[-51.764,2.086],[-1.133,-5.255],[44.788,-24.476]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[73.78,61.921],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[4.732,-3.123],[4.876,-2.243],[4.751,-1.725],[4.236,-1.351],[5.528,-1.562],[5.456,-1.226],[5.401,-0.725],[5.284,0.117],[4.83,1.758],[-4.858,1.703],[-12.323,1.503],[-6.755,1.412],[-6.214,1.643],[-4.626,1.51],[-4.035,1.785],[-7.08,4.459],[-5.895,-3.541]],\"o\":[[-2.913,3.852],[-4.233,2.795],[-4.877,2.245],[-5.538,2.011],[-5.177,1.651],[-5.383,1.522],[-5.599,1.258],[-5.859,0.786],[-6.11,-0.136],[0.719,-6.7],[8.545,-0.627],[4.55,-0.554],[4.916,-1.027],[6.111,-1.616],[6.491,-2.118],[11.675,-5.164],[5.321,-1.483],[0,0]],\"v\":[[68.658,-18.679],[56.974,-8.35],[43.824,0.589],[28.383,4.596],[13.521,9.831],[-2.73,14.184],[-18.721,19.525],[-35.228,23.018],[-52.073,22.942],[-68.658,20.939],[-51.57,5.163],[-34.685,2.814],[-17.4,2.35],[-0.889,-2.467],[14.889,-8.092],[30.365,-14.243],[44.77,-22.321],[68.621,-17.97]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[71.634,60.505],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-5.895,-3.541],[15.559,-4.963],[20.461,7.446],[-4.859,1.703],[-37.875,10.014],[0,0]],\"o\":[[-11.163,14.765],[-27.499,8.771],[0.718,-6.701],[0,0],[39.495,-10.443],[5.321,-1.483]],\"v\":[[68.78,-20.892],[13.59,8.087],[-68.78,18.513],[-51.764,2.086],[-1.133,-5.255],[44.788,-24.476]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[73.78,61.921],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[22.524,-6.277],[-6.508,-23.351],[-25.223,5.766]],\"o\":[[-6.508,-23.35],[-22.623,6.306],[0,0],[25.224,-5.766]],\"v\":[[51.837,0.976],[-8.53,-27.763],[-45.329,28.058],[1.857,28.274]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[68.321,39.04],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-23.983,5.63],[-3.34,2.809],[0,0],[35.635,-8.988]],\"o\":[[0,0],[0,0],[33.848,-7.947],[1.224,-1.03],[0,0],[-17.633,4.447]],\"v\":[[-49.494,9.224],[-48.991,16.92],[-3.253,11.276],[48.27,-9.443],[44.583,-16.92],[-2.863,2.961]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[71.572,48.869],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[4.767,-6.234],[-2.507,-2.929],[-9.278,0.836],[-5.614,0.878],[-5.209,1.223],[-5.262,1.67],[-4.662,2.083],[-1.787,1.503],[4.133,1.214],[10.702,-4.958],[6.499,-2.176],[6.231,-1.572],[5.434,-0.817],[4.787,-0.499]],\"o\":[[-2.342,3.063],[5.004,5.846],[4.458,-0.402],[4.798,-0.75],[6.742,-1.583],[7.018,-2.228],[9.388,-4.195],[1.225,-1.03],[-8.28,-2.433],[-4.258,1.973],[-4.838,1.619],[-4.603,1.161],[-5.37,0.807],[-8.926,0.931]],\"v\":[[-47.291,8.156],[-48.074,15.794],[-32.093,15.027],[-16.854,12.723],[-1.571,10.488],[16.323,5.111],[33.539,-2.053],[49.356,-11.535],[46.268,-19.207],[31.128,-10.052],[14.89,-4.39],[-1.451,1.046],[-16.906,3.524],[-32.278,7.148]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[68.085,52.484],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-23.983,5.63],[-3.34,2.809],[0,0],[35.635,-8.988]],\"o\":[[0,0],[0,0],[33.848,-7.947],[1.224,-1.03],[0,0],[-17.633,4.447]],\"v\":[[-49.494,9.224],[-48.991,16.92],[-3.253,11.276],[48.27,-9.443],[44.583,-16.92],[-2.863,2.961]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[71.572,48.869],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 7\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[22.524,-6.277],[-6.508,-23.351],[-25.223,5.766]],\"o\":[[-6.508,-23.35],[-22.623,6.306],[0,0],[25.224,-5.766]],\"v\":[[51.837,0.976],[-8.53,-27.763],[-45.329,28.058],[1.857,28.274]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[68.321,39.04],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 8\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.507,8.908],[4.361,4.343],[5.718,2.476],[6.036,0.577],[5.678,-1.582],[5.043,-3.739],[3.532,-4.964],[1.437,-5.799],[-1.669,-5.987],[-9.517,-0.724],[-5.861,0.389],[-5.443,1.244],[-5.732,2.733],[-4.831,3.165]],\"o\":[[-1.668,-5.983],[-4.232,-4.214],[-5.592,-2.421],[-6.258,-0.597],[-5.691,1.587],[-4.877,3.615],[-3.614,5.078],[-1.48,5.974],[5.661,5.552],[4.597,0.349],[4.952,-0.328],[6.137,-1.403],[6.115,-2.915],[9.252,-6.06]],\"v\":[[49.193,-1.429],[40.809,-17.199],[25.137,-26.713],[7.464,-30.877],[-10.628,-29.848],[-26.486,-21.155],[-38.973,-8.208],[-47.438,7.746],[-47.523,25.922],[-31.857,28.994],[-15.947,28.513],[-0.432,25.374],[17.93,20.069],[33.869,9.441]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[66.452,45.243],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 9\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":9,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[22.524,-6.277],[-6.508,-23.351],[-25.223,5.766]],\"o\":[[-6.508,-23.35],[-22.623,6.306],[0,0],[25.224,-5.766]],\"v\":[[51.837,0.976],[-8.53,-27.763],[-45.329,28.058],[1.857,28.274]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[68.321,39.04],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 10\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":10,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"OnigiriGroupアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[491.412,716.19,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[53.367,41.886,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.913,0.297],[-2.827,0.381],[5.499,10.107],[8.166,-0.517],[-0.11,-2.29],[2.981,-10.176],[-3.317,-0.218]],\"o\":[[2.339,-0.381],[4.298,-11.112],[-2.044,-3.094],[0,0],[1.782,10.291],[3.507,0.286],[0,0]],\"v\":[[2.548,19.174],[10.447,18.076],[7.382,-16.406],[-14.727,-16.206],[-14.635,-12.526],[-14.402,18.836],[-4.049,19.5]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[67.816,59.272],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.913,0.297],[-2.827,0.382],[0.603,5.944],[2.761,5.074],[8.166,-0.517],[-0.111,-2.29],[-0.21,-5.273],[1.493,-5.097],[-3.317,-0.218]],\"o\":[[2.339,-0.381],[2.141,-5.533],[-0.609,-5.994],[-2.044,-3.094],[-1.793,0.418],[0.889,5.136],[0.211,5.292],[3.506,0.286],[3.299,0.014]],\"v\":[[4.347,18.905],[12.262,17.969],[14.137,0.455],[9.361,-16.607],[-12.946,-16.467],[-13.095,-12.594],[-10.575,3.051],[-12.596,18.735],[-2.234,19.687]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[63,62.377],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.913,0.297],[-2.827,0.381],[5.499,10.107],[8.166,-0.517],[-0.11,-2.29],[2.981,-10.176],[-3.317,-0.218]],\"o\":[[2.339,-0.381],[4.298,-11.112],[-2.044,-3.094],[0,0],[1.782,10.291],[3.507,0.286],[0,0]],\"v\":[[2.548,19.174],[10.447,18.076],[7.382,-16.406],[-14.727,-16.206],[-14.635,-12.526],[-14.402,18.836],[-4.049,19.5]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[67.816,59.272],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[6.219,9.772],[-5.774,10.217],[-11.105,-3.109],[3.109,-22.654],[10.054,-1.881]],\"o\":[[-12.222,-0.922],[-6.219,-8.884],[5.775,-10.66],[23.542,6.219],[-0.889,8.44],[-3.913,0.34]],\"v\":[[0.895,34.886],[-32.648,24.192],[-24.653,-9.123],[1.999,-31.777],[35.758,23.303],[7.492,34.512]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[62.867,43.886],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.913,0.297],[-2.827,0.381],[5.499,10.107],[8.166,-0.517],[-0.11,-2.29],[2.981,-10.176],[-3.317,-0.218]],\"o\":[[2.339,-0.381],[4.298,-11.112],[-2.044,-3.094],[0,0],[1.782,10.291],[3.507,0.286],[0,0]],\"v\":[[2.548,19.174],[10.447,18.076],[7.382,-16.406],[-14.727,-16.206],[-14.635,-12.526],[-14.402,18.836],[-4.049,19.5]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[48.816,55.272],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.913,0.297],[-2.827,0.382],[0.603,5.944],[2.761,5.074],[8.166,-0.517],[-0.111,-2.29],[-0.21,-5.273],[1.493,-5.097],[-3.317,-0.218]],\"o\":[[2.339,-0.381],[2.141,-5.533],[-0.609,-5.994],[-2.044,-3.094],[-1.793,0.418],[0.889,5.136],[0.211,5.292],[3.506,0.286],[3.299,0.014]],\"v\":[[4.347,18.905],[12.262,17.969],[14.137,0.455],[9.361,-16.607],[-12.946,-16.467],[-13.095,-12.594],[-10.576,3.051],[-12.596,18.735],[-2.234,19.687]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[44,58.377],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.913,0.297],[-2.827,0.381],[5.499,10.107],[8.166,-0.517],[-0.11,-2.29],[2.981,-10.176],[-3.317,-0.218]],\"o\":[[2.339,-0.381],[4.298,-11.112],[-2.044,-3.094],[0,0],[1.782,10.291],[3.507,0.286],[0,0]],\"v\":[[2.548,19.174],[10.447,18.076],[7.382,-16.406],[-14.727,-16.206],[-14.635,-12.526],[-14.402,18.836],[-4.049,19.5]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[48.816,55.272],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 7\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[6.219,9.772],[-5.774,10.217],[-11.105,-3.109],[3.109,-22.654],[10.054,-1.881]],\"o\":[[-12.222,-0.922],[-6.219,-8.884],[5.775,-10.66],[23.542,6.219],[-0.889,8.44],[-3.913,0.34]],\"v\":[[0.895,34.886],[-32.648,24.192],[-24.653,-9.123],[1.999,-31.777],[35.758,23.303],[7.492,34.512]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[43.867,39.886],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 8\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"Onigiriアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":18,\"s\":[26]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":34,\"s\":[6]},{\"t\":53.0000021587343,\"s\":[26]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":18,\"s\":[457.743,737.577,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":53.0000021587343,\"s\":[457.743,737.577,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[41.617,70.733,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.25,2.2],[-2.265,1.735],[9.791,6.045],[6.832,-4.502],[-1.233,-1.933],[-2.462,-10.314],[-2.988,1.457]],\"o\":[[1.841,-1.492],[-1.784,-11.78],[-3.31,-1.671],[0,0],[6.654,8.05],[3.186,-1.492],[0,0]],\"v\":[[13.122,13.42],[19.434,8.546],[-0.34,-19.868],[-19.434,-8.721],[-17.529,-5.573],[-1.762,21.539],[7.557,16.977]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[41.747,52.726],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.25,2.2],[-2.265,1.734],[3.474,4.861],[4.916,3.035],[6.833,-4.502],[-1.232,-1.933],[-2.799,-4.474],[-1.233,-5.166],[-2.989,1.457]],\"o\":[[1.841,-1.492],[-0.888,-5.866],[-3.503,-4.902],[-3.31,-1.671],[-1.349,1.252],[3.321,4.018],[2.809,4.489],[3.186,-1.492],[2.865,-1.633]],\"v\":[[13.751,13.357],[20.169,8.633],[13.077,-7.484],[0.501,-19.965],[-18.82,-8.766],[-17.04,-5.298],[-7.028,6.995],[-1.034,21.635],[8.454,17.346]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[38.01,55.64],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.25,2.2],[-2.265,1.735],[9.791,6.045],[6.832,-4.502],[-1.233,-1.933],[-2.462,-10.314],[-2.988,1.457]],\"o\":[[1.841,-1.492],[-1.784,-11.78],[-3.31,-1.671],[0,0],[6.654,8.05],[3.186,-1.492],[0,0]],\"v\":[[13.122,13.42],[19.434,8.546],[-0.34,-19.868],[-19.434,-8.721],[-17.529,-5.573],[-1.762,21.539],[7.557,16.977]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[41.747,52.726],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[10.249,5.397],[0.058,11.735],[-11.184,2.812],[-8.543,-21.21],[7.794,-6.622]],\"o\":[[-11.068,5.265],[-9.808,-4.626],[-0.277,-12.121],[23.524,-6.285],[3.418,7.768],[-3.229,2.238]],\"v\":[[8.182,25.973],[-26.247,33.336],[-35.84,0.446],[-23.945,-32.448],[32.699,-1.385],[13.723,22.374]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[41.116,43.733],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"OnigiriBaseアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[480.043,726.942,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[91.651,49.425,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[9.549,-4.76],[-7.862,-12.575],[-24.224,-1.959],[2.34,11.878],[0,0],[0,0]],\"o\":[[-9.549,4.76],[7.862,12.574],[40.031,5.291],[-2.34,-11.879],[0,0],[0,0]],\"v\":[[-77.102,-39.665],[-59.099,4.201],[12.025,39.134],[84.311,12.508],[42.987,3.353],[-21.786,-21.586]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[91.651,49.425],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[3.254,-1.622],[-3.4,-7.205],[-3.081,-4.848],[-2.349,-3.758],[-7.126,-4.649],[-6.392,-3.041],[-6.229,-2.037],[-5.904,-0.477],[-5.354,0.17],[-5.191,1.018],[-4.789,1.863],[-3.843,2.806],[0.774,3.929],[9.219,0.972],[10.907,2.152],[8.095,3.117],[8.096,3.117],[8.097,3.117],[7.993,3.377],[9.935,4.273],[6.013,1.994]],\"o\":[[-4.084,2.036],[2.174,4.608],[3.366,5.297],[2.453,3.923],[5.193,3.388],[6.099,2.902],[6.997,2.287],[5.66,0.748],[5.761,-0.183],[5.788,-1.135],[5.821,-2.265],[6.167,-4.502],[-1.076,-5.461],[-10.83,-1.141],[-8.511,-1.679],[-8.097,-3.118],[-8.097,-3.118],[-8.098,-3.118],[-9.055,-3.825],[-5.812,-2.5],[-8.422,-2.792]],\"v\":[[-77.98,-39.12],[-77.186,-25.488],[-69.155,-10.902],[-59.568,2.87],[-45.716,17.059],[-28.211,27.264],[-8.656,32.588],[10.367,39.994],[27.046,37.633],[43.732,38.172],[59.3,32.247],[74.106,24.998],[81.29,12.118],[63.764,2.397],[41.242,3.936],[25.246,-3.425],[8.755,-8.885],[-6.913,-16.486],[-23.48,-21.801],[-40.856,-31.138],[-59.787,-36.61]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[89.145,54.115],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[9.549,-4.76],[-7.862,-12.575],[-24.224,-1.959],[2.34,11.878],[0,0],[0,0]],\"o\":[[-9.549,4.76],[7.862,12.574],[40.031,5.291],[-2.34,-11.879],[0,0],[0,0]],\"v\":[[-77.102,-39.665],[-59.099,4.201],[12.025,39.134],[84.311,12.508],[42.987,3.353],[-21.786,-21.586]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[91.651,49.425],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":4,\"nm\":\"Flowerアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.578],\"y\":[1]},\"o\":{\"x\":[0.331],\"y\":[0]},\"t\":10,\"s\":[0]},{\"i\":{\"x\":[0.249],\"y\":[1]},\"o\":{\"x\":[0.398],\"y\":[0]},\"t\":45,\"s\":[180]},{\"t\":89.0000036250443,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[560.694,562.913,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[21.021,20.513,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.31,-1.989],[1.989,1.31],[-1.31,1.989],[-1.989,-1.31]],\"o\":[[-1.31,1.989],[-1.989,-1.31],[1.31,-1.989],[1.989,1.31]],\"v\":[[3.601,2.372],[-2.372,3.601],[-3.601,-2.372],[2.372,-3.601]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[20.796,21.801],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.17,2.955],[3.812,-0.315],[0.63,-0.244],[3.768,-0.311],[-0.146,-3.657],[0.71,-0.059],[-0.213,-3.706],[-2.784,-0.667],[-0.083,-1.444],[-3.812,0.315],[-1.167,1.724],[-2.249,0.186],[0.213,3.706],[0.864,1.03]],\"o\":[[-0.213,-3.706],[-0.705,0.059],[-0.279,-3.643],[-3.771,0.312],[-0.656,-0.14],[-3.812,0.315],[0.17,2.958],[-0.734,1.161],[0.213,3.706],[2.25,-0.186],[1.353,1.516],[3.812,-0.315],[-0.083,-1.447],[2.676,-1.121]],\"v\":[[15.851,-3.509],[8.562,-9.649],[6.555,-9.186],[-0.719,-15.202],[-7.236,-8.038],[-9.292,-8.167],[-15.807,-0.886],[-10.737,5.082],[-11.786,9.059],[-4.497,15.198],[0.851,12.072],[6.505,14.288],[13.021,7.007],[11.521,3.233]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.02,20.513],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":4,\"nm\":\"Flowerアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.578],\"y\":[1]},\"o\":{\"x\":[0.331],\"y\":[0]},\"t\":10,\"s\":[0]},{\"i\":{\"x\":[0.249],\"y\":[1]},\"o\":{\"x\":[0.398],\"y\":[0]},\"t\":45,\"s\":[180]},{\"t\":89.0000036250443,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[101.699,596.069,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[17.699,17.297,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.038,-1.576],[1.576,1.039],[-1.038,1.576],[-1.577,-1.039]],\"o\":[[-1.038,1.576],[-1.577,-1.038],[1.039,-1.577],[1.576,1.038]],\"v\":[[2.855,1.88],[-1.88,2.854],[-2.855,-1.88],[1.88,-2.854]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[17.52,18.317],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.135,2.342],[3.022,-0.25],[0.5,-0.193],[2.987,-0.247],[-0.115,-2.899],[0.563,-0.047],[-0.169,-2.938],[-2.207,-0.529],[-0.065,-1.144],[-3.021,0.25],[-0.925,1.367],[-1.783,0.148],[0.169,2.937],[0.685,0.816]],\"o\":[[-0.169,-2.938],[-0.558,0.047],[-0.221,-2.887],[-2.99,0.247],[-0.519,-0.111],[-3.021,0.249],[0.135,2.345],[-0.582,0.92],[0.169,2.937],[1.783,-0.147],[1.073,1.202],[3.021,-0.25],[-0.066,-1.147],[2.121,-0.889]],\"v\":[[12.564,-2.782],[6.787,-7.648],[5.195,-7.282],[-0.57,-12.049],[-5.736,-6.372],[-7.365,-6.473],[-12.53,-0.702],[-8.511,4.029],[-9.342,7.181],[-3.565,12.047],[0.674,9.569],[5.157,11.326],[10.322,5.555],[9.133,2.563]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[17.699,17.297],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":13,\"ty\":4,\"nm\":\"Flowerアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.578],\"y\":[1]},\"o\":{\"x\":[0.331],\"y\":[0]},\"t\":5,\"s\":[0]},{\"i\":{\"x\":[0.249],\"y\":[1]},\"o\":{\"x\":[0.398],\"y\":[0]},\"t\":40,\"s\":[180]},{\"t\":84.0000034213901,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[712.694,707.913,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[21.021,20.513,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.31,-1.989],[1.989,1.31],[-1.31,1.989],[-1.989,-1.31]],\"o\":[[-1.31,1.989],[-1.989,-1.31],[1.31,-1.989],[1.989,1.31]],\"v\":[[3.601,2.372],[-2.372,3.601],[-3.601,-2.372],[2.372,-3.601]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[20.796,21.801],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.17,2.955],[3.812,-0.315],[0.63,-0.244],[3.768,-0.311],[-0.146,-3.657],[0.71,-0.059],[-0.213,-3.706],[-2.784,-0.667],[-0.083,-1.444],[-3.812,0.315],[-1.167,1.724],[-2.249,0.186],[0.213,3.706],[0.864,1.03]],\"o\":[[-0.213,-3.706],[-0.705,0.059],[-0.279,-3.643],[-3.771,0.312],[-0.656,-0.14],[-3.812,0.315],[0.17,2.958],[-0.734,1.161],[0.213,3.706],[2.25,-0.186],[1.353,1.516],[3.812,-0.315],[-0.083,-1.447],[2.676,-1.121]],\"v\":[[15.851,-3.509],[8.562,-9.649],[6.555,-9.186],[-0.719,-15.202],[-7.236,-8.038],[-9.292,-8.167],[-15.807,-0.886],[-10.737,5.082],[-11.786,9.059],[-4.497,15.198],[0.851,12.072],[6.505,14.288],[13.021,7.007],[11.521,3.233]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.02,20.513],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":15,\"ty\":4,\"nm\":\"Flowerアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.578],\"y\":[1]},\"o\":{\"x\":[0.331],\"y\":[0]},\"t\":12,\"s\":[0]},{\"i\":{\"x\":[0.249],\"y\":[1]},\"o\":{\"x\":[0.398],\"y\":[0]},\"t\":47,\"s\":[180]},{\"t\":91.000003706506,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[122.716,700.401,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[21.211,21.746,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-1.214,-2.049],[2.048,-1.214],[1.214,2.048],[-2.049,1.214]],\"o\":[[1.214,2.049],[-2.049,1.214],[-1.214,-2.049],[2.049,-1.214]],\"v\":[[3.71,-2.199],[2.199,3.71],[-3.71,2.199],[-2.199,-3.71]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.038,22.597],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.664,1.289],[1.578,-3.484],[0.093,-0.669],[1.561,-3.445],[-3.266,-1.652],[0.294,-0.649],[-3.342,-1.617],[-1.937,2.109],[-1.301,-0.629],[-1.578,3.484],[0.939,1.858],[-0.931,2.056],[3.341,1.616],[1.32,-0.255]],\"o\":[[-3.342,-1.616],[-0.292,0.644],[-3.318,-1.528],[-1.562,3.447],[-0.441,0.505],[-1.579,3.484],[2.667,1.29],[0.657,1.207],[3.342,1.617],[0.932,-2.056],[1.982,-0.446],[1.579,-3.484],[-1.305,-0.632],[0.322,-2.884]],\"v\":[[3.627,-15.13],[-5.282,-11.749],[-5.855,-9.769],[-14.649,-6.339],[-11.559,2.839],[-12.672,4.572],[-9.479,13.807],[-1.799,12.279],[1.166,15.129],[10.075,11.748],[9.945,5.555],[14.632,1.691],[11.44,-7.543],[7.412,-8.068]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.211,21.746],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":17,\"ty\":4,\"nm\":\"Flowerアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.578],\"y\":[1]},\"o\":{\"x\":[0.331],\"y\":[0]},\"t\":13.5,\"s\":[0]},{\"i\":{\"x\":[0.249],\"y\":[1]},\"o\":{\"x\":[0.398],\"y\":[0]},\"t\":48.5,\"s\":[180]},{\"t\":80.0000032584668,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[621.716,565.401,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[21.211,21.746,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-1.214,-2.049],[2.048,-1.214],[1.214,2.048],[-2.049,1.214]],\"o\":[[1.214,2.049],[-2.049,1.214],[-1.214,-2.049],[2.049,-1.214]],\"v\":[[3.71,-2.199],[2.198,3.71],[-3.709,2.199],[-2.198,-3.71]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.038,22.597],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.664,1.289],[1.578,-3.484],[0.093,-0.669],[1.561,-3.445],[-3.266,-1.652],[0.294,-0.649],[-3.342,-1.617],[-1.937,2.109],[-1.302,-0.629],[-1.578,3.484],[0.939,1.858],[-0.931,2.056],[3.341,1.616],[1.32,-0.255]],\"o\":[[-3.342,-1.616],[-0.292,0.644],[-3.318,-1.528],[-1.562,3.447],[-0.441,0.505],[-1.579,3.484],[2.667,1.29],[0.657,1.207],[3.342,1.617],[0.932,-2.056],[1.982,-0.446],[1.579,-3.484],[-1.305,-0.632],[0.322,-2.884]],\"v\":[[3.627,-15.13],[-5.282,-11.749],[-5.855,-9.769],[-14.649,-6.339],[-11.559,2.839],[-12.672,4.572],[-9.479,13.807],[-1.799,12.279],[1.166,15.129],[10.075,11.748],[9.945,5.555],[14.632,1.691],[11.44,-7.543],[7.412,-8.068]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.211,21.746],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":19,\"ty\":4,\"nm\":\"CloudLargeアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"s\":true,\"x\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":5,\"s\":[708.583]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":71,\"s\":[678.583]},{\"t\":146.000005946702,\"s\":[708.583]}],\"ix\":3},\"y\":{\"a\":0,\"k\":220.618,\"ix\":4}},\"a\":{\"a\":0,\"k\":[79.229,46.827,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.178,-2.564],[0.654,-1.941],[11.4,-0.001],[33.413,0.003],[-1.259,15.721],[-11.169,2.761],[-0.701,0.175],[-14.819,3.973],[-9.735,-15.474],[-2.943,0.688],[-4.321,-13.093],[-0.923,-0.953],[-1.361,-0.497],[-1.823,-11.163],[-0.095,-0.335]],\"o\":[[-0.494,1.995],[-3.643,10.829],[-33.414,0.004],[-15.807,-0.002],[0.905,-11.304],[0.726,-0.179],[-0.183,-17.433],[13.682,-3.669],[2.921,-1.029],[13.36,-3.124],[0.469,1.426],[0.873,0.901],[10.559,3.848],[0.056,0.341],[-1.472,2.304]],\"v\":[[75.298,20.394],[76.974,26.896],[50.043,44.673],[-50.198,41.507],[-77.72,15.55],[-56.645,-7.995],[-56.261,-9.098],[-26.786,-41.008],[12.464,-28.204],[21.039,-32.795],[49.71,-12.48],[53.496,-8.578],[57.93,-6.906],[74.607,14.79],[78.979,16.442]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[79.229,47.174],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.654,-1.942],[11.401,-0.001],[33.413,0.003],[-1.259,15.721],[-11.169,2.761],[-0.701,0.175],[-14.819,3.973],[-9.736,-15.474],[-2.943,0.688],[-4.32,-13.094],[-0.923,-0.953],[-1.361,-0.496],[-1.824,-11.162],[-0.095,-0.335]],\"o\":[[-0.494,1.995],[-3.644,10.829],[-33.414,0.003],[-15.807,-0.001],[0.906,-11.304],[0.726,-0.179],[-0.183,-17.433],[13.682,-3.669],[2.92,-1.029],[13.36,-3.124],[0.47,1.425],[0.872,0.901],[10.559,3.849],[0.055,0.342],[0,0]],\"v\":[[78.025,22.078],[76.52,28.056],[50.726,46.574],[-49.514,46.574],[-76.766,17.114],[-56.09,-6.97],[-53.939,-7.507],[-27.026,-42.909],[13.38,-26.865],[22.046,-29.866],[53.562,-11.983],[54.936,-7.767],[59.018,-6.473],[77.744,15.931],[78.025,16.937]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[79.742,46.828],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":21,\"ty\":4,\"nm\":\"CloudSmallアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[627.761,182.639,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[52.228,31.148,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.115,-1.664],[0.424,-1.259],[7.397,0],[21.679,0.002],[-0.817,10.199],[-7.246,1.792],[-0.455,0.113],[-9.614,2.577],[-6.317,-10.039],[-1.909,0.446],[-2.803,-8.495],[-0.599,-0.619],[-0.884,-0.322],[-1.183,-7.243],[-0.062,-0.217]],\"o\":[[-0.321,1.295],[-2.364,7.026],[-21.678,0.003],[-10.255,-0.001],[0.588,-7.335],[0.471,-0.116],[-0.118,-11.311],[8.877,-2.381],[1.895,-0.667],[8.668,-2.027],[0.305,0.925],[0.566,0.584],[6.85,2.497],[0.036,0.221],[1.528,1.405]],\"v\":[[51.863,14.844],[48.98,18.623],[32.121,29.998],[-32.914,28.831],[-51.161,11.438],[-37.34,-4.788],[-36.293,-4.506],[-18.367,-27.62],[8.606,-17.677],[13.382,-19.564],[33.852,-7.359],[33.858,-3.697],[36.742,-1.736],[48.947,10.831],[49.386,11.854]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[52.228,30.251],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.424,-1.259],[7.397,-0.001],[21.678,0.002],[-0.816,10.199],[-7.246,1.791],[-0.455,0.114],[-9.615,2.578],[-6.316,-10.04],[-1.909,0.446],[-2.803,-8.495],[-0.599,-0.619],[-0.883,-0.322],[-1.183,-7.242],[-0.062,-0.217]],\"o\":[[-0.321,1.295],[-2.364,7.026],[-21.678,0.002],[-10.256,-0.001],[0.588,-7.335],[0.471,-0.116],[-0.119,-11.31],[8.877,-2.38],[1.895,-0.668],[8.668,-2.027],[0.304,0.925],[0.566,0.585],[6.851,2.497],[0.037,0.222],[0,0]],\"v\":[[50.623,14.324],[49.647,18.203],[32.91,30.217],[-32.124,30.217],[-49.806,11.104],[-36.392,-4.523],[-34.996,-4.87],[-17.535,-27.84],[8.681,-17.43],[14.303,-19.378],[34.751,-7.775],[35.642,-5.039],[38.29,-4.2],[50.439,10.336],[50.623,10.988]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[52.635,31.826],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":23,\"ty\":4,\"nm\":\"CloudSmallアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"s\":true,\"x\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":20.5,\"s\":[91.537]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":46,\"s\":[111.537]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":71,\"s\":[91.537]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":108.5,\"s\":[111.537]},{\"t\":146.000005946702,\"s\":[91.537]}],\"ix\":3},\"y\":{\"a\":0,\"k\":303.727,\"ix\":4}},\"a\":{\"a\":0,\"k\":[52.604,30.56,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.115,-1.664],[0.424,-1.259],[7.397,-0.001],[21.678,0.002],[-0.816,10.2],[-7.247,1.792],[-0.454,0.113],[-9.614,2.578],[-6.316,-10.04],[-1.909,0.447],[-2.803,-8.495],[-0.599,-0.619],[-0.883,-0.322],[-1.183,-7.243],[-0.062,-0.217]],\"o\":[[-0.321,1.295],[-2.364,7.026],[-21.678,0.002],[-10.256,-0.001],[0.588,-7.334],[0.471,-0.116],[-0.118,-11.311],[8.877,-2.381],[1.895,-0.668],[8.668,-2.026],[0.305,0.925],[0.566,0.585],[6.851,2.497],[0.037,0.221],[0.955,1.538]],\"v\":[[51.308,13.69],[49.26,17.486],[32.555,29.909],[-32.48,28.581],[-51.538,10.287],[-36.334,-3.561],[-33.29,-5.516],[-17.618,-27.53],[8.278,-18.095],[14.312,-18.527],[33.959,-8.337],[36.342,-6.768],[37.55,-3.85],[50.943,9.49],[51.399,9.579]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[52.604,30.161],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.424,-1.259],[7.397,-0.001],[21.679,0.002],[-0.816,10.199],[-7.246,1.791],[-0.455,0.114],[-9.615,2.578],[-6.316,-10.04],[-1.909,0.446],[-2.803,-8.495],[-0.599,-0.619],[-0.883,-0.322],[-1.183,-7.242],[-0.062,-0.217]],\"o\":[[-0.321,1.295],[-2.364,7.026],[-21.678,0.002],[-10.255,-0.001],[0.588,-7.335],[0.471,-0.116],[-0.119,-11.31],[8.877,-2.38],[1.895,-0.668],[8.668,-2.027],[0.304,0.925],[0.566,0.585],[6.851,2.497],[0.037,0.222],[0,0]],\"v\":[[50.622,14.324],[49.646,18.202],[32.91,30.217],[-32.126,30.217],[-49.807,11.104],[-36.391,-4.523],[-34.995,-4.871],[-17.535,-27.84],[8.681,-17.43],[14.303,-19.378],[34.751,-7.775],[35.642,-5.04],[38.29,-4.2],[50.439,10.336],[50.622,10.988]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[53.445,30.651],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":25,\"ty\":4,\"nm\":\"CloudSmallアウトライン\",\"parent\":28,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"s\":true,\"x\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":20.5,\"s\":[123.011]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":46,\"s\":[103.011]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":71,\"s\":[123.011]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":108.5,\"s\":[103.011]},{\"t\":146.000005946702,\"s\":[123.011]}],\"ix\":3},\"y\":{\"a\":0,\"k\":87.177,\"ix\":4}},\"a\":{\"a\":0,\"k\":[45.148,26.519,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.099,-1.428],[0.363,-1.081],[6.348,0],[18.604,0.001],[-0.7,8.753],[-6.219,1.538],[-0.39,0.097],[-8.251,2.212],[-5.421,-8.615],[-1.639,0.383],[-2.406,-7.29],[-0.514,-0.531],[-0.758,-0.276],[-1.015,-6.215],[-0.053,-0.187]],\"o\":[[-0.275,1.111],[-2.029,6.03],[-18.604,0.002],[-8.801,-0.001],[0.505,-6.294],[0.404,-0.1],[-0.102,-9.706],[7.618,-2.043],[1.626,-0.573],[7.439,-1.74],[0.261,0.794],[0.486,0.502],[5.88,2.143],[0.031,0.19],[0.563,1.374]],\"v\":[[43.721,11.701],[42.682,15.102],[27.995,24.275],[-27.818,26.034],[-44.198,8.805],[-31.716,-5.469],[-28.306,-4.75],[-15.155,-23.992],[6.121,-14.639],[12.195,-16.537],[29.014,-7.115],[29.236,-3.885],[32.298,-3.372],[44.397,8.021],[44.335,8.336]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[45.148,26.286],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.364,-1.081],[6.348,0],[18.605,0.002],[-0.701,8.753],[-6.219,1.537],[-0.39,0.098],[-8.251,2.212],[-5.421,-8.616],[-1.638,0.383],[-2.405,-7.29],[-0.514,-0.531],[-0.758,-0.277],[-1.015,-6.216],[-0.053,-0.186]],\"o\":[[-0.275,1.111],[-2.029,6.03],[-18.604,0.002],[-8.801,0],[0.504,-6.294],[0.404,-0.1],[-0.101,-9.706],[7.619,-2.043],[1.626,-0.573],[7.439,-1.739],[0.262,0.794],[0.486,0.502],[5.879,2.142],[0.031,0.19],[0,0]],\"v\":[[43.444,12.293],[42.605,15.621],[28.243,25.932],[-27.57,25.932],[-42.743,9.529],[-31.231,-3.881],[-30.034,-4.18],[-15.049,-23.891],[7.449,-14.958],[12.275,-16.63],[29.823,-6.672],[30.587,-4.325],[32.861,-3.604],[43.286,8.871],[43.444,9.43]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[46.096,26.854],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":27,\"ty\":4,\"nm\":\"CloudLargeアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"s\":true,\"x\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":25,\"s\":[227.423]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":71,\"s\":[177.423]},{\"t\":146.000005946702,\"s\":[227.423]}],\"ix\":3},\"y\":{\"a\":0,\"k\":58.179,\"ix\":4}},\"a\":{\"a\":0,\"k\":[68.397,40.972,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.155,-2.24],[0.571,-1.696],[9.957,-0.001],[29.183,0.003],[-1.099,13.73],[-9.755,2.412],[-0.612,0.153],[-12.943,3.47],[-8.503,-13.514],[-2.571,0.6],[-3.773,-11.436],[-0.806,-0.833],[-1.19,-0.434],[-1.593,-9.749],[-0.084,-0.292]],\"o\":[[-0.432,1.743],[-3.182,9.458],[-29.184,0.003],[-13.805,-0.001],[0.791,-9.874],[0.634,-0.156],[-0.16,-15.226],[11.95,-3.205],[2.551,-0.898],[11.669,-2.729],[0.411,1.245],[0.762,0.787],[9.222,3.361],[0.048,0.299],[-0.873,2.13]],\"v\":[[65.415,17.955],[64.375,22.936],[42.816,40.713],[-44.734,38.699],[-65.652,13.937],[-50.788,-8.589],[-50.865,-7.865],[-24.768,-37.511],[9.645,-24.221],[18.333,-24.912],[44.777,-11.537],[45.367,-6.936],[50.132,-7.094],[66.703,12.625],[63.68,12.33]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[68.688,40.977],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.571,-1.696],[9.957,-0.001],[29.184,0.003],[-1.099,13.73],[-9.755,2.412],[-0.613,0.152],[-12.942,3.47],[-8.503,-13.515],[-2.57,0.601],[-3.773,-11.436],[-0.806,-0.833],[-1.189,-0.434],[-1.592,-9.749],[-0.083,-0.293]],\"o\":[[-0.432,1.743],[-3.183,9.458],[-29.184,0.003],[-13.805,-0.001],[0.791,-9.874],[0.634,-0.156],[-0.16,-15.226],[11.95,-3.205],[2.551,-0.898],[11.669,-2.728],[0.411,1.245],[0.762,0.787],[9.223,3.361],[0.049,0.299],[0,0]],\"v\":[[68.147,19.283],[66.833,24.504],[44.304,40.678],[-43.246,40.678],[-67.048,14.949],[-48.989,-6.088],[-47.11,-6.556],[-23.605,-37.476],[11.686,-23.463],[19.255,-26.085],[46.781,-10.465],[47.981,-6.783],[51.546,-5.653],[67.901,13.915],[68.147,14.793]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[68.397,40.932],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":28,\"ty\":3,\"nm\":\"CloudLarge\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"s\":true,\"x\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":17,\"s\":[227.423]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":71,\"s\":[177.423]},{\"t\":146.000005946702,\"s\":[227.423]}],\"ix\":3},\"y\":{\"a\":0,\"k\":58.179,\"ix\":4}},\"a\":{\"a\":0,\"k\":[68.397,40.972,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":29,\"ty\":4,\"nm\":\"Windshieldアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.228],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":5,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.988],\"y\":[0]},\"t\":35,\"s\":[-20]},{\"i\":{\"x\":[0.228],\"y\":[1]},\"o\":{\"x\":[1],\"y\":[0]},\"t\":52,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.988],\"y\":[0]},\"t\":95,\"s\":[-20]},{\"t\":146.000005946702,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[369.058,217.278,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[20.209,33.632,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.334,-0.088],[1.892,-0.125],[1.892,-0.124],[1.893,-0.125],[1.893,-0.125],[1.893,-0.125],[1.893,-0.124],[1.893,-0.125],[1.894,-0.125],[1.896,-0.125],[1.896,-0.125],[1.118,0.553],[0.717,1.07],[0.088,1.334],[0.133,2.015],[0.133,2.015],[-0.553,1.119],[-1.069,0.716],[-1.334,0.088],[-1.891,0.125],[-1.892,0.124],[-1.893,0.125],[-1.893,0.124],[-1.894,0.125],[-1.893,0.125],[-1.893,0.125],[-1.894,0.125],[-1.896,0.125],[-1.896,0.125],[-1.118,-0.552],[-0.717,-1.069],[-0.087,-1.334],[-0.132,-2.015],[-0.133,-2.015],[0.552,-1.119],[1.069,-0.716]],\"o\":[[-1.891,0.125],[-1.892,0.125],[-1.893,0.125],[-1.893,0.124],[-1.893,0.125],[-1.892,0.124],[-1.893,0.125],[-1.893,0.125],[-1.896,0.125],[-1.897,0.124],[-1.334,0.088],[-1.154,-0.57],[-0.694,-1.036],[-0.132,-2.016],[-0.132,-2.015],[-0.087,-1.335],[0.57,-1.153],[1.036,-0.695],[1.891,-0.124],[1.893,-0.125],[1.893,-0.125],[1.893,-0.125],[1.893,-0.125],[1.892,-0.124],[1.892,-0.125],[1.893,-0.125],[1.896,-0.124],[1.897,-0.125],[1.334,-0.088],[1.154,0.57],[0.694,1.037],[0.133,2.015],[0.133,2.015],[0.088,1.334],[-0.57,1.154],[-1.037,0.694]],\"v\":[[19.805,9.858],[16.043,10.426],[12.341,11.917],[8.483,11.087],[4.66,10.767],[0.953,12.229],[-2.865,11.976],[-6.741,10.857],[-10.419,12.757],[-14.241,12.555],[-18.088,11.983],[-21.159,10.453],[-24.008,8.788],[-25.395,5.585],[-25.065,1.515],[-25.273,-2.519],[-26.906,-6.791],[-23.04,-8.865],[-19.611,-11.13],[-15.827,-11.353],[-11.948,-10.173],[-8.139,-10.076],[-4.511,-12.729],[-0.71,-12.758],[3.255,-10.279],[6.966,-11.654],[10.781,-11.479],[14.619,-11.03],[18.315,-12.755],[21.827,-11.573],[25.914,-10.183],[24.634,-5.808],[25.486,-1.816],[25.321,2.243],[26.907,6.373],[24.26,10.009]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[32.459,17.882],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":31,\"ty\":4,\"nm\":\"HeadPhone\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":10,\"s\":[-7]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":25,\"s\":[0]},{\"t\":45.0000018328876,\"s\":[-7]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[369.375,364.188,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[383.5,167,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-2.387,4.234],[-1.608,5.623],[1.34,4.613],[2.999,1.505],[4.199,-5.306],[0,0]],\"o\":[[2.853,-3.399],[5.906,-10.475],[1.303,-4.557],[-0.934,-3.217],[-9.81,-4.924],[0,0],[0,0]],\"v\":[[-4.553,30.367],[3.426,18.917],[14.126,-3.814],[15.801,-17.883],[9.809,-25.443],[-13.138,-9.559],[-17.142,-4.743]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[386.459,173.491],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 9\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[3.837,-8.736],[4.036,-5.916],[0,0],[-6.514,-4.97],[-1.615,-0.087]],\"o\":[[2.472,0.456],[-2.622,5.97],[-14.892,21.83],[0,0],[1.613,1.23],[0,0]],\"v\":[[24.171,-37.37],[21.149,-21.088],[10.852,-2.464],[-21.894,23.85],[-20.129,35.532],[-15.222,37.37]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[363.62,190.247],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 10\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[3.837,-8.736],[4.036,-5.916],[0,0],[-6.514,-4.97],[0,0],[-11.811,20.95],[-1.608,5.623],[1.339,4.613],[2.999,1.505],[4.199,-5.306],[0,0]],\"o\":[[2.472,0.456],[-2.622,5.97],[-14.892,21.83],[0,0],[6.515,4.97],[0,0],[5.906,-10.475],[1.304,-4.557],[-0.935,-3.217],[-9.81,-4.924],[0,0],[0,0]],\"v\":[[17.502,-34.06],[14.48,-17.777],[4.183,0.846],[-28.563,27.16],[-26.798,38.842],[-12.674,37.211],[19.597,5.471],[30.297,-17.259],[31.973,-31.328],[25.979,-38.888],[3.033,-23.004],[-0.971,-18.189]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 2\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[370.289,186.936],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 11\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-10.218,-8.087],[6.029,-7.618],[12.066,9.549],[-6.029,7.617]],\"o\":[[10.218,8.087],[-6.029,7.618],[-12.067,-9.55],[6.029,-7.618]],\"v\":[[11.201,-16.085],[18.787,12.351],[-12.748,15.003],[-18.217,-16.934]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":123.76,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":12.376,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 2\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[351.178,218.309],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 12\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-12.549,-9.931],[8.513,-10.756],[12.549,9.932],[-8.512,10.756]],\"o\":[[12.549,9.931],[-8.512,10.756],[-12.548,-9.931],[8.513,-10.757]],\"v\":[[15.413,-19.476],[22.721,17.982],[-15.414,19.475],[-22.722,-17.982]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":153.878,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":15.388,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[353.732,212.483],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 13\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-12.549,-9.931],[8.513,-10.756],[12.549,9.932],[-8.512,10.756]],\"o\":[[12.549,9.931],[-8.512,10.756],[-12.548,-9.931],[8.513,-10.757]],\"v\":[[15.413,-19.476],[22.721,17.982],[-15.414,19.475],[-22.722,-17.982]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 2\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[353.732,212.483],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 14\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":32,\"ty\":4,\"nm\":\"camera\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[403.386,336.865,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[71.056,136.641,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"hasMask\":true,\"masksProperties\":[{\"inv\":false,\"mode\":\"a\",\"pt\":{\"a\":0,\"k\":{\"i\":[[21.54,-38.259],[-4.638,-109.663],[-17.186,-2.86],[-15.149,8.017],[-6.439,27.951],[38.825,73.202]],\"o\":[[-46.77,83.074],[0.803,18.997],[17.636,2.935],[25.64,-13.569],[18.601,-80.745],[-20.572,-38.788]],\"v\":[[28.336,-144.25],[-0.164,140.331],[41.504,167.136],[90.998,155.504],[160.178,104.331],[160.053,-144.25]],\"c\":true},\"ix\":1},\"o\":{\"a\":0,\"k\":100,\"ix\":3},\"x\":{\"a\":0,\"k\":0,\"ix\":4},\"nm\":\"マスク 1\"}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.478,-7.251],[3.421,-0.226],[0.478,7.252],[-3.421,0.225]],\"o\":[[0.478,7.251],[-3.42,0.225],[-0.478,-7.251],[3.421,-0.226]],\"v\":[[6.194,-0.408],[0.865,13.13],[-6.194,0.408],[-0.865,-13.129]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[76.575,49.627],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-0.478,-7.252],[-3.42,0.225],[0,0],[0,0]],\"o\":[[-3.421,0.225],[0.478,7.251],[0,0],[0,0],[0,0]],\"v\":[[-2.298,-12.957],[-7.627,0.582],[-0.568,13.302],[8.105,12.732],[6.374,-13.527]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[68.097,50.107],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[3.626,-0.238],[-0.132,-2.014],[0,0],[0,0]],\"o\":[[-0.133,-2.014],[-3.626,0.239],[0,0],[0,0],[0,0]],\"v\":[[6.463,-1.259],[-0.342,-4.474],[-6.667,-0.394],[-6.33,4.712],[6.799,3.847]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[29.682,25.219],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[5.331,10.857],[-3.861,11.463],[-5.331,-10.858],[3.859,-11.463]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[37.629,16.463],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.603,-9.152],[4.028,-0.265],[0.603,9.153],[-4.029,0.265]],\"o\":[[0.603,9.152],[-4.029,0.266],[-0.603,-9.152],[4.028,-0.266]],\"v\":[[7.294,-0.481],[1.092,16.571],[-7.294,0.481],[-1.092,-16.571]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[63.42,49.943],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-0.603,-9.152],[-4.028,0.266],[0,0],[0,0]],\"o\":[[-4.028,0.265],[0.603,9.153],[0,0],[0,0],[0,0]],\"v\":[[-2.796,-16.368],[-8.998,0.684],[-0.612,16.775],[9.601,16.103],[7.417,-17.041]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[53.452,50.509],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 6\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.551,-0.036],[0,0],[0.036,0.551],[0,0],[-0.551,0.037],[0,0],[-0.036,-0.551],[0,0]],\"o\":[[0,0],[-0.551,0.036],[0,0],[-0.036,-0.551],[0,0],[0.551,-0.037],[0,0],[0.036,0.551]],\"v\":[[11.107,23.663],[-7.906,24.917],[-8.969,23.985],[-12.038,-22.6],[-11.107,-23.663],[7.906,-24.915],[8.969,-23.983],[12.038,22.6]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[17.074,54.739],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 7\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.636,-0.099],[0,0],[0.048,0.728],[0,0],[-0.684,0.045],[0,0],[-0.045,-0.684],[0,0]],\"o\":[[0,0],[-0.721,0.113],[0,0],[-0.046,-0.684],[0,0],[0.684,-0.045],[0,0],[0.042,0.642]],\"v\":[[29.845,17.296],[-26.429,26.057],[-27.859,24.912],[-30.889,-21.074],[-29.732,-22.395],[26.874,-26.125],[28.194,-24.967],[30.892,15.987]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[56.948,52.071],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 8\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.472,-0.421],[5.245,4.308],[0,0],[0,0]],\"o\":[[-4.567,4.072],[-0.738,-0.606],[0,0],[0,0]],\"v\":[[12.069,59.671],[-4.322,60.751],[-12.541,-63.98],[3.85,-65.059]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[52.92,155.542],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 9\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":9,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[10.675,61.933],[-2.456,62.798],[-10.675,-61.932],[2.456,-62.798]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[51.369,137.705],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 10\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":10,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.411,2.969],[0,0],[-9.895,-1.369],[-0.41,2.969],[0,0],[9.894,1.369]],\"o\":[[0,0],[-0.411,2.969],[9.894,1.368],[0,0],[-0.41,2.969],[-9.895,-1.368]],\"v\":[[-19.717,9.898],[-15.704,-19.121],[1.469,-11.266],[20.128,-14.164],[16.115,14.855],[-2.545,17.752]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[97.947,208.118],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 11\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":11,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.411,2.969],[0,0],[-9.895,-1.369],[-0.41,2.969],[0,0],[9.894,1.369]],\"o\":[[0,0],[-0.411,2.969],[9.894,1.368],[0,0],[-0.41,2.969],[-9.895,-1.368]],\"v\":[[-19.717,9.898],[-15.704,-19.121],[1.469,-11.266],[20.128,-14.164],[16.115,14.855],[-2.545,17.752]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[112.913,105.858],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 12\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":12,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[3.455,0.478],[-0.41,2.968],[0,0],[0,0],[0,0]],\"o\":[[0,0],[-2.734,0.228],[-9.104,-1.259],[0,0],[0,0],[0,0],[0,0]],\"v\":[[5.547,54.965],[19.249,-44.092],[9.801,-44.442],[-5.547,-54.965],[-5.504,-54.96],[-5.547,-54.965],[-19.249,44.092]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[109.274,106.458],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 13\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":13,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-9.104,-1.26],[-2.618,0.178],[0,0],[0,0]],\"o\":[[0,0],[-0.41,2.967],[3.24,0.448],[0,0],[0,0],[0,0]],\"v\":[[-9.328,-31.062],[-19.127,39.777],[-3.582,48.867],[5.835,49.439],[7.292,38.91],[19.537,-49.617]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[94.101,219.589],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 14\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":14,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.618,0.178],[0,0],[0,0],[3.455,0.478],[-0.411,2.967],[0,0],[0,0],[0,0],[-9.103,-1.259]],\"o\":[[0,0],[0,0],[-2.734,0.228],[-9.103,-1.259],[0,0],[0,0],[0,0],[-0.411,2.967],[3.24,0.448]],\"v\":[[-1.607,108.678],[-0.15,98.148],[26.98,-97.984],[17.532,-98.333],[2.186,-108.856],[2.229,-108.851],[2.186,-108.856],[-26.569,99.016],[-11.025,108.106]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 2\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[101.543,160.35],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 15\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":15,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.201,-1.451],[5.439,0.753],[-0.201,1.451],[-5.439,-0.752]],\"o\":[[-0.201,1.451],[-5.439,-0.752],[0.2,-1.452],[5.439,0.753]],\"v\":[[9.848,1.358],[-0.304,2.631],[-9.848,-1.366],[0.363,-2.632]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[119.819,53.674],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 16\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":16,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.411,-2.969],[9.105,1.259],[-0.411,2.969],[-9.105,-1.259]],\"o\":[[-0.411,2.969],[-9.105,-1.26],[0.411,-2.969],[9.105,1.26]],\"v\":[[16.487,2.28],[-0.743,5.376],[-16.487,-2.28],[0.743,-5.376]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[120.215,53.774],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 17\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":17,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.411,2.969],[0,0],[0,0],[0,0],[0.255,-1.842],[-9.105,-1.26]],\"o\":[[0,0],[0,0],[0,0],[0.031,-0.225],[-0.41,2.969],[9.105,1.259]],\"v\":[[2.141,103.86],[30.945,-104.372],[-2.128,-108.215],[-29.921,92.714],[-30.535,97.149],[-15.089,106.956]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 2\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[105.806,160.067],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 18\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":18,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":33,\"ty\":4,\"nm\":\"StringRightアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0],\"y\":[1]},\"o\":{\"x\":[0.848],\"y\":[0]},\"t\":16,\"s\":[0]},{\"i\":{\"x\":[0.051],\"y\":[1]},\"o\":{\"x\":[0.428],\"y\":[0]},\"t\":35,\"s\":[20]},{\"i\":{\"x\":[0],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":75,\"s\":[0]},{\"i\":{\"x\":[0.051],\"y\":[1]},\"o\":{\"x\":[0.428],\"y\":[0]},\"t\":96,\"s\":[20]},{\"t\":114.000004643315,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[464.083,344.027,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[11.807,9.481,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.793,-1.958],[-1.37,0.555],[0.793,1.958],[1.37,-0.555]],\"o\":[[0.793,1.958],[1.371,-0.555],[-0.793,-1.958],[-1.371,0.555]],\"v\":[[-2.481,1.005],[1.436,3.545],[2.482,-1.005],[-1.435,-3.545]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[29.505,53.542],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.793,-1.958],[-1.37,0.556],[0.794,1.958],[1.37,-0.555]],\"o\":[[0.793,1.958],[1.371,-0.555],[-0.793,-1.958],[-1.371,0.555]],\"v\":[[-2.468,1.014],[1.433,3.49],[2.467,-0.985],[-1.395,-3.492]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[26.483,56.536],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.793,-1.958],[-1.37,0.555],[0.793,1.958],[1.37,-0.555]],\"o\":[[0.793,1.958],[1.371,-0.555],[-0.793,-1.958],[-1.371,0.555]],\"v\":[[-2.481,1.005],[1.436,3.545],[2.482,-1.005],[-1.435,-3.545]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[29.505,53.542],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-2.814,-1.242]],\"o\":[[0,0],[0,0]],\"v\":[[-3.153,-4.22],[3.153,4.22]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[33.461,59.743],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.113],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.113]],\"v\":[[0,-3.825],[3.825,0],[0,3.825],[-3.825,0]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[8.825,8.825],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.112],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.112]],\"v\":[[-0.003,-3.866],[3.829,0.008],[-0.003,3.866],[-3.829,0.008]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[5.828,11.817],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.113],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.113]],\"v\":[[0,-3.825],[3.825,0],[0,3.825],[-3.825,0]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[8.825,8.825],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 7\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-9.909,-4.746]],\"o\":[[0,0],[0,0]],\"v\":[[-10.459,-23.146],[10.459,23.146]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[18.766,29.163],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 8\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":35,\"ty\":4,\"nm\":\"StringLeftアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0],\"y\":[1]},\"o\":{\"x\":[0.693],\"y\":[-0.005]},\"t\":18,\"s\":[0]},{\"i\":{\"x\":[0.198],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":39,\"s\":[20]},{\"i\":{\"x\":[0],\"y\":[1]},\"o\":{\"x\":[0],\"y\":[0]},\"t\":79,\"s\":[0]},{\"i\":{\"x\":[0.198],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":97,\"s\":[20]},{\"t\":123.000005009893,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[445.245,351.122,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[8.969,8.576,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.113],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.113]],\"v\":[[0,-3.825],[3.825,0],[0,3.825],[-3.825,0]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[8.825,8.825],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.113],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.113]],\"v\":[[0.014,-3.781],[3.845,0.001],[0.014,3.781],[-3.845,0.001]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[5.811,11.825],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.113],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.113]],\"v\":[[0,-3.825],[3.825,0],[0,3.825],[-3.825,0]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[8.825,8.825],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.113],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.113]],\"v\":[[0,-3.825],[3.825,0],[0,3.825],[-3.825,0]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[8.825,64.825],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.112],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.112]],\"v\":[[0.004,-3.841],[3.841,0.001],[0.004,3.841],[-3.841,0.001]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[5.821,67.823],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.112,0],[0,-2.113],[2.112,0],[0,2.112]],\"o\":[[2.112,0],[0,2.112],[-2.112,0],[0,-2.113]],\"v\":[[0,-3.825],[3.825,0],[0,3.825],[-3.825,0]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[8.825,64.825],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[3.06,-2.207]],\"o\":[[0,0],[0,0]],\"v\":[[1.913,-5.095],[-1.913,5.095]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[6.912,72.058],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 7\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[6.764,-25.689]],\"o\":[[0,0],[0,0]],\"v\":[[-3.382,-29.851],[-3.382,29.851]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[10.556,36.058],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 8\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0},{\"ddd\":0,\"ind\":37,\"ty\":4,\"nm\":\"Baseアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[405.283,500.58,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[409.855,301.512,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-5.65,0.459]],\"o\":[[0,0],[0,0]],\"v\":[[-6.851,-1.376],[6.851,0.917]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[253.462,455.69],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-7.893,1.559]],\"o\":[[9.015,-0.928],[0,0]],\"v\":[[-9.557,-2.691],[9.557,2.061]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[93.713,421.38],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-24.36,-1.265]],\"o\":[[9.792,-3.979],[0,0]],\"v\":[[-24.016,-3.431],[24.016,7.41]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[66.088,417.218],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.159,-1.365],[0,0],[-3.341,-0.224],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.877,-0.785],[0,0],[0,0],[-0.403,2.413],[2.097,0.606],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.293,0.436],[0,0],[5.049,1.318],[0,0],[0,0],[0,0],[0,0],[0,0],[1.452,-8.681]],\"o\":[[0,0],[3.302,0.552],[0,0],[0,0],[0,0],[0,0],[0,0],[3.946,0.264],[0,0],[0,0],[2.393,0.506],[0.361,-2.152],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-4.185,-1.052],[0,0],[-5.192,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.516,-2.223],[-1.365,8.16]],\"v\":[[-159.816,-9.614],[-53.16,8.224],[-43.191,9.388],[-32.91,10.076],[-32.699,15.774],[-9.865,14.932],[-9.988,11.612],[37.894,14.816],[49.641,16.391],[140.513,34.79],[167.995,40.597],[173.124,37.099],[170.077,32.259],[127.677,20.007],[110.941,15.799],[111.957,12.714],[94.667,7.022],[93.242,11.349],[42.206,-1.482],[29.471,-3.716],[-41.88,-10.969],[-57.263,-13.742],[-97.475,-24.239],[-96.35,-29.63],[-118.717,-34.299],[-119.61,-30.018],[-153.562,-38.88],[-172.119,-26.859]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[195.138,441.227],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.159,-1.365],[-8.887,-1.486],[-8.885,-1.486],[-8.888,-1.487],[-8.888,-1.487],[-8.89,-1.487],[-8.89,-1.487],[-3.34,-0.224],[-4.401,-2.679],[-2.789,-0.587],[-11.238,2.059],[-1.645,0.234],[-7.979,-0.535],[-7.98,-0.535],[-7.98,-0.534],[-3.877,-0.785],[-9.084,-1.839],[-9.088,-1.84],[-9.087,-1.84],[-9.089,-1.84],[-9.082,-1.873],[-6.87,-1.451],[-6.871,-1.451],[-0.404,2.413],[0,0],[2.097,0.606],[10.6,3.063],[10.646,2.9],[7.827,3.631],[1.43,0.771],[9.078,0.661],[2.278,-0.006],[8.505,2.139],[8.507,2.139],[8.506,2.138],[4.294,0.437],[8.918,0.906],[8.918,0.907],[8.92,0.907],[8.92,0.907],[5.048,1.318],[10.053,2.624],[9.063,5.08],[2.489,1.179],[11.423,0.191],[2.186,0.018],[8.488,2.215],[8.488,2.216],[1.452,-8.682],[0,0]],\"o\":[[8.887,1.486],[8.885,1.486],[8.888,1.487],[8.888,1.486],[8.89,1.487],[8.889,1.486],[3.301,0.552],[5.141,0.344],[2.435,1.482],[11.18,2.356],[1.635,-0.3],[7.918,-1.127],[7.98,0.534],[7.981,0.534],[3.947,0.265],[9.084,1.839],[9.087,1.84],[9.087,1.84],[9.089,1.84],[9.089,1.841],[6.877,1.419],[6.87,1.452],[2.393,0.506],[0,0],[0.36,-2.152],[-10.6,-3.063],[-10.6,-3.063],[-8.325,-2.268],[-1.474,-0.684],[-8.01,-4.32],[-2.271,-0.165],[-8.769,0.024],[-8.507,-2.138],[-8.506,-2.138],[-4.186,-1.053],[-8.918,-0.906],[-8.918,-0.907],[-8.92,-0.906],[-8.92,-0.906],[-5.191,-0.527],[-10.053,-2.624],[-10.052,-2.624],[-2.402,-1.347],[-10.326,-4.89],[-2.186,-0.036],[-8.772,-0.074],[-8.488,-2.216],[-8.517,-2.223],[0,0],[-1.364,8.159]],\"v\":[[-159.059,-8.973],[-140.676,-9.639],[-123.11,-5.445],[-105.723,-0.147],[-87.279,-1.172],[-70.003,4.82],[-52.346,8.519],[-42.092,8.488],[-30.505,6.279],[-30.84,10.691],[-9.201,10.506],[-8.619,11.355],[6.976,13.208],[23.108,11.71],[38.995,13.866],[51.03,13.501],[68.794,19.174],[86.788,23.747],[105.162,26.441],[123.452,29.561],[141.21,35.276],[155.746,34.36],[168.847,40.292],[171.337,34.863],[171.671,34.918],[170.704,32.342],[150.965,21.161],[129.168,17.029],[110.684,17.102],[112.113,12.823],[95.639,7.797],[94.395,8.306],[77.156,6.254],[59.982,2.616],[43.332,-3.1],[30.417,-3.392],[12.617,-5.557],[-5.283,-6.747],[-22.559,-14.106],[-40.458,-15.339],[-56.311,-14.703],[-75.695,-22.721],[-95.049,-28.246],[-95.171,-31.42],[-117.578,-35.002],[-118.457,-31.387],[-135.392,-36.338],[-152.941,-38.575],[-172.801,-28.91],[-167.682,-28.054]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[189.983,446.972],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.159,-1.365],[0,0],[-3.341,-0.224],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.877,-0.785],[0,0],[0,0],[-0.403,2.413],[2.097,0.606],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.293,0.436],[0,0],[5.049,1.318],[0,0],[0,0],[0,0],[0,0],[0,0],[1.452,-8.681]],\"o\":[[0,0],[3.302,0.552],[0,0],[0,0],[0,0],[0,0],[0,0],[3.946,0.264],[0,0],[0,0],[2.393,0.506],[0.361,-2.152],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-4.185,-1.052],[0,0],[-5.192,-0.528],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.516,-2.223],[-1.365,8.16]],\"v\":[[-159.816,-9.614],[-53.16,8.224],[-43.191,9.388],[-32.91,10.076],[-32.699,15.774],[-9.865,14.932],[-9.988,11.612],[37.894,14.816],[49.641,16.391],[140.513,34.79],[167.995,40.597],[173.124,37.099],[170.077,32.259],[127.677,20.007],[110.941,15.799],[111.957,12.714],[94.667,7.022],[93.242,11.349],[42.206,-1.482],[29.471,-3.716],[-41.88,-10.969],[-57.263,-13.742],[-97.475,-24.239],[-96.35,-29.63],[-118.717,-34.299],[-119.61,-30.018],[-153.562,-38.88],[-172.119,-26.859]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[195.138,441.227],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-2.89,-11.215],[6.969,-6.096],[-6.969,11.215]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[637.985,505.345],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 7\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[2.89,11.215],[-6.969,6.096],[6.969,-11.215]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[642.064,488.033],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 8\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.509,-4.111],[4.11,0.509],[-0.509,4.111],[-4.111,-0.509]],\"o\":[[-0.509,4.111],[-4.111,-0.509],[0.508,-4.11],[4.111,0.508]],\"v\":[[7.443,0.921],[-0.921,7.443],[-7.443,-0.922],[0.921,-7.443]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[611.891,463.482],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 15\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":9,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.035,-16.443],[15.073,1.865],[-2.036,16.443],[-15.072,-1.865]],\"o\":[[-2.035,16.443],[-15.073,-1.866],[2.035,-16.443],[15.073,1.866]],\"v\":[[27.292,3.378],[-3.685,29.773],[-27.291,-3.378],[3.685,-29.773]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[640.024,496.689],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 16\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":10,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.578,-20.828],[20.828,2.578],[-2.578,20.828],[-20.828,-2.578]],\"o\":[[-2.578,20.828],[-20.828,-2.578],[2.578,-20.828],[20.828,2.578]],\"v\":[[37.712,4.668],[-4.668,37.712],[-37.712,-4.668],[4.668,-37.712]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":385.683,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":14.834,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[635.436,497.128],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 17\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":11,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[3.126,3.412],[-7,3],[-2,-9],[3,-3],[0.6,3.905]],\"o\":[[-1.949,-4.865],[9,-3],[0,4],[-3,2],[-2.238,-1.523]],\"v\":[[-8.551,2.365],[-7.5,-11.5],[14.5,1.5],[9.5,12.5],[-0.1,9.595]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[761.822,455.433],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 18\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":12,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[3.125,3.412],[-7,3],[-4.124,-2.498],[-1.001,-4.502],[3,-3],[0.6,3.905]],\"o\":[[-1.949,-4.865],[4.498,-1.5],[4.128,2.5],[0,4],[-3,2],[-2.238,-1.523]],\"v\":[[-8.445,1.634],[-7.57,-12.285],[6.076,-10.116],[14.57,0.835],[9.43,11.785],[-0.306,9.038]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[757.841,460.087],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 19\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":13,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[3.126,3.412],[-7,3],[-2,-9],[3,-3],[0.6,3.905]],\"o\":[[-1.949,-4.865],[9,-3],[0,4],[-3,2],[-2.238,-1.523]],\"v\":[[-8.551,2.365],[-7.5,-11.5],[14.5,1.5],[9.5,12.5],[-0.1,9.595]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[761.822,455.433],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 20\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":14,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.206,-1.89],[6,-3],[4,2],[0,6],[-4.87,-3.645]],\"o\":[[6.677,2.772],[-4,2],[-6,-3],[0,-7],[2.938,1.127]],\"v\":[[8.323,-4.272],[9,10.5],[-4,10.5],[-15,-3.5],[-1.13,-8.855]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[571.322,402.432],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 21\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":15,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.206,-1.89],[6,-3],[4,2],[0,6],[-4.869,-3.646]],\"o\":[[6.677,2.772],[-4,2],[-6,-3],[0,-7],[2.939,1.126]],\"v\":[[8.27,-4.232],[9.083,10.532],[-3.961,10.347],[-15.083,-3.605],[-1.161,-8.886]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[567.307,406.538],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 22\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":16,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.206,-1.89],[6,-3],[4,2],[0,6],[-4.87,-3.645]],\"o\":[[6.677,2.772],[-4,2],[-6,-3],[0,-7],[2.938,1.127]],\"v\":[[8.323,-4.272],[9,10.5],[-4,10.5],[-15,-3.5],[-1.13,-8.855]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[571.322,402.432],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 23\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":17,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.164,-0.53],[5.158,0.85],[2.387,-0.003],[-1.353,2.587],[-1.934,0.273],[-2.398,0.708],[-2.428,0.082],[-2.249,-0.883],[-0.198,-1.206],[0.752,-0.286],[1.039,-0.307],[-1.24,0.365],[-1.064,0.388],[1.124,2.157],[2.365,0.511],[2.869,-0.631],[3.237,-0.426],[2.127,-1.903],[-1.53,-1.699],[-2.469,-0.231],[-3.616,0.501],[-3.094,1.41]],\"o\":[[-4.636,2.112],[-2.345,-0.387],[-1.566,0.002],[1.021,-1.952],[2.468,-0.348],[2.312,-0.681],[2.41,-0.082],[0.994,0.39],[0.152,0.919],[-1.011,0.386],[-1.232,0.364],[1.085,-0.321],[2.01,-0.734],[-1.208,-2.319],[-2.873,-0.62],[-3.171,0.697],[-2.698,0.354],[-1.618,1.447],[1.87,2.076],[3.564,0.334],[3.396,-0.471],[1.17,-0.533]],\"v\":[[10.158,1.548],[-4.128,4.414],[-11.148,3.578],[-15.172,0.643],[-9.167,-1.984],[-1.929,-3.404],[5.107,-4.878],[12.214,-3.706],[15.159,-1.362],[13.541,0.52],[10.396,1.448],[10.929,3.376],[14.206,2.409],[16.828,-2.615],[10.088,-6.422],[1.391,-6.393],[-8.008,-4.133],[-15.883,-1.602],[-16.422,4.023],[-8.98,5.654],[1.529,6.54],[11.167,3.276]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[646.223,436.029],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 24\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":18,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.261,-0.179],[3.527,-0.42],[1.026,3.656],[-1.993,1.653],[-2.735,0.719],[-3.246,-0.317],[-3.08,-0.902],[-1.144,-0.85],[-0.336,-0.566],[1.018,-0.55],[2.052,-0.723],[3.476,-0.912],[-1.248,0.327],[-3.738,1.372],[-1.244,0.554],[-0.635,1.243],[2.23,1.007],[3.568,0.464],[3.844,-0.94],[2.557,-2.131],[-0.185,-3.11],[-3.593,0.249],[-4.626,0.657]],\"o\":[[-3.517,0.5],[-2.893,0.344],[-0.786,-2.804],[2.185,-1.813],[3.171,-0.835],[3.188,0.311],[1.358,0.397],[0.524,0.39],[0.622,1.049],[-1.918,1.039],[-3.39,1.194],[-1.244,0.326],[3.852,-1.011],[1.279,-0.469],[1.209,-0.539],[1.482,-2.898],[-3.309,-1.493],[-3.896,-0.506],[-3.228,0.789],[-2.265,1.888],[0.228,3.829],[4.663,-0.324],[1.269,-0.181]],\"v\":[[0.098,5.615],[-10.469,6.996],[-18.409,4.367],[-14.883,-2.808],[-7.302,-6.587],[2.386,-7.128],[11.961,-5.474],[15.812,-3.699],[17.175,-2.266],[16.479,-0.049],[10.416,2.458],[0.098,5.615],[0.63,7.544],[12.047,3.992],[15.839,2.469],[19.247,0.135],[14.908,-6.516],[4.268,-8.911],[-7.427,-8.62],[-16.297,-4.222],[-20.544,3.606],[-13.339,9.311],[0.63,7.544]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[715.495,420.238],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 25\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":19,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.374,1.237],[4.549,4.302],[5.787,1.849],[6.494,-0.595],[6.143,-2.189],[4.926,-3.537],[3.038,-1.151],[3.106,0.057],[6.394,-0.573],[5.136,-2.319],[2.141,-4.999],[-1.428,-5.207],[-10.726,-3.611],[-5.993,0.417],[-5.05,2.708],[-11.46,0.969],[-7.125,-0.457],[-6.334,1.97],[-3.976,3.928],[-0.634,2.434],[0.428,2.91],[0.436,1.58],[-0.343,-1.245],[-0.238,-1.619],[0.911,-2.685],[4.354,-2.07],[6.248,-0.369],[6.71,0.594],[5.623,-2.231],[4.177,-2.761],[4.952,-1.74],[5.724,0.599],[5.785,9.997],[-0.078,5.106],[-4.621,3.317],[-5.079,0.948],[-5.731,-0.366],[-5.581,2.348],[-2.354,1.744],[-2.563,1.357],[-12.275,-0.59],[-5.405,-3.35],[-3.357,-4.927],[-0.831,-2.749]],\"o\":[[-1.833,-6.056],[-4.388,-4.15],[-6.252,-1.996],[-6.494,0.596],[-5.704,2.033],[-2.599,1.866],[-2.934,1.113],[-6.385,-0.118],[-5.59,0.5],[-4.858,2.194],[-2.16,5.041],[3.046,11.112],[5.691,1.916],[5.728,-0.4],[9.686,-5.197],[7.17,-0.606],[6.616,0.425],[5.274,-1.641],[1.768,-1.747],[0.753,-2.889],[-0.239,-1.621],[-0.342,-1.239],[0.437,1.579],[0.405,2.752],[-1.634,4.824],[-5.667,2.694],[-6.766,0.4],[-5.984,-0.531],[-4.675,1.855],[-4.353,2.877],[-5.45,1.915],[-11.201,-1.172],[-2.55,-4.408],[0.085,-5.657],[4.237,-3.042],[5.655,-1.056],[5.864,0.374],[2.733,-1.15],[2.33,-1.727],[10.84,-5.74],[6.319,0.303],[5.067,3.14],[1.614,2.37],[0.372,1.228]],\"v\":[[72.281,-10.602],[61.962,-26.125],[46.704,-35.542],[27.197,-37.19],[8.116,-32.995],[-8.022,-24.724],[-16.015,-19.352],[-25.243,-18.128],[-44.285,-18.443],[-60.613,-14.497],[-71.953,-3.828],[-72.436,12.223],[-49.696,35.04],[-31.871,37.368],[-15.685,32.586],[13.741,18.373],[35.124,19.934],[54.821,17.629],[69.435,9.571],[73.359,3.264],[73.261,-5.777],[72.281,-10.602],[70.352,-10.07],[71.332,-5.246],[71.232,3.393],[60.087,13.456],[41.867,17.952],[21.79,16.489],[4.277,18.601],[-8.769,25.975],[-22.5,33.457],[-39.529,35.222],[-67.607,18.632],[-71.533,3.973],[-64.33,-10.082],[-49.88,-15.68],[-32.705,-16.544],[-14.872,-17.67],[-7.635,-22.543],[-0.268,-27.158],[35.72,-35.4],[53.563,-30.172],[66.605,-17.738],[70.352,-10.07]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[680.724,430.306],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 26\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":20,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[5.077,4.65],[5.57,1.858],[8.022,-1.234],[8.333,-6.463],[2.347,-1.033],[6.304,0.367],[7.059,-7.439],[-0.67,-5.512],[-8.998,-5.704],[-11.251,3.419],[-14.508,1.883],[-7.971,-0.381],[-7.468,4.124],[-0.339,5.541]],\"o\":[[-1.681,-5.727],[-3.727,-3.412],[-7.367,-2.456],[-12.181,1.873],[-1.854,1.438],[-5.365,2.361],[-12.745,-0.743],[-4.406,4.644],[1.028,8.449],[8.998,5.703],[13.539,-4.115],[7.87,-1.021],[9.481,0.453],[4.052,-2.237],[0.338,-5.54]],\"v\":[[71.314,-11.042],[60.597,-26.734],[46.839,-35.152],[22.765,-36.35],[-9.058,-23.419],[-15.011,-19.395],[-33.571,-18.302],[-67.743,-9.138],[-72.337,6.87],[-57.695,29.496],[-23.679,34.188],[12.321,16.818],[36.078,18.282],[62.747,12.508],[72.669,0.571]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[680.728,431.011],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 27\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":21,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-0.64,3.313],[-0.153,0.132],[-0.374,0.008],[-5.369,-1.376]],\"o\":[[0.64,-3.313],[0.032,-0.166],[0.237,-0.202],[5.739,-0.135],[0,0]],\"v\":[[-11.375,5.393],[-9.455,-4.546],[-9.232,-5.02],[-8.198,-5.258],[11.375,-2.878]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[670.764,473.227],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 28\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":22,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-0.64,3.313],[-0.153,0.132],[-0.374,0.008],[-5.369,-1.376]],\"o\":[[0.64,-3.313],[0.032,-0.166],[0.237,-0.202],[5.739,-0.135],[0,0]],\"v\":[[-11.375,5.393],[-9.455,-4.545],[-9.232,-5.019],[-8.198,-5.258],[11.375,-2.878]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[708.733,385.773],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 29\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":23,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-0.336,3.861],[-0.131,0.167],[-0.659,-0.005],[-3.459,-0.882]],\"o\":[[0.336,-3.861],[0.016,-0.19],[0.317,-0.403],[3.696,0.027],[0,0]],\"v\":[[-6.886,6.299],[-5.88,-5.284],[-5.714,-5.837],[-3.951,-6.294],[6.886,-4.918]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[689.357,470.589],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 30\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":24,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-0.131,0.167],[-0.659,-0.005],[-3.459,-0.882]],\"o\":[[0,0],[0.016,-0.19],[0.317,-0.403],[3.696,0.027],[0,0]],\"v\":[[-6.886,6.299],[-5.88,-5.284],[-5.714,-5.836],[-3.951,-6.294],[6.886,-4.918]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[690.627,390.348],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 31\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":25,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-34.59,16.962],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[34.589,-16.962],[0,0],[0,0],[0,0]],\"v\":[[-109.779,-21.822],[-37.81,69.761],[66.185,44.113],[109.779,9.923],[50.773,-69.761],[-9.947,-38.129]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[669.837,425.906],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 32\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":26,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,19.889]],\"o\":[[3.825,0],[0,0]],\"v\":[[-1.912,17.977],[1.913,-17.977]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[377.248,359.739],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 33\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":27,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-0.321,0.52]],\"o\":[[0,0],[0,0]],\"v\":[[-4.156,1.696],[4.156,-1.696]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[521.557,211.639],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 34\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":28,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.775,-1.065],[0,0],[-0.163,-1.964],[0,0],[-1.242,-0.731],[0,0],[-0.033,-1.537],[0,0],[0.335,-0.655],[0,0],[-0.535,-1.219],[0,0],[-2.291,1.358],[0,0],[0.14,1.691],[0,0],[0.457,0.647],[0,0],[-0.341,1.273],[0,0],[0.036,0.495],[0,0]],\"o\":[[0,0],[-1.84,0.706],[0,0],[0.119,1.436],[0,0],[1.324,0.78],[0,0],[0.016,0.735],[0,0],[-0.607,1.185],[0,0],[1.068,2.439],[0,0],[1.46,-0.866],[0,0],[-0.065,-0.789],[0,0],[-0.761,-1.076],[0,0],[0.128,-0.48],[0,0],[-0.218,-2.965]],\"v\":[[0.979,-15.365],[-5.679,-12.81],[-8.509,-8.305],[-8.227,-4.895],[-6.056,-1.439],[-6.01,-1.413],[-3.826,2.313],[-3.814,2.86],[-4.3,4.977],[-6.018,8.334],[-6.132,12.133],[-5.736,13.037],[0.586,15.072],[6.373,11.641],[8.531,7.461],[8.26,4.196],[7.462,2.002],[6.566,0.736],[5.904,-2.972],[7.057,-7.275],[7.196,-8.748],[6.989,-11.551]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[521.376,221.805],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 35\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":29,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[1.67,-9.565],[-1.793,0.073],[-0.96,0.935],[-0.037,0.675],[4.054,0.427]],\"o\":[[0,0],[-0.309,1.767],[3.448,-0.142],[0.484,-0.471],[0.225,-4.163],[-4.619,-0.486]],\"v\":[[-6.11,-11.288],[-4.836,9.84],[-1.965,13.124],[4.419,10.686],[5.212,8.893],[2.056,-12.71]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[523.936,240.927],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 36\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":30,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-6.098,2.535],[-2.946,2.65],[6.097,-2.65]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[463.462,231.493],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 37\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":31,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[3.05,-1.636],[0,0],[-0.475,-2.245],[0,0],[-1.542,-0.663],[0,0],[-0.264,-1.77],[0,0],[0.291,-0.805],[0,0],[-0.795,-1.33],[0,0],[-2.448,1.903],[0,0],[0.409,1.934],[0,0],[0.623,0.681],[0,0],[-0.207,1.52],[0,0],[0.114,0.567],[0,0]],\"o\":[[0,0],[-2.022,1.085],[0,0],[0.348,1.642],[0,0],[1.644,0.706],[0,0],[0.126,0.847],[0,0],[-0.527,1.457],[0,0],[1.591,2.662],[0,0],[1.56,-1.213],[0,0],[-0.191,-0.903],[0,0],[-1.036,-1.131],[0,0],[0.079,-0.573],[0,0],[-0.686,-3.393]],\"v\":[[-1.035,-17.742],[-8.353,-13.817],[-10.962,-8.198],[-10.138,-4.301],[-7.125,-0.626],[-7.068,-0.602],[-3.999,3.382],[-3.905,4.012],[-4.156,6.528],[-5.651,10.658],[-5.227,15.063],[-4.637,16.049],[2.965,17.475],[9.147,12.664],[11.029,7.52],[10.238,3.789],[8.995,1.371],[7.775,0.039],[6.466,-4.146],[7.168,-9.286],[7.115,-11.008],[6.465,-14.216]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[466.25,243.496],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 38\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":32,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[0.431,-2.722],[-0.431,0.614],[0.016,2.722]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[464.096,255.843],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 39\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":33,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[2.747,-8.894],[-1.667,0.192],[-1.343,1.04],[-0.014,0.681],[4.8,-0.101]],\"o\":[[0,0],[-0.496,1.604],[4.767,-0.549],[0.539,-0.418],[0.105,-5.097],[-5.407,0.115]],\"v\":[[-7.013,-13.618],[-5.695,13.374],[-3.241,16.365],[5.847,12.934],[6.711,11.193],[2.213,-16.457]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[470.39,266.833],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 40\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":34,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[4.59,11.475],[29.069,-12.043],[-20.34,-14.098],[-15.3,6.759]],\"o\":[[-4.59,-11.475],[-29.068,12.044],[20.34,14.098],[15.299,-6.758]],\"v\":[[91.482,-22.763],[8.1,-26.392],[-75.732,24.336],[0.451,29.893]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[412.368,134.269],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 73\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":35,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[4.538,-53.141]],\"o\":[[-8.587,2.98],[0,0]],\"v\":[[-1.654,-52.363],[5.703,52.363]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[407.901,241.831],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 74\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":36,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[4.59,11.475],[29.069,-12.043],[-20.34,-14.098],[-15.3,6.759]],\"o\":[[-4.59,-11.475],[-29.068,12.044],[20.34,14.098],[15.299,-6.758]],\"v\":[[91.482,-22.763],[8.1,-26.392],[-75.732,24.336],[0.451,29.893]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[412.368,138.859],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 75\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":37,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.158,5.043],[-1.747,-0.724],[-0.85,0],[0,0],[0.765,6.884]],\"o\":[[-0.059,-1.89],[0.822,0.341],[3.06,0],[0,0],[-0.51,-4.589]],\"v\":[[-4.579,-10.508],[-0.971,-12.931],[1.578,-12.354],[3.108,10.595],[-3.777,6.771]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[347.984,318.457],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 76\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":38,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[6.12,-3.059],[0,0],[-2.102,15.923],[-10.557,3.806],[-10.843,-4.678],[-0.152,-2.501],[2.682,-4.695],[3.06,19.124],[0,0]],\"o\":[[-13.769,-2.324],[-5.351,2.676],[0,0],[2.103,-15.923],[8.676,-3.128],[2.3,0.993],[1.12,18.342],[-3.06,5.354],[0,0],[0,0]],\"v\":[[34.23,-35.576],[22.387,-0.298],[-37.87,-14.586],[-37.87,-39.994],[-20.235,-60.771],[30.486,-46.37],[34.48,-40.68],[37.29,57.016],[-34.617,44.776],[-36.147,-13.361]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[357.935,322.23],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 77\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":39,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0.477,-8.711],[3.065,-1.532],[9.977,2.445],[6.418,1.818],[6.927,7.705],[-2.103,15.923],[-2.276,2.748],[-5.902,2.128],[-7.507,-2.126],[-5.472,-2.064],[-3.69,-1.592],[-0.152,-2.501],[-0.465,-8.407],[-0.336,-6.883],[-0.248,-6.403],[-0.1,-5.827],[0.799,-1.399],[10.093,-0.337],[6.68,0.631],[5.605,1.764],[0.854,5.336],[0.254,9.689],[0.255,9.69],[0.255,9.69]],\"o\":[[-6.874,-1.16],[-0.479,8.739],[-1.938,0.969],[-6.48,-1.588],[-10.979,-3.11],[-8.527,-9.485],[0.927,-7.021],[2.886,-3.485],[3.318,-1.196],[5.444,1.542],[6.717,2.534],[2.301,0.993],[0.253,4.133],[0.33,5.974],[0.316,6.49],[0.272,7.028],[0.181,10.482],[-1.005,1.758],[-5.975,0.2],[-6.806,-0.643],[-7.897,-2.486],[-0.534,-9.678],[-0.255,-9.69],[-0.255,-9.69],[0,0]],\"v\":[[38.207,-35.167],[30.207,-19.248],[26.844,1.468],[5.859,-2.266],[-13.852,-8.786],[-34.268,-13.59],[-34.964,-39.425],[-29.917,-53.736],[-16.594,-60.856],[0.999,-57.55],[17.651,-51.522],[34.448,-45.749],[39.341,-40.033],[39.827,-20.458],[40.845,-0.912],[41.797,18.644],[40.956,38.246],[41.996,58.165],[22.34,60.979],[2.823,61.421],[-15.957,56.253],[-31.289,45.513],[-30.695,26.089],[-32.246,6.736],[-32.227,-12.658]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[351.008,324.526],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 78\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":40,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[6.12,-3.059],[0,0],[-2.102,15.923],[-10.557,3.806],[-10.843,-4.678],[-0.152,-2.501],[2.682,-4.695],[3.06,19.124],[0,0]],\"o\":[[-13.769,-2.324],[-5.351,2.676],[0,0],[2.103,-15.923],[8.676,-3.128],[2.3,0.993],[1.12,18.342],[-3.06,5.354],[0,0],[0,0]],\"v\":[[34.23,-35.576],[22.387,-0.298],[-37.87,-14.586],[-37.87,-39.994],[-20.235,-60.771],[30.486,-46.37],[34.48,-40.68],[37.29,57.016],[-34.617,44.776],[-36.147,-13.361]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[357.935,322.23],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 79\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":41,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[4.59,-14.535]],\"o\":[[0,0],[0,0]],\"v\":[[-3.442,-25.626],[-1.147,25.627]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[462.16,330.67],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 80\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":42,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-7.479,-0.061],[1.483,-13.88],[14.581,-6.091],[1.968,0.779],[0,0],[0.573,2.629],[-1.992,2.995]],\"o\":[[3.421,0.028],[-1.307,12.243],[-1.954,0.816],[0,0],[-2.502,-0.99],[-0.985,-4.516],[3.088,-4.643]],\"v\":[[37.149,-31.311],[48.109,-14.331],[-29.648,30.538],[-35.758,30.592],[-42.636,27.87],[-47.572,22.09],[-47.6,7.686]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[488.914,264.501],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 81\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":43,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-1.997,-0.016],[1.482,-13.88],[7.273,-4.805],[5.777,-3.085],[5.453,-2.619],[5.074,-2.266],[3.425,-1.43],[1.968,0.779],[3.439,1.361],[0.573,2.629],[-1.992,2.995],[-8.896,4.516],[-6.053,2.865],[-5.628,2.525],[-5.175,2.142]],\"o\":[[3.421,0.028],[-0.36,3.366],[-4.513,2.981],[-5.253,2.805],[-5.781,2.776],[-7.245,3.237],[-1.953,0.816],[-3.439,-1.361],[-2.502,-0.99],[-0.985,-4.516],[0.859,-1.292],[4.983,-2.531],[5.57,-2.636],[6.103,-2.737],[8.888,-3.678]],\"v\":[[36.939,-31.153],[47.812,-15.148],[35.578,-2.156],[19.283,6.007],[3.317,14.745],[-13.352,22.047],[-30.192,28.914],[-36.199,30.39],[-42.559,26.358],[-47.22,21.163],[-47.301,7.213],[-31.457,-2.07],[-15.108,-11.239],[2.243,-18.322],[19.052,-26.63]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[486.117,268.308],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 82\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":44,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-7.479,-0.061],[1.483,-13.88],[14.581,-6.091],[1.968,0.779],[0,0],[0.573,2.629],[-1.992,2.995]],\"o\":[[3.421,0.028],[-1.307,12.243],[-1.954,0.816],[0,0],[-2.502,-0.99],[-0.985,-4.516],[3.088,-4.643]],\"v\":[[37.149,-31.311],[48.109,-14.331],[-29.648,30.538],[-35.758,30.592],[-42.636,27.87],[-47.572,22.09],[-47.6,7.686]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[488.914,264.501],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 83\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":45,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[9.18,10.71],[29.963,-7.424],[0.386,-2.853],[0,0],[-12.24,4.59],[-4.59,11.475]],\"o\":[[0,0],[-2.794,0.692],[-6.446,47.616],[0,0],[12.239,-4.589],[4.589,-11.475]],\"v\":[[38.766,-69.229],[-41.59,-33.503],[-46.854,-27.615],[-46.146,60.205],[-29.316,64.64],[48.71,2.678]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[491.094,304.661],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 84\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":46,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.633,3.072],[9.338,-4.839],[5.771,-2.795],[5.473,-2.415],[5.324,-2.003],[5.113,-1.267],[0.387,-2.852],[0.422,-5.682],[0.104,-5.604],[-0.186,-5.434],[-0.443,-5.01],[-3.054,-8.264],[-12.239,4.59],[-6.458,4.315],[-4.875,3.548],[-4.474,3.459],[-4.147,3.43],[-3.633,3.377],[-1.06,2.649],[0.23,8.125],[0.812,6.334],[1.348,5.561]],\"o\":[[-8.802,0.407],[-4.608,2.388],[-5.104,2.471],[-5.462,2.41],[-5.952,2.239],[-2.794,0.692],[-0.809,5.981],[-0.453,6.104],[-0.116,6.276],[0.228,6.646],[0.966,10.938],[3.303,8.936],[2.739,-1.027],[4.143,-2.768],[4.361,-3.174],[4.484,-3.467],[4.664,-3.858],[5.794,-5.386],[1.362,-3.406],[-0.161,-5.703],[-0.81,-6.324],[-1.859,-7.668]],\"v\":[[38.884,-68.888],[22.99,-62.179],[7.3,-54.191],[-8.848,-47.179],[-24.308,-38.388],[-41.528,-34.21],[-47.829,-28.421],[-47.626,-10.679],[-50.088,6.838],[-48.089,24.43],[-46.928,41.945],[-47.188,59.953],[-29.175,64.161],[-15.057,55.244],[-1.227,45.885],[12.581,36.434],[25.114,25.34],[38.275,14.987],[48.002,1.702],[50.013,-16.281],[48.991,-34.706],[46.466,-53.069]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[488.022,308.325],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 85\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":47,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[9.18,10.71],[29.963,-7.424],[0.386,-2.853],[0,0],[-12.24,4.59],[-4.59,11.475]],\"o\":[[0,0],[-2.794,0.692],[-6.446,47.616],[0,0],[12.239,-4.589],[4.589,-11.475]],\"v\":[[38.766,-69.229],[-41.59,-33.503],[-46.854,-27.615],[-46.146,60.205],[-29.316,64.64],[48.71,2.678]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[491.094,304.661],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 86\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":48,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,-128.173],[11.793,-9.372],[0,0],[8.999,1.408],[0,0],[-1.303,16.955],[-8.608,8.414]],\"o\":[[13.004,70.377],[0.316,26.35],[0,0],[-7.131,5.667],[0,0],[-16.8,-2.628],[0,0],[0,0]],\"v\":[[83.849,-147.32],[117.253,39.27],[100.922,78.38],[29.543,139.229],[4.236,145.913],[-88.814,131.358],[-116.267,96.668],[-91.035,-113.497]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[420.473,263.253],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 87\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":49,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-1.254,-5.111],[-1.601,-5.027],[-1.896,-5.143],[-1.88,-5.621],[-1.498,-6.126],[-1.034,-6.319],[-0.669,-6.312],[-0.413,-6.256],[-0.232,-6.195],[-0.1,-6.138],[0,-6.096],[1.595,-5.026],[7.138,-5.673],[7.135,-6.083],[7.138,-6.085],[7.136,-6.083],[7.141,-6.087],[7.208,-6.006],[8.999,1.408],[9.302,1.455],[9.305,1.456],[9.306,1.456],[9.306,1.456],[9.306,1.456],[4.187,3.205],[2.22,4.951],[-0.43,5.598],[-0.95,10.944],[-0.592,6.621],[-0.575,6.238],[-0.577,6.07],[-0.587,5.964],[-0.604,5.883],[-0.625,5.808],[-0.654,5.724],[-0.695,5.609],[-0.759,5.419],[-0.879,4.984],[-1.361,1.331]],\"o\":[[1.156,6.256],[1.521,6.205],[1.891,5.935],[2.007,5.446],[1.711,5.116],[1.246,5.097],[0.849,5.194],[0.562,5.298],[0.355,5.379],[0.204,5.438],[0.09,5.487],[0.125,10.401],[-2.447,7.707],[-7.203,6.002],[-7.138,6.085],[-7.135,6.082],[-7.14,6.087],[-7.14,6.087],[-7.131,5.667],[-9.302,-1.455],[-9.305,-1.455],[-9.305,-1.455],[-9.306,-1.456],[-9.307,-1.456],[-5.547,-0.868],[-4.309,-3.298],[-2.157,-4.812],[0.704,-8.804],[0.436,-5.036],[0.488,-5.45],[0.518,-5.627],[0.546,-5.732],[0.573,-5.813],[0.603,-5.885],[0.641,-5.961],[0.693,-6.059],[0.771,-6.216],[0.922,-6.577],[1.665,-9.444],[0,0]],\"v\":[[85.099,-146.612],[86.402,-129.173],[91.181,-112.444],[100.031,-97.187],[101.648,-79.35],[105.789,-62.669],[112.659,-46.415],[115.409,-29.207],[113.837,-11.653],[117.138,5.549],[118.511,22.901],[114.175,40.313],[116.511,63.136],[99.755,78.552],[85.085,90.266],[71.922,103.743],[56.012,113.984],[44.496,129.403],[28.909,140.039],[4.051,145.204],[-14.997,145.137],[-33.801,143.463],[-51.987,137.837],[-70.836,136.443],[-89.602,134.504],[-102.435,124.005],[-111.755,112.501],[-115.182,97.815],[-117.651,79.881],[-115.87,62.295],[-111.747,44.925],[-109.862,27.356],[-111.469,9.448],[-105.122,-7.674],[-104.621,-25.385],[-104.921,-43.206],[-98.72,-60.263],[-97.529,-77.897],[-98.445,-95.947],[-93.233,-114.256]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[417.929,265.229],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 88\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":50,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,-128.173],[11.793,-9.372],[0,0],[8.999,1.408],[0,0],[-1.303,16.955],[-8.608,8.414]],\"o\":[[13.004,70.377],[0.316,26.35],[0,0],[-7.131,5.667],[0,0],[-16.8,-2.628],[0,0],[0,0]],\"v\":[[83.849,-147.32],[117.253,39.27],[100.922,78.38],[29.543,139.229],[4.236,145.913],[-88.814,131.358],[-116.267,96.668],[-91.035,-113.497]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[420.473,263.253],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 89\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":51,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-4.941,0.433],[0,0],[0,0],[13.649,-3.427],[2.438,0.92]],\"o\":[[-3.993,-2.051],[32.594,-2.857],[0,0],[-8.303,10.346],[-2.612,0.656],[0,0]],\"v\":[[-42.551,5.635],[-40.017,-1.206],[36.599,-19.63],[46.544,-10.143],[-19.615,18.975],[-27.557,18.556]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[297.009,377.563],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 90\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":52,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[7.772,6.128],[-4.941,0.433],[-6.669,1.275],[-6.212,1.57],[-5.605,1.672],[-9.196,-3.571],[-3.523,-5.9],[7.01,-3.494],[5.858,-2.346],[5.376,-1.85],[3.856,-0.968],[2.438,0.92]],\"o\":[[-3.993,-2.051],[6.222,-0.546],[6.513,-1.245],[6.92,-1.749],[11.202,-3.341],[6.406,2.487],[-2.453,3.057],[-5.029,2.507],[-5.799,2.322],[-7.236,2.489],[-2.612,0.655],[-8.095,-5.677]],\"v\":[[-43.034,7.619],[-40.096,-0.648],[-20.565,-3.029],[-1.405,-7.674],[17.908,-11.892],[36.312,-17.527],[47.026,-9.055],[31.242,0.796],[14.544,7.91],[-2.362,14.607],[-19.599,20.443],[-27.13,19.319]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[294.015,379.183],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 91\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":53,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-4.941,0.433],[0,0],[0,0],[13.649,-3.427],[2.438,0.92]],\"o\":[[-3.993,-2.051],[32.594,-2.857],[0,0],[-8.303,10.346],[-2.612,0.656],[0,0]],\"v\":[[-42.551,5.635],[-40.017,-1.206],[36.599,-19.63],[46.544,-10.143],[-19.615,18.975],[-27.557,18.556]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[297.009,377.563],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 92\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":54,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[25.795,59.729],[-39.506,29.53],[-52.613,5.604],[-55.072,-20.204],[15.869,-39.03],[254.846,11.687]],\"o\":[[-25.795,-59.729],[39.506,-29.53],[52.613,-5.603],[100.87,37.008],[-15.869,39.03],[-254.846,-11.688]],\"v\":[[-379.06,13.987],[-251.533,-84.245],[-9.533,-136.245],[251.467,-82.245],[388.986,47.773],[4.03,130.16]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[409.855,456.176],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 93\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":55,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.312,5.354],[-0.136,5.257],[-3.367,4.994],[-5.153,3.805],[-5.594,2.866],[-5.668,2.348],[-5.637,2.093],[-5.546,2.023],[-5.375,2.126],[-5.056,2.46],[-4.319,3.228],[-6.175,2.771],[-6.057,2.056],[-5.992,1.674],[-5.952,1.43],[-5.922,1.256],[-5.893,1.124],[-5.867,1.018],[-5.839,0.93],[-5.806,0.855],[-5.763,0.788],[-5.703,0.728],[-5.611,0.67],[-5.449,0.611],[-5.056,0.538],[-6.755,-0.238],[-6.364,-0.633],[-6.172,-0.857],[-6.054,-1.009],[-5.97,-1.123],[-5.903,-1.213],[-5.845,-1.29],[-5.794,-1.357],[-5.741,-1.416],[-5.687,-1.474],[-5.624,-1.529],[-5.545,-1.585],[-5.436,-1.645],[-5.261,-1.713],[-4.893,-1.796],[-5.625,-2.301],[-5.511,-2.522],[-5.373,-2.763],[-5.198,-3.03],[-4.97,-3.333],[-4.662,-3.683],[-4.227,-4.097],[-3.563,-4.598],[-2.465,-5.196],[-0.541,-5.78],[2.357,-5.797],[4.752,-4.963],[5.352,-3.819],[5.599,-3.086],[5.734,-2.572],[5.818,-2.181],[5.875,-1.868],[5.911,-1.608],[5.939,-1.387],[5.959,-1.194],[5.974,-1.023],[5.983,-0.869],[5.988,-0.73],[5.993,-0.603],[5.994,-0.487],[5.995,-0.378],[5.992,-0.279],[5.992,-0.185],[5.987,-0.097],[5.982,-0.015],[5.979,0.063],[5.974,0.137],[5.97,0.207],[5.964,0.273],[5.923,0.317],[5.917,0.366],[5.91,0.418],[5.901,0.476],[5.889,0.537],[5.877,0.604],[5.864,0.679],[5.846,0.76],[5.826,0.849],[5.802,0.95],[5.772,1.063],[5.735,1.191],[5.691,1.336],[5.634,1.504],[5.561,1.699],[5.466,1.929],[5.337,2.204],[5.162,2.534],[4.916,2.937],[4.564,3.43],[4.05,4.021],[3.31,4.692]],\"o\":[[-2.722,-6.304],[0.16,-6.193],[3.102,-4.6],[4.493,-3.317],[5.092,-2.609],[5.399,-2.236],[5.583,-2.074],[5.705,-2.083],[5.793,-2.291],[5.815,-2.83],[4.064,-3.038],[4.959,-2.226],[5.316,-1.804],[5.509,-1.539],[5.632,-1.353],[5.718,-1.214],[5.789,-1.104],[5.848,-1.014],[5.906,-0.941],[5.967,-0.878],[6.039,-0.826],[6.137,-0.782],[6.302,-0.752],[6.669,-0.748],[5.066,-0.54],[5.468,0.192],[5.613,0.559],[5.685,0.789],[5.727,0.955],[5.755,1.082],[5.777,1.187],[5.796,1.278],[5.814,1.361],[5.836,1.44],[5.863,1.519],[5.9,1.604],[5.958,1.703],[6.065,1.835],[6.305,2.053],[5.968,2.189],[5.897,2.413],[5.814,2.66],[5.708,2.935],[5.572,3.249],[5.391,3.616],[5.139,4.059],[4.755,4.61],[4.11,5.304],[2.881,6.073],[0.595,6.352],[-1.89,4.649],[-3.619,3.78],[-4.393,3.135],[-4.817,2.655],[-5.082,2.279],[-5.26,1.973],[-5.385,1.714],[-5.48,1.492],[-5.552,1.296],[-5.609,1.123],[-5.652,0.967],[-5.686,0.825],[-5.715,0.697],[-5.735,0.577],[-5.754,0.467],[-5.768,0.365],[-5.781,0.268],[-5.789,0.179],[-5.795,0.094],[-5.801,0.014],[-5.806,-0.061],[-5.809,-0.134],[-5.81,-0.202],[-6.097,-0.28],[-6.099,-0.326],[-6.101,-0.377],[-6.101,-0.432],[-6.1,-0.491],[-6.101,-0.556],[-6.101,-0.628],[-6.098,-0.705],[-6.096,-0.792],[-6.091,-0.889],[-6.084,-0.997],[-6.073,-1.119],[-6.06,-1.257],[-6.039,-1.417],[-6.01,-1.604],[-5.969,-1.824],[-5.906,-2.085],[-5.813,-2.399],[-5.668,-2.783],[-5.441,-3.251],[-5.075,-3.814],[-4.488,-4.457],[-3.599,-5.101]],\"v\":[[-383.317,13.479],[-391.57,-3.866],[-376.863,-17.185],[-370.448,-34.734],[-356.227,-46.711],[-339.191,-53.204],[-322.208,-59.116],[-304.765,-63.421],[-286.48,-65.596],[-269.044,-71.045],[-255.592,-84.217],[-243.317,-99.737],[-222.141,-94.671],[-205.379,-99.642],[-189.371,-108.27],[-173.318,-118.166],[-155.203,-118.673],[-138.028,-123.938],[-119.417,-120.554],[-101.168,-118.576],[-83.818,-122.499],[-66.338,-125.675],[-49.867,-137.467],[-31.541,-134.024],[-13.225,-129.94],[3.614,-129.614],[21.647,-135.587],[38.705,-128.843],[58.049,-137.213],[74.923,-129.705],[92.572,-126.794],[107.979,-113.643],[126.131,-113.297],[145.653,-118.102],[162.806,-112.882],[179.169,-104.822],[196.651,-100.991],[215.203,-100.572],[229.278,-85.684],[249.374,-89.003],[263.244,-73.007],[282.375,-70.317],[300.898,-65.367],[316.501,-54.526],[328.219,-38.132],[346.07,-31.195],[364.43,-23.283],[370.401,-3.183],[383.866,10.365],[382.047,29.536],[389.349,49.271],[380.11,67.048],[362.295,74.769],[348.362,86.466],[329.734,88.943],[313.585,95.869],[299.04,108.181],[279.044,102.838],[262.491,108.778],[245.168,111.659],[229.363,123.306],[210.998,120.509],[194.019,126.936],[175.897,123.883],[159.045,134.046],[140.881,128.533],[123.18,127.982],[105.654,131.904],[87.889,127.157],[70.305,138.208],[52.689,124.537],[34.807,137.125],[17.04,137.391],[-0.46,131.477],[-18.716,134.579],[-36.361,126.662],[-54.338,125.07],[-72.186,121.984],[-90.963,129.518],[-108.801,125.878],[-127.128,126.78],[-144.181,117.202],[-162.508,117.866],[-179.666,110.68],[-197.053,105.654],[-215.095,104.214],[-234.108,106.448],[-249.247,92.671],[-269.026,96.297],[-287.312,93.418],[-304.438,86.722],[-317.922,72.313],[-337.298,69.782],[-344.87,48.845],[-366.702,46.735],[-376.407,30.487]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[410.265,460.619],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 94\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":56,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[25.795,59.729],[-39.506,29.53],[-52.613,5.604],[-55.072,-20.204],[15.869,-39.03],[254.846,11.687]],\"o\":[[-25.795,-59.729],[39.506,-29.53],[52.613,-5.603],[100.87,37.008],[-15.869,39.03],[-254.846,-11.688]],\"v\":[[-378.527,13.987],[-251,-84.245],[-9,-136.245],[252,-82.245],[389.519,47.773],[4.563,130.16]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[409.322,456.176],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 95\",\"np\":4,\"cix\":2,\"bm\":0,\"ix\":57,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[24,-107],[-23.849,15.047],[-15.299,-2.295],[0,0]],\"o\":[[0,0],[-31.364,-6.885],[23.849,-15.047],[15.299,2.295],[0,0]],\"v\":[[-31.168,-51.62],[-55.818,103.147],[-46.602,-57.227],[69.182,-100.853],[87.182,-95.853]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":200,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[375.14,196.785],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 96\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":58,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[7.38,-5.197],[1.075,-11.75],[0.826,-6.8],[0.912,-6.365],[0.997,-6.174],[1.072,-6.062],[1.14,-5.99],[1.203,-5.932],[1.26,-5.89],[1.313,-5.854],[2.711,6.567],[0.947,6.396],[0.213,6.084],[-0.222,5.898],[-0.552,5.751],[-0.845,5.607],[-1.151,5.432],[-1.523,5.161],[-2.097,4.592],[-3.495,2.205],[-6.294,3.124],[-5.764,2.577],[-5.59,2.308],[-5.476,2.082],[-5.343,1.814],[-5.065,1.358],[-3.323,-0.498],[7.937,-5.042],[8.452,-3.159],[8.453,-3.159],[8.451,-3.159],[8.453,-3.159],[8.454,-3.16],[8.527,-2.964]],\"o\":[[-7.128,5.019],[-0.436,4.762],[-0.626,5.16],[-0.762,5.316],[-0.87,5.396],[-0.963,5.444],[-1.042,5.47],[-1.113,5.49],[-1.177,5.502],[-4.919,-1.079],[-1.881,-4.556],[-0.777,-5.248],[-0.193,-5.497],[0.213,-5.624],[0.547,-5.71],[0.873,-5.787],[1.246,-5.884],[1.79,-6.068],[3.06,-6.702],[3.934,-2.482],[4.889,-2.425],[5.244,-2.345],[5.489,-2.266],[5.744,-2.182],[6.165,-2.092],[7.943,-2.13],[15.3,2.295],[-7.617,4.839],[-8.453,3.159],[-8.451,3.159],[-8.453,3.159],[-8.455,3.16],[-8.455,3.16],[-8.389,2.916]],\"v\":[[-40.716,-50.328],[-41.019,-34.172],[-43.874,-16.91],[-45.404,0.499],[-50.414,17.374],[-54.258,34.38],[-54.451,52.069],[-60.255,68.691],[-64.343,85.633],[-66.889,102.337],[-77.906,91.15],[-80.268,74.234],[-82.551,57.363],[-83.516,40.228],[-81.168,23.211],[-81.288,5.901],[-76.203,-10.63],[-71.096,-26.93],[-67.846,-43.947],[-56.634,-56.539],[-41.916,-66.612],[-25.267,-73.02],[-8.897,-79.935],[7.448,-86.949],[23.736,-94.283],[41.254,-97.914],[58.46,-99.734],[75.8,-97.296],[59.839,-89.384],[42.813,-83.385],[25.867,-77.185],[9.09,-70.52],[-8.198,-65.214],[-24.232,-56.434]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.684361237171,0.795256969975,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[382.677,199.897],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 97\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":59,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[24,-107],[-23.849,15.047],[-15.299,-2.295],[0,0]],\"o\":[[0,0],[-31.364,-6.885],[23.849,-15.047],[15.299,2.295],[0,0]],\"v\":[[-31.168,-51.62],[-55.818,103.147],[-46.602,-57.227],[69.182,-100.853],[87.182,-95.853]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[375.14,196.785],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 98\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":60,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":150.000006109625,\"st\":-55.0000022401959,\"bm\":0}],\"markers\":[]}"
  },
  {
    "path": "src/lv1/images/finish-task-illust.json",
    "content": "{\"v\":\"5.7.4\",\"fr\":29.9700012207031,\"ip\":0,\"op\":90.0000036657751,\"w\":952,\"h\":480,\"nm\":\"タスク完了\",\"ddd\":0,\"assets\":[],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"レイヤー 2アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[361.836,288.57,0],\"to\":[-10.5,-1.833,0],\"ti\":[10.5,1.833,0]},{\"t\":15.0000006109625,\"s\":[298.836,277.57,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[4.058,4.057,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.003,1.003,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":15,\"s\":[111.818,111.818,100]},{\"t\":22.0000008960784,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.396,-1.884],[1.885,-0.396],[0.396,1.884],[-1.884,0.396]],\"o\":[[0.396,1.884],[-1.884,0.396],[-0.396,-1.884],[1.884,-0.395]],\"v\":[[3.412,-0.717],[0.717,3.411],[-3.412,0.717],[-0.717,-3.412]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[4.057,4.057],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"レイヤー 3アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[583.385,321.886,0],\"to\":[3.833,0.667,0],\"ti\":[-3.833,-0.667,0]},{\"t\":10.0000004073083,\"s\":[606.385,325.886,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[3.83,3.83,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":10,\"s\":[111.818,111.818,100]},{\"t\":17.0000006924242,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.099,-1.923],[1.923,-0.099],[0.099,1.923],[-1.923,0.099]],\"o\":[[0.099,1.923],[-1.923,0.099],[-0.098,-1.922],[1.923,-0.098]],\"v\":[[3.481,-0.179],[0.178,3.481],[-3.482,0.178],[-0.179,-3.482]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[3.83,3.83],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"レイヤー 4アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[557.408,231.956,0],\"to\":[12.5,-9,0],\"ti\":[-12.5,9,0]},{\"t\":14.0000005702317,\"s\":[632.408,177.956,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[3.919,3.92,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":14,\"s\":[111.818,111.818,100]},{\"t\":21.0000008553475,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.915,0.203],[-0.202,1.914],[-1.915,-0.203],[0.203,-1.914]],\"o\":[[-1.915,-0.203],[0.203,-1.915],[1.914,0.202],[-0.202,1.915]],\"v\":[[-0.367,3.466],[-3.467,-0.366],[0.367,-3.466],[3.466,0.367]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[3.919,3.92],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"レイヤー 5アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[1.002]},\"o\":{\"x\":[0.362],\"y\":[0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[1.259]},\"o\":{\"x\":[0.337],\"y\":[0.005]},\"t\":30,\"s\":[-15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[401.494,361.531,0],\"to\":[-6.833,4.667,0],\"ti\":[6.833,-4.667,0]},{\"t\":10.0000004073083,\"s\":[360.494,389.531,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[13.718,14.679,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":10,\"s\":[111.818,111.818,100]},{\"t\":17.0000006924242,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\"v\":[[-0.672,4.257],[-8.719,-1.165],[0,-5.421],[8.719,-9.68],[8.047,0.001],[7.374,9.68]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[13.718,14.68],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"レイヤー 6アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[1.002]},\"o\":{\"x\":[0.362],\"y\":[0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[1.259]},\"o\":{\"x\":[0.337],\"y\":[0.005]},\"t\":30,\"s\":[-15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[584.982,278.447,0],\"to\":[12.167,-2.5,0],\"ti\":[-12.167,2.5,0]},{\"t\":12.00000048877,\"s\":[657.982,263.447,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[13.524,13.253,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":12,\"s\":[111.818,111.818,100]},{\"t\":19.0000007738859,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\"v\":[[2.755,1.741],[-3.015,8.253],[-5.77,0],[-8.525,-8.253],[0,-6.512],[8.525,-4.771]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[13.524,13.253],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"レイヤー 7アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[364.483,246.205,0],\"to\":[-17.333,-10.5,0],\"ti\":[17.333,10.5,0]},{\"t\":10.0000004073083,\"s\":[260.483,183.205,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[28.383,27.638,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":10,\"s\":[111.818,111.818,100]},{\"t\":17.0000006924242,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\"v\":[[7.556,4.776],[-8.271,22.638],[-15.827,0],[-23.383,-22.638],[0,-17.862],[23.383,-13.086]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[28.383,27.638],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"レイヤー 8アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[430.131,178.972,0],\"to\":[-7.833,-20.833,0],\"ti\":[7.833,20.833,0]},{\"t\":15.0000006109625,\"s\":[383.131,53.972,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[17.198,17.197,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.003,1.003,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":15,\"s\":[111.818,111.818,100]},{\"t\":22.0000008960784,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[2.377,12.197],[-12.198,2.377],[-2.377,-12.197],[12.198,-2.377]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[17.198,17.197],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":8,\"ty\":4,\"nm\":\"レイヤー 9アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[1.002]},\"o\":{\"x\":[0.362],\"y\":[0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[1.259]},\"o\":{\"x\":[0.337],\"y\":[0.005]},\"t\":30,\"s\":[-15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[566.845,218.578,0],\"to\":[24.167,-4,0],\"ti\":[-24.167,4,0]},{\"t\":11.0000004480392,\"s\":[711.845,194.578,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[24.391,24.391,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":11,\"s\":[111.818,111.818,100]},{\"t\":18.000000733155,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-19.391,1.692],[-1.692,-19.391],[19.391,-1.692],[1.692,19.391]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[24.391,24.391],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":4,\"nm\":\"レイヤー 13アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[499.74,172.552,0],\"to\":[4,-18.833,0],\"ti\":[-4,18.833,0]},{\"t\":16.0000006516934,\"s\":[523.74,59.552,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[20.954,20.954,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.003,1.003,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":16,\"s\":[111.818,111.818,100]},{\"t\":23.0000009368092,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.569,-8.497],[8.497,-0.57],[0.569,8.497],[-8.497,0.569]],\"o\":[[0.569,8.497],[-8.497,0.569],[-0.569,-8.497],[8.497,-0.57]],\"v\":[[15.385,-1.031],[1.031,15.385],[-15.385,1.03],[-1.031,-15.384]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[20.954,20.955],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":10,\"ty\":4,\"nm\":\"レイヤー 14アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[371.875,231.86,0],\"to\":[-8.167,-2.167,0],\"ti\":[8.167,2.167,0]},{\"t\":14.0000005702317,\"s\":[322.875,218.86,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[3.736,3.736,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":14,\"s\":[111.818,111.818,100]},{\"t\":21.0000008553475,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,-1.925],[1.925,0],[0,1.925],[-1.925,0]],\"o\":[[0,1.925],[-1.925,0],[0,-1.925],[1.925,0]],\"v\":[[3.486,0],[0,3.486],[-3.486,0],[0,-3.486]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[3.736,3.736],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":4,\"nm\":\"レイヤー 15アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[401.887,195.148,0],\"to\":[-10.333,-12.833,0],\"ti\":[10.333,12.833,0]},{\"t\":12.00000048877,\"s\":[339.887,118.148,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[10.809,10.809,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":12,\"s\":[111.818,111.818,100]},{\"t\":19.0000007738859,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,-3.208],[3.208,0],[0,3.208],[-3.209,0]],\"o\":[[0,3.208],[-3.209,0],[0,-3.208],[3.208,0]],\"v\":[[5.809,0],[0,5.809],[-5.809,0],[0,-5.809]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.944075939702,0.498574320475,0.535545558555,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[10.809,10.809],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":12,\"ty\":4,\"nm\":\"レイヤー 16アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[583.889,324.219,0],\"to\":[18.5,5,0],\"ti\":[-18.5,-5,0]},{\"t\":10.0000004073083,\"s\":[694.889,354.219,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[13.049,13.048,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":10,\"s\":[111.818,111.818,100]},{\"t\":17.0000006924242,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,-4.445],[4.445,0],[0,4.445],[-4.445,0]],\"o\":[[0,4.445],[-4.445,0],[0,-4.445],[4.445,0]],\"v\":[[8.049,0],[0,8.048],[-8.049,0],[0,-8.048]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.833177274816,0.498574320475,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[13.048,13.048],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":13,\"ty\":4,\"nm\":\"レイヤー 17アウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.998]},\"o\":{\"x\":[0.362],\"y\":[-0.005]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.871]},\"o\":{\"x\":[0.337],\"y\":[-0.003]},\"t\":30,\"s\":[15]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[362.623,274.043,0],\"to\":[-17.167,2.167,0],\"ti\":[17.167,-2.167,0]},{\"t\":12.00000048877,\"s\":[259.623,287.043,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[15.982,15.983,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,1]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,0]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,0]},\"t\":12,\"s\":[111.818,111.818,100]},{\"t\":19.0000007738859,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.877,-5.581],[5.582,-0.877],[0.877,5.581],[-5.581,0.878]],\"o\":[[0.877,5.581],[-5.581,0.877],[-0.877,-5.581],[5.581,-0.877]],\"v\":[[10.106,-1.588],[1.588,10.106],[-10.105,1.588],[-1.588,-10.106]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":380,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":30,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[15.982,15.983],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":14,\"ty\":4,\"nm\":\"Flagアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.687],\"y\":[0.995]},\"o\":{\"x\":[0.362],\"y\":[-0.015]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.66],\"y\":[0.741]},\"o\":{\"x\":[0.337],\"y\":[-0.005]},\"t\":30,\"s\":[5]},{\"t\":90.0000036657751,\"s\":[-5]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[481.037,477.347,0],\"to\":[0,-20.167,0],\"ti\":[0,15.167,0]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":10,\"s\":[481.037,356.347,0],\"to\":[0,-15.167,0],\"ti\":[0,-5,0]},{\"t\":17.0000006924242,\"s\":[481.037,386.347,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[123.54,257.152,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.035,0.035,0.833],\"y\":[1.002,1.002,-14.152]},\"o\":{\"x\":[0.294,0.294,0.167],\"y\":[0,0,20.337]},\"t\":0,\"s\":[0,0,100]},{\"i\":{\"x\":[0,0,0.833],\"y\":[1,1,6.729]},\"o\":{\"x\":[0.614,0.614,0.167],\"y\":[0.007,0.007,10.606]},\"t\":10,\"s\":[111.818,111.818,100]},{\"t\":17.0000006924242,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":5,\"nm\":\"タービュレントディスプレイス\",\"np\":16,\"mn\":\"ADBE Turbulent Displace\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":7,\"nm\":\"変形\",\"mn\":\"ADBE Turbulent Displace-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":1,\"ix\":1}},{\"ty\":0,\"nm\":\"量\",\"mn\":\"ADBE Turbulent Displace-0002\",\"ix\":2,\"v\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.166],\"y\":[1]},\"o\":{\"x\":[0.339],\"y\":[0.023]},\"t\":0,\"s\":[50]},{\"t\":17.0000006924242,\"s\":[0]}],\"ix\":2}},{\"ty\":0,\"nm\":\"サイズ\",\"mn\":\"ADBE Turbulent Displace-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":100,\"ix\":3}},{\"ty\":3,\"nm\":\"オフセット\",\"mn\":\"ADBE Turbulent Displace-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":[476,240],\"ix\":4}},{\"ty\":0,\"nm\":\"複雑度\",\"mn\":\"ADBE Turbulent Displace-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":0,\"nm\":\"展開\",\"mn\":\"ADBE Turbulent Displace-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":0,\"ix\":6}},{\"ty\":6,\"nm\":\"展開のオプション\",\"mn\":\"ADBE Turbulent Displace-0007\",\"ix\":7,\"v\":0},{\"ty\":7,\"nm\":\"サイクル展開\",\"mn\":\"ADBE Turbulent Displace-0008\",\"ix\":8,\"v\":{\"a\":0,\"k\":0,\"ix\":8}},{\"ty\":0,\"nm\":\"サイクル（周期）\",\"mn\":\"ADBE Turbulent Displace-0009\",\"ix\":9,\"v\":{\"a\":0,\"k\":1,\"ix\":9}},{\"ty\":0,\"nm\":\"ランダムシード\",\"mn\":\"ADBE Turbulent Displace-0010\",\"ix\":10,\"v\":{\"a\":0,\"k\":0,\"ix\":10}},{\"ty\":6,\"nm\":\"ランダムシード\",\"mn\":\"ADBE Turbulent Displace-0011\",\"ix\":11,\"v\":0},{\"ty\":7,\"nm\":\"固定\",\"mn\":\"ADBE Turbulent Displace-0012\",\"ix\":12,\"v\":{\"a\":0,\"k\":3,\"ix\":12}},{\"ty\":7,\"nm\":\"レイヤーのサイズを変更\",\"mn\":\"ADBE Turbulent Displace-0013\",\"ix\":13,\"v\":{\"a\":0,\"k\":0,\"ix\":13}},{\"ty\":7,\"nm\":\"最高画質でのアンチエイリアス\",\"mn\":\"ADBE Turbulent Displace-0014\",\"ix\":14,\"v\":{\"a\":0,\"k\":1,\"ix\":14}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-9.64,2.625],[-2.74,7.978],[9.64,-7.978]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":380,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":30,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[122.18,80.552],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-1.538,-12.187],[12.187,-1.538],[1.538,12.187],[-12.187,1.538]],\"o\":[[1.538,12.187],[-12.187,1.538],[-1.538,-12.187],[12.187,-1.538]],\"v\":[[22.066,-2.785],[2.785,22.066],[-22.066,2.785],[-2.785,-22.066]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.721325324563,0.870139028512,0.51658929563,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[121.815,80.561],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-3.034,-6.361],[6.361,-3.034],[3.035,6.361],[-6.361,3.034]],\"o\":[[3.034,6.361],[-6.361,3.034],[-3.034,-6.361],[6.361,-3.034]],\"v\":[[11.518,-5.494],[5.494,11.518],[-11.518,5.494],[-5.494,-11.518]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":380,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":30,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[19.552,37.539],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 3\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[49.445,103.658],[-49.445,-103.658]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":160,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[74.935,153.646],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 4\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-12.228,11.136],[-22.208,0.97],[0,0],[0,0],[0,0],[16.278,-14.823],[0,0],[16.1,-3.469],[0,0]],\"o\":[[0,0],[16.1,-3.469],[16.278,-14.823],[0,0],[0,0],[0,0],[-22.208,0.97],[0,0],[-12.228,11.136],[0,0],[0,0]],\"v\":[[-47.66,71.449],[-14.708,64.35],[28.341,42.157],[87.423,17.912],[90.226,17.789],[47.66,-71.449],[44.856,-71.326],[-14.225,-47.081],[-14.226,-47.081],[-57.274,-24.888],[-90.226,-17.789]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":210,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":20,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[119.854,76.449],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 5\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":15,\"ty\":4,\"nm\":\"Bgアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[474.297,287.043,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[125.745,125.745,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,-69.309],[69.309,0],[0,69.309],[-69.309,0]],\"o\":[[0,69.309],[-69.309,0],[0,-69.309],[69.309,0]],\"v\":[[125.495,0],[0,125.495],[-125.495,0],[0,-125.495]],\"c\":true},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.926064285578,0.955448584463,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"塗り 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[125.745,125.745],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":16,\"ty\":4,\"nm\":\"pathアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[606.384,88.307,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[20.051,21.899,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-102.555,29.459],[0,0]],\"o\":[[0,0],[102.555,-29.459],[0,0]],\"v\":[[-130.551,176.398],[-45.439,64.152],[19.051,-20.898]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":20,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":8,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[20.051,21.898],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[0]},{\"t\":23.0000009368092,\"s\":[69]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[0]},{\"t\":17.0000006924242,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"パスのトリミング 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":17,\"ty\":4,\"nm\":\"pathアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[308.57,342.274,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[28.831,24.563,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[69.992,43.48],[0,0]],\"o\":[[0,0],[-69.992,-43.48],[0,0]],\"v\":[[164.331,-55.564],[57.938,-11.754],[-46.831,45.063]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":20,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":8,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[28.831,24.563],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[0]},{\"t\":23.0000009368092,\"s\":[69]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[0]},{\"t\":17.0000006924242,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"パスのトリミング 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":18,\"ty\":4,\"nm\":\"pathアウトライン\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[602.898,365.837,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[21.166,20.824,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-12.881,-62.151],[0,0]],\"o\":[[0,0],[12.881,62.151],[0,0]],\"v\":[[-120.166,-71.824],[-52.279,-27.488],[49.416,33.574]],\"c\":false},\"ix\":2},\"nm\":\"パス 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.200948393579,0.423697886747,0.944075939702,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":2,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"d\":[{\"n\":\"d\",\"nm\":\"線分\",\"v\":{\"a\":0,\"k\":20,\"ix\":1}},{\"n\":\"g\",\"nm\":\"間隔\",\"v\":{\"a\":0,\"k\":8,\"ix\":2}},{\"n\":\"o\",\"nm\":\"オフセット\",\"v\":{\"a\":0,\"k\":0,\"ix\":7}}],\"nm\":\"線 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.166,20.824],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"トランスフォーム\"}],\"nm\":\"グループ 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[0]},{\"t\":23.0000009368092,\"s\":[69]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[0]},{\"t\":17.0000006924242,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"パスのトリミング 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false}],\"ip\":0,\"op\":90.0000036657751,\"st\":0,\"bm\":0}],\"markers\":[]}"
  },
  {
    "path": "src/lv1/index.ts",
    "content": "export * from './a11y/FocusHighlight';\nexport * from './a11y/FocusTrap';\nexport { default as VisuallyHidden } from './a11y/VisuallyHidden';\nexport { default as Balloon } from './bases/Balloon';\nexport { default as CardBase } from './bases/CardBase';\nexport { default as ColumnBase } from './bases/ColumnBase';\nexport { default as Container } from './bases/Container';\nexport { default as ContentsBase } from './bases/ContentsBase';\nexport { default as DialogBase } from './bases/DialogBase';\nexport { default as FloatingBase } from './bases/FloatingBase';\nexport { default as MarginBase } from './bases/MarginBase';\nexport * from './bases/NegativeContentsBase';\nexport { default as NegativeMarginBase } from './bases/NegativeMarginBase';\nexport { default as PopupBase } from './bases/PopupBase';\nexport { default as ScrimBase } from './bases/ScrimBase';\nexport { default as ScrollableBase } from './bases/ScrollableBase';\nexport { default as ZebraBase } from './bases/ZebraBase';\nexport { default as BackwardButton } from './buttons/BackwardButton';\nexport { default as Button } from './buttons/Button';\nexport type { ButtonAppearanceType } from './buttons/Button';\nexport { default as GlobalNaviButton } from './buttons/GlobalNaviButton';\nexport { default as IconOnlyButton } from './buttons/IconOnlyButton';\nexport { default as IconOnlyJumpButton } from './buttons/IconOnlyJumpButton';\nexport { default as IconOnlyBackwardButton } from './buttons/IconOnlyBackwardButton';\nexport { default as InlineLink } from './buttons/InlineLink';\nexport { default as JumpButton } from './buttons/JumpButton';\nexport { default as LeftIconButton } from './buttons/LeftIconButton';\nexport { default as ListButton } from './buttons/ListButton';\nexport { default as PagerButton } from './buttons/PagerButton';\nexport { default as RightIconButton } from './buttons/RightIconButton';\nexport { default as TabButton } from './buttons/TabButton';\nexport { default as TextButton } from './buttons/TextButton';\nexport { default as CalendarDate } from './calendar/CalendarDate';\nexport type { TimeRecord } from './calendar/CalendarDate';\nexport { default as CalendarHead } from './calendar/CalendarHead';\nexport type { FormHandlers, AutocompleteAttribute } from './forms/types';\nexport { default as CheckBox } from './forms/CheckBox';\nexport { default as FormControlLabel } from './forms/FormControlLabel';\nexport { default as NumeralField } from './forms/NumeralField';\nexport { default as RadioButton } from './forms/RadioButton';\nexport { default as ReadOnlyField } from './forms/ReadOnlyField';\nexport { default as SearchField } from './forms/SearchField';\nexport { default as SelectBox } from './forms/SelectBox';\nexport type { SelectBoxOption, SelectBoxOptionGroup } from './forms/SelectBox';\nexport * from './forms/OptionButton';\nexport { default as TextArea } from './forms/TextArea';\nexport { default as TextField } from './forms/TextField';\nexport type { TextFieldType, TextFieldWidth } from './forms/TextField';\nexport { default as ToggleButton } from './forms/ToggleButton';\nexport { default as GridBlock } from './grids/GridBlock';\nexport type { GridSize } from './grids/GridBlock';\nexport { default as GridWrapper } from './grids/GridWrapper';\nexport { default as Note } from './typography/Note';\nexport { default as PageTitle } from './typography/PageTitle';\nexport { default as Paragraph } from './typography/Paragraph';\nexport { default as SectionTitle } from './typography/SectionTitle';\nexport { default as SubSectionTitle } from './typography/SubSectionTitle';\nexport * from './typography/Text';\nexport { default as Avatar } from './icons/Avatar';\nexport { default as MaterialIcon } from './icons/MaterialIcon';\nexport * from './icons/RequiredIcon';\nexport { default as StatusIcon } from './icons/StatusIcon';\nexport type { StatusType } from './icons/StatusIcon';\nexport { default as AlertSwallow } from './images/AlertSwallow';\nexport { default as AppStoreBadge } from './images/AppStoreBadge';\nexport { default as CloudSkeletonIllust } from './images/CloudSkeletonIllust';\nexport { default as CloudUploadIllust } from './images/CloudUploadIllust';\nexport { default as CsvUploadIllust } from './images/CsvUploadIllust';\nexport { default as DiscoveryIllust } from './images/DiscoveryIllust';\nexport { default as FileUploadIllust } from './images/FileUploadIllust';\nexport { default as FinishTaskIllust } from './images/FinishTaskIllust';\nexport { default as GooglePlayBadge } from './images/GooglePlayBadge';\nexport { default as ImageUploadIllust } from './images/ImageUploadIllust';\nexport { default as NoDataIllust } from './images/NoDataIllust';\nexport { default as NoSearchResultsIllust } from './images/NoSearchResultsIllust';\nexport { default as NotFoundSwallow } from './images/NotFoundSwallow';\nexport { default as InlineSpinner } from './InlineSpinner';\nexport { default as SegmentControlButton } from './interactiveParts/SegmentControlButton';\nexport * from './interactiveParts/StepNumber';\nexport { default as StepBlock } from './interactiveParts/StepBlock';\nexport { default as StepBorder } from './interactiveParts/StepBorder';\nexport { default as Tab } from './interactiveParts/Tab';\nexport * from './layout/Stack';\nexport * from './layout/HStack';\nexport * from './layout/VStack';\nexport { default as WithDescriptionContent } from './layout/WithDescriptionContent';\nexport { default as WithSideContent } from './layout/WithSideContent';\nexport { default as CheckBoxCell } from './lists/CheckBoxCell';\nexport { default as BorderTableListCell } from './lists/BorderTableListCell';\nexport { default as DescriptionListCell } from './lists/DescriptionListCell';\nexport { default as DescriptionListHeadCell } from './lists/DescriptionListHeadCell';\nexport { default as TableListCell } from './lists/TableListCell';\nexport { default as TableListHead } from './lists/TableListHead';\nexport { default as TableListHeadCell } from './lists/TableListHeadCell';\nexport { default as TableListRow } from './lists/TableListRow';\nexport { default as TreeFoldingButtonCell } from './lists/TreeFoldingButtonCell';\nexport { default as Loading } from './Loading';\nexport * from './progress/ProgressBar';\nexport { default as Message } from './messages/Message';\nexport type { MessageTypes } from './messages/Message';\n"
  },
  {
    "path": "src/lv1/interactiveParts/SegmentControlButton.stories.tsx",
    "content": "import * as React from 'react';\nimport { MdAdd, MdRemove } from 'react-icons/md';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport SegmentControlButton from './SegmentControlButton';\nimport MarginBase from '../bases/MarginBase';\n\nexport default {\n  component: SegmentControlButton,\n};\n\nexport const SegmentControlButtonComponent = () => (\n  <div>\n    <SegmentControlButton\n      current={boolean('Current', false, 'SegmentControlButton')}\n      small={boolean('Small', false, 'SegmentControlButton')}\n      large={boolean('Large', false, 'SegmentControlButton')}\n      onClick={action('click')}\n      {...commonKnobs()}\n    >\n      {text('Children', '通常は単体で置きません', 'SegmentControlButton')}\n    </SegmentControlButton>\n  </div>\n);\n\nexport const Default = () => {\n  const [index, setIndex] = React.useState(1);\n\n  return (\n    <>\n      <MarginBase mb={1}>\n        <SegmentControlButton current={index === 0} onClick={() => setIndex(0)}>\n          申請中\n        </SegmentControlButton>\n        <SegmentControlButton current={index === 1} onClick={() => setIndex(1)}>\n          差し戻し\n        </SegmentControlButton>\n        <SegmentControlButton current={index === 2} onClick={() => setIndex(2)}>\n          承認済み\n        </SegmentControlButton>\n      </MarginBase>\n    </>\n  );\n};\n\nexport const Small = () => {\n  const [index, setIndex] = React.useState(1);\n\n  return (\n    <div>\n      <SegmentControlButton\n        current={index === 0}\n        small\n        onClick={() => setIndex(0)}\n      >\n        申請中\n      </SegmentControlButton>\n      <SegmentControlButton\n        current={index === 1}\n        small\n        onClick={() => setIndex(1)}\n      >\n        差し戻し\n      </SegmentControlButton>\n      <SegmentControlButton\n        current={index === 2}\n        small\n        onClick={() => setIndex(2)}\n      >\n        承認済み\n      </SegmentControlButton>\n    </div>\n  );\n};\n\nexport const Large = () => {\n  const [index, setIndex] = React.useState(1);\n\n  return (\n    <div>\n      <SegmentControlButton\n        current={index === 0}\n        large\n        onClick={() => setIndex(0)}\n      >\n        申請中\n      </SegmentControlButton>\n      <SegmentControlButton\n        current={index === 1}\n        large\n        onClick={() => setIndex(1)}\n      >\n        差し戻し\n      </SegmentControlButton>\n      <SegmentControlButton\n        current={index === 2}\n        large\n        onClick={() => setIndex(2)}\n      >\n        承認済み\n      </SegmentControlButton>\n    </div>\n  );\n};\n\nexport const WithIcon = () => {\n  const [index, setIndex] = React.useState(0);\n  const [indexSmall, setIndexSmall] = React.useState(0);\n  const [indexLarge, setIndexLarge] = React.useState(0);\n\n  return (\n    <>\n      <MarginBase mb={1}>\n        <SegmentControlButton\n          current={index === 0}\n          onClick={() => setIndex(0)}\n          IconComponent={MdAdd}\n        >\n          ボタンテキスト\n        </SegmentControlButton>\n        <SegmentControlButton\n          current={index === 1}\n          onClick={() => setIndex(1)}\n          IconComponent={MdRemove}\n        >\n          ボタンテキスト\n        </SegmentControlButton>\n      </MarginBase>\n      <MarginBase mb={1}>\n        <SegmentControlButton\n          current={indexSmall === 0}\n          small\n          onClick={() => setIndexSmall(0)}\n          IconComponent={MdAdd}\n        >\n          ボタンテキスト\n        </SegmentControlButton>\n        <SegmentControlButton\n          current={indexSmall === 1}\n          small\n          onClick={() => setIndexSmall(1)}\n          IconComponent={MdRemove}\n        >\n          ボタンテキスト\n        </SegmentControlButton>\n      </MarginBase>\n      <MarginBase mb={1}>\n        <SegmentControlButton\n          current={indexLarge === 0}\n          large\n          onClick={() => setIndexLarge(0)}\n          IconComponent={MdAdd}\n        >\n          ボタンテキスト\n        </SegmentControlButton>\n        <SegmentControlButton\n          current={indexLarge === 1}\n          large\n          onClick={() => setIndexLarge(1)}\n          IconComponent={MdRemove}\n        >\n          ボタンテキスト\n        </SegmentControlButton>\n      </MarginBase>\n    </>\n  );\n};\n\nexport const WithHref = () => {\n  return (\n    <div>\n      <SegmentControlButton\n        current={false}\n        large\n        href=\"https://www.freee.co.jp/\"\n        target=\"_blank\"\n      >\n        ページ1\n      </SegmentControlButton>\n      <SegmentControlButton\n        current={true}\n        large\n        href=\"https://www.freee.co.jp/\"\n        target=\"_blank\"\n      >\n        ページ2\n      </SegmentControlButton>\n      <SegmentControlButton\n        current={false}\n        large\n        href=\"https://www.freee.co.jp/\"\n        target=\"_blank\"\n      >\n        ページ3\n      </SegmentControlButton>\n      <SegmentControlButton\n        current={false}\n        large\n        href=\"https://www.freee.co.jp/\"\n        target=\"_blank\"\n      >\n        ページ4\n      </SegmentControlButton>\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv1/interactiveParts/SegmentControlButton.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * 選択状態にします\n   */\n  current?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * 押下時に遷移させるURLを指定します。指定した場合は `<a>` 要素、空文字列もしくはundefinedの場合は `<button>` 要素となります\n   */\n  href?: string;\n  /**\n   * target を設定します\n   */\n  target?: string;\n  /**\n   * 未指定の場合、`target=\"_blank\"` であれば `noopener noreferrer`となります\n   *\n   * （空文字列を渡した場合には `\"\"` が指定されます）\n   */\n  rel?: string;\n  /**\n   * click ハンドラを設定します\n   */\n  onClick?: React.MouseEventHandler;\n  /**\n   * アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n   */\n  IconComponent?: React.ElementType;\n} & CommonProps;\n\nconst SegmentControlButton: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    current,\n    small,\n    large,\n    href,\n    target,\n    rel,\n    onClick,\n    IconComponent,\n  } = props;\n\n  const buttonBaseClass = 'vb-segmentControlButton';\n\n  const classModifier = {\n    current,\n    small,\n    large,\n    icon: !!IconComponent,\n  };\n\n  const content = (\n    <>\n      {IconComponent && (\n        <IconComponent\n          className={`${buttonBaseClass}__icon`}\n          focusable={false}\n        />\n      )}\n      {children}\n    </>\n  );\n\n  if (href) {\n    return (\n      <a\n        href={href}\n        target={target}\n        rel={\n          rel || rel === ''\n            ? rel\n            : target === '_blank'\n            ? 'noopener noreferrer'\n            : undefined\n        }\n        onClick={onClick}\n        {...commonProps(props, buttonBaseClass, classModifier)} // SegmentControlButton 単体では margin は取らない\n      >\n        {content}\n      </a>\n    );\n  }\n\n  return (\n    <button\n      type=\"button\"\n      onClick={onClick}\n      aria-pressed={current}\n      {...commonProps(props, buttonBaseClass, classModifier)} // SegmentControlButton 単体では margin は取らない\n    >\n      {content}\n    </button>\n  );\n};\n\nexport default SegmentControlButton;\n"
  },
  {
    "path": "src/lv1/interactiveParts/StepBlock.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport StepBlock from './StepBlock';\n\nexport default {\n  title: 'deprecated/interactiveParts/StepBlock',\n  component: StepBlock,\n};\n\nexport const StepBlockComponent = () => (\n  <ul style={{ display: 'inline-block', padding: 0, margin: 0 }}>\n    <StepBlock\n      number={text('Number', '1', 'StepBlock')}\n      current={boolean('Current', false, 'StepBlock')}\n      done={boolean('Done', false, 'StepBlock')}\n      disabled={boolean('Disabled', false, 'StepBlock')}\n      {...commonKnobs()}\n    >\n      {text('Children', 'stepper', 'StepBlock')}\n    </StepBlock>\n  </ul>\n);\n\nexport const Default = () => {\n  return (\n    <ul style={{ display: 'inline-block', padding: 0, margin: 0 }}>\n      <StepBlock number=\"1\">stepper</StepBlock>\n      <StepBlock number=\"1\" current>\n        current\n      </StepBlock>\n      <StepBlock number=\"1\" done>\n        done\n      </StepBlock>\n      <StepBlock number=\"1\" disabled>\n        disabled\n      </StepBlock>\n    </ul>\n  );\n};\n\nexport const Small = () => {\n  return (\n    <ul style={{ display: 'inline-block', padding: 0, margin: 0 }}>\n      <StepBlock small number=\"1\">\n        stepper\n      </StepBlock>\n      <StepBlock small number=\"1\" current>\n        current\n      </StepBlock>\n      <StepBlock small number=\"1\" done>\n        done\n      </StepBlock>\n      <StepBlock small number=\"1\" disabled>\n        disabled\n      </StepBlock>\n    </ul>\n  );\n};\n"
  },
  {
    "path": "src/lv1/interactiveParts/StepBlock.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { StepNumber } from './StepNumber';\n\ntype Props = {\n  /**\n   * 内部の文字列を指定します\n   */\n  number?: string;\n  children?: React.ReactNode;\n  /**\n   * 見た目を current にします\n   */\n  current?: boolean;\n  /**\n   * 見た目を done にします\n   */\n  done?: boolean;\n  /**\n   * 見た目を disabled にします\n   */\n  disabled?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * 古いコンポーネントなので使わないでください。丸囲み数字が必要な場合はStepNumberを、リストにしたい場合はStepperを使用してください\n *\n * @deprecated\n */\nconst StepBlock: React.FC<Props> = (props: Props) => {\n  const {\n    number,\n    children,\n    current,\n    done,\n    disabled,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const stepperBaseClass = 'vb-stepBlock';\n  return (\n    <li\n      {...commonProps(\n        props,\n        stepperBaseClass,\n        {\n          current,\n          done: !current && done,\n          disabled: !current && !done && disabled,\n          small,\n        },\n        { marginTop, marginLeft, marginRight, marginBottom, marginSize }\n      )}\n      aria-current={current ? 'step' : 'false'}\n    >\n      <StepNumber\n        number={number || 1}\n        current={current}\n        done={done}\n        disabled={disabled}\n        small={small}\n      />\n      {children && (\n        <span className={stepperBaseClass + '__title'}>{children}</span>\n      )}\n    </li>\n  );\n};\n\nexport default StepBlock;\n"
  },
  {
    "path": "src/lv1/interactiveParts/StepBorder.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport StepBorder from './StepBorder';\n\nexport default {\n  title: 'deprecated/interactiveParts/StepBorder',\n  component: StepBorder,\n};\n\nexport const StepBorderComponent = () => (\n  <ul style={{ display: 'inline-block', padding: 0, margin: 0 }}>\n    <StepBorder\n      done={boolean('Done', false, 'StepBorder')}\n      separator={boolean('Separator', false, 'StepBorder')}\n      {...commonKnobs()}\n    />\n  </ul>\n);\n"
  },
  {
    "path": "src/lv1/interactiveParts/StepBorder.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * 見た目を done にします\n   */\n  done?: boolean;\n  /**\n   * StepBlock の separator として使用します\n   */\n  separator?: boolean;\n} & CommonProps;\n\n/**\n * 古いコンポーネントなので使わないでください\n *\n * @deprecated\n */\nconst StepBorder: React.FC<Props> = (props: Props) => {\n  const { done, separator } = props;\n  const stepperBaseClass = 'vb-stepBorder';\n\n  return (\n    <li\n      {...commonProps(props, stepperBaseClass, { done, separator })}\n      aria-hidden=\"true\"\n    />\n  );\n};\n\nexport default StepBorder;\n"
  },
  {
    "path": "src/lv1/interactiveParts/StepNumber.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { StepNumber } from './StepNumber';\nimport { HStack } from '../layout/HStack';\n\nexport default {\n  component: StepNumber,\n};\n\nexport const StepNumberComponent = () => (\n  <StepNumber\n    number={text('Number', '1', 'StepBlock')}\n    current={boolean('Current', false, 'StepBlock')}\n    done={boolean('Done', false, 'StepBlock')}\n    disabled={boolean('Disabled', false, 'StepBlock')}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => {\n  return (\n    <HStack>\n      <StepNumber number={1} />\n      <StepNumber number={1} current />\n      <StepNumber number={1} done />\n      <StepNumber number={1} disabled />\n    </HStack>\n  );\n};\n\nexport const Small = () => {\n  return (\n    <HStack>\n      <StepNumber small number={1} />\n      <StepNumber small number={1} current />\n      <StepNumber small number={1} done />\n      <StepNumber small number={1} disabled />\n    </HStack>\n  );\n};\n"
  },
  {
    "path": "src/lv1/interactiveParts/StepNumber.tsx",
    "content": "import * as React from 'react';\nimport { MdCheck } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * 数字を指定します\n   */\n  number: number | string;\n  /**\n   * 見た目を current にします\n   */\n  current?: boolean;\n  /**\n   * 見た目を done にします\n   */\n  done?: boolean;\n  /**\n   * 見た目を disabled にします\n   */\n  disabled?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n} & CommonProps;\n\nconst baseClassName = 'vb-stepNumber';\nexport const StepNumber: React.FC<Props> = ({\n  number,\n  current,\n  done,\n  disabled,\n  small,\n  ...props\n}: Props) => (\n  <span\n    {...commonProps(props, baseClassName, { current, done, disabled, small })}\n  >\n    <span className={`${baseClassName}__numberValue`}>\n      {number ? number : '1'}\n    </span>\n    {done && (\n      <figure className={`${baseClassName}__numberCheck`}>\n        <MdCheck className={`${baseClassName}__numberCheckSvg`} />\n      </figure>\n    )}\n  </span>\n);\n"
  },
  {
    "path": "src/lv1/interactiveParts/Tab.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Tab from './Tab';\n\nexport default {\n  component: Tab,\n};\n\nexport const TabComponent = () => (\n  <Tab\n    current={boolean('Current', false, 'Tab')}\n    small={boolean('Small', false, 'Tab')}\n    onClick={action('click')}\n    onBlur={action('blur')}\n    notification={text('notification', '', 'Tab')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'タブテキスト', 'Tab')}\n  </Tab>\n);\n\nexport const Default = () => {\n  const [index, setIndex] = React.useState(1);\n\n  return (\n    <div>\n      <Tab current={index === 0} onClick={() => setIndex(0)}>\n        タブテキスト\n      </Tab>\n      <Tab current={index === 1} onClick={() => setIndex(1)}>\n        タブテキスト\n      </Tab>\n      <Tab\n        current={index === 2}\n        onClick={() => setIndex(2)}\n        notification=\"新着メッセージがあります\"\n      >\n        タブテキスト\n      </Tab>\n    </div>\n  );\n};\n\nexport const Small = () => {\n  const [index, setIndex] = React.useState(1);\n\n  return (\n    <div>\n      <Tab small current={index === 0} onClick={() => setIndex(0)}>\n        タブテキスト\n      </Tab>\n      <Tab small current={index === 1} onClick={() => setIndex(1)}>\n        タブテキスト\n      </Tab>\n      <Tab small current={index === 2} onClick={() => setIndex(2)}>\n        タブテキスト\n      </Tab>\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv1/interactiveParts/Tab.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * 選択状態にします\n   */\n  current?: boolean;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  selected?: boolean;\n  /**\n   * click ハンドラを設定します\n   */\n  onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n  /**\n   * blur ハンドラを設定します\n   */\n  onBlur?: (event: React.FormEvent<HTMLButtonElement>) => void;\n  /**\n   * 通知の有無および読み上げられるメッセージを設定します\n   */\n  notification?: string;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * タブひとつひとつを表現するコンポーネントです。単体で使用せず、`lv2/TabBar` を使用してください\n */\nconst Tab: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    current,\n    small,\n    selected,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    onClick,\n    onBlur,\n    notification,\n  } = props;\n\n  const buttonBaseClass = 'vb-tab';\n  const classModifier = {\n    current,\n    small,\n    selected,\n  };\n\n  return (\n    <div className=\"vb-tab__block\">\n      <button\n        role=\"tab\"\n        tabIndex={current ? undefined : -1}\n        aria-selected={!!current}\n        onClick={onClick}\n        onBlur={onBlur}\n        type=\"button\"\n        {...commonProps(props, buttonBaseClass, classModifier, {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginSize,\n          marginTop,\n        })}\n      >\n        {children}\n      </button>\n\n      {notification && (\n        <span\n          className={'vb-tab__notificationDot'}\n          aria-label={notification}\n          role=\"img\"\n        />\n      )}\n    </div>\n  );\n};\n\nexport default Tab;\n"
  },
  {
    "path": "src/lv1/layout/HStack.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { HStack } from './HStack';\nimport Paragraph from '../typography/Paragraph';\nimport Button from '../buttons/Button';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: HStack,\n};\n\nexport const HStackComponent = () => (\n  <HStack\n    gap={select('gap', [0, 0.25, 0.5, 1, 1.5, 2, 3], 1, 'Stack')}\n    justifyContent={\n      select(\n        'justifycontent',\n        {\n          undefined: '',\n          start: 'start',\n          end: 'end',\n          center: 'center',\n          'space-between': 'space-between',\n        },\n        '',\n        'HStack'\n      ) || undefined\n    }\n    alignItems={\n      select(\n        'alignItems',\n        {\n          undefined: '',\n          stretch: 'stretch',\n          center: 'center',\n          start: 'start',\n          end: 'end',\n        },\n        '',\n        'HStack'\n      ) || undefined\n    }\n    wrap={\n      select(\n        'wrap',\n        {\n          undefined: '',\n          wrap: 'wrap',\n          nowrap: 'nowrap',\n        },\n        '',\n        'HStack'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Paragraph>Stackを使うと、コンポーネントを等間隔に並べられます</Paragraph>\n    <Button>ボタン1</Button>\n    <Button>ボタン2</Button>\n  </HStack>\n);\n"
  },
  {
    "path": "src/lv1/layout/HStack.tsx",
    "content": "import * as React from 'react';\nimport { Stack } from './Stack';\n\ntype StackProps = React.ComponentProps<typeof Stack>;\ntype Props = {\n  /**\n   * 横方向の揃え方を指定します。\n   */\n  justifyContent?: StackProps['justifyContent'];\n  /**\n   * 縦方向の揃え方を指定します\n   */\n  alignItems?: StackProps['alignItems'];\n} & Omit<StackProps, 'direction' | 'justifyContent' | 'alignItems'>;\n\n/**\n * 横方向（水平方向）に等間隔でコンポーネントを並べます。\n *\n * - `direction` が固定である以外は `Stack` と同一です\n * - 縦方向（垂直方向）に等間隔でコンポーネントを並べるには、 `VStack` を使用してください\n */\nexport const HStack: React.FC<Props> = (props) => (\n  <Stack direction=\"horizontal\" {...props} />\n);\n"
  },
  {
    "path": "src/lv1/layout/Stack.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { Stack } from './Stack';\nimport Paragraph from '../typography/Paragraph';\nimport Button from '../buttons/Button';\nimport { boolean, select } from '@storybook/addon-knobs';\nimport SearchField from '../forms/SearchField';\nimport ContentsBase from '../bases/ContentsBase';\nimport ColumnBase from '../bases/ColumnBase';\nimport { Text } from '../typography/Text';\n\nexport default {\n  component: Stack,\n};\n\nexport const StackComponent = () => (\n  <Stack\n    direction={\n      select(\n        'direction',\n        {\n          undefined: '',\n          vertical: 'vertical',\n          horizontal: 'horizontal',\n          'vertical-reverse': 'vertical-reverse',\n          'horizontal-reverse': 'horizontal-reverse',\n        },\n        '',\n        'Stack'\n      ) || undefined\n    }\n    gap={select('gap', [0, 0.25, 0.5, 1, 1.5, 2, 3], 1, 'Stack')}\n    justifyContent={\n      select(\n        'justifycontent',\n        {\n          undefined: '',\n          start: 'start',\n          end: 'end',\n          center: 'center',\n          'space-between': 'space-between',\n        },\n        '',\n        'Stack'\n      ) || undefined\n    }\n    alignItems={\n      select(\n        'alignItems',\n        {\n          undefined: '',\n          stretch: 'stretch',\n          center: 'center',\n          start: 'start',\n          end: 'end',\n        },\n        '',\n        'Stack'\n      ) || undefined\n    }\n    wrap={\n      select(\n        'wrap',\n        {\n          undefined: '',\n          wrap: 'wrap',\n          nowrap: 'nowrap',\n        },\n        '',\n        'Stack'\n      ) || undefined\n    }\n    inline={boolean('inline', false, 'Stack')}\n    {...commonKnobs()}\n  >\n    <Paragraph>Stackを使うと、コンポーネントを等間隔に並べられます</Paragraph>\n    <Button>ボタン1</Button>\n    <Button>ボタン2</Button>\n  </Stack>\n);\n\nexport const Toolbar = () => (\n  <Stack direction=\"horizontal\" justifyContent=\"space-between\">\n    <Stack direction=\"horizontal\" gap={1}>\n      <Button appearance=\"primary\">送信</Button>\n      <Button>編集</Button>\n      <Button>コピー</Button>\n      <SearchField label=\"検索\" />\n    </Stack>\n    <Stack direction=\"horizontal\" gap={1}>\n      <Button>エクスポート</Button>\n      <Button danger>削除</Button>\n    </Stack>\n  </Stack>\n);\n\nexport const Messages = () => (\n  <Stack direction=\"vertical\" alignItems=\"center\">\n    <ContentsBase>\n      <Stack direction=\"vertical\" gap={1.5}>\n        <Paragraph>\n          freeeは「スモールビジネスを、世界の主役に。」をミッションに掲げ、統合型経営プラットフォームを開発・提供し、\n          <br />\n          だれもが自由に自然体で経営できる環境をつくっていきます。\n        </Paragraph>\n        <Paragraph>\n          起業やビジネスを育てていくことを、もっと魅力的で気軽な行為に。個人事業や中小企業などのスモールビジネスに携わるすべての人が、\n          <br />\n          じぶんらしく自信をもって経営できるように。\n        </Paragraph>\n        <Paragraph>\n          大胆にスピード感をもってアイデアを具現化できるスモールビジネスは、今までにない多様な価値観や生き方、\n          <br />\n          新しいイノベーションを生み出す起爆剤だと私たちは考えています。スモールビジネスが大企業を刺激し、\n          <br />\n          社会をさらにオモシロク、世の中全体をより良くする流れを後押ししていきます。\n        </Paragraph>\n      </Stack>\n    </ContentsBase>\n  </Stack>\n);\n\nexport const Direction = () => (\n  <Stack gap={2}>\n    <Stack direction=\"vertical\">\n      <ColumnBase>direction=vertical 1</ColumnBase>\n      <ColumnBase>direction=vertical 2</ColumnBase>\n      <ColumnBase>direction=vertical 3</ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\">\n      <ColumnBase>direction=horizontal 1</ColumnBase>\n      <ColumnBase>direction=horizontal 2</ColumnBase>\n      <ColumnBase>direction=horizontal 3</ColumnBase>\n    </Stack>\n    <Stack direction=\"vertical-reverse\">\n      <ColumnBase>direction=vertical-reverse 1</ColumnBase>\n      <ColumnBase>direction=vertical-reverse 2</ColumnBase>\n      <ColumnBase>direction=vertical-reverse 3</ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal-reverse\">\n      <ColumnBase>direction=horizontal-reverse 1</ColumnBase>\n      <ColumnBase>direction=horizontal-reverse 2</ColumnBase>\n      <ColumnBase>direction=horizontal-reverse 3</ColumnBase>\n    </Stack>\n  </Stack>\n);\n\nexport const JustifyContent = () => (\n  <Stack gap={2} alignItems=\"stretch\">\n    <Stack direction=\"horizontal\" justifyContent=\"start\">\n      <ColumnBase>justifyContent=start 1</ColumnBase>\n      <ColumnBase>justifyContent=start 2</ColumnBase>\n      <ColumnBase>justifyContent=start 3</ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" justifyContent=\"end\">\n      <ColumnBase>justifyContent=end 1</ColumnBase>\n      <ColumnBase>justifyContent=end 2</ColumnBase>\n      <ColumnBase>justifyContent=end 3</ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" justifyContent=\"center\">\n      <ColumnBase>justifyContent=center 1</ColumnBase>\n      <ColumnBase>justifyContent=center 2</ColumnBase>\n      <ColumnBase>justifyContent=center 3</ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" justifyContent=\"space-between\">\n      <ColumnBase>justifyContent=space-between 1</ColumnBase>\n      <ColumnBase>justifyContent=space-between 2</ColumnBase>\n      <ColumnBase>justifyContent=space-between 3</ColumnBase>\n    </Stack>\n  </Stack>\n);\n\nexport const AlignItems = () => (\n  <Stack gap={2}>\n    <Stack direction=\"horizontal\" alignItems=\"start\">\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.875}>alignItems=start 1</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={1.5}>alignItems=start 2</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.75}>alignItems=start 3</Text>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" alignItems=\"center\">\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.875}>alignItems=center 1</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={1.5}>alignItems=center 2</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.75}>alignItems=center 3</Text>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" alignItems=\"end\">\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.875}>alignItems=end 1</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={1.5}>alignItems=end 2</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.75}>alignItems=end 3</Text>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" alignItems=\"stretch\">\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.875}>alignItems=stretch 1</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={1.5}>alignItems=stretch 2</Text>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Text size={0.75}>alignItems=stretch 3</Text>\n      </ColumnBase>\n    </Stack>\n  </Stack>\n);\n\nexport const Gap = () => (\n  <Stack gap={2}>\n    <Stack direction=\"horizontal\" gap={3}>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=3 1</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=3 2</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=3 3</Paragraph>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" gap={2}>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=3 1</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=3 2</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=3 3</Paragraph>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" gap={1}>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=1 1</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=1 2</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=1 3</Paragraph>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" gap={0.5}>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0.5 1</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0.5 2</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0.5 3</Paragraph>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" gap={0.25}>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0.25 1</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0.25 2</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0.25 3</Paragraph>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" gap={0}>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0 1</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0 2</Paragraph>\n      </ColumnBase>\n      <ColumnBase paddingSize=\"small\">\n        <Paragraph>gap=0 3</Paragraph>\n      </ColumnBase>\n    </Stack>\n  </Stack>\n);\n\nexport const Wrap = () => (\n  <Stack gap={2}>\n    <Stack direction=\"horizontal\" wrap=\"wrap\">\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>wrap</Paragraph>\n      </ColumnBase>\n    </Stack>\n    <Stack direction=\"horizontal\" wrap=\"nowrap\">\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n      <ColumnBase>\n        <Paragraph>nowrap</Paragraph>\n      </ColumnBase>\n    </Stack>\n  </Stack>\n);\n\nexport const Inline = () => (\n  <>\n    <Stack inline mr={2} gap={0.5} direction=\"horizontal\">\n      <Button>ボタン1</Button>\n      <Button>ボタン2</Button>\n    </Stack>\n    <Paragraph inline>\n      <code>inline={'{true}'}</code>にすると、<code>inline-flex</code>になります\n    </Paragraph>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/layout/Stack.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { convertClassModifiers } from '../../utilities/vbClassNames';\n\ntype Props = {\n  /**\n   * 子要素を並べる順番を指定します。\n   * `vertical`で垂直方向、`horizontal`で水平方向、`vertical-reverse` `horizontal-reverse` で逆方向になります。\n   * デフォルトは `vertical` です。\n   */\n  direction?:\n    | 'vertical'\n    | 'horizontal'\n    | 'vertical-reverse'\n    | 'horizontal-reverse';\n  /**\n   * オブジェクトの並ぶ間隔を rem 単位で指定します。\n   * `0` `0.25` `0.5` `1` `1.5` `2` `3` が指定できます。\n   */\n  gap?: 0 | 0.25 | 0.5 | 1 | 1.5 | 2 | 3;\n  /**\n   * `direction` に指定した軸での子要素の並び方を指定します。\n   */\n  justifyContent?: 'start' | 'end' | 'center' | 'space-between';\n  /**\n   * `direction` の交差軸上での子要素の並び方を指定します。\n   */\n  alignItems?: 'stretch' | 'center' | 'start' | 'end';\n  /**\n   * 折り返しを指定します\n   */\n  wrap?: 'nowrap' | 'wrap';\n  /**\n   * `true` にすると、 `display: inline-flex` となり、インライン表示の要素と並べられます。\n   */\n  inline?: boolean;\n  children?: React.ReactNode;\n} & CommonProps;\n\n/**\n * 子要素を等間隔に並べるためのコンポーネントです。\n */\nexport const Stack: React.FC<Props> = ({\n  direction = 'vertical',\n  gap = 1,\n  justifyContent = 'start',\n  alignItems = direction === 'vertical' || direction === 'vertical-reverse'\n    ? 'start'\n    : 'center',\n  wrap = 'wrap',\n  inline,\n  children,\n  ...props\n}: Props) => {\n  const Tag = inline ? 'span' : 'div';\n  return (\n    <Tag\n      {...commonProps(props, 'vb-stack', {\n        inline,\n        ...convertClassModifiers({\n          direction,\n          justifyContent,\n          alignItems,\n          wrap,\n        }),\n        [`gap${gap * 100}`]: true,\n      })}\n    >\n      {children}\n    </Tag>\n  );\n};\n"
  },
  {
    "path": "src/lv1/layout/VStack.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { VStack } from './VStack';\nimport Paragraph from '../typography/Paragraph';\nimport Button from '../buttons/Button';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: VStack,\n};\n\nexport const VStackComponent = () => (\n  <VStack\n    gap={select('gap', [0, 0.25, 0.5, 1, 1.5, 2, 3], 1, 'Stack')}\n    justifyContent={\n      select(\n        'justifycontent',\n        {\n          undefined: '',\n          start: 'start',\n          end: 'end',\n          center: 'center',\n          'space-between': 'space-between',\n        },\n        '',\n        'VStack'\n      ) || undefined\n    }\n    alignItems={\n      select(\n        'alignItems',\n        {\n          undefined: '',\n          stretch: 'stretch',\n          center: 'center',\n          start: 'start',\n          end: 'end',\n        },\n        '',\n        'VStack'\n      ) || undefined\n    }\n    wrap={\n      select(\n        'wrap',\n        {\n          undefined: '',\n          wrap: 'wrap',\n          nowrap: 'nowrap',\n        },\n        '',\n        'VStack'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Paragraph>Stackを使うと、コンポーネントを等間隔に並べられます</Paragraph>\n    <Button>ボタン1</Button>\n    <Button>ボタン2</Button>\n  </VStack>\n);\n"
  },
  {
    "path": "src/lv1/layout/VStack.tsx",
    "content": "import * as React from 'react';\nimport { Stack } from './Stack';\n\ntype StackProps = React.ComponentProps<typeof Stack>;\ntype Props = {\n  /**\n   * 縦方向の揃え方を指定します。\n   */\n  justifyContent?: StackProps['justifyContent'];\n  /**\n   * 横方向の揃え方を指定します\n   */\n  alignItems?: StackProps['alignItems'];\n} & Omit<StackProps, 'direction' | 'justifyContent' | 'alignItems'>;\n\n/**\n * 縦方向（垂直方向）に等間隔でコンポーネントを並べます。\n *\n * - `direction` が固定である以外は `Stack` と同一です\n * - 横方向（水平方向）に等間隔でコンポーネントを並べるには、 `HStack` を使用してください\n */\nexport const VStack: React.FC<Props> = (props) => (\n  <Stack direction=\"vertical\" {...props} />\n);\n"
  },
  {
    "path": "src/lv1/layout/WithDescriptionContent.stories.tsx",
    "content": "import * as React from 'react';\n\nimport WithDescriptionContent from './WithDescriptionContent';\nimport { commonKnobs } from '../../../stories';\nimport TextField from '../forms/TextField';\nimport Note from '../typography/Note';\nimport Paragraph from '../typography/Paragraph';\n\nimport { select } from '@storybook/addon-knobs';\nimport { InlineLink } from '..';\nexport default {\n  component: WithDescriptionContent,\n};\nexport const WithDescriptionContentComponent = () => (\n  <WithDescriptionContent\n    position={select(\n      'Position',\n      {\n        horizontal: 'horizontal',\n        vertical: 'vertical',\n        'vertical-reverse': 'vertical-reverse',\n      },\n      'vertical',\n      'WithDescriptionContent'\n    )}\n    renderContent={(descriptionContentId) => (\n      <TextField aria-describedby={descriptionContentId} label=\"秘密の質問\" />\n    )}\n    renderDescriptionContent={() => (\n      <Note>8文字以上20文字以内で入力してください</Note>\n    )}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithMargin = () => {\n  return (\n    <>\n      <Paragraph mb={1}>\n        実際の使用時はマージンを0.5rem程度のmarginをつけて、いい感じに調整してください\n      </Paragraph>\n\n      <WithDescriptionContent\n        position=\"horizontal\"\n        renderContent={(descriptionContentId) => (\n          <TextField\n            aria-describedby={descriptionContentId}\n            label=\"テキストフィールド\"\n          />\n        )}\n        renderDescriptionContent={() => (\n          <Note ml={0.5}>ml=0.5をNoteにつけている例</Note>\n        )}\n        mb={1.5}\n      />\n\n      <WithDescriptionContent\n        position=\"vertical\"\n        renderContent={(descriptionContentId) => (\n          <TextField\n            aria-describedby={descriptionContentId}\n            label=\"テキストフィールド\"\n          />\n        )}\n        renderDescriptionContent={() => (\n          <Note mt={0.5}>mt=0.5をNoteにつけている例</Note>\n        )}\n        mb={1.5}\n      />\n\n      <WithDescriptionContent\n        position=\"vertical-reverse\"\n        renderContent={(descriptionContentId) => (\n          <TextField\n            aria-describedby={descriptionContentId}\n            label=\"テキストフィールド\"\n          />\n        )}\n        renderDescriptionContent={() => (\n          <Note mb={0.5}>mb=0.5をNoteにつけている例</Note>\n        )}\n        mb={1.5}\n      />\n    </>\n  );\n};\n\nexport const DescriptionWithLink = () => (\n  <WithDescriptionContent\n    renderDescriptionContent={() => (\n      <Note mt={0.5}>\n        注釈内に\n        <InlineLink href=\"https://www.freee.co.jp/\">\n          こんなふうにリンク等がある\n        </InlineLink>\n        場合、フォーカス順は<code>renderContent</code>内の要素より先になります\n      </Note>\n    )}\n    renderContent={(descId) => (\n      <TextField aria-describedby={descId} label=\"テキストフィールド\" />\n    )}\n  />\n);\n\nexport const InsideLargeWidth = () => (\n  <div style={{ width: '70rem' }}>\n    <WithDescriptionContent\n      position=\"horizontal\"\n      renderContent={(descriptionContentId) => (\n        <TextField aria-describedby={descriptionContentId} label=\"秘密の質問\" />\n      )}\n      renderDescriptionContent={() => (\n        <Note>\n          横幅が大きい場所に入れたときに表示崩れが起きないことを確認するためのstoryです\n        </Note>\n      )}\n    />\n  </div>\n);\n"
  },
  {
    "path": "src/lv1/layout/WithDescriptionContent.tsx",
    "content": "import * as React from 'react';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * 注釈をつける対象となるコンポーネント。`descriptionContentId` を引数に取るため、 `aria-describedby` で紐付けて使用できます\n   */\n  renderContent: (descriptionContentId: string) => React.ReactNode;\n  /**\n   * 注釈の内容。文字サイズやマージン等は指定されていないため、`<Note>` などを使用してください\n   */\n  renderDescriptionContent: () => React.ReactNode;\n  /**\n   * `horizontal` で右に、`vertical` で下に注釈をつけます。\n   */\n  position?: 'horizontal' | 'vertical' | 'vertical-reverse';\n} & CommonProps;\n\n/**\n * 注釈をコンポーネントの右または下に置くためのコンポーネントです。\n * DOM上での並び順は見た目とは違い、注釈→対象のコンポーネントとなるため、CSSがあたっていない状態のユーザーに先に注釈を見せることができます。\n *\n * - `renderContent` は `renderDescriptionContent` が配置される要素のidを引数に取るため、 `aria-describedby` で紐付けることができます。\n * - `renderDescriptionContent` には `Note` コンポーネントを配置する想定です。\n * - `WithDescriptionContent` では注釈と対象のあいだのマージンは用意していないので、注釈と対象のどちらかに `0.5rem` 程度のマージンをつけて調整してください。\n * - ラベル（項目名）の配置には `FormControl` 等を使用してください\n * - `horizontal` `vertical` では、**DOM上の要素の順序と見た目上の順序が逆順になる** ことに注意が必要です\n     - 「`renderContent` 内の入力フィールド等の状態によって `renderDescriptionContent` が変化する」ような使い方をしないでください\n *   - リンク等を `renderDescriptionContent` に入れた場合、 `renderContent` 内の要素よりも先にフォーカスが移動します\n */\nconst WithDescriptionContent: React.FC<Props> = (props: Props) => {\n  const baseClassName = 'vb-withDescriptionContent';\n  const uniqueId = useUniqueId(baseClassName);\n  const descriptionContentId = `${uniqueId}__descriptionContent`;\n  const { renderContent, renderDescriptionContent, position } = props;\n\n  return (\n    <div\n      {...commonProps(props, baseClassName, {\n        horizontal: position === 'horizontal',\n        verticalReverse: position === 'vertical-reverse',\n      })}\n    >\n      <div\n        className={`${baseClassName}__description`}\n        id={descriptionContentId}\n      >\n        {renderDescriptionContent()}\n      </div>\n      <div className={`${baseClassName}__content`}>\n        {renderContent(descriptionContentId)}\n      </div>\n    </div>\n  );\n};\nexport default WithDescriptionContent;\n"
  },
  {
    "path": "src/lv1/layout/WithSideContent.stories.tsx",
    "content": "import * as React from 'react';\n\nimport WithSideContent from './WithSideContent';\nimport Button from '../buttons/Button';\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: WithSideContent,\n};\n\nexport const WithSideContentComponent = () => (\n  <WithSideContent\n    verticalAlign={\n      select(\n        'VerticalAlign',\n        { undefined: '', top: 'top', bottom: 'bottom', middle: 'middle' },\n        '',\n        'WithSideContent'\n      ) || undefined\n    }\n    {...commonKnobs()}\n    sideContent={<Button>サブボタン</Button>}\n  >\n    <Button marginRight>ボタン1</Button>\n    <Button>ボタン2</Button>\n  </WithSideContent>\n);\n\nexport const SideContentOnly = () => (\n  // childrenなしでも使っていいのよアピール\n  <WithSideContent\n    verticalAlign={\n      select(\n        'VerticalAlign',\n        { undefined: '', top: 'top', bottom: 'bottom', middle: 'middle' },\n        '',\n        'WithSideContent'\n      ) || undefined\n    }\n    {...commonKnobs()}\n    sideContent={<Button>サブボタン</Button>}\n  />\n);\n\nexport const TextAndButton = () => (\n  <WithSideContent\n    verticalAlign={\n      select(\n        'VerticalAlign',\n        { undefined: '', top: 'top', bottom: 'bottom', middle: 'middle' },\n        'middle',\n        'WithSideContent'\n      ) || undefined\n    }\n    {...commonKnobs()}\n    sideContent={<Button>サブボタン</Button>}\n  >\n    左にテキスト、右にボタンなんていうパターンのときは verticalAlign=middle\n    がいい感じ\n  </WithSideContent>\n);\n"
  },
  {
    "path": "src/lv1/layout/WithSideContent.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * メインコンテンツ（左側）\n   */\n  children?: React.ReactNode;\n  /**\n   * サイドコンテンツ（右側）\n   */\n  sideContent: React.ReactNode;\n  /**\n   * 左右で高さが違う場合の揃え方\n   */\n  verticalAlign?: 'top' | 'bottom' | 'middle';\n} & CommonProps;\n\n/**\n * 関連機能のボタン等を右側に配置するために使用するコンポーネントです\n *\n * - 左右にボタン等を振り分けて配置するときのほか、右にボタンだけ置きたいというときにも使用できます\n */\nconst WithSideContent: React.FC<Props> = (props: Props) => {\n  const { children, sideContent, verticalAlign } = props;\n  const baseClassName = 'vb-withSideContent';\n  return (\n    <div\n      {...commonProps(props, baseClassName, {\n        alignTop: verticalAlign === 'top',\n        alignBottom: verticalAlign === 'bottom',\n        alignMiddle: verticalAlign === 'middle',\n      })}\n    >\n      <div className={`${baseClassName}__content`}>{children}</div>\n      <div className={`${baseClassName}__sideContent`}>{sideContent}</div>\n    </div>\n  );\n};\nexport default WithSideContent;\n"
  },
  {
    "path": "src/lv1/lists/BorderTableListCell.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text, select, number } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport BorderTableListCell from './BorderTableListCell';\n\nexport default {\n  component: BorderTableListCell,\n};\n\nexport const BorderTableListCellComponent = () => (\n  <table style={{ width: '25rem' }}>\n    <tbody>\n      <tr>\n        <BorderTableListCell\n          rowSpan={number('rowSpan', 0, {}, 'BorderTableListCell')}\n          small={boolean('Small', false, 'BorderTableListCell')}\n          alignCenter={boolean('AlignCenter', false, 'BorderTableListCell')}\n          alignRight={boolean('AlignRight', false, 'BorderTableListCell')}\n          breakWord={boolean('BreakWord', false, 'BorderTableListCell')}\n          onClick={action('click')}\n          status={select(\n            'Status',\n            [undefined, 'alert', 'notice', 'success'],\n            undefined,\n            'BorderTableListCell'\n          )}\n          {...commonKnobs()}\n        >\n          {text('Children', 'テーブルセル', 'BorderTableListCell')}\n        </BorderTableListCell>\n      </tr>\n    </tbody>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/lists/BorderTableListCell.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { Keys } from '../../utilities/keyboard';\nimport vbClassNames from '../../utilities/vbClassNames';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * セルを小さくします\n   */\n  small?: boolean;\n  /**\n   * 中央寄せにします\n   */\n  alignCenter?: boolean;\n  /**\n   * 右寄せにします\n   */\n  alignRight?: boolean;\n  /**\n   * なるべく単語の切れ目で改行するようにします(`word-break: break-word`)。メールアドレスや金額のカラムで指定してください。\n   */\n  breakWord?: boolean;\n  /**\n   * 折り返さない(`white-space: nowrap`)\n   */\n  noWrap?: boolean;\n  /**\n   * クリックハンドラを設定します\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onClick?: () => any;\n  /**\n   * ステータスを設定します\n   */\n  status?: 'alert' | 'notice' | 'success';\n  /**\n   * 行の見出しかどうかを設定します\n   */\n  rowHeader?: boolean;\n  /**\n   * 横スクロール時に行の見出しとして固定表示するどうかを設定します\n   */\n  fixedRowHeader?: boolean;\n  /**\n   * 固定表示する行の見出しが複数になる場合の left の値を設定します\n   */\n  fixedRowHeaderLeft?: number;\n  /**\n   * rowSpanを設定します\n   */\n  rowSpan?: number;\n} & CommonProps;\n\nconst BorderTableListCell: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    small,\n    alignCenter,\n    alignRight,\n    breakWord,\n    noWrap,\n    rowSpan,\n    onClick,\n    status,\n    rowHeader,\n    fixedRowHeader,\n    fixedRowHeaderLeft,\n  } = props;\n  const baseClass = 'vb-BorderTableListCell';\n  const statusBaseClass = `${baseClass}__status`;\n  const classModifier = {\n    small,\n    alignCenter,\n    alignRight,\n    clickable: !!onClick,\n    breakWord,\n    noWrap,\n  };\n\n  const statusClass = vbClassNames(statusBaseClass, {\n    modifier: {\n      alert: status === 'alert',\n      notice: status === 'notice',\n      success: status === 'success',\n    },\n  });\n\n  const content = (\n    <>\n      {onClick ? (\n        <span\n          className={`${baseClass}__clickElement`}\n          role=\"button\"\n          onClick={(): void => onClick()}\n          onKeyDown={(e): void => {\n            if (e.key === Keys.SPACE || e.key === Keys.ENTER) {\n              e.preventDefault();\n              onClick();\n            }\n          }}\n          tabIndex={0}\n        >\n          {children}\n        </span>\n      ) : (\n        children\n      )}\n      {status && <div className={statusClass}></div>}\n    </>\n  );\n\n  if (rowHeader) {\n    const cp = {\n      ...commonProps(props, baseClass, {\n        ...classModifier,\n        rowHeader,\n        fixedRowHeader,\n      }),\n    };\n    return (\n      <th\n        scope=\"row\"\n        rowSpan={rowSpan}\n        {...{\n          ...cp,\n          className: `${cp.className}${\n            rowHeader && fixedRowHeader && fixedRowHeaderLeft\n              ? ` ${baseClass}--fixedRowHeaderLeft${fixedRowHeaderLeft}`\n              : ''\n          }`,\n        }}\n      >\n        {content}\n      </th>\n    );\n  }\n\n  return (\n    <td rowSpan={rowSpan} {...commonProps(props, baseClass, classModifier)}>\n      {content}\n    </td>\n  );\n};\n\nexport default BorderTableListCell;\n"
  },
  {
    "path": "src/lv1/lists/CheckBoxCell.stories.tsx",
    "content": "import * as React from 'react';\n\nimport CheckBoxCell from './CheckBoxCell';\nimport { text, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: CheckBoxCell,\n};\n\nexport const CheckBoxCellComponent = () => (\n  <CheckBoxCell\n    header={boolean('header', false, 'CheckBoxCell')}\n    name={text('name', '', 'CheckBoxCell')}\n    value={text('value', '', 'CheckBoxCell')}\n    checked={boolean('checked', false, 'CheckBoxCell')}\n    disabled={boolean('disabled', false, 'CheckBoxCell')}\n    aria-label={text('aria-label', '', 'CheckBoxCell')}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv1/lists/CheckBoxCell.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  header: boolean;\n  name?: string;\n  value?: string;\n  checked?: boolean;\n  'aria-label'?: string;\n  disabled?: boolean;\n  onChange?: React.ChangeEventHandler<HTMLInputElement>;\n} & CommonProps;\n\nconst CheckBoxCell: React.FC<Props> = (props: Props) => {\n  const { header, name, value, checked, onChange, disabled } = props;\n  const baseClassName = 'vb-checkBoxCell';\n\n  /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n  /* eslint-disable jsx-a11y/click-events-have-key-events */\n  const input = (\n    <label\n      className={`${baseClassName}__label${disabled ? '--disabled' : ''}`}\n      onClick={(e) => e.stopPropagation()}\n    >\n      <input\n        type=\"checkbox\"\n        aria-label={props['aria-label'] || 'この行を選択'}\n        name={name}\n        value={value}\n        checked={checked}\n        disabled={disabled}\n        onChange={onChange}\n      />\n    </label>\n  );\n  const cellProps = commonProps(props, baseClassName, { header });\n  return header ? (\n    <th {...cellProps}>{input}</th>\n  ) : (\n    <td {...cellProps}>{input}</td>\n  );\n};\nexport default CheckBoxCell;\n"
  },
  {
    "path": "src/lv1/lists/DescriptionListCell.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport DescriptionListCell from './DescriptionListCell';\n\nexport default {\n  component: DescriptionListCell,\n};\n\nexport const DescriptionListCellComponent = () => (\n  <table style={{ width: '25rem' }}>\n    <tbody>\n      <tr>\n        <DescriptionListCell {...commonKnobs()}>\n          {text('Children', 'テーブルセル', 'DescriptionListCell')}\n        </DescriptionListCell>\n      </tr>\n    </tbody>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/lists/DescriptionListCell.tsx",
    "content": "import * as React from 'react';\nimport { useResponsive } from '../../utilities/VibesProvider';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n} & CommonProps;\n\nconst DescriptionListCell: React.FC<Props> = (props: Props) => {\n  const { children } = props;\n  const listBaseClass = 'vb-descriptionListCell';\n\n  return (\n    <td {...commonProps(props, listBaseClass, { responsive: useResponsive() })}>\n      {children}\n    </td>\n  );\n};\n\nexport default DescriptionListCell;\n"
  },
  {
    "path": "src/lv1/lists/DescriptionListHeadCell.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { text, select } from '@storybook/addon-knobs';\nimport DescriptionListHeadCell from './DescriptionListHeadCell';\n\nexport default {\n  component: DescriptionListHeadCell,\n};\n\nexport const DescriptionListHeadCellComponent = () => (\n  <table style={{ width: '25rem' }}>\n    <tbody>\n      <tr>\n        <DescriptionListHeadCell\n          spacing={\n            select(\n              'Spacing',\n              {\n                Normal: 'normal',\n                Compact: 'compact',\n                undefined: '',\n              },\n              '',\n              'DescriptionListHeadCell'\n            ) || undefined\n          }\n        >\n          {text('Children', 'テーブルセル', 'DescriptionListHeadCell')}\n        </DescriptionListHeadCell>\n      </tr>\n    </tbody>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/lists/DescriptionListHeadCell.tsx",
    "content": "import * as React from 'react';\nimport { useResponsive } from '../../utilities/VibesProvider';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * 最小の幅を設定します\n   */\n  minWidth?: number;\n  /**\n   * リストの高さを設定します\n   */\n  spacing?: 'normal' | 'compact';\n} & CommonProps;\n\nconst DescriptionListHeadCell: React.FC<Props> = (props: Props) => {\n  const { children, minWidth, spacing } = props;\n  // DescriptionList は横型のテーブルに限られるのでヘッダが対応するスコープは行単位\n  const baseClassName = 'vb-descriptionListHeadCell';\n\n  const classModifier = {\n    spacingCompact: spacing === 'compact',\n    responsive: useResponsive(),\n  };\n\n  const cp = commonProps(props, baseClassName, classModifier);\n  return (\n    <th\n      {...{\n        ...cp,\n        className: `${cp.className}${\n          minWidth ? ` ${baseClassName}--minWidth${minWidth}` : ''\n        }`,\n      }}\n      scope=\"row\"\n    >\n      {children}\n    </th>\n  );\n};\n\nexport default DescriptionListHeadCell;\n"
  },
  {
    "path": "src/lv1/lists/TableListCell.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, number, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TableListCell from './TableListCell';\nimport JumpButton from '../buttons/JumpButton';\nimport TextField from '../forms/TextField';\nimport Button from '../buttons/Button';\nimport CheckBox from '../forms/CheckBox';\nimport MessageIcon from '../../lv2/messageIcon/MessageIcon';\nimport WithBalloon from '../../lv2/withBalloon/WithBalloon';\n\nexport default {\n  component: TableListCell,\n};\n\ntype WrapperProps = { children: React.ReactNode; style?: React.CSSProperties };\nconst Wrapper: React.FC<WrapperProps> = ({ children, style }: WrapperProps) => (\n  <table style={style}>\n    <tbody>\n      <tr>{children}</tr>\n    </tbody>\n  </table>\n);\n\nexport const TableListCellComponent = () => (\n  <Wrapper style={{ width: '20rem' }}>\n    <TableListCell\n      url={text('Url', '', 'TableListCell')}\n      small={boolean('Small', false, 'TableListCell')}\n      alignBottom={boolean('AalignBottom', false, 'TableListCell')}\n      alignCenter={boolean('AlignCenter', false, 'TableListCell')}\n      alignRight={boolean('Alignright', false, 'TableListCell')}\n      alignTop={boolean('AlignTop', false, 'TableListCell')}\n      breakWord={boolean('BreakWord', false, 'TableListCell')}\n      indentLevel={number('IndentLevel', 0, {}, 'TableListCell')}\n      onSelfWindowNavigation={action('self window navigation')}\n      {...commonKnobs()}\n    >\n      {text('Children', 'テーブルセル', 'TableListCell')}\n    </TableListCell>\n  </Wrapper>\n);\n\nexport const WithUrlAndClickables = () => (\n  <Wrapper>\n    <TableListCell\n      url=\"https://www.freee.co.jp/\"\n      small={boolean('Small', false, 'TableListCell')}\n      alignCenter={boolean('AlignCenter', false, 'TableListCell')}\n      alignRight={boolean('Alignright', false, 'TableListCell')}\n      breakWord={boolean('BreakWord', false, 'TableListCell')}\n      indentLevel={number('IndentLevel', 0, {}, 'TableListCell')}\n      onSelfWindowNavigation={action('self window navigation')}\n      {...commonKnobs()}\n    >\n      <>\n        テキスト <span>span</span>\n        <JumpButton url=\"https://corp.freee.co.jp\">リンク</JumpButton>\n        <TextField label=\"テキストフィールド\" />\n        <Button onClick={action('button click')}>ボタン</Button>\n        <CheckBox>チェックボックス</CheckBox>\n        <MessageIcon label=\"バルーン\">MessageIcon</MessageIcon>\n        <WithBalloon\n          balloonContent=\"WithBalloon\"\n          border=\"default\"\n          renderContent={() => 'WithBalloon'}\n        />\n      </>\n    </TableListCell>\n  </Wrapper>\n);\n\nexport const VerticalAlign = () => (\n  <Wrapper>\n    <TableListCell alignTop>上寄せのカラム</TableListCell>\n    <TableListCell alignBottom>下寄せのカラム</TableListCell>\n    <TableListCell>\n      複数行のカラム\n      <br />\n      複数行のカラム\n      <br />\n      複数行のカラム\n      <br />\n      複数行のカラム\n      <br />\n      複数行のカラム\n      <br />\n    </TableListCell>\n  </Wrapper>\n);\n\nexport const WithTruncatedText = () => (\n  <Wrapper style={{ width: 480, tableLayout: 'fixed' }}>\n    <TableListCell>\n      <div\n        style={{\n          overflow: 'hidden',\n          textOverflow: 'ellipsis',\n          whiteSpace: 'nowrap',\n        }}\n      >\n        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n      </div>\n    </TableListCell>\n    <TableListCell>隣のカラム</TableListCell>\n  </Wrapper>\n);\n"
  },
  {
    "path": "src/lv1/lists/TableListCell.tsx",
    "content": "import * as React from 'react';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * hrefを設定します\n   */\n  url?: string;\n  /**\n   * セルを小さくします\n   */\n  small?: boolean;\n  /**\n   * 下寄せにします\n   */\n  alignBottom?: boolean;\n  /**\n   * 中央寄せにします\n   */\n  alignCenter?: boolean;\n  /**\n   * 右寄せにします\n   */\n  alignRight?: boolean;\n  /**\n   * 上寄せにします\n   */\n  alignTop?: boolean;\n  /**\n   * なるべく単語の切れ目で改行するようにします(`word-break: break-word`)。メールアドレスや金額のカラムで指定してください。\n   */\n  breakWord?: boolean;\n  /**\n   * colSpanを設定します\n   */\n  colSpan?: number;\n  /**\n   * ツリー状の表現のためのインデントレベルです。左端のカラムにのみ使われる想定です\n   */\n  indentLevel?: number;\n} & SelfWindowNavigationProp &\n  CommonProps;\n\nconst TableListCell: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    url,\n    small,\n    alignBottom,\n    alignCenter,\n    alignRight,\n    alignTop,\n    breakWord,\n    colSpan,\n    indentLevel,\n    onSelfWindowNavigation,\n  } = props;\n\n  const listBaseClass = 'vb-tableListCell';\n  const classModifier = {\n    small,\n    breakWord,\n    alignBottom,\n    alignCenter,\n    alignRight,\n    alignTop,\n  };\n  const uniqueId = useUniqueId('vb-tabeListcell');\n  const textNodeId = `${uniqueId}__text`;\n\n  return (\n    <td {...commonProps(props, listBaseClass, classModifier)} colSpan={colSpan}>\n      {/* IEのみdisplay:tableで表示するため、indentContainerWrapperが必要 */}\n      <span className=\"vb-tableListCell__indentContainerWrapper\">\n        <span className=\"vb-tableListCell__indentContainer\">\n          {!!indentLevel &&\n            Array(indentLevel)\n              .fill(null)\n              .map((_, i) => (\n                <span\n                  className=\"vb-tableListCell__indent\"\n                  key={i}\n                  role=\"presentation\"\n                  aria-hidden=\"true\"\n                >\n                  &nbsp;\n                </span>\n              ))}\n          <span\n            className={vbClassNames('vb-tableListCell__indentedContent', {\n              modifier: { alignCenter, alignRight },\n            })}\n          >\n            {!!url && (\n              // eslint-disable-next-line jsx-a11y/anchor-has-content\n              <a\n                href={url}\n                className=\"vb-tableListCell__link\"\n                tabIndex={-1}\n                aria-labelledby={textNodeId}\n                onClick={(e) => {\n                  const navigator = selfWindowNavigator(onSelfWindowNavigation);\n                  if (navigator) {\n                    navigator(e, url);\n                  }\n                }}\n              />\n            )}\n            <span\n              className={vbClassNames('vb-tableListCell__text', {\n                modifier: {\n                  withLink: !!url,\n                },\n              })}\n              id={textNodeId}\n            >\n              {children}\n            </span>\n          </span>\n        </span>\n      </span>\n    </td>\n  );\n};\n\nexport default TableListCell;\n"
  },
  {
    "path": "src/lv1/lists/TableListHead.stories.tsx",
    "content": "import * as React from 'react';\n\nimport TableListHead from './TableListHead';\nimport { boolean, number } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TableListHeadCell from './TableListHeadCell';\n\nexport default {\n  component: TableListHead,\n};\n\nexport const TableListHeadComponent = () => (\n  <table style={{ width: '25rem' }}>\n    <tbody>\n      <TableListHead\n        fixedHeader={boolean('fixedHeader', false, 'TableListHead')}\n        fixedHeaderOffset={number('fixedHeaderOffset', 0, {}, 'TableListHead')}\n        {...commonKnobs()}\n      >\n        <TableListHeadCell>テーブルセル1</TableListHeadCell>\n        <TableListHeadCell>テーブルセル2</TableListHeadCell>\n        <TableListHeadCell>テーブルセル3</TableListHeadCell>\n      </TableListHead>\n    </tbody>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/lists/TableListHead.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * ページ上部または、 `overflow: auto` な領域内にある場合にはその領域上部に貼り付く形でヘッダーを表示します\n   */\n  fixedHeader?: boolean;\n  /**\n   * `fixedHeader` 使用時にその上下方向の位置を調整します\n   * numberで指定するとpx単位、stringで指定するとCSSの値を指定できます\n   */\n  fixedHeaderOffset?: number | string;\n} & CommonProps;\n\nconst TableListHead: React.FC<Props> = (props: Props) => {\n  const { children, fixedHeader, fixedHeaderOffset } = props;\n\n  return (\n    <>\n      <tr\n        {...commonProps(props, 'vb-tableListHead', { fixedHeader })}\n        style={{\n          top: fixedHeader ? fixedHeaderOffset : undefined,\n        }}\n      >\n        {children}\n      </tr>\n    </>\n  );\n};\n\nexport default TableListHead;\n"
  },
  {
    "path": "src/lv1/lists/TableListHeadCell.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TableListHeadCell from './TableListHeadCell';\n\nexport default {\n  component: TableListHeadCell,\n};\n\nexport const TableListHeadCellComponent = () => (\n  <table style={{ width: '25rem' }}>\n    <tbody>\n      <tr>\n        <TableListHeadCell\n          alignCenter={boolean('AlignCenter', false, 'TableListHeadCell')}\n          alignRight={boolean('Alignright', false, 'TableListHeadCell')}\n          ordering={\n            select(\n              'Ordering',\n              { desc: 'desc', asc: 'asc', undefined: '' },\n              '',\n              'TableListHeadCell'\n            ) || undefined\n          }\n          minWidth={number('MinWidth', 0, undefined, 'TableListHeadCell')}\n          maxWidth={number('MaxWidth', 0, undefined, 'TableListHeadCell')}\n          onClick={action('click')}\n          {...commonKnobs()}\n        >\n          {text('Children', 'テーブルセル', 'TableListHeadCell')}\n        </TableListHeadCell>\n      </tr>\n    </tbody>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/lists/TableListHeadCell.tsx",
    "content": "import * as React from 'react';\nimport { MdArrowUpward, MdArrowDownward, MdSwapVert } from 'react-icons/md';\nimport { Keys } from '../../utilities/keyboard';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\nexport type Order = 'asc' | 'desc' | 'init';\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * 中央寄せにします\n   */\n  alignCenter?: boolean;\n  /**\n   * 右寄せにします\n   */\n  alignRight?: boolean;\n  /**\n   * ソートアイコンを設定します\n   */\n  ordering?: Order;\n  /**\n   * クリックハンドラを設定します\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onClick?: () => any;\n  /**\n   * 幅を設定します\n   */\n  width?: number;\n  /**\n   * 最小の幅を設定します\n   */\n  minWidth?: number;\n  /**\n   * 最大の幅を設定します\n   */\n  maxWidth?: number;\n  /**\n   * 折り返さない(`white-space: nowrap`)\n   */\n  noWrap?: boolean;\n  /**\n   * 行の見出しかどうかを設定します\n   */\n  rowHeader?: boolean;\n  /**\n   * 横スクロール時に行の見出しとして固定表示するどうかを設定します\n   */\n  fixedRowHeader?: boolean;\n  /**\n   * 固定表示する行の見出しが複数になる場合の left の値を設定します\n   */\n  fixedRowHeaderLeft?: number;\n} & CommonProps;\n\nconst TableListHeadCell: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    alignCenter,\n    alignRight,\n    ordering,\n    onClick,\n    width,\n    minWidth,\n    maxWidth,\n    noWrap,\n    rowHeader,\n    fixedRowHeader,\n    fixedRowHeaderLeft,\n  } = props;\n  const orderInit = ordering === 'init';\n  const orderAscending = ordering === 'asc';\n  const orderDescending = ordering === 'desc';\n\n  const listBaseClass = 'vb-tableListHeadCell';\n  const content = (\n    <>\n      {children}\n      {orderAscending ? (\n        <span\n          className={`${listBaseClass}__iconWrapper`}\n          role=\"img\"\n          aria-label=\"昇順に並んでいます\"\n        >\n          <MdArrowUpward className={`${listBaseClass}__headerArrowUp`} />\n        </span>\n      ) : orderDescending ? (\n        <span\n          className={`${listBaseClass}__iconWrapper`}\n          role=\"img\"\n          aria-label=\"降順に並んでいます\"\n        >\n          <MdArrowDownward className={`${listBaseClass}__headerArrowDown`} />\n        </span>\n      ) : orderInit ? (\n        <span\n          className={`${listBaseClass}__iconWrapper`}\n          role=\"img\"\n          aria-label=\"並び替え可能です\"\n        >\n          <MdSwapVert className={`${listBaseClass}__headerSwapVert`} />\n        </span>\n      ) : (\n        ''\n      )}\n    </>\n  );\n\n  const cp = commonProps(props, listBaseClass, {\n    alignCenter,\n    alignRight,\n    orderAscending,\n    orderDescending,\n    clickable: !!onClick,\n    noWrap,\n    rowHeader,\n    fixedRowHeader: rowHeader && fixedRowHeader, // rowHeader が true の時のみ有効化する\n  });\n  return (\n    <th\n      {...{\n        ...cp,\n        className: `${cp.className}${\n          width ? ` ${listBaseClass}--width${width}` : ''\n        }${minWidth ? ` ${listBaseClass}--minWidth${minWidth}` : ''}${\n          maxWidth ? ` ${listBaseClass}--maxWidth${maxWidth}` : ''\n        }${\n          rowHeader && fixedRowHeader && fixedRowHeaderLeft\n            ? ` ${listBaseClass}--fixedRowHeaderLeft${fixedRowHeaderLeft}`\n            : ''\n        }`,\n      }}\n    >\n      {onClick ? (\n        <span\n          className={`${listBaseClass}__clickElement`}\n          role=\"button\"\n          onClick={(): void => onClick()}\n          onKeyDown={(e): void => {\n            if (e.key === Keys.SPACE || e.key === Keys.ENTER) {\n              e.preventDefault();\n              onClick();\n            }\n          }}\n          tabIndex={0}\n        >\n          {content}\n        </span>\n      ) : (\n        content\n      )}\n    </th>\n  );\n};\n\nexport default TableListHeadCell;\n"
  },
  {
    "path": "src/lv1/lists/TableListRow.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TableListCell from './TableListCell';\nimport TableListRow from './TableListRow';\n\nexport default {\n  component: TableListRow,\n};\n\nexport const TableListRowComponent = () => {\n  return (\n    <table style={{ width: '25rem' }}>\n      <tbody>\n        <TableListRow\n          url={text('Url', '', 'TableListCell')}\n          onClick={action('click')}\n          onSelfWindowNavigation={action('self window navigation')}\n          {...commonKnobs()}\n        >\n          <TableListCell>テーブルセル1</TableListCell>\n          <TableListCell>テーブルセル2</TableListCell>\n          <TableListCell>テーブルセル3</TableListCell>\n        </TableListRow>\n      </tbody>\n    </table>\n  );\n};\n"
  },
  {
    "path": "src/lv1/lists/TableListRow.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { KeyCodes } from '../../utilities/keyboard';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\nimport {\n  TableRowAriaProps,\n  filterTableRowAriaProps,\n} from '../../utilities/AriaProps';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * hrefを設定します\n   */\n  url?: string;\n  /**\n   * クリックハンドラを設定します\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onClick?: () => any;\n} & CommonProps &\n  SelfWindowNavigationProp &\n  TableRowAriaProps;\n\nconst TableListRow: React.ForwardRefRenderFunction<\n  HTMLTableRowElement,\n  Props\n> = (props: Props, ref: React.Ref<HTMLTableRowElement>) => {\n  const { children, onClick, url, onSelfWindowNavigation } = props;\n\n  const baseClassName = 'vb-tableListRow';\n  const classModifier = {\n    clickable: !!onClick || !!url,\n  };\n\n  return onClick || url ? (\n    <tr\n      tabIndex={0}\n      ref={ref}\n      onClick={onClick}\n      onKeyDown={(e): void => {\n        if (e.target !== e.currentTarget) {\n          return;\n        }\n        if (e.keyCode === KeyCodes.ENTER) {\n          e.preventDefault();\n          if (url) {\n            const a = document.createElement('a');\n            a.setAttribute('href', url);\n            const event = new MouseEvent('click', {\n              ctrlKey: e.ctrlKey,\n              shiftKey: e.shiftKey,\n              metaKey: e.metaKey,\n              altKey: e.altKey,\n              cancelable: true,\n            });\n            const navigator = selfWindowNavigator(onSelfWindowNavigation);\n            if (navigator) {\n              a.addEventListener('click', (e) => navigator(e, url));\n            }\n            a.dispatchEvent(event);\n          }\n          if (onClick) {\n            onClick();\n          }\n        }\n      }}\n      {...commonProps(props, baseClassName, classModifier)}\n      {...filterTableRowAriaProps(props)}\n      /* FIXME: role的にはクリック可能であることが伝わらないが、roleを変えるとテーブルとしての読み上げが上手くいかないおそれがある */\n    >\n      {children}\n    </tr>\n  ) : (\n    <tr\n      {...commonProps(props, baseClassName, classModifier)}\n      {...filterTableRowAriaProps(props)}\n      ref={ref}\n    >\n      {children}\n    </tr>\n  );\n};\n\nexport default React.forwardRef(TableListRow);\n"
  },
  {
    "path": "src/lv1/lists/TreeFoldingButtonCell.stories.tsx",
    "content": "import * as React from 'react';\n\nimport TreeFoldingButtonCell from './TreeFoldingButtonCell';\nimport { boolean } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\n\nexport default {\n  component: TreeFoldingButtonCell,\n};\n\nexport const TreeFoldingButtonCellComponent = () => (\n  <table>\n    <tbody>\n      <tr>\n        <TreeFoldingButtonCell\n          folded={boolean('folded', false, 'TreeFoldingButtonCell')}\n          onToggleFolded={action('toggleFolded')}\n        />\n      </tr>\n    </tbody>\n  </table>\n);\n"
  },
  {
    "path": "src/lv1/lists/TreeFoldingButtonCell.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MdExpandMore, MdChevronRight } from 'react-icons/md';\n\ntype Props = {\n  folded: boolean;\n  onToggleFolded: (folded: boolean) => void;\n} & CommonProps;\n\nconst TreeFoldingButtonCell: React.FC<Props> = (props: Props) => {\n  const { folded, onToggleFolded } = props;\n  const className = 'vb-treeFoldingButtonCell';\n  return (\n    <td {...commonProps(props, className)}>\n      <button\n        className={`${className}__button`}\n        aria-label={folded ? '展開する' : '折り畳む'}\n        aria-expanded={!folded}\n        onClick={(e) => {\n          onToggleFolded(!folded);\n\n          e.stopPropagation();\n        }}\n      >\n        {folded ? (\n          <MdChevronRight className={`${className}__icon`} />\n        ) : (\n          <MdExpandMore className={`${className}__icon`} />\n        )}\n      </button>\n    </td>\n  );\n};\n\nexport default TreeFoldingButtonCell;\n"
  },
  {
    "path": "src/lv1/messages/Message.stories.tsx",
    "content": "import * as React from 'react';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport ZebraBase from '../bases/ZebraBase';\nimport Message from './Message';\n\nexport default {\n  component: Message,\n};\n\nexport const MessageComponent = () => (\n  <Message\n    info={boolean('Info', false, 'Message')}\n    error={boolean('Error', false, 'Message')}\n    notice={boolean('Notice', false, 'Message')}\n    success={boolean('Success', false, 'Message')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'メッセージメッセージメッセージ', 'Message')}\n  </Message>\n);\n\nexport const Samples = () => (\n  <>\n    <ZebraBase>\n      <Message info marginRight>\n        情報メッセージ情報メッセージ情報メッセージ\n      </Message>\n    </ZebraBase>\n    <ZebraBase>\n      <Message info marginRight>\n        あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。\n      </Message>\n    </ZebraBase>\n    <ZebraBase>\n      <Message notice marginRight>\n        <span>\n          メンテナンスのお知らせ\n          <br />\n          2019年1月1日 0:00から2019年12月31日 23:59\n          のあいだ、メンテナンスのため会計フリーをお使いいただけませんのでご注意ください。\n        </span>\n      </Message>\n    </ZebraBase>\n\n    <ZebraBase>\n      <Message error marginRight>\n        エラーメッセージ\n      </Message>\n      <Message notice marginRight>\n        警告メッセージ\n      </Message>\n      <Message success marginRight>\n        成功メッセージ\n      </Message>\n    </ZebraBase>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/messages/Message.tsx",
    "content": "import * as React from 'react';\nimport { MdError, MdWarning, MdCheckCircle, MdInfo } from 'react-icons/md';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n// lv1を参照しちゃうけど許して\n// TODO: Messageコンポーネントをlv2に移動\nimport MaterialIcon from '../icons/MaterialIcon';\n\nexport type MessageTypes = {\n  /**\n   * error アイコンを表示します\n   */\n  error?: boolean;\n  /**\n   * notice アイコンを表示します\n   */\n  notice?: boolean;\n  /**\n   * success アイコンを表示します\n   */\n  success?: boolean;\n  /**\n   * info アイコンを表示します\n   */\n  info?: boolean;\n};\n\ntype Props = {\n  children?: React.ReactNode;\n} & MessageTypes &\n  MarginClassProps &\n  CommonProps;\n\nexport default function Message(props: Props): React.ReactElement {\n  const {\n    children,\n    error,\n    notice,\n    success,\n    info,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n  return (\n    <span\n      {...commonProps(\n        props,\n        'vb-message',\n        { error, notice, success, info },\n        { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n      )}\n    >\n      <span className=\"vb-message__icon\">\n        {error ? (\n          <MaterialIcon IconComponent={MdError} error mr={0.5} />\n        ) : notice ? (\n          <MaterialIcon IconComponent={MdWarning} notice mr={0.5} />\n        ) : success ? (\n          <MaterialIcon IconComponent={MdCheckCircle} success mr={0.5} />\n        ) : (\n          <MaterialIcon IconComponent={MdInfo} color=\"S8\" mr={0.5} />\n        )}\n      </span>\n      <span className=\"vb-message__content\">{children}</span>\n    </span>\n  );\n}\n"
  },
  {
    "path": "src/lv1/progress/ProgressBar.stories.tsx",
    "content": "import * as React from 'react';\nimport { ProgressBar } from './ProgressBar';\nimport { Button } from '../../';\n\nexport default {\n  component: ProgressBar,\n};\nexport const ProgressBarComponent = ({\n  value = 30,\n  maxValue = 100,\n  indeterminate = false,\n  width = 'default',\n  ariaLabel = '××の進捗',\n  ariaLabelledby = undefined,\n  ...args\n}: React.ComponentProps<typeof ProgressBar>) => (\n  <ProgressBar\n    value={value}\n    maxValue={maxValue}\n    indeterminate={indeterminate}\n    width={width}\n    ariaLabel={ariaLabel}\n    ariaLabelledby={ariaLabelledby}\n    {...args}\n  />\n);\n\nexport const IndeterminateProgressBar = (\n  args: React.ComponentProps<typeof ProgressBar>\n) => <ProgressBar {...args} indeterminate />;\n\nexport const AutoIncreaseSample = ({\n  width = 'default',\n  ...args\n}: React.ComponentProps<typeof ProgressBar>) => {\n  const [progress, setProgress] = React.useState(0);\n  const [intervalId, setIntervalId] = React.useState<number | null>(null);\n\n  const start = () => {\n    if (intervalId) {\n      return;\n    }\n    setIntervalId(\n      window.setInterval(() => {\n        setProgress((progress) => (progress >= 100 ? 0 : progress + 1));\n      }, 50)\n    );\n  };\n\n  const stop = () => {\n    intervalId && window.clearInterval(intervalId);\n    setIntervalId(null);\n  };\n\n  return (\n    <>\n      <ProgressBar width={width} {...args} value={progress} />\n      <Button\n        ml={1}\n        onClick={() => {\n          if (intervalId) {\n            stop();\n          } else {\n            start();\n          }\n        }}\n      >\n        {intervalId ? 'stop' : 'start'}\n      </Button>\n      <Button\n        ml={0.5}\n        onClick={() => {\n          setProgress(0);\n          stop();\n        }}\n      >\n        reset\n      </Button>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv1/progress/ProgressBar.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * 進捗を数値化できる場合にその数値を渡します\n   */\n  value?: number;\n  /**\n   * `value` の最大値です。指定しない場合 `100` となります\n   */\n  maxValue?: number;\n  /**\n   * 進捗を数値化できない場合に `true` にすると、ループするアニメーションを表示します\n   */\n  indeterminate?: boolean;\n  /**\n   * `default` 時に横幅11rem、`full` の場合 `100%` となります\n   */\n  width?: 'default' | 'full' | 'large' | 'small' | 'xSmall';\n  /**\n   * ProgressBarのラベルとして `aria-label` を指定します。\n   * WAI-ARIAの`progressbar` roleでアクセシブルな名前が要求されるため、 `ariaLabel` または `ariaLabelledby` を指定してください。\n   */\n  ariaLabel?: string;\n  /**\n   * ProgressBarのラベルとして `aria-labelledby` を指定します。\n   * WAI-ARIAの`progressbar` roleでアクセシブルな名前が要求されるため、 `ariaLabel` または `ariaLabelledby` を指定してください。\n   */\n  ariaLabelledby?: string;\n} & CommonProps;\n\n/**\n * インポートや外部サービス連携など、時間のかかる処理の進捗表示に使用するプログレスバーです。\n *\n * - 進捗を数値化できる場合は `value` `maxValue` を使用し、ユーザーがあとどれくらい待てば良いのか予測できるようにしてください\n * - 進捗を数値化できない場合は `indeterminate` を使用してください。こちらの使用は可能なかぎり避け、なるべく数値化できるようにしてください\n * - OSのアクセシビリティ設定等で「視差効果を減らす」「動きを減らす」設定を有効化している場合、 `indeterminate` 時にはアニメーションしません\n *\n */\nexport const ProgressBar: React.FC<Props> = ({\n  value,\n  maxValue = 100,\n  indeterminate = false,\n  width = 'default',\n  ariaLabel,\n  ariaLabelledby,\n  ...props\n}: Props) => {\n  const className = 'vb-progressBar';\n  const status = () => {\n    if (value === 0 || value === undefined) {\n      return 'initial';\n    } else if (value === maxValue) {\n      return 'complete';\n    } else {\n      return 'progressing';\n    }\n  };\n\n  return (\n    <span\n      {...commonProps(props, className, {\n        widthFull: width === 'full',\n        widthLarge: width === 'large',\n        widthSmall: width === 'small',\n        widthXSmall: width === 'xSmall',\n        progressing: status() === 'progressing',\n      })}\n      role=\"progressbar\"\n      aria-label={ariaLabel}\n      aria-labelledby={ariaLabelledby}\n      aria-valuemax={indeterminate ? undefined : maxValue}\n      aria-valuenow={indeterminate ? undefined : value}\n    >\n      {indeterminate ? (\n        <span className={`${className}__indeterminateBar`} />\n      ) : (\n        <span\n          className={`${className}__valueBar ${className}__valueBar--${status()}`}\n          style={{\n            transform: `translate(${\n              (value ? (100 * value) / maxValue : 0) - 100\n            }%, 0)`,\n          }}\n        />\n      )}\n    </span>\n  );\n};\n"
  },
  {
    "path": "src/lv1/skeleton/SkeletonBase.tsx",
    "content": "import * as React from 'react';\nimport ContentLoader from 'react-content-loader';\nimport { convertRemToPixel } from '../../utilities/convertRemToPixel';\n\ntype Props = {\n  /**\n   * 幅をremで指定します\n   */\n  width: number;\n  /**\n   * 高さをremで指定します\n   */\n  height: number;\n};\n\nexport const SkeletonBase: React.FC<Props> = (props) => {\n  const widthPixel = convertRemToPixel(props.width);\n  const heightPixel = convertRemToPixel(props.height);\n\n  return (\n    <ContentLoader\n      speed={1}\n      width={widthPixel}\n      height={heightPixel}\n      viewBox={`0 0 ${widthPixel} ${heightPixel}`}\n      backgroundColor=\"rgba(212,212,212,0.3)\" // #FFFFFF 上で #F2F2F2\n      foregroundColor=\"rgba(188,188,188,0.3)\" // #FFFFFF 上で #ebebeb\n    >\n      <rect x=\"0\" y=\"0\" rx=\"4\" ry=\"4\" width={widthPixel} height={heightPixel} />\n    </ContentLoader>\n  );\n};\n"
  },
  {
    "path": "src/lv1/typography/InternalHeadline.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype HeadlineProps = {\n  children?: React.ReactNode;\n  className: string;\n  id?: string;\n  inline?: boolean;\n  textAlign?: 'left' | 'center' | 'right';\n  headlineLevel: 1 | 2 | 3 | 4 | 5 | 6 | -1;\n} & CommonProps &\n  MarginClassProps;\n\n/**\n * 他の headline の基底コンポーネント。vibes のコンポーネントとしては export していないので storybook も作成していない。\n */\nfunction InternalHeadline(\n  props: HeadlineProps,\n  ref?: React.Ref<HTMLHeadingElement>\n): React.ReactElement {\n  const {\n    children,\n    className,\n    id,\n    inline,\n    textAlign,\n    headlineLevel,\n    marginTop,\n    marginRight,\n    marginLeft,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const elementProps = {\n    ...commonProps(\n      props,\n      className,\n      {\n        inline,\n        responsive: useResponsive(),\n        alignLeft: textAlign === 'left',\n        alignRight: textAlign === 'right',\n        alignCenter: textAlign === 'center',\n      },\n      { marginTop, marginRight, marginLeft, marginBottom, marginSize }\n    ),\n    id,\n    ref,\n    tabIndex: -1,\n  };\n  switch (headlineLevel) {\n    case 1:\n      return <h1 {...elementProps}>{children}</h1>;\n    case 2:\n      return <h2 {...elementProps}>{children}</h2>;\n    case 3:\n      return <h3 {...elementProps}>{children}</h3>;\n    case 4:\n      return <h4 {...elementProps}>{children}</h4>;\n    case 5:\n      return <h5 {...elementProps}>{children}</h5>;\n    case 6:\n      return <h6 {...elementProps}>{children}</h6>;\n    default:\n      return <span {...elementProps}>{children}</span>;\n  }\n}\n\nexport default React.forwardRef<HTMLHeadingElement, HeadlineProps>(\n  InternalHeadline\n);\n"
  },
  {
    "path": "src/lv1/typography/Note.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { text, boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Note from './Note';\n\nexport default {\n  component: Note,\n};\n\nexport const NoteComponent = () => (\n  <Note\n    inline={boolean('Inline', false, 'Note')}\n    textAlign={\n      select(\n        'TextAlign',\n        { left: 'left', center: 'center', right: 'right', undefined: '' },\n        '',\n        'Note'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text(\n      'Children',\n      '注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈注釈',\n      'Note'\n    )}\n  </Note>\n);\n\nexport const EllipsisWhenOverflow = () => {\n  return (\n    <div style={{ width: '300px' }}>\n      <Note ellipsis>\n        ellipsisを指定するとテキストが溢れた時には省略されます\n      </Note>\n      <Note inline ellipsis mt={1}>\n        inlineのときもellipsisを指定するとテキストが溢れた時には省略されます\n      </Note>\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv1/typography/Note.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { TypographyStyle, TypographyStyleProps } from './TypographyStyle';\nimport styled from 'styled-components';\nimport { CaptionFont, VibesBurntColor } from '../../constants';\n\ntype Props = {\n  children?: React.ReactNode;\n} & TypographyStyleProps &\n  CommonProps &\n  MarginClassProps;\n\nconst Style = styled(TypographyStyle)`\n  color: ${VibesBurntColor};\n  font: ${CaptionFont};\n`;\n\nexport default function Note(props: Props): React.ReactElement {\n  return <Style as={props.inline ? 'span' : 'p'} {...props} />;\n}\n"
  },
  {
    "path": "src/lv1/typography/PageTitle.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { text, boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../buttons/Button';\nimport PageTitle from './PageTitle';\n\nexport default {\n  component: PageTitle,\n};\n\nexport const PageTitleComponent = () => (\n  <PageTitle\n    inline={boolean('Inline', false, 'PageTitle')}\n    textAlign={\n      select(\n        'TextAlign',\n        { left: 'left', center: 'center', right: 'right', undefined: '' },\n        '',\n        'PageTitle'\n      ) || undefined\n    }\n    headlineLevel={\n      select(\n        'HeadlineLevel',\n        {\n          '1': 1,\n          '2': 2,\n          '3': 3,\n          '4': 4,\n          '5': 5,\n          '6': 6,\n          '-1': -1,\n          undefined: '',\n        } as const,\n        '',\n        'PageTitle'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text('Children', 'ページタイトル', 'PageTitle')}\n  </PageTitle>\n);\n\nexport const WithRef = () => {\n  const WithRefInner = () => {\n    const ref = React.useRef<HTMLHeadingElement | null>(null);\n\n    return (\n      <>\n        <PageTitle ref={ref}>ページタイトル</PageTitle>\n        <Button\n          appearance=\"tertiary\"\n          onClick={() => {\n            if (ref.current) {\n              ref.current.focus();\n            }\n          }}\n        >\n          focus a heading element\n        </Button>\n      </>\n    );\n  };\n  return <WithRefInner />;\n};\n"
  },
  {
    "path": "src/lv1/typography/PageTitle.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { HeadlineStyle, HeadlineStyleProps } from './TypographyStyle';\nimport styled from 'styled-components';\nimport {\n  HeadlineFont1,\n  MobileBoundaryWidth,\n  MobileHeadlineFont1,\n  VibesBlackColor,\n} from '../../constants';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children?: React.ReactNode;\n  id?: string;\n  /**\n   * 見出しレベルを指定します。これに応じて `h1` から `h6` 要素としてrenderされます。初期値は1です。\n   * -1 にすると `span` 要素となります。\n   */\n  headlineLevel?: HeadlineStyleProps['headlineLevel'];\n} & Omit<HeadlineStyleProps, 'headlineLevel' | 'ellipsis'> & // headlineLevelは再定義のため、ellipsisは元々非対応だったのでいったんOmitしている\n  CommonProps &\n  MarginClassProps;\n\nconst Style = styled(HeadlineStyle).attrs(\n  ({ responsive }: { responsive?: boolean }) => ({ responsive })\n)`\n  color: ${VibesBlackColor};\n  font: ${HeadlineFont1};\n\n  ${({ responsive }) =>\n    responsive\n      ? `\n        @media (max-width: ${MobileBoundaryWidth}) {\n          font: ${MobileHeadlineFont1};\n        }`\n      : ''}\n`;\n\nconst RenderPageTitle: React.ForwardRefRenderFunction<\n  HTMLHeadingElement,\n  Props\n> = (\n  { headlineLevel = 1, ...props }: Props,\n  ref?: React.Ref<HTMLHeadingElement>\n) => {\n  return (\n    <Style\n      responsive={useResponsive()}\n      headlineLevel={headlineLevel}\n      tabIndex={-1}\n      {...props}\n      ref={ref}\n    />\n  );\n};\n\nconst PageTitle = React.forwardRef<HTMLHeadingElement, Props>(RenderPageTitle);\n\nexport default PageTitle;\n"
  },
  {
    "path": "src/lv1/typography/Paragraph.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Paragraph from './Paragraph';\n\nexport default {\n  component: Paragraph,\n};\n\nexport const ParagraphComponent = () => (\n  <Paragraph\n    inline={boolean('Inline', false, 'Paragraph')}\n    textAlign={\n      select(\n        'TextAlign',\n        { left: 'left', center: 'center', right: 'right', undefined: '' },\n        '',\n        'Paragraph'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text(\n      'Children',\n      '本文本文本文本文本文本文本文本文本文本文本文',\n      'Paragraph'\n    )}\n  </Paragraph>\n);\n\nexport const EllipsisWhenOverflow = () => {\n  return (\n    <div style={{ width: '300px' }}>\n      <Paragraph ellipsis>\n        ellipsisを指定するとテキストが溢れた時には省略されます\n      </Paragraph>\n      <Paragraph inline ellipsis mt={1}>\n        inlineのときもellipsisを指定するとテキストが溢れた時には省略されます\n      </Paragraph>\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv1/typography/Paragraph.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { TypographyStyle, TypographyStyleProps } from './TypographyStyle';\n\ntype Props = {\n  children?: React.ReactNode;\n} & TypographyStyleProps &\n  CommonProps &\n  MarginClassProps;\n\nexport default function Paragraph(props: Props): React.ReactElement {\n  return <TypographyStyle as={props.inline ? 'span' : 'p'} {...props} />;\n}\n"
  },
  {
    "path": "src/lv1/typography/SectionTitle.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../buttons/Button';\nimport SectionTitle from './SectionTitle';\n\nexport default {\n  component: SectionTitle,\n};\n\nexport const SectionTitleComponent = () => (\n  <SectionTitle\n    inline={boolean('Inline', false, 'SectionTitle')}\n    textAlign={\n      select(\n        'TextAlign',\n        { left: 'left', center: 'center', right: 'right', undefined: '' },\n        '',\n        'SectionTitle'\n      ) || undefined\n    }\n    headlineLevel={\n      select(\n        'HeadlineLevel',\n        {\n          '1': 1,\n          '2': 2,\n          '3': 3,\n          '4': 4,\n          '5': 5,\n          '6': 6,\n          '-1': -1,\n          undefined: '',\n        } as const,\n        '',\n        'SectionTitle'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text('Children', 'セクションタイトル', 'SectionTitle')}\n  </SectionTitle>\n);\n\nexport const WithRef = () => {\n  const WithRefInner = () => {\n    const ref = React.useRef<HTMLHeadingElement | null>(null);\n\n    return (\n      <>\n        <SectionTitle ref={ref}>セクションタイトル</SectionTitle>\n        <Button\n          appearance=\"tertiary\"\n          onClick={() => {\n            if (ref.current) {\n              ref.current.focus();\n            }\n          }}\n        >\n          focus a heading element\n        </Button>\n      </>\n    );\n  };\n  return <WithRefInner />;\n};\n"
  },
  {
    "path": "src/lv1/typography/SectionTitle.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { HeadlineStyle, HeadlineStyleProps } from './TypographyStyle';\nimport styled from 'styled-components';\nimport {\n  HeadlineFont2,\n  MobileBoundaryWidth,\n  MobileHeadlineFont2,\n  VibesBlackColor,\n} from '../../constants';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children?: React.ReactNode;\n  id?: string;\n  /**\n   * 見出しレベルを指定します。これに応じて `h1` から `h6` 要素としてrenderされます。初期値は2です。\n   * -1にすると `span` 要素となります。\n   */\n  headlineLevel?: HeadlineStyleProps['headlineLevel'];\n} & Omit<HeadlineStyleProps, 'headlineLevel' | 'ellipsis'> & // headlineLevelは再定義のため、ellipsisは元々非対応だったのでいったんOmitしている\n  CommonProps &\n  MarginClassProps;\n\nconst Style = styled(HeadlineStyle).attrs(\n  ({ responsive }: { responsive?: boolean }) => ({ responsive })\n)`\n  color: ${VibesBlackColor};\n  font: ${HeadlineFont2};\n\n  ${({ responsive }) =>\n    responsive\n      ? `\n        @media (max-width: ${MobileBoundaryWidth}) {\n          font: ${MobileHeadlineFont2};\n        }`\n      : ''}\n`;\n\nconst RenderSectionTitle: React.ForwardRefRenderFunction<\n  HTMLHeadingElement,\n  Props\n> = (\n  { headlineLevel = 2, ...props }: Props,\n  ref?: React.Ref<HTMLHeadingElement>\n) => {\n  return (\n    <Style\n      responsive={useResponsive()}\n      headlineLevel={headlineLevel}\n      tabIndex={-1}\n      {...props}\n      ref={ref}\n    />\n  );\n};\n\nconst SectionTitle = React.forwardRef<HTMLHeadingElement, Props>(\n  RenderSectionTitle\n);\nexport default SectionTitle;\n"
  },
  {
    "path": "src/lv1/typography/SubSectionTitle.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../buttons/Button';\nimport SubSectionTitle from './SubSectionTitle';\n\nexport default {\n  component: SubSectionTitle,\n};\n\nexport const SubSectionTitleComponent = () => (\n  <SubSectionTitle\n    inline={boolean('Inline', false, 'SubSectionTitle')}\n    textAlign={\n      select(\n        'TextAlign',\n        { left: 'left', center: 'center', right: 'right', undefined: '' },\n        '',\n        'SubSectionTitle'\n      ) || undefined\n    }\n    headlineLevel={\n      select(\n        'HeadlineLevel',\n        {\n          '1': 1,\n          '2': 2,\n          '3': 3,\n          '4': 4,\n          '5': 5,\n          '6': 6,\n          '-1': -1,\n          undefined: '',\n        } as const,\n        '',\n        'SubSectionTitle'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text('Children', 'サブセクションタイトル', 'SubSectionTitle')}\n  </SubSectionTitle>\n);\n\nexport const WithRef = () => {\n  const WithRefInner = () => {\n    const ref = React.useRef<HTMLHeadingElement | null>(null);\n\n    return (\n      <>\n        <SubSectionTitle ref={ref}>サブセクションタイトル</SubSectionTitle>\n        <Button\n          appearance=\"tertiary\"\n          onClick={() => {\n            if (ref.current) {\n              ref.current.focus();\n            }\n          }}\n        >\n          focus a heading element\n        </Button>\n      </>\n    );\n  };\n  return <WithRefInner />;\n};\n"
  },
  {
    "path": "src/lv1/typography/SubSectionTitle.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { HeadlineStyle, HeadlineStyleProps } from './TypographyStyle';\nimport styled from 'styled-components';\nimport {\n  HeadlineFont3,\n  MobileBoundaryWidth,\n  MobileHeadlineFont3,\n  VibesBurntColor,\n} from '../../constants';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  children?: React.ReactNode;\n  id?: string;\n  /**\n   * 見出しレベルを指定します。これに応じて `h1` から `h6` 要素としてrenderされます。初期値は3です。\n   * -1にすると `span` 要素となります。\n   */\n  headlineLevel?: HeadlineStyleProps['headlineLevel'];\n} & Omit<HeadlineStyleProps, 'headlineLevel' | 'ellipsis'> & // headlineLevelは再定義のため、ellipsisは元々非対応だったのでいったんOmitしている\n  CommonProps &\n  MarginClassProps;\n\nconst Style = styled(HeadlineStyle).attrs(\n  ({ responsive }: { responsive?: boolean }) => ({ responsive })\n)`\n  color: ${VibesBurntColor};\n  font: ${HeadlineFont3};\n\n  ${({ responsive }) =>\n    responsive\n      ? `\n        @media (max-width: ${MobileBoundaryWidth}) {\n          font: ${MobileHeadlineFont3};\n        }`\n      : ''}\n`;\n\nconst RenderSubSectionTitle: React.ForwardRefRenderFunction<\n  HTMLHeadingElement,\n  Props\n> = (\n  { headlineLevel = 3, ...props }: Props,\n  ref?: React.Ref<HTMLHeadingElement>\n) => {\n  return (\n    <Style\n      responsive={useResponsive()}\n      headlineLevel={headlineLevel}\n      tabIndex={-1}\n      {...props}\n      ref={ref}\n    />\n  );\n};\n\nconst SubSectionTitle = React.forwardRef<HTMLHeadingElement, Props>(\n  RenderSubSectionTitle\n);\n\nexport default SubSectionTitle;\n"
  },
  {
    "path": "src/lv1/typography/Text.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { Text } from './Text';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { Vibes2021BackgroundColor } from '../../constants';\n\nexport default {\n  component: Text,\n};\n\nexport const TextComponent = () => (\n  <Text\n    ellipsis={boolean('ellipsis', false, 'Text')}\n    weight={select('weight', ['normal', 'bold', undefined], undefined, 'Text')}\n    size={select('size', [0.75, 0.875, 1, 1.5, undefined], undefined, 'Text')}\n    color={select(\n      'color',\n      [\n        'black',\n        'burnt',\n        'link',\n        'alert',\n        'notice',\n        'white',\n        'GY7',\n        'S9',\n        'P7',\n        'P5',\n        'RE5',\n        'YE10',\n        undefined,\n      ],\n      undefined,\n      'Text'\n    )}\n    {...commonKnobs()}\n  >\n    {text('children', 'テキスト', 'Text')}\n  </Text>\n);\n\nexport const Size = () => (\n  <>\n    <div>\n      <Text size={0.75} ma={1}>\n        size=0.75 (12px)\n      </Text>\n      <Text size={0.875} ma={1}>\n        size=0.875 (14px)\n      </Text>\n      <Text size={1} ma={1}>\n        size=1 (16px)\n      </Text>\n      <Text size={1.5} ma={1}>\n        size=1.5 (24px)\n      </Text>\n    </div>\n\n    <div>\n      <Text size={0.75} weight=\"bold\" ma={1}>\n        size=0.75 (12px)\n      </Text>\n      <Text size={0.875} weight=\"bold\" ma={1}>\n        size=0.875 (14px)\n      </Text>\n      <Text size={1} weight=\"bold\" ma={1}>\n        size=1 (16px)\n      </Text>\n      <Text size={1.5} weight=\"bold\" ma={1}>\n        size=1.5 (24px)\n      </Text>\n    </div>\n  </>\n);\n\nexport const Color = () => (\n  <>\n    <div>\n      <Text color=\"black\" ma={1}>\n        black\n      </Text>\n      <Text color=\"burnt\" ma={1}>\n        burnt\n      </Text>\n      <Text color=\"link\" ma={1}>\n        link\n      </Text>\n      <Text color=\"alert\" ma={1}>\n        alert\n      </Text>\n      <Text color=\"notice\" ma={1}>\n        notice\n      </Text>\n      <Text color=\"white\" ma={1}>\n        white\n      </Text>\n    </div>\n\n    <div>\n      <Text color=\"GY7\" ma={1}>\n        GY7\n      </Text>\n      <Text color=\"S9\" ma={1}>\n        S9\n      </Text>\n      <Text color=\"P7\" ma={1}>\n        P7\n      </Text>\n      <Text color=\"P5\" ma={1}>\n        P5\n      </Text>\n      <Text color=\"RE5\" ma={1}>\n        RE5\n      </Text>\n      <Text color=\"YE10\" ma={1}>\n        YE10\n      </Text>\n    </div>\n  </>\n);\n\nexport const Ellipsis = () => (\n  <>\n    <div style={{ width: '10rem' }}>\n      <Text ellipsis>長いテキストの省略表示を作れます</Text>\n    </div>\n  </>\n);\n\nexport const OverflowWrap = () => (\n  <>\n    <p\n      style={{\n        backgroundColor: Vibes2021BackgroundColor,\n        width: '8rem',\n        marginBottom: '1rem',\n      }}\n    >\n      <Text>\n        default(overflowWrap=&apos;normal&apos;) 単語区切り の 位置 が\n        どう変わるか https://toolong/path/longlonglonglonglonglonglong 他の単語\n        は こうみえるよ\n      </Text>\n    </p>\n    <p\n      style={{\n        backgroundColor: Vibes2021BackgroundColor,\n        width: '8rem',\n        marginBottom: '1rem',\n      }}\n    >\n      <Text overflowWrap=\"anywhere\">\n        overflowWrap=&apos;anywhere&apos; 単語区切り の 位置 が 変わるか\n        https://toolong/path/longlonglonglonglonglonglong 他の単語 は\n        こうみえるよ\n      </Text>\n    </p>\n    <p\n      style={{\n        backgroundColor: Vibes2021BackgroundColor,\n        width: '8rem',\n        marginBottom: '1rem',\n      }}\n    >\n      <Text overflowWrap=\"break-word\">\n        overflowWrap=&apos;break-word&apos; 単語区切り の 位置 が 変わるか\n        https://toolong/path/longlonglonglonglonglonglong 他の単語 は\n        こうみえるよ\n      </Text>\n    </p>\n  </>\n);\n"
  },
  {
    "path": "src/lv1/typography/Text.tsx",
    "content": "import * as React from 'react';\nimport styled from 'styled-components';\nimport {\n  Colors2021GY07,\n  Colors2021P05,\n  Colors2021P07,\n  Colors2021RE05,\n  Colors2021S09,\n  Colors2021YE10,\n} from '../../constants';\nimport { CommonProps } from '../../utilities/commonProps';\nimport { TypographyStyle, TypographyStyleProps } from './TypographyStyle';\n\ntype FontColor =\n  | 'black'\n  | 'burnt'\n  | 'link'\n  | 'alert'\n  | 'notice'\n  | 'white'\n  | 'GY7'\n  | 'S9'\n  | 'P7'\n  | 'P5'\n  | 'RE5'\n  | 'YE10';\ntype FontSize = 0.75 | 0.875 | 1 | 1.5;\ntype FontWeight = 'normal' | 'bold';\n\ntype TextProps = {\n  /**\n   * テキストのサイズをrem単位で指定します。\n   *\n   * 1rem = 16px換算で、0.75rem = 12px, 0.875rem = 14px, 1.5rem = 24px となります\n   *\n   */\n  size?: FontSize;\n  /** テキストの太さを指定します */\n  weight?: FontWeight;\n  /** テキストの色を指定します */\n  color?: FontColor;\n  /**\n   * テキストのoverflowWrapを指定します。\n   *\n   * この指定により、テキストが親要素（の幅）をあふれないように、分割できない文字列の途中で「改行を入れるかどうか」の設定ができます\n   */\n  overflowWrap?: 'break-word' | 'normal' | 'anywhere';\n} & Pick<TypographyStyleProps, 'ellipsis'>;\n\ntype Props = {\n  children?: React.ReactNode;\n} & TextProps &\n  CommonProps;\n\nconst Style = styled(TypographyStyle).attrs(\n  ({\n    color = 'black',\n    size = 0.875,\n    weight = 'normal',\n    ellipsis = false,\n    overflowWrap = 'normal',\n  }: TextProps & TypographyStyleProps) => ({\n    color,\n    size,\n    weight,\n    ellipsis,\n    inline: true,\n    overflowWrap,\n  })\n)`\n  display: ${({ ellipsis }) => (ellipsis ? 'inline-block' : 'inline')};\n  font-size: ${({ size }) => size}rem;\n  font-weight: ${({ weight }) => weight};\n  overflow-wrap: ${({ overflowWrap }) => overflowWrap};\n  color: ${({ color }) =>\n    color === 'burnt' || color === 'S9'\n      ? Colors2021S09\n      : color === 'link' || color === 'P7'\n      ? Colors2021P07\n      : color === 'P5'\n      ? Colors2021P05\n      : color === 'alert' || color === 'RE5'\n      ? Colors2021RE05\n      : color === 'notice' || color === 'YE10'\n      ? Colors2021YE10\n      : color === 'white'\n      ? '#FFFFFF'\n      : Colors2021GY07};\n`;\n/**\n * 様々なフォントサイズ・フォントウェイト・色のインラインテキストを作ることができるコンポーネントです\n */\nexport const Text: React.FC<Props> = (props) => <Style {...props} />;\n"
  },
  {
    "path": "src/lv1/typography/TypographyStyle.ts",
    "content": "import {\n  FocusHighlightBorderRadius,\n  MinimumSize,\n  Colors2021P02,\n} from '../../constants';\nimport styled from 'styled-components';\nimport { CommonStyleWithDeprecatedMarginProps } from '../../internal/CommonStyle';\n\nexport type TypographyStyleProps = {\n  /**\n   * inline 用のスタイルを適用します\n   */\n  inline?: boolean;\n  /**\n   * 水平方向の配置を指定します\n   */\n  textAlign?: 'left' | 'center' | 'right';\n  /**\n   * テキストが親要素から溢れた時に省略記号(...)を表示して、親要素内に収めます\n   */\n  ellipsis?: boolean;\n};\n\nexport const TypographyStyle = styled(\n  CommonStyleWithDeprecatedMarginProps\n).attrs(({ inline, textAlign, ellipsis }: TypographyStyleProps) => ({\n  inline,\n  textAlign,\n  ellipsis,\n}))`\n  padding: 0;\n  display: ${({ inline }) => (inline ? 'inline-block' : 'block')};\n  text-align: ${({ textAlign }) => textAlign || 'inherit'};\n\n  overflow-wrap: break-word;\n  border-radius: ${FocusHighlightBorderRadius};\n  ${({ ellipsis, inline }) =>\n    ellipsis\n      ? `\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    max-width: 100%;\n    ${inline ? 'display: inline-block;' : ''}\n  `\n      : ''}\n\n  &:focus {\n    outline: none;\n  }\n  &:focus-visible {\n    // ページの内容が変化したことをスクリーンリーダーに伝えたり、キーボード操作をしやすくするために、見出し部分へのフォーカスを行うことがあるが、\n    // 通常のフォーカスインジケーターが表示されていると存在感が強く、ユーザーに違和感を与えてしまう。\n    // このケースではフォーカスインジケーターを消してしまっても大きな問題とはならないはずだが、それをすると開発者がフォーカスの当たる挙動を確認することができなくなる問題が起き得る。\n    // そこで、focus-visibleな状況に限り、通常よりも薄い色のフォーカスインジケーターを表示する。\n    // focus-visibleな場合のみの表示なので、マウスポインタによる操作以外ではフォーカスインジケーターが表示される。\n    // ここではコントラスト比が低くなりそうな色を意図的に選んでいる。\n    box-shadow: 0 0 0 calc(${MinimumSize} * 2) ${Colors2021P02};\n  }\n`;\n\nexport type HeadlineStyleProps = TypographyStyleProps & {\n  headlineLevel: 1 | 2 | 3 | 4 | 5 | 6 | -1;\n};\n\nexport const HeadlineStyle = styled(TypographyStyle).attrs(\n  ({ headlineLevel }: Pick<HeadlineStyleProps, 'headlineLevel'>) => ({\n    headlineLevel,\n    as: headlineLevel > 0 ? `h${headlineLevel}` : 'span',\n  })\n)`\n  &:focus {\n    outline: none;\n  }\n  &:focus-visible {\n    // ページの内容が変化したことをスクリーンリーダーに伝えたり、キーボード操作をしやすくするために、見出し部分へのフォーカスを行うことがあるが、\n    // 通常のフォーカスインジケーターが表示されていると存在感が強く、ユーザーに違和感を与えてしまう。\n    // このケースではフォーカスインジケーターを消してしまっても大きな問題とはならないはずだが、それをすると開発者がフォーカスの当たる挙動を確認することができなくなる問題が起き得る。\n    // そこで、focus-visibleな状況に限り、通常よりも薄い色のフォーカスインジケーターを表示する。\n    // focus-visibleな場合のみの表示なので、マウスポインタによる操作以外ではフォーカスインジケーターが表示される。\n    // ここではコントラスト比が低くなりそうな色を意図的に選んでいる。\n    box-shadow: 0 0 0 calc(${MinimumSize} * 2) ${Colors2021P02};\n  }\n`;\n"
  },
  {
    "path": "src/lv2/accordionPanel/AccordionPanel.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { Meta, StoryObj } from '@storybook/react';\nimport { expect, userEvent, within } from '@storybook/test';\nimport AccordionPanel from './AccordionPanel';\nimport Paragraph from '../../lv1/typography/Paragraph';\n\nexport default {\n  component: AccordionPanel,\n} as Meta<typeof AccordionPanel>;\n\ntype Story = StoryObj<typeof AccordionPanel>;\n\nexport const Basic: Story = {\n  args: {\n    title: 'アコーディオン',\n  },\n  render: (args) => {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    const [isOpen, setOpen] = React.useState(false);\n\n    return (\n      <AccordionPanel\n        {...args}\n        open={isOpen}\n        onClick={() => setOpen((prev) => !prev)}\n      >\n        <Paragraph>ほげほげほげほげ</Paragraph>\n        <Paragraph>ふがふがふがふが</Paragraph>\n      </AccordionPanel>\n    );\n  },\n};\n\nexport const Interaction: Story = {\n  ...Basic,\n  play: async ({ canvasElement }) => {\n    const canvas = within(canvasElement);\n    const accordionPanel = canvas.getByRole('button');\n\n    expect(accordionPanel).toBeInTheDocument();\n    expect(accordionPanel.ariaExpanded).toBe('false');\n\n    await userEvent.click(accordionPanel);\n    expect(accordionPanel.ariaExpanded).toBe('true');\n\n    await userEvent.click(accordionPanel);\n    expect(accordionPanel.ariaExpanded).toBe('false');\n  },\n};\n\nexport const HasSiblings: Story = {\n  render: () => {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    const [isOpen, setOpen] = React.useState([false, false, false]);\n\n    return (\n      <>\n        <AccordionPanel\n          title=\"アコーディオン1\"\n          open={isOpen[0]}\n          onClick={() => setOpen((prev) => [!prev[0], prev[1], prev[2]])}\n        >\n          <Paragraph>あいうえお</Paragraph>\n        </AccordionPanel>\n        <AccordionPanel\n          title=\"アコーディオン2\"\n          open={isOpen[1]}\n          onClick={() => setOpen((prev) => [prev[0], !prev[1], prev[2]])}\n          border=\"top\"\n        >\n          <Paragraph>かきくけこ</Paragraph>\n        </AccordionPanel>\n        <AccordionPanel\n          title=\"アコーディオン3\"\n          open={isOpen[2]}\n          onClick={() => setOpen((prev) => [prev[0], prev[1], !prev[2]])}\n          border=\"top\"\n        >\n          <Paragraph>さしすせそ</Paragraph>\n        </AccordionPanel>\n      </>\n    );\n  },\n};\n"
  },
  {
    "path": "src/lv2/accordionPanel/AccordionPanel.tsx",
    "content": "import * as React from 'react';\nimport { MdExpandLess, MdExpandMore } from 'react-icons/md';\nimport { Keys } from '../../utilities/keyboard';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport AnimateHeight from 'react-animate-height';\nimport { useLang, useResponsive } from '../../utilities/VibesProvider';\nimport vbClassNames from '../../utilities/vbClassNames';\n\ntype Props = {\n  title: React.ReactNode;\n  children?: React.ReactNode;\n  open?: boolean;\n  /**\n   * border を表示するか\n   */\n  border?: 'both' | 'bottom' | 'top';\n  /**\n   * @deprecated この値を指定しても何も変わりません\n   */\n  small?: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onClick: () => any;\n} & MarginClassProps &\n  CommonProps;\n\nconst AccordionPanel: React.FC<Props> = (props: Props) => {\n  const {\n    title,\n    children,\n    open,\n    border,\n    small,\n    onClick,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const baseClass = 'vb-accordionPanel';\n  const uid = useUniqueId(baseClass);\n  const Icon = open ? MdExpandLess : MdExpandMore;\n  const lang = useLang();\n  return (\n    <div\n      {...commonProps(\n        props,\n        baseClass,\n        {\n          open,\n          borderBoth: border === 'both',\n          borderBottom: border === 'bottom',\n          borderTop: border === 'top',\n          small,\n          close: !open,\n        },\n        { marginTop, marginLeft, marginRight, marginBottom, marginSize }\n      )}\n    >\n      <div\n        className={vbClassNames(`${baseClass}__title`, {\n          modifier: { responsive: useResponsive() },\n        })}\n        aria-controls={`${uid}__description`}\n        aria-expanded={open}\n        tabIndex={0}\n        role=\"button\"\n        onClick={onClick}\n        onKeyDown={(e): void => {\n          if (e.key === Keys.SPACE || e.key === Keys.ENTER) {\n            e.preventDefault();\n            onClick();\n          }\n        }}\n      >\n        {title}\n        <Icon\n          className={vbClassNames(`${baseClass}__icon`, {\n            modifier: { responsive: useResponsive() },\n          })}\n          role=\"img\"\n          aria-label={\n            lang === 'ja'\n              ? open\n                ? 'クリックで閉じる'\n                : 'クリックで開く'\n              : open\n              ? 'Click to close'\n              : 'Click to open'\n          }\n        />\n      </div>\n      <AnimateHeight\n        duration={open ? 200 : 150}\n        height={open ? 'auto' : 0}\n        animateOpacity={true}\n      >\n        <div\n          className={vbClassNames(`${baseClass}__description`, {\n            modifier: { responsive: useResponsive() },\n          })}\n          id={`${uid}__description`}\n          aria-hidden={!open}\n        >\n          {children}\n        </div>\n      </AnimateHeight>\n    </div>\n  );\n};\n\nexport default AccordionPanel;\n"
  },
  {
    "path": "src/lv2/basicTable/BasicTable.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\n\nimport JumpButton from '../../lv1/buttons/JumpButton';\nimport Checkbox from '../../lv1/forms/CheckBox';\n\nimport BasicTable from './BasicTable';\nimport { TableHeader } from '../listTable/ListTable';\nimport MessageIcon from '../messageIcon/MessageIcon';\nimport { boolean } from '@storybook/addon-knobs';\n\nconst headers: TableHeader[] = [\n  {\n    value: '左寄せ',\n    ordering: 'asc',\n    onClick: action('header cell click'),\n  },\n  {\n    value: (\n      <>\n        左寄せソート不可\n        <MessageIcon label=\"ヘルプ\" small>\n          hoge\n        </MessageIcon>\n      </>\n    ),\n  },\n  {\n    value: (\n      <>\n        中央寄せ\n        {/* クリック可能なヘッダーセルにクリック可能なものを置く場合、クリックが伝播しないようにする必要がある */}\n        {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n        <span\n          onClick={(e) => e.stopPropagation()}\n          onKeyDown={(e) => e.stopPropagation()}\n        >\n          <MessageIcon label=\"ヘルプ\" small>\n            hoge\n          </MessageIcon>\n        </span>\n      </>\n    ),\n    alignCenter: true,\n    onClick: action('header cell click'),\n  },\n  {\n    value: '右寄せ、文字小さめ',\n    alignRight: true,\n    onClick: action('header cell click'),\n  },\n];\n\nconst rows = [\n  {\n    cells: [\n      { value: 'テーブルリスト' },\n      {\n        value: (\n          <>\n            テーブルリスト\n            <MessageIcon label=\"ヘルプ\">hoge</MessageIcon>\n          </>\n        ),\n      },\n      { value: 'テーブルリスト', alignCenter: true },\n      { value: 10000000, alignRight: true, small: true },\n    ],\n  },\n  {\n    url: 'https://www.freee.co.jp/',\n    cells: [\n      {\n        value: <Checkbox></Checkbox>,\n      },\n      {\n        value: (\n          <JumpButton url=\"https://corp.freee.co.jp/\" target=\"_blank\" small>\n            ボタン\n          </JumpButton>\n        ),\n      },\n      { value: '行リンク', alignCenter: true },\n      { value: 10000000, alignRight: true, small: true },\n    ],\n  },\n  {\n    cells: [\n      { value: 'テーブルリスト' },\n      { value: 'テーブルリスト' },\n      { value: 'テーブルリスト', alignCenter: true },\n      {\n        value: (\n          <JumpButton small url=\"https://www.freee.co.jp/\">\n            ボタン\n          </JumpButton>\n        ),\n      },\n    ],\n  },\n  {\n    onClick: action('row2-clicked'),\n    cells: [\n      {\n        value: (\n          // Checkboxにclickイベントを持たせられないのでspanに持たせている\n          // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n          <span\n            onKeyDown={(e) => e.stopPropagation()}\n            onClick={(e) => e.stopPropagation()}\n          >\n            <Checkbox></Checkbox>\n          </span>\n        ),\n      },\n      { value: 'テーブルリスト、文字小さめ', small: true },\n      { value: 'テーブルリスト、文字小さめ', alignCenter: true, small: true },\n      { value: 10000000, alignRight: true },\n    ],\n  },\n  {\n    cells: [\n      { value: 'テーブルリスト' },\n      { value: 'テーブルリスト' },\n      {\n        value: (\n          <div>\n            あああ\n            <br /> いいい <br /> ううう\n            <br />\n            えええ\n          </div>\n        ),\n        alignCenter: true,\n      },\n      {\n        value: (\n          <JumpButton small url=\"https://www.freee.co.jp/\">\n            ボタン\n          </JumpButton>\n        ),\n        alignRight: true,\n      },\n    ],\n  },\n];\n\nexport default {\n  title: 'deprecated/basicTable/BasicTable',\n  component: BasicTable,\n};\n\nexport const ListTableComponent = () => (\n  <BasicTable\n    withCheckBox={boolean('withCheckBox', false, 'ListTable')}\n    {...commonKnobs()}\n    headers={headers}\n    rows={rows}\n  />\n);\n"
  },
  {
    "path": "src/lv2/basicTable/BasicTable.tsx",
    "content": "import * as React from 'react';\nimport ListTable from '../listTable/ListTable';\n\ntype Props = Parameters<typeof ListTable>[0];\n\n/**\n * BasicTableはListTableにリネームされました。\n * 新規に使用する場合はListTableを使用してください。\n */\nconst BasicTable = (props: Props) => <ListTable {...props} />;\nexport default BasicTable;\n"
  },
  {
    "path": "src/lv2/breadcrumbs/Breadcrumbs.stories.tsx",
    "content": "import { Meta, StoryObj } from '@storybook/react';\nimport { expect, fn, userEvent, within } from '@storybook/test';\nimport Breadcrumbs from './Breadcrumbs';\n\nexport default {\n  component: Breadcrumbs,\n} as Meta<typeof Breadcrumbs>;\n\ntype Story = StoryObj<typeof Breadcrumbs>;\n\nexport const Basic: Story = {\n  args: {\n    links: [\n      {\n        title: 'ホーム',\n        url: '/',\n        onSelfWindowNavigation: fn(),\n      },\n      {\n        title: '一覧',\n        url: '/',\n        onSelfWindowNavigation: fn(),\n      },\n      {\n        title: '一覧2',\n        onClick: fn(),\n      },\n      {\n        title: '詳細',\n      },\n    ],\n    label: 'パンくずリスト',\n  },\n};\n\nexport const Interaction: Story = {\n  ...Basic,\n  play: async ({ args, canvasElement }) => {\n    const canvas = within(canvasElement);\n    const breadcrumb = canvas.getByRole('navigation');\n    const links = canvas.getAllByRole('link');\n    const buttons = canvas.getAllByRole('button');\n    const current = canvas.getByText('詳細');\n\n    expect(breadcrumb).toBeInTheDocument();\n    expect(links).toHaveLength(2);\n    expect(buttons).toHaveLength(1);\n    expect(current).toBeInTheDocument();\n\n    expect(links[0]).toHaveTextContent('ホーム');\n    expect(links[1]).toHaveTextContent('一覧');\n    expect(buttons[0]).toHaveTextContent('一覧2');\n\n    expect(links[0]).toHaveAttribute('href', '/');\n    expect(links[1]).toHaveAttribute('href', '/');\n    expect(buttons[0]).not.toHaveAttribute('href');\n    expect(current).not.toHaveAttribute('href');\n\n    expect(links[0]).not.toHaveAttribute('aria-current');\n    expect(links[1]).not.toHaveAttribute('aria-current');\n    expect(buttons[0]).not.toHaveAttribute('aria-current');\n    expect(current).toHaveAttribute('aria-current', 'page');\n\n    await userEvent.click(links[0]);\n    expect(args.links[0].onSelfWindowNavigation).toHaveBeenCalled();\n\n    await userEvent.click(links[1]);\n    expect(args.links[1].onSelfWindowNavigation).toHaveBeenCalled();\n\n    await userEvent.click(buttons[0]);\n    expect(args.links[2].onClick).toHaveBeenCalled();\n  },\n};\n\nexport const WithLoadingElement: Story = {\n  args: {\n    links: [\n      {\n        title: '口座一覧',\n        url: '/',\n        onSelfWindowNavigation: fn(),\n      },\n      {\n        title: '口座名',\n        url: '/',\n        onSelfWindowNavigation: fn(),\n        loading: true,\n      },\n      {\n        title: '科目一覧',\n        onClick: fn(),\n      },\n      {\n        title: '科目名',\n        loading: true,\n      },\n    ],\n    label: 'パンくずリスト',\n  },\n};\n"
  },
  {
    "path": "src/lv2/breadcrumbs/Breadcrumbs.tsx",
    "content": "import * as React from 'react';\nimport { MdChevronRight } from 'react-icons/md';\nimport InlineLink from '../../lv1/buttons/InlineLink';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SkeletonParagraph } from '../skeleton/SkeletonParagraph';\n\ntype Props = {\n  links: ({\n    title: string;\n    url?: string;\n    onClick?: () => void;\n    /**\n     * @deprecated `onSelfWindowNavigation` を使用してください\n     */\n    onClickNavigator?: () => void;\n    /**\n     * Shows a skeleton instead of the title while loading / 読込中に項目名を Skeleton 表示にします\n     */\n    loading?: boolean;\n  } & SelfWindowNavigationProp)[];\n  label?: string;\n} & MarginClassProps &\n  CommonProps;\n\nconst Breadcrumbs: React.FC<Props> = (props: Props) => {\n  const {\n    links,\n    label,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-breadcrumbs',\n        {},\n        { marginTop, marginLeft, marginRight, marginBottom, marginSize }\n      )}\n    >\n      <nav role=\"navigation\" aria-label={label || '現在位置'}>\n        <ul className=\"vb-breadcrumbs__list\">\n          {links.map((linkCont, index) => {\n            const lastItem = index === links.length - 1;\n            const title = linkCont.loading ? (\n              <SkeletonParagraph size=\"small\" />\n            ) : (\n              <>{linkCont.title}</>\n            );\n            return (\n              <li\n                className=\"vb-breadcrumbs__item\"\n                key={index}\n                aria-current={lastItem ? 'page' : undefined}\n              >\n                {linkCont.url || linkCont.onClick ? (\n                  <InlineLink\n                    href={linkCont.url}\n                    onClick={linkCont.onClick}\n                    onSelfWindowNavigation={\n                      linkCont.onSelfWindowNavigation ||\n                      linkCont.onClickNavigator\n                    }\n                  >\n                    {title}\n                  </InlineLink>\n                ) : (\n                  title\n                )}\n                {!lastItem && (\n                  <MdChevronRight\n                    className=\"vb-breadcrumbs__divider\"\n                    aria-label=\">\"\n                  />\n                )}\n              </li>\n            );\n          })}\n        </ul>\n      </nav>\n    </div>\n  );\n};\n\nexport default Breadcrumbs;\n"
  },
  {
    "path": "src/lv2/bulletedList/BulletedList.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport BulletedList from './BulletedList';\n\nexport default {\n  component: BulletedList,\n};\n\nconst listSamples = [\n  { value: 'リストコンテンツ' },\n  { value: 'link (default: target=\"_self\")', url: 'https://www.freee.co.jp/' },\n  {\n    value:\n      '長いリストコンテンツ長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い',\n  },\n  {\n    value: 'link (target=\"_blank\")',\n    url: 'https://www.freee.co.jp/',\n    target: '_blank',\n    rel: 'noopener noreferrer',\n    'data-guide': 'guide',\n    'data-test': 'test',\n    'data-tracking': 'tracking',\n  },\n];\n\nexport const BulletedListComponent = () => (\n  <BulletedList\n    listContents={listSamples}\n    listStyleType={\n      select(\n        'ListStyleType',\n        { disc: 'disc', decimal: 'decimal', undefined: '' },\n        '',\n        'BulletedList'\n      ) || undefined\n    }\n    small={boolean('Small', false, 'BulletedList')}\n    {...commonKnobs()}\n  />\n);\n\nexport const Small = () => <BulletedList listContents={listSamples} small />;\n"
  },
  {
    "path": "src/lv2/bulletedList/BulletedList.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport InlineLink from '../../lv1/buttons/InlineLink';\nimport vbClassNames from '../../utilities/vbClassNames';\n\nexport type BulletedListContent = {\n  value: React.ReactNode;\n  url?: string;\n  target?: string;\n  rel?: string;\n  'data-guide'?: string;\n  'data-test'?: string;\n  'data-tracking'?: string;\n  'data-masking'?: boolean;\n};\ntype Props = {\n  /**\n   * リスト項目要素を設定します\n   */\n  listContents?: BulletedListContent[];\n  /**\n   * リスト項目要素のマーカーを設定します\n   */\n  listStyleType?: 'decimal' | 'disc';\n  /**\n   * 文字サイズを小さくします\n   */\n  small?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * 箇条書きのためのコンポーネントです\n */\nconst BulletedList: React.FC<Props> = (props: Props) => {\n  const {\n    listContents,\n    listStyleType,\n    small,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const listBaseClass = 'vb-bulletedList';\n\n  const listItems =\n    listContents &&\n    listContents.map((listCont, index) => (\n      <li key={index} className={`${listBaseClass}__list__listItem`}>\n        {listCont.url ? (\n          <InlineLink\n            href={listCont.url}\n            target={listCont.target || ''}\n            data-guide={listCont['data-guide']}\n            data-test={listCont['data-test']}\n            data-tracking={listCont['data-tracking']}\n            data-masking={listCont['data-masking']}\n            rel={listCont.rel}\n          >\n            {listCont.value}\n          </InlineLink>\n        ) : (\n          listCont.value\n        )}\n      </li>\n    ));\n\n  switch (listStyleType) {\n    case 'decimal':\n      return (\n        <div\n          {...commonProps(\n            props,\n            listBaseClass,\n            { small },\n            { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n          )}\n        >\n          <ol\n            className={vbClassNames(`${listBaseClass}__list`, {\n              modifier: { decimal: true },\n            })}\n          >\n            {listItems}\n          </ol>\n        </div>\n      );\n    case 'disc':\n    default:\n      return (\n        <div\n          {...commonProps(\n            props,\n            listBaseClass,\n            { small },\n            { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n          )}\n        >\n          <ul\n            className={vbClassNames(`${listBaseClass}__list`, {\n              modifier: { decimal: false },\n            })}\n          >\n            {listItems}\n          </ul>\n        </div>\n      );\n  }\n};\n\nexport default BulletedList;\n"
  },
  {
    "path": "src/lv2/buttonGroup/ButtonGroup.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../../lv1/buttons/Button';\nimport ButtonGroup from './ButtonGroup';\n\nexport default {\n  component: ButtonGroup,\n};\n\nexport const ButtonGroupComponent = () => (\n  <ButtonGroup\n    responsive={boolean('Responsive', false, 'ButtonGroup')}\n    align={\n      select(\n        'Align',\n        {\n          left: 'left',\n          center: 'center',\n          undefined: '',\n        },\n        '',\n        'ButtonGroup'\n      ) || undefined\n    }\n    mobileButtonLayout={\n      select(\n        'mobileButtonLayout',\n        {\n          row: 'row',\n          column: 'column',\n          undefined: '',\n        },\n        '',\n        'ButtonGroup'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Button primary>OK</Button>\n    <Button>キャンセル</Button>\n  </ButtonGroup>\n);\n\nexport const ResponsiveButtonGroup = () => (\n  <ButtonGroup\n    responsive={true}\n    align={\n      select(\n        'Align',\n        {\n          left: 'left',\n          center: 'center',\n          undefined: '',\n        },\n        '',\n        'ButtonGroup'\n      ) || undefined\n    }\n    mobileButtonLayout={\n      select(\n        'MobileButtonLayout',\n        {\n          row: 'row',\n          column: 'column',\n          undefined: '',\n        },\n        'row',\n        'ButtonGroup'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Button primary>OK</Button>\n    <Button>キャンセル</Button>\n  </ButtonGroup>\n);\n\nexport const Responsive3Buttons = () => (\n  <ButtonGroup\n    responsive={true}\n    align={\n      select(\n        'Align',\n        {\n          left: 'left',\n          center: 'center',\n          undefined: '',\n        },\n        '',\n        'ButtonGroup'\n      ) || undefined\n    }\n    mobileButtonLayout={\n      select(\n        'MobileButtonLayout',\n        {\n          row: 'row',\n          column: 'column',\n          undefined: '',\n        },\n        'row',\n        'ButtonGroup'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Button appearance=\"primary\">OK</Button>\n    <Button>キャンセル</Button>\n    <Button appearance=\"tertiary\">他のアクション</Button>\n  </ButtonGroup>\n);\n"
  },
  {
    "path": "src/lv2/buttonGroup/ButtonGroup.tsx",
    "content": "import * as React from 'react';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\ntype Props = {\n  children: React.ReactNodeArray | React.ReactNode;\n  align?: 'left' | 'center';\n  responsive?: boolean;\n  /** レスポンシブビューで、画面幅が狭い場合のボタンの並び方を調整します。 `column` を指定した場合はすべてのボタンが縦に並び、`row` を指定した場合は最初の2つのボタンが横に並び、残りのボタンは縦に並びます */\n  mobileButtonLayout?: 'row' | 'column';\n} & MarginClassProps &\n  CommonProps;\n\n/** 主にレスポンシブビューを想定して、複数のボタンをグループ化して配置します。 */\n\nconst ButtonGroup: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    align,\n    responsive,\n    mobileButtonLayout,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const childrenArray = React.Children.toArray(children);\n  const baseClassName = 'vb-buttonGroup';\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        baseClassName,\n        {\n          responsive,\n          alignLeft: align === 'left',\n        },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      {childrenArray.length > 1 ? (\n        <>\n          <div\n            className={vbClassNames(`${baseClassName}__topPair`, {\n              modifier: { mobileButtonLayoutRow: mobileButtonLayout === 'row' },\n            })}\n          >\n            {childrenArray.slice(0, 2).map(\n              (child, i) =>\n                child && ( // undefinedが来た場合に備えてnil guardしている\n                  <div\n                    key={i}\n                    className={vbClassNames(`${baseClassName}__topItem`, {\n                      modifier: {\n                        mobileButtonLayoutRow: mobileButtonLayout === 'row',\n                      },\n                    })}\n                  >\n                    {child}\n                  </div>\n                )\n            )}\n          </div>\n          {childrenArray.slice(2).map(\n            (child, i) =>\n              child && ( // undefinedが来た場合に備えてnil guardしている\n                <div key={i + 2} className=\"vb-buttonGroup__item\">\n                  {child}\n                </div>\n              )\n          )}\n        </>\n      ) : (\n        children\n      )}\n    </div>\n  );\n};\n\nexport default ButtonGroup;\n"
  },
  {
    "path": "src/lv2/calendar/Calendar.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Calendar from './Calendar';\n\nexport default {\n  component: Calendar,\n};\n\nexport const CalendarComponent = () => (\n  <Calendar\n    year=\"2018\"\n    month=\"12\"\n    startFromMonday={boolean('StartFromMonday', false, 'Calendar')}\n    contents={[\n      {\n        type: 'TimeRecord',\n        date: '2018-12-09',\n        status: 'alert',\n        dateLabel: '通常',\n        openingTime: '20:00',\n        endingTime: '24:00',\n      },\n      {\n        type: 'TimeRecord',\n        date: '2018-12-10',\n        status: 'success',\n        dateLabel: '通常',\n        openingTime: '9:00',\n        endingTime: '19:00',\n      },\n      {\n        type: 'TimeRecord',\n        date: '2018-12-11',\n        dateLabel: '通常',\n        openingTime: '9:00',\n        endingTime: '19:00',\n      },\n      {\n        type: 'TimeRecord',\n        date: '2018-12-12',\n        dateLabel: '通常',\n        openingTime: '9:00',\n        endingTime: '19:00',\n      },\n      {\n        type: 'TimeRecord',\n        date: '2018-12-15',\n        status: 'notice',\n        dateLabel: '通常',\n        openingTime: '9:00',\n        endingTime: '19:00',\n      },\n    ]}\n    nationalHolidays={['2018-12-24']}\n    onClickDate={action('click date')}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/calendar/Calendar.tsx",
    "content": "import * as React from 'react';\nimport CalendarHead from '../../lv1/calendar/CalendarHead';\nimport Weeks from './Weeks';\nimport { TimeRecord } from '../../lv1/calendar/CalendarDate';\nimport { KeyCodes } from '../../utilities/keyboard';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { startOfMonth, getDate } from 'date-fns';\n\ntype Props = {\n  year: string;\n  month: string;\n  contents?: TimeRecord[]; // unionで足していく\n  startFromMonday?: boolean;\n  nationalHolidays?: string[];\n  onClickDate?: (date: string) => void;\n} & CommonProps;\n\nexport default class Calendar extends React.Component<Props> {\n  selectableDateRefs: HTMLDivElement[] = [];\n  render(): React.ReactElement {\n    this.selectableDateRefs = [];\n\n    const {\n      year,\n      month,\n      startFromMonday,\n      contents,\n      nationalHolidays,\n      onClickDate,\n    } = this.props;\n    const starDateOfMonth = startOfMonth(new Date(`${year}/${month}/1`));\n    const weekStartsOn = startFromMonday ? 1 : 0;\n    return (\n      <table {...commonProps(this.props, 'vb-calendar')}>\n        <thead>\n          <CalendarHead weekStartsOn={weekStartsOn} />\n        </thead>\n        <tbody>\n          <Weeks\n            weekStartsOn={weekStartsOn}\n            starDateOfMonth={starDateOfMonth}\n            contents={contents}\n            nationalHolidays={nationalHolidays}\n            onClickDate={onClickDate}\n            selectableDateRefs={this.selectableDateRefs}\n            handleKeyDownSelectedDate={this.handleKeyDownSelectedDate.bind(\n              this\n            )}\n          />\n        </tbody>\n      </table>\n    );\n  }\n\n  handleKeyDownSelectedDate = (\n    e: React.KeyboardEvent<HTMLDivElement>,\n    date: string,\n    onClickDate?: (date: string) => void\n  ): void => {\n    const dateNum = getDate(new Date(date));\n    switch (e.keyCode) {\n      case KeyCodes.ESC:\n        e.preventDefault();\n        this.selectableDateRefs[dateNum - 1] &&\n          this.selectableDateRefs[dateNum - 1].blur();\n        break;\n      case KeyCodes.UP:\n        e.preventDefault();\n        this.selectableDateRefs[dateNum - 8] &&\n          this.selectableDateRefs[dateNum - 8].focus();\n        break;\n      case KeyCodes.DOWN:\n        e.preventDefault();\n        this.selectableDateRefs[dateNum + 6] &&\n          this.selectableDateRefs[dateNum + 6].focus();\n        break;\n      case KeyCodes.LEFT:\n        e.preventDefault();\n        this.selectableDateRefs[dateNum - 2] &&\n          this.selectableDateRefs[dateNum - 2].focus();\n        break;\n      case KeyCodes.RIGHT:\n        e.preventDefault();\n        this.selectableDateRefs[dateNum] &&\n          this.selectableDateRefs[dateNum].focus();\n        break;\n      case KeyCodes.ENTER:\n        e.preventDefault();\n        onClickDate && onClickDate(date);\n        break;\n    }\n  };\n}\n"
  },
  {
    "path": "src/lv2/calendar/DatePicker.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport DatePicker from './DatePicker';\n\nexport default {\n  component: DatePicker,\n};\n\nexport const DatePickerComponent = () => (\n  <DatePicker\n    date={text('Date', '2020-11-15', 'DatePicker')}\n    minDate={text('MinDate', '2020-09-15', 'DatePicker')}\n    maxDate={text('MaxDate', '2020-12-15', 'DatePicker')}\n    onDateClick={action('date click')}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/calendar/DatePicker.tsx",
    "content": "import * as React from 'react';\nimport {\n  format,\n  isSameDay,\n  addDays,\n  startOfMonth,\n  addMonths,\n  differenceInDays,\n  isBefore,\n  isAfter,\n} from 'date-fns';\nimport Button from '../../lv1/buttons/Button';\nimport {\n  formatDate,\n  getValidDateNearestTarget,\n  isValidDateInRange,\n  parseDate,\n} from '../../utilities/date';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport { Keys } from '../../utilities/keyboard';\nimport { pickCommonProps, CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  date?: string | Date;\n  onDateClick: (date: string) => void;\n  minDate?: string | Date;\n  maxDate?: string | Date;\n} & CommonProps;\n\nfunction DatePicker(\n  props: Props,\n  ref: React.Ref<HTMLDivElement>\n): React.ReactElement {\n  const { date, onDateClick, minDate, maxDate } = props;\n  const now = new Date();\n  const targetDate =\n    parseDate(date) || getValidDateNearestTarget(now, minDate, maxDate) || now;\n  const [showingMonth, setShowingMonth] = React.useState(targetDate);\n  const beginningOfMonth = startOfMonth(showingMonth);\n  const beginningOfCalendar = addDays(\n    beginningOfMonth,\n    beginningOfMonth.getDay() * -1\n  );\n  const endOfMonth = addDays(addMonths(beginningOfMonth, 1), -1);\n  const endOfCalendar = addDays(endOfMonth, 6 - endOfMonth.getDay());\n  const countOfWeeks = Math.ceil(\n    differenceInDays(endOfCalendar, beginningOfCalendar) / 7\n  );\n  const weeks = [...Array(countOfWeeks)].map((_, week) =>\n    [...Array(7)].map((_, day) => addDays(beginningOfCalendar, week * 7 + day))\n  );\n  const tableRef = React.useRef<HTMLTableElement>(null);\n  const uniqueId = useUniqueId('vb-datePicker');\n\n  React.useEffect(() => {\n    const parsedDate = parseDate(date);\n    if (parsedDate) {\n      setShowingMonth(parsedDate);\n    }\n  }, [date]);\n  React.useEffect(() => {\n    const parsedDate = parseDate(date);\n    if (parsedDate) {\n      const focused = document.activeElement;\n      // テーブル内にフォーカスがあるとき、dateやshowingMonthが変化したらそこにフォーカスも移動させる\n      // テーブルの外（前/次の月ボタンなど）にフォーカスがあるときは何もしない\n      if (focused && tableRef.current && tableRef.current.contains(focused)) {\n        const elm = tableRef.current.querySelector(\n          `#${uniqueId}__${formatDate(parsedDate)}`\n        );\n        elm && (elm as HTMLElement).focus();\n      }\n    }\n  }, [date, showingMonth, uniqueId]);\n\n  return (\n    <div\n      className=\"vb-datePicker\"\n      id={uniqueId}\n      ref={ref}\n      {...pickCommonProps(props)}\n    >\n      <div className=\"vb-datePicker__header\">\n        <Button\n          appearance=\"tertiary\"\n          small\n          onClick={(): void => setShowingMonth(addMonths(showingMonth, -1))}\n        >\n          前の月\n        </Button>\n        <div\n          className=\"vb-datePicker__month\"\n          aria-live=\"polite\"\n          aria-atomic=\"true\"\n        >\n          {format(showingMonth, 'YYYY年M月')}\n        </div>\n        <Button\n          appearance=\"tertiary\"\n          small\n          onClick={(): void => setShowingMonth(addMonths(showingMonth, 1))}\n        >\n          次の月\n        </Button>\n      </div>\n\n      <table className=\"vb-datePicker__calendar\" ref={tableRef}>\n        <thead>\n          <tr>\n            <th className=\"vb-datePicker__calendarHead\" aria-label=\"日曜日\">\n              日\n            </th>\n            <th className=\"vb-datePicker__calendarHead\" aria-label=\"月曜日\">\n              月\n            </th>\n            <th className=\"vb-datePicker__calendarHead\" aria-label=\"火曜日\">\n              火\n            </th>\n            <th className=\"vb-datePicker__calendarHead\" aria-label=\"水曜日\">\n              水\n            </th>\n            <th className=\"vb-datePicker__calendarHead\" aria-label=\"木曜日\">\n              木\n            </th>\n            <th className=\"vb-datePicker__calendarHead\" aria-label=\"金曜日\">\n              金\n            </th>\n            <th className=\"vb-datePicker__calendarHead\" aria-label=\"土曜日\">\n              土\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          {weeks.map((week, i) => (\n            <tr key={i}>\n              {week.map((day, j) => {\n                const isSelectedDay = date && isSameDay(day, date);\n                const isToday = isSameDay(day, now);\n                const isDisabledDay = !isValidDateInRange(\n                  day,\n                  minDate,\n                  maxDate\n                );\n                const isOtherMonth =\n                  isBefore(day, beginningOfMonth) || isAfter(day, endOfMonth);\n\n                return (\n                  <td\n                    key={j}\n                    className={`vb-datePicker__calendarCell${\n                      isDisabledDay\n                        ? ' vb-datePicker__calendarCell--disabled'\n                        : ''\n                    }${\n                      isSelectedDay\n                        ? ' vb-datePicker__calendarCell--selected'\n                        : ''\n                    }${\n                      isOtherMonth\n                        ? ' vb-datePicker__calendarCell--otherMonth'\n                        : ''\n                    }`}\n                  >\n                    <span\n                      className=\"vb-datePicker__dateButton\"\n                      tabIndex={isDisabledDay || isOtherMonth ? -1 : 0}\n                      onClick={(): void => {\n                        !isDisabledDay && onDateClick(formatDate(day));\n                      }}\n                      onKeyDown={(e): void => {\n                        if (\n                          !isDisabledDay &&\n                          (e.key === Keys.ENTER || e.key === Keys.SPACE)\n                        ) {\n                          e.preventDefault();\n                          onDateClick(formatDate(day));\n                        }\n                      }}\n                      id={`${uniqueId}__${formatDate(day)}`}\n                      aria-label={`${format(day, 'YYYY年M月D日')}`}\n                      aria-current={isToday ? 'date' : undefined}\n                      aria-pressed={!!isSelectedDay}\n                      role=\"button\"\n                      aria-disabled={isDisabledDay}\n                    >\n                      <span\n                        className={`vb-datePicker__dateNumber${\n                          isToday ? ' vb-datePicker__dateNumber--today' : ''\n                        }`}\n                      >\n                        {format(day, 'D')}\n                      </span>\n                    </span>\n                  </td>\n                );\n              })}\n            </tr>\n          ))}\n        </tbody>\n      </table>\n    </div>\n  );\n}\nexport default React.forwardRef(DatePicker);\n"
  },
  {
    "path": "src/lv2/calendar/Week.tsx",
    "content": "import * as React from 'react';\nimport CalendarDate, { TimeRecord } from '../../lv1/calendar/CalendarDate';\n\nimport {\n  startOfWeek,\n  addDays,\n  isToday,\n  isSunday,\n  isSaturday,\n  isSameMonth,\n  format,\n} from 'date-fns';\n\ntype Props = {\n  weekStartsOn: number;\n  starDateOfMonth: Date;\n  baseDateOfWeek: Date;\n  contents?: Array<TimeRecord>;\n  nationalHolidays?: string[];\n  onClickDate?: (date: string) => void;\n  selectableDateRefs: HTMLDivElement[];\n  handleKeyDownSelectedDate: (\n    e: React.KeyboardEvent<HTMLDivElement>,\n    date: string,\n    onClickDate?: (date: string) => void\n  ) => void;\n};\n\nfunction selectDateLabel(\n  sameMonth: boolean,\n  isPrimaryHoliday: boolean,\n  isSecondaryHoliday: boolean,\n  isNationalHoliday: boolean,\n  content?: TimeRecord\n): string {\n  if (!sameMonth) {\n    return '入力不可';\n  } else if (content && content.dateLabel) {\n    return content.dateLabel;\n  } else if (isPrimaryHoliday || isSecondaryHoliday || isNationalHoliday) {\n    return '休み';\n  } else {\n    return '未入力';\n  }\n}\n\nexport default function Week({\n  weekStartsOn,\n  starDateOfMonth,\n  baseDateOfWeek,\n  contents,\n  nationalHolidays,\n  onClickDate,\n  selectableDateRefs,\n  handleKeyDownSelectedDate,\n}: Props): React.ReactElement {\n  const startDateOfWeek = startOfWeek(baseDateOfWeek, {\n    weekStartsOn: weekStartsOn,\n  });\n\n  return (\n    <React.Fragment>\n      {[...Array(7)].map((unused, i) => {\n        const certainDate = addDays(startDateOfWeek, i);\n        const formattedDate = format(certainDate, 'YYYY-MM-DD');\n        const content: TimeRecord | undefined = contents\n          ? contents.filter((content) => content.date === formattedDate)[0]\n          : undefined;\n        const today = isToday(certainDate);\n        const isPrimaryHoliday = isSunday(certainDate);\n        const isSecondaryHoliday = isSaturday(certainDate);\n        const isNationalHoliday = !!(\n          nationalHolidays &&\n          nationalHolidays.filter(\n            (nationalHoliday) => nationalHoliday === formattedDate\n          )[0]\n        );\n        const sameMonth = isSameMonth(starDateOfMonth, certainDate);\n        const dateLabel = selectDateLabel(\n          sameMonth,\n          isPrimaryHoliday,\n          isSecondaryHoliday,\n          isNationalHoliday,\n          content\n        );\n\n        return (\n          <CalendarDate\n            key={i}\n            date={formattedDate}\n            dateLabel={dateLabel}\n            today={today}\n            primaryHoliday={isPrimaryHoliday}\n            secondaryHoliday={isSecondaryHoliday}\n            nationalHoliday={isNationalHoliday}\n            disabled={!sameMonth}\n            content={content}\n            onClickDate={onClickDate}\n            selectableDateRef={(el: HTMLDivElement | null): void => {\n              el && selectableDateRefs.push(el);\n            }}\n            onKeyDown={handleKeyDownSelectedDate}\n          />\n        );\n      })}\n    </React.Fragment>\n  );\n}\n"
  },
  {
    "path": "src/lv2/calendar/Weeks.tsx",
    "content": "import * as React from 'react';\nimport Week from './Week';\nimport { TimeRecord } from '../../lv1/calendar/CalendarDate';\nimport { differenceInCalendarWeeks, endOfMonth, addWeeks } from 'date-fns';\n\ntype Props = {\n  weekStartsOn: number;\n  starDateOfMonth: Date;\n  contents?: TimeRecord[];\n  nationalHolidays?: string[];\n  onClickDate?: (date: string) => void;\n  selectableDateRefs: HTMLDivElement[];\n  handleKeyDownSelectedDate: (\n    e: React.KeyboardEvent<HTMLDivElement>,\n    date: string,\n    onClickDate?: (date: string) => void\n  ) => void;\n};\n\nexport default function Weeks({\n  weekStartsOn,\n  starDateOfMonth,\n  contents,\n  nationalHolidays,\n  onClickDate,\n  selectableDateRefs,\n  handleKeyDownSelectedDate,\n}: Props): React.ReactElement {\n  // date-fns v2系から使える https://date-fns.org/v2.0.0/docs/getWeeksInMonth の実装と揃える\n  // [FYI] https://github.com/date-fns/date-fns/blob/v2.0.0/src/getWeeksInMonth/index.js#L44\n  const totalWeek =\n    differenceInCalendarWeeks(endOfMonth(starDateOfMonth), starDateOfMonth, {\n      weekStartsOn: weekStartsOn,\n    }) + 1;\n\n  return (\n    <React.Fragment>\n      {[...Array(totalWeek)].map((unused, i) => (\n        <tr key={i}>\n          <Week\n            weekStartsOn={weekStartsOn}\n            starDateOfMonth={starDateOfMonth}\n            baseDateOfWeek={addWeeks(starDateOfMonth, i)}\n            contents={contents}\n            nationalHolidays={nationalHolidays}\n            onClickDate={onClickDate}\n            selectableDateRefs={selectableDateRefs}\n            handleKeyDownSelectedDate={handleKeyDownSelectedDate}\n          />\n        </tr>\n      ))}\n    </React.Fragment>\n  );\n}\n"
  },
  {
    "path": "src/lv2/cardNavigation/CardNavigation.stories.tsx",
    "content": "import * as React from 'react';\n\nimport CardNavigation from './CardNavigation';\nimport { text } from '@storybook/addon-knobs';\nimport { MdCreditCard, MdPerson, MdReportProblem } from 'react-icons/md';\n\nexport default {\n  component: CardNavigation,\n};\n\nexport const CardNavigationComponent = () => (\n  <CardNavigation\n    navigationContents={[\n      {\n        title: text('Title1', 'カードナビゲーション', 'CardNavigation'),\n        text: text(\n          'Text1',\n          'テキストテキストテキストテキストテキストテキストテキスト',\n          'CardNavigation'\n        ),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdCreditCard,\n      },\n      {\n        title: text('Title2', 'URLなし', 'CardNavigation'),\n        text: text('Text2', 'URLなし', 'CardNavigation'),\n        IconComponent: MdPerson,\n      },\n      {\n        title: text('Title3', 'TEXTなし', 'CardNavigation'),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdReportProblem,\n      },\n      {\n        title: text(\n          'Title4',\n          '長い長い長い長い長い長い長い長い長い長いタイトル',\n          'CardNavigation'\n        ),\n        text: text(\n          'Text4',\n          'テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト',\n          'CardNavigation'\n        ),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdReportProblem,\n      },\n    ]}\n  />\n);\n\nexport const CardNavigationComponentLength4 = () => (\n  <CardNavigation\n    navigationContents={[\n      {\n        title: text('Title4-1', 'カードナビ', 'CardNavigation'),\n        text: text(\n          'Text4-1',\n          'テキストテキストテキストテキストテキストテキスト',\n          'CardNavigation'\n        ),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdCreditCard,\n      },\n      {\n        title: text('Title4-2', 'URLなし', 'CardNavigation'),\n        text: text('Text4-2', 'URLなし', 'CardNavigation'),\n        IconComponent: MdPerson,\n      },\n      {\n        title: text('Title4-3', 'TEXTなし', 'CardNavigation'),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdReportProblem,\n      },\n      {\n        title: text('Title4-4', 'カードナビ', 'CardNavigation'),\n        text: text(\n          'Text4-4',\n          'テキストテキストテキストテキストテキストテキスト',\n          'CardNavigation'\n        ),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdCreditCard,\n      },\n    ]}\n  />\n);\n\nexport const CardNavigationComponentLength2 = () => (\n  <CardNavigation\n    navigationContents={[\n      {\n        title: text('Title1', 'カードナビゲーション', 'CardNavigation'),\n        text: text(\n          'Text1',\n          'テキストテキストテキストテキストテキストテキストテキスト',\n          'CardNavigation'\n        ),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdCreditCard,\n      },\n      {\n        title: text('Title2', 'URLなし', 'CardNavigation'),\n        text: text('Text2', 'URLなし', 'CardNavigation'),\n        IconComponent: MdPerson,\n      },\n    ]}\n  />\n);\n\nexport const CardNavigationComponentLength1 = () => (\n  <CardNavigation\n    navigationContents={[\n      {\n        title: text('Title1', 'カードナビゲーション', 'CardNavigation'),\n        text: text(\n          'Text1',\n          'テキストテキストテキストテキストテキストテキストテキスト',\n          'CardNavigation'\n        ),\n        url: text('Url', '#', 'CardNavigation'),\n        IconComponent: MdCreditCard,\n      },\n    ]}\n  />\n);\n"
  },
  {
    "path": "src/lv2/cardNavigation/CardNavigation.tsx",
    "content": "import * as React from 'react';\nimport { MdKeyboardArrowRight } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport MaterialIcon from '../../lv1/icons/MaterialIcon';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport SectionTitle from '../../lv1/typography/SectionTitle';\nimport CardBase from '../../lv1/bases/CardBase';\n\ntype Props = {\n  navigationContents: Array<{\n    title: React.ReactNode;\n    text?: React.ReactNode;\n    url?: string;\n    IconComponent?: React.ElementType;\n  }>;\n} & CommonProps;\n\nconst CardNavigation: React.FC<Props> = (props: Props) => {\n  const { navigationContents } = props;\n  const className = 'vb-cardNavigation';\n  return (\n    <div {...commonProps(props, className)}>\n      {navigationContents.map((naviContent, index) => (\n        <div\n          className={`${className}__item ${className}__item--${navigationContents.length}`}\n          key={index}\n        >\n          <CardBase url={naviContent.url} clickable>\n            <div\n              className={`${className}__content ${className}__content--${navigationContents.length}`}\n            >\n              <div className={`${className}__main`}>\n                <div\n                  className={`${className}__title${\n                    naviContent.text ? ` ${className}__title--text` : ''\n                  }`}\n                >\n                  {naviContent.IconComponent && (\n                    <naviContent.IconComponent\n                      className={`${className}__icon`}\n                      focusable={false}\n                    />\n                  )}\n                  <SectionTitle>{naviContent.title}</SectionTitle>\n                </div>\n                {naviContent.text && <Paragraph>{naviContent.text}</Paragraph>}\n              </div>\n              <div className={`${className}__arrow`}>\n                <MaterialIcon IconComponent={MdKeyboardArrowRight} />\n              </div>\n            </div>\n          </CardBase>\n        </div>\n      ))}\n    </div>\n  );\n};\n\nexport default CardNavigation;\n"
  },
  {
    "path": "src/lv2/combobox/ApiComboBox.stories.tsx",
    "content": "/* eslint-disable react/display-name */\nimport * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport ApiComboBox, {\n  SingleComboBoxOption,\n  useApiComboBox,\n} from './ApiComboBox';\nimport { FormControlGroup, TextField } from '../..';\nimport { FormControl } from '..';\nimport { boolean } from '@storybook/addon-knobs';\nimport { SubSectionTitle } from '../../lv1';\nimport Button from '../../lv1/buttons/Button';\n\ntype Item = {\n  id: number;\n  name: string;\n  shortcut?: string;\n  shortcutNum?: string;\n  disabled?: boolean;\n  other_1?: string;\n  other_2?: string;\n};\n\nconst createMockApi = (suffix: string) => ({\n  async fetch({ name, page }: { name: string; page: number }) {\n    // eslint-disable-next-line compat/compat\n    await new Promise((resolve) => setTimeout(resolve, 2000));\n\n    const limit = 30;\n    const items = Array(limit)\n      .fill(undefined)\n      .map((_, i) => {\n        const baseNum = (page - 1) * limit + i + 1;\n        return {\n          id: baseNum,\n          name: `${suffix}_${baseNum}`,\n          shortcut: `hinmoku_${baseNum + 1}`,\n          shortcutNum: `品目${baseNum + 2}`,\n          other_1: `その他の項目A_${baseNum}`,\n          other_2: `その他の項目B_${baseNum}`,\n        };\n      }) as Item[];\n\n    return {\n      items: name\n        ? items.filter(\n            (item) =>\n              item.name.indexOf(name) > -1 ||\n              (item.shortcut && item.shortcut.indexOf(name) > -1) ||\n              (item.shortcutNum && item.shortcutNum.indexOf(name) > -1)\n          )\n        : items,\n      meta: {\n        limit,\n        currentPage: page,\n        totalPages: 100,\n        totalCount: 498,\n      },\n    };\n  },\n});\n\nexport default {\n  component: ApiComboBox,\n};\n\nexport const ApiComboboxComponent = () => {\n  const [value, setValue] = React.useState<SingleComboBoxOption>();\n  const items = useApiComboBox<Item>({\n    fetchItems: createMockApi('item').fetch,\n    createOptions: (items) =>\n      items.map(\n        ({ id, name, shortcut, shortcutNum }): SingleComboBoxOption => ({\n          id,\n          label: name,\n          keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n          disabled: id % 10 === 0,\n        })\n      ),\n  });\n\n  return (\n    <ApiComboBox\n      value={value}\n      createNewItem={(fieldValue?: string) =>\n        setValue({ id: 10000, label: fieldValue || '' })\n      }\n      onChange={(opt) => {\n        setValue(opt);\n      }}\n      {...items}\n      borderless={boolean('borderless', false, 'ApiComboBox')}\n      {...commonKnobs()}\n    />\n  );\n};\n\nconst useFetchItemA = () => {\n  return useApiComboBox<Item>({\n    fetchItems: createMockApi('item_A').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n};\n\nconst useFetchItemB = () => {\n  return useApiComboBox<Item>({\n    fetchItems: createMockApi('item_B').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n};\n\nconst useFetchItemC = () => {\n  return useApiComboBox<Item>({\n    fetchItems: createMockApi('item_C').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n};\n\nconst ComboBoxLine = ({\n  id,\n  itemA,\n  itemB,\n  itemC,\n}: {\n  id: number;\n  itemA: ReturnType<typeof useFetchItemA>;\n  itemB: ReturnType<typeof useFetchItemB>;\n  itemC: ReturnType<typeof useFetchItemC>;\n}) => {\n  const [valueA, setValueA] = React.useState<SingleComboBoxOption>();\n  const [valueB, setValueB] = React.useState<SingleComboBoxOption>();\n  const [valueC, setValueC] = React.useState<SingleComboBoxOption>();\n\n  return (\n    <FormControlGroup key={id} mt={id > 1 ? 1 : undefined}>\n      <FormControl label=\"id\">\n        <TextField value={`${id}`} width=\"xSmall\" disabled />\n      </FormControl>\n      <FormControl label=\"item_A\" ml={1}>\n        <ApiComboBox\n          value={valueA}\n          onChange={(opt) => {\n            setValueA(opt);\n          }}\n          {...itemA}\n        />\n      </FormControl>\n      <FormControl label=\"item_B\" ml={1}>\n        <ApiComboBox\n          value={valueB}\n          onChange={(opt) => {\n            setValueB(opt);\n          }}\n          {...itemB}\n        />\n      </FormControl>\n      <FormControl label=\"item_C\" ml={1}>\n        <ApiComboBox\n          value={valueC}\n          onChange={(opt) => {\n            setValueC(opt);\n          }}\n          {...itemC}\n        />\n      </FormControl>\n    </FormControlGroup>\n  );\n};\n\nexport const MultiLineAndRow = () => {\n  const itemA = useFetchItemA();\n  const itemB = useFetchItemB();\n  const itemC = useFetchItemC();\n\n  return Array(5)\n    .fill(undefined)\n    .map((_, i) => (\n      <ComboBoxLine\n        key={i}\n        id={i + 1}\n        itemA={itemA}\n        itemB={itemB}\n        itemC={itemC}\n      />\n    ));\n};\n\nconst useFetchBankAccount = () => {\n  const initialName = '銀行_20';\n  const [selectedBank, setSelectedBank] =\n    React.useState<SingleComboBoxOption>();\n  const [bankNameKana, setBankNameKana] = React.useState<string>();\n  const [bankCode, setBankCode] = React.useState<string>();\n\n  const bank = useApiComboBox<Item>({\n    initialName,\n    fetchItems: createMockApi('銀行').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n\n  React.useEffect(() => {\n    const initialBank = bank.items.find(({ name }) => name === initialName);\n\n    if (initialBank) {\n      setSelectedBank(bank.createOptions([initialBank])[0]);\n      setBankNameKana(initialBank.other_1);\n      setBankCode(initialBank.other_2);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [bank.items]);\n\n  return {\n    ...bank,\n    selectedBank,\n    setSelectedBank,\n    bankNameKana,\n    setBankNameKana,\n    bankCode,\n    setBankCode,\n  };\n};\n\nconst useFetchBankBranch = (selectedBankLabel?: string) => {\n  const [selectedBranch, setSelectedBranch] =\n    React.useState<SingleComboBoxOption>();\n  const [branchNameKana, setBranchNameKana] = React.useState<string>();\n  const [branchCode, setBranchCode] = React.useState<string>();\n\n  const branch = useApiComboBox<Item>({\n    fetchItems: createMockApi(`${selectedBankLabel}_支店`).fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n\n  React.useEffect(() => {\n    if (selectedBankLabel) {\n      branch.fetchItems();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [selectedBankLabel]);\n\n  React.useEffect(() => {\n    if (branch.items.length > 0) {\n      setSelectedBranch(branch.createOptions([branch.items[0]])[0]);\n      setBranchNameKana(branch.items[0].other_1);\n      setBranchCode(branch.items[0].other_2);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [branch.items]);\n\n  return {\n    ...branch,\n    selectedBranch,\n    setSelectedBranch,\n    branchNameKana,\n    setBranchNameKana,\n    branchCode,\n    setBranchCode,\n  };\n};\n\nexport const UsingWrappedHooksForOtherComponents = () => {\n  const {\n    selectedBank,\n    setSelectedBank,\n    bankNameKana,\n    setBankNameKana,\n    bankCode,\n    setBankCode,\n    ...bank\n  } = useFetchBankAccount();\n  const {\n    selectedBranch,\n    setSelectedBranch,\n    branchNameKana,\n    setBranchNameKana,\n    branchCode,\n    setBranchCode,\n    ...branch\n  } = useFetchBankBranch(selectedBank?.label);\n\n  return (\n    <>\n      <SubSectionTitle>選択に応じて他のフィールドに値が入る</SubSectionTitle>\n      <FormControlGroup mt={0.5}>\n        <FormControl label=\"銀行名\">\n          <ApiComboBox\n            value={selectedBank}\n            onChange={(opt) => {\n              setSelectedBank(opt);\n              setBankNameKana(\n                bank.items.find(({ id }) => id === opt?.id)?.other_1\n              );\n              setBankCode(bank.items.find(({ id }) => id === opt?.id)?.other_2);\n            }}\n            {...bank}\n          />\n        </FormControl>\n        <FormControl label=\"銀行名（カナ）\" ml={1}>\n          <TextField\n            value={bankNameKana}\n            onChange={(e) => setBankNameKana(e.target.value)}\n          />\n        </FormControl>\n        <FormControl label=\"銀行コード\" ml={1}>\n          <TextField\n            value={bankCode}\n            onChange={(e) => setBankCode(e.target.value)}\n          />\n        </FormControl>\n      </FormControlGroup>\n      <FormControlGroup mt={1}>\n        <FormControl label=\"支店名\">\n          <ApiComboBox\n            value={selectedBranch}\n            onChange={(opt) => {\n              setSelectedBranch(opt);\n              setBranchNameKana(\n                branch.items.find(({ id }) => id === opt?.id)?.other_1\n              );\n              setBranchCode(\n                branch.items.find(({ id }) => id === opt?.id)?.other_2\n              );\n            }}\n            {...branch}\n          />\n        </FormControl>\n        <FormControl label=\"支店名（カナ）\" ml={1}>\n          <TextField\n            value={branchNameKana}\n            onChange={(e) => setBranchNameKana(e.target.value)}\n          />\n        </FormControl>\n        <FormControl label=\"支店コード\" ml={1}>\n          <TextField\n            value={branchCode}\n            onChange={(e) => setBranchCode(e.target.value)}\n          />\n        </FormControl>\n      </FormControlGroup>\n    </>\n  );\n};\n\nexport const ManualFocus = () => {\n  const ref = React.useRef<HTMLInputElement>(null);\n  const onClick = () => {\n    ref.current?.focus();\n  };\n  const [value, setValue] = React.useState<SingleComboBoxOption>();\n  const items = useApiComboBox<Item>({\n    fetchItems: createMockApi('item').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n\n  return (\n    <>\n      <Button mr={1} onClick={onClick}>\n        フォーカスを当てる\n      </Button>\n      <ApiComboBox\n        ref={ref}\n        value={value}\n        createNewItem={(fieldValue?: string) =>\n          setValue({ id: 10000, label: fieldValue || '' })\n        }\n        onChange={(opt) => {\n          setValue(opt);\n        }}\n        {...items}\n        borderless={boolean('borderless', false, 'ApiComboBox')}\n      />\n    </>\n  );\n};\n\nexport const LongOption = () => {\n  const [value, setValue] = React.useState<SingleComboBoxOption>();\n  const items = useApiComboBox<Item>({\n    fetchItems: createMockApi(\n      'LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongOption'\n    ).fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n\n  return (\n    <ApiComboBox\n      value={value}\n      createNewItem={(fieldValue?: string) =>\n        setValue({ id: 10000, label: fieldValue || '' })\n      }\n      onChange={(opt) => {\n        setValue(opt);\n      }}\n      {...items}\n      borderless={boolean('borderless', false, 'ApiComboBox')}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const WithSubLabel = () => {\n  const [value, setValue] = React.useState<SingleComboBoxOption>();\n  const itemsWithSubLabel = useApiComboBox<Item>({\n    fetchItems: createMockApi('item').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        subLabel: shortcut,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n\n  return (\n    <ApiComboBox\n      value={value}\n      createNewItem={(fieldValue?: string) =>\n        setValue({ id: 10000, label: fieldValue || '' })\n      }\n      onChange={(opt) => {\n        setValue(opt);\n      }}\n      {...itemsWithSubLabel}\n      borderless={boolean('borderless', false, 'ApiComboBox')}\n      {...commonKnobs()}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/combobox/ApiComboBox.tsx",
    "content": "import * as React from 'react';\nimport { MdExpandMore } from 'react-icons/md';\nimport {\n  MarginClassProps,\n  pickMarginClassProps,\n} from '../../utilities/marginClasses';\nimport commonProps, {\n  CommonProps,\n  pickCommonDataProps,\n} from '../../utilities/commonProps';\nimport TextField from '../../lv1/forms/TextField';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport MarginBase from '../../lv1/bases/MarginBase';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport Note from '../../lv1/typography/Note';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport { ItemLabel } from './ItemLabel';\nimport {\n  SingleComboBoxOption,\n  InternalComboBoxOption,\n  useAdjustListPosition,\n  createListBoxClassName,\n  FetchParams,\n  ApiMetaData,\n} from './hooks';\nimport { useApiComboBoxInternal } from './hooks/apiComboBox';\nimport { LoadMoreItem } from './LoadMoreItem';\nimport InlineSpinner from '../../lv1/InlineSpinner';\nimport { CreateNewItem } from './CreateNewItem';\nimport { pickFunctionalMarginProps } from '../../utilities/functionalMarginClasses';\nimport vbClassNames from '../../utilities/vbClassNames';\n\nexport { useApiComboBox } from './hooks/apiComboBox';\nexport type { SingleComboBoxOption } from './hooks';\ntype PropsFromTextField = Pick<\n  Parameters<typeof TextField>[0],\n  | 'id'\n  | 'label'\n  | 'labelledby'\n  | 'placeholder'\n  | 'name'\n  | 'required'\n  | 'disabled'\n  | 'error'\n  | 'small'\n  | 'large'\n  | 'width'\n  | 'onInput'\n  | 'onKeyDown'\n  | 'borderless'\n>;\n\ntype Props = {\n  /**\n   * コンボボックスに表示するためのデータを取得するメソッドです。\n   * 検索やページネーションのタイミングで呼び出されます。\n   */\n  fetchItems: (params: FetchParams) => Promise<any>;\n  /**\n   * APIのローディング状態です。trueの間はコンボボックス上にスピナーが表示されます。\n   */\n  isLoading: boolean;\n  /**\n   * ページネーションのためのメタ情報です。\n   */\n  meta: ApiMetaData;\n  /**\n   * 新規登録時のハンドラです。新規登録を表示するか否かの判定も兼ねています。\n   */\n  createNewItem?: (fieldValue: string) => void;\n  value?: SingleComboBoxOption;\n  options: SingleComboBoxOption[];\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large';\n  emptyMessage?: React.ReactNode;\n  onChange?: (option?: SingleComboBoxOption) => void;\n  onBlur?: (\n    e: React.FormEvent,\n    fetchParams: FetchParams,\n    value?: SingleComboBoxOption\n  ) => void;\n  onFocus?: (\n    e: React.FormEvent,\n    fetchParams: FetchParams,\n    isFieldChanged: boolean,\n    value?: SingleComboBoxOption\n  ) => void;\n} & PropsFromTextField &\n  MarginClassProps &\n  CommonProps;\n\nfunction ApiComboBoxInner(\n  props: Props,\n  ref?: React.Ref<HTMLInputElement> | React.MutableRefObject<HTMLInputElement>\n): React.ReactElement {\n  const {\n    value,\n    options,\n    id,\n    label,\n    labelledby,\n    placeholder,\n    name,\n    required,\n    disabled,\n    error,\n    small,\n    large,\n    borderless,\n    width,\n    listWidth,\n    emptyMessage,\n    isLoading,\n    onChange,\n    onFocus,\n    onBlur,\n    onInput,\n    onKeyDown,\n    fetchItems,\n    meta: { currentPage, totalPages },\n    createNewItem,\n  } = props;\n\n  const uniqueId = useUniqueId('vb-comboBox');\n  const {\n    fieldValue,\n    isLoadingMore,\n    isOpen,\n    listOptionsRef,\n    loadMore,\n    onFieldBlur,\n    onFieldChange,\n    onFieldFocus,\n    onFieldKeyDown,\n    onSelectOption,\n    selectedIndex,\n    selectedOptionRef,\n  } = useApiComboBoxInternal({\n    createNewItem,\n    currentPage,\n    fetchItems,\n    onBlur,\n    onChange,\n    onFocus,\n    onKeyDown,\n    options,\n    totalPages,\n    value,\n  });\n  const listBoxClassName = createListBoxClassName({ isOpen, listWidth, width });\n  const { textFieldRef, listOptionsMaxHeight } = useAdjustListPosition(\n    isOpen,\n    ref\n  );\n  const hasNextPages = currentPage < totalPages;\n  const listIsEmpty = !isLoading && options.length === 0;\n  const isLoadingAll = isLoading && !isLoadingMore;\n\n  return (\n    <div {...commonProps(pickCommonDataProps(props), 'vb-comboBox')}>\n      <TextField\n        ref={textFieldRef}\n        value={fieldValue}\n        id={id}\n        label={label}\n        labelledby={labelledby}\n        name={name}\n        required={required}\n        disabled={disabled}\n        placeholder={placeholder}\n        error={error}\n        small={small}\n        large={large}\n        width={width}\n        borderless={borderless}\n        onBlur={onFieldBlur}\n        onFocus={onFieldFocus}\n        onChange={onFieldChange}\n        onInput={onInput}\n        onKeyDown={onFieldKeyDown}\n        role=\"combobox\"\n        autoComplete=\"off\"\n        aria-expanded={isOpen}\n        aria-autocomplete=\"list\"\n        aria-controls={`${uniqueId}__listbox`}\n        aria-haspopup=\"listbox\"\n        aria-activedescendant={\n          selectedIndex >= 0 && isOpen\n            ? `${uniqueId}__listOption__${selectedIndex}`\n            : undefined\n        }\n        aria-describedby={`${uniqueId}__description`}\n        aria-atomic={true}\n        IconComponent={MdExpandMore}\n        loading={isLoadingAll}\n        {...pickFunctionalMarginProps(props)}\n        {...pickMarginClassProps(props)}\n      />\n      <VisuallyHidden id={`${uniqueId}__description`}>\n        上下キーで選択、Enterキーで確定できます\n      </VisuallyHidden>\n      <ScrollPortal\n        isActive={isOpen}\n        onOverflow={() => textFieldRef.current && textFieldRef.current.blur()}\n        positionalBaseElement={textFieldRef.current}\n        data-masking={props['data-masking']}\n      >\n        <div\n          id={`${uniqueId}__listbox`}\n          className={listBoxClassName}\n          role=\"listbox\"\n          tabIndex={-1}\n          onMouseDown={(e: React.MouseEvent): void => e.preventDefault()} // blur抑止のため、やむをえずonMouseDownを書いてる\n        >\n          <PopupBase paddingSize=\"small\">\n            <MarginBase ma={-1}>\n              <div\n                className=\"vb-comboBox__listOptions\"\n                ref={listOptionsRef}\n                style={{ maxHeight: listOptionsMaxHeight }}\n              >\n                {!listIsEmpty ? (\n                  options.map((option: InternalComboBoxOption, i: number) => {\n                    const isSelected = i === selectedIndex;\n                    return (\n                      /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n                      <div\n                        id={`${uniqueId}__listOption__${i}`}\n                        key={i}\n                        className={vbClassNames('vb-comboBox__listOption', {\n                          modifier: {\n                            selected: isSelected,\n                            disabled: option.disabled,\n                          },\n                        })}\n                        role=\"option\"\n                        aria-selected={!(option.disabled || !isSelected)}\n                        aria-disabled={option.disabled}\n                        tabIndex={-1}\n                        onClick={(): void => onSelectOption(option)}\n                        ref={isSelected ? selectedOptionRef : undefined}\n                      >\n                        <ItemLabel fieldValue={fieldValue} option={option} />\n                        {option.subLabel && (\n                          <div className=\"vb-comboBox__listOptionSubLabel\">\n                            {option.subLabel}\n                          </div>\n                        )}\n                      </div>\n                    );\n                  })\n                ) : isLoadingAll ? null : (\n                  <div className=\"vb-comboBox__emptyMessage\">\n                    <Note>{emptyMessage || '該当する候補はありません'}</Note>\n                  </div>\n                )}\n\n                {isLoadingMore ? (\n                  <div className=\"vb-comboBox__spinner\">\n                    <InlineSpinner isLoading />\n                  </div>\n                ) : (\n                  !isLoading &&\n                  !listIsEmpty &&\n                  hasNextPages && (\n                    <LoadMoreItem\n                      fieldValue={fieldValue}\n                      isSelected={selectedIndex === options.length}\n                      loadMore={loadMore}\n                      selectedOptionRef={selectedOptionRef}\n                      uniqueId={uniqueId}\n                    />\n                  )\n                )}\n                {createNewItem &&\n                  !options.find(({ label }) => label === fieldValue) && (\n                    <CreateNewItem\n                      createNewItem={createNewItem}\n                      fieldValue={fieldValue}\n                      isSelected={\n                        selectedIndex ===\n                        options.length + (hasNextPages ? 1 : 0)\n                      }\n                      selectedOptionRef={selectedOptionRef}\n                      uniqueId={uniqueId}\n                    />\n                  )}\n              </div>\n            </MarginBase>\n          </PopupBase>\n        </div>\n      </ScrollPortal>\n    </div>\n  );\n}\n\n/**\n * SingleComboBox に API による検索とページネーションの機能を付与したコンポーネントです。\n *\n * * リソース管理のため、基本的には`useApiComboBox`を併用してください\n * * リスト内の項目が固定されている場合は`SingleComboBox`を使用してください。\n */\nconst ApiComboBox = React.forwardRef(ApiComboBoxInner);\nexport default ApiComboBox;\n"
  },
  {
    "path": "src/lv2/combobox/ApiMultiComboBox.stories.tsx",
    "content": "/* eslint-disable react/display-name */\nimport * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport ApiMultiComboBox, {\n  MultiComboBoxOption,\n  useApiMultiComboBox,\n} from './ApiMultiComboBox';\nimport { FormControlGroup, TextField } from '../..';\nimport { FormControl } from '..';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport Button from '../../lv1/buttons/Button';\n\ntype Item = {\n  id: number;\n  name: string;\n  shortcut?: string;\n  shortcutNum?: string;\n  disabled?: boolean;\n  other_1?: string;\n  other_2?: string;\n};\n\nconst createMockApi = (suffix: string) => ({\n  async fetch({ name, page }: { name: string; page: number }) {\n    // eslint-disable-next-line compat/compat\n    await new Promise((resolve) => setTimeout(resolve, 3000));\n\n    const limit = 30;\n    const items = Array(limit)\n      .fill(undefined)\n      .map((_, i) => {\n        const baseNum = (page - 1) * limit + i + 1;\n        return {\n          id: baseNum,\n          name: `${suffix}_${baseNum}`,\n          shortcut: `hinmoku_${baseNum + 1}`,\n          shortcutNum: `品目${baseNum + 2}`,\n          other_1: `その他の項目A_${baseNum}`,\n          other_2: `その他の項目B_${baseNum}`,\n        };\n      }) as Item[];\n\n    return {\n      items: name\n        ? items.filter(\n            (item) =>\n              item.name.indexOf(name) > -1 ||\n              (item.shortcut && item.shortcut.indexOf(name) > -1) ||\n              (item.shortcutNum && item.shortcutNum.indexOf(name) > -1)\n          )\n        : items,\n      meta: {\n        limit,\n        currentPage: page,\n        totalPages: 100,\n        totalCount: 498,\n      },\n    };\n  },\n});\n\nexport default {\n  component: ApiMultiComboBox,\n};\n\nexport const ApiMultiComboBoxComponent = () => {\n  const [values, setValues] = React.useState<MultiComboBoxOption[]>();\n  const items = useApiMultiComboBox<Item>({\n    fetchItems: createMockApi('item').fetch,\n    createOptions: (items) =>\n      items.map(\n        ({ id, name, shortcut, shortcutNum }): MultiComboBoxOption => ({\n          id,\n          label: name,\n          keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n          disabled: id % 10 === 0,\n        })\n      ),\n  });\n\n  return (\n    <ApiMultiComboBox\n      id={text('id', 'apimulticombobox-id', 'ApiMultiComboBox')}\n      values={values}\n      createNewItem={(fieldValue: string) => {\n        if (!fieldValue) return;\n        setValues((values) => [\n          ...(values ?? []),\n          { id: 10000, label: fieldValue },\n        ]);\n      }}\n      onChange={(options) => {\n        setValues(options);\n      }}\n      {...items}\n      borderless={boolean('borderless', false, 'ApiMultiComboBox')}\n      {...commonKnobs()}\n    />\n  );\n};\n\nconst useFetchItemA = () => {\n  return useApiMultiComboBox<Item>({\n    fetchItems: createMockApi('item_A').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n};\n\nconst useFetchItemB = () => {\n  return useApiMultiComboBox<Item>({\n    fetchItems: createMockApi('item_B').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n};\n\nconst useFetchItemC = () => {\n  return useApiMultiComboBox<Item>({\n    fetchItems: createMockApi('item_C').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n};\n\nconst ComboBoxLine = ({\n  id,\n  itemA,\n  itemB,\n  itemC,\n}: {\n  id: number;\n  itemA: ReturnType<typeof useFetchItemA>;\n  itemB: ReturnType<typeof useFetchItemB>;\n  itemC: ReturnType<typeof useFetchItemC>;\n}) => {\n  const [valuesA, setValuesA] = React.useState<MultiComboBoxOption[]>();\n  const [valuesB, setValuesB] = React.useState<MultiComboBoxOption[]>();\n  const [valuesC, setValuesC] = React.useState<MultiComboBoxOption[]>();\n\n  return (\n    <FormControlGroup key={id} mt={id > 1 ? 1 : undefined}>\n      <FormControl label=\"id\">\n        <TextField value={`${id}`} width=\"xSmall\" disabled />\n      </FormControl>\n      <FormControl label=\"item_A\" ml={1}>\n        <ApiMultiComboBox\n          values={valuesA}\n          onChange={(opt) => {\n            setValuesA(opt);\n          }}\n          {...itemA}\n        />\n      </FormControl>\n      <FormControl label=\"item_B\" ml={1}>\n        <ApiMultiComboBox\n          values={valuesB}\n          onChange={(opt) => {\n            setValuesB(opt);\n          }}\n          {...itemB}\n        />\n      </FormControl>\n      <FormControl label=\"item_C\" ml={1}>\n        <ApiMultiComboBox\n          values={valuesC}\n          onChange={(opt) => {\n            setValuesC(opt);\n          }}\n          {...itemC}\n        />\n      </FormControl>\n    </FormControlGroup>\n  );\n};\n\nexport const MultiLineAndRow = () => {\n  const itemA = useFetchItemA();\n  const itemB = useFetchItemB();\n  const itemC = useFetchItemC();\n\n  return Array(5)\n    .fill(undefined)\n    .map((_, i) => (\n      <ComboBoxLine\n        key={i}\n        id={i + 1}\n        itemA={itemA}\n        itemB={itemB}\n        itemC={itemC}\n      />\n    ));\n};\n\nexport const SingleSelect = () => {\n  const [values, setValues] = React.useState<MultiComboBoxOption[]>();\n  const items = useApiMultiComboBox<Item>({\n    fetchItems: createMockApi('item').fetch,\n    createOptions: (items) =>\n      items.map(({ id, name, shortcut, shortcutNum }) => ({\n        id,\n        label: name,\n        keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n      })),\n  });\n\n  return (\n    <ApiMultiComboBox\n      values={values}\n      createNewItem={(fieldValue: string) => {\n        if (!fieldValue) return;\n        setValues((values) => [\n          ...(values ?? []),\n          { id: 10000, label: fieldValue },\n        ]);\n      }}\n      onChange={(options) => {\n        setValues(options);\n      }}\n      {...items}\n      borderless={boolean('borderless', false, 'ApiMultiComboBox')}\n      maxSelectionCount={1}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const ManualFocus = () => {\n  const ref = React.useRef<HTMLInputElement>(null);\n  const onClick = () => {\n    ref.current?.focus();\n  };\n  const [values, setValues] = React.useState<MultiComboBoxOption[]>();\n  const items = useApiMultiComboBox<Item>({\n    fetchItems: createMockApi('item').fetch,\n    createOptions: (items) =>\n      items.map(\n        ({ id, name, shortcut, shortcutNum }): MultiComboBoxOption => ({\n          id,\n          label: name,\n          keywords: [shortcut, shortcutNum].filter((v) => v) as string[],\n          disabled: id % 10 === 0,\n        })\n      ),\n  });\n\n  return (\n    <>\n      <Button mr={1} onClick={onClick}>\n        フォーカスを当てる\n      </Button>\n      <ApiMultiComboBox\n        ref={ref}\n        id={text('id', 'apimulticombobox-id', 'ApiMultiComboBox')}\n        values={values}\n        createNewItem={(fieldValue: string) => {\n          if (!fieldValue) return;\n          setValues((values) => [\n            ...(values ?? []),\n            { id: 10000, label: fieldValue },\n          ]);\n        }}\n        onChange={(options) => {\n          setValues(options);\n        }}\n        {...items}\n        borderless={boolean('borderless', false, 'ApiMultiComboBox')}\n        {...commonKnobs()}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/combobox/ApiMultiComboBox.tsx",
    "content": "import * as React from 'react';\nimport { PopupBase, Note, InlineSpinner } from '../../lv1';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport { LoadMoreItem } from './LoadMoreItem';\nimport { CreateNewItem } from './CreateNewItem';\nimport { ItemLabel } from './ItemLabel';\nimport { PropsFromTextField } from './MultiComboBox';\nimport { MultiComboBoxField } from './MultiComboBoxField';\nimport {\n  ApiMetaData,\n  createListBoxClassName,\n  FetchParams,\n  MultiComboBoxOption,\n  useAdjustListPosition,\n} from './hooks';\nimport { useApiMultiComboBoxInternal } from './hooks/apiMultiComboBox';\nimport vbClassNames from '../../utilities/vbClassNames';\n\nexport { useApiMultiComboBox } from './hooks/apiMultiComboBox';\nexport type { ApiMetaData } from './hooks';\nexport type { MultiComboBoxOption } from './hooks';\n\nconst baseClassName = 'vb-multiComboBox';\n\ntype Props = {\n  /**\n   * コンボボックスに表示するためのデータを取得するメソッドです。\n   * 検索やページネーションのタイミングで呼び出されます。\n   */\n  fetchItems: (params: FetchParams) => Promise<any>;\n  /**\n   * APIのローディング状態です。trueの間はコンボボックス上にスピナーが表示されます。\n   */\n  isLoading: boolean;\n  /**\n   * ページネーションのためのメタ情報です。\n   */\n  meta: ApiMetaData;\n  /**\n   * 新規登録時のハンドラです。新規登録を表示するか否かの判定も兼ねています。\n   */\n  createNewItem?: (fieldValue: string) => void;\n  values?: MultiComboBoxOption[];\n  options: MultiComboBoxOption[];\n  maxSelectionCount?: number;\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large';\n  emptyMessage?: string;\n  onChange?: (values: MultiComboBoxOption[]) => void;\n  onBlur?: (\n    e: React.FormEvent,\n    fetchParams: FetchParams,\n    values?: MultiComboBoxOption[]\n  ) => void;\n  onFocus?: () => void;\n} & Omit<PropsFromTextField, 'onFocus' | 'onBlur'> &\n  CommonProps;\n\nfunction ApiMultiComboBoxInner(\n  props: Props,\n  ref?: React.Ref<HTMLInputElement> | React.MutableRefObject<HTMLInputElement>\n): React.ReactElement {\n  const {\n    fetchItems,\n    isLoading,\n    meta: { currentPage, totalPages },\n    createNewItem,\n    values = [],\n    options,\n    maxSelectionCount,\n    emptyMessage,\n    listWidth,\n    id,\n    label,\n    labelledby,\n    name,\n    required,\n    disabled,\n    width,\n    error,\n    borderless,\n    onBlur,\n    onFocus,\n    onInput,\n    onKeyDown,\n    onChange,\n  } = props;\n\n  const uniqueId = useUniqueId(id || baseClassName);\n  const {\n    filteredOptions,\n    isLoadingMore,\n    loadMore,\n    fieldValue: textFieldValue,\n    isOpen,\n    setOpen,\n    selectedIndex,\n    listOptionsRef,\n    selectedOptionRef,\n    borderRef,\n    onFieldBlur,\n    onFieldChange,\n    onFieldFocus,\n    onFieldKeyDown,\n    onSelectOption,\n    onRemoveOption,\n    onClickNewItem,\n  } = useApiMultiComboBoxInternal({\n    createNewItem,\n    currentPage,\n    fetchItems,\n    onBlur,\n    onChange,\n    onFocus,\n    onKeyDown,\n    options,\n    totalPages,\n    values,\n    maxSelectionCount,\n  });\n\n  const listBoxClassName = createListBoxClassName({ isOpen, listWidth, width });\n  const { textFieldRef, listOptionsMaxHeight } = useAdjustListPosition(\n    isOpen,\n    ref\n  );\n  const hasNextPages = currentPage < totalPages;\n  const listIsEmpty = !isLoading && filteredOptions.length === 0;\n  const isLoadingAll = isLoading && !isLoadingMore;\n\n  React.useEffect(() => {\n    if (maxSelectionCount) {\n      if (\n        document.activeElement?.isSameNode(textFieldRef.current) &&\n        values.length < maxSelectionCount\n      ) {\n        setOpen(true);\n      }\n      if (values.length >= maxSelectionCount) {\n        setOpen(false);\n      }\n    }\n  }, [values, maxSelectionCount, textFieldRef, setOpen]);\n\n  return (\n    <span\n      {...commonProps(props, baseClassName, {\n        widthXSmall: width === 'xSmall',\n        widthSmall: width === 'small',\n        widthMedium: width === 'medium' || !width,\n        widthLarge: width === 'large',\n        widthFull: width === 'full',\n      })}\n    >\n      <MultiComboBoxField\n        baseClassName={baseClassName}\n        originalId={id}\n        uniqueId={uniqueId}\n        withBorder={!borderless}\n        borderRef={borderRef}\n        textFieldRef={textFieldRef}\n        selectedIndex={selectedIndex}\n        isOpen={isOpen}\n        values={values}\n        maxSelectionCount={maxSelectionCount}\n        textFieldValue={textFieldValue}\n        onBlur={onFieldBlur}\n        onChange={onFieldChange}\n        onFocus={onFieldFocus}\n        onKeyDown={onFieldKeyDown}\n        onRemoveOption={onRemoveOption}\n        name={name}\n        width={width}\n        disabled={disabled}\n        error={error}\n        required={required}\n        onInput={onInput}\n        label={label}\n        labelledby={labelledby}\n      />\n      <ScrollPortal\n        isActive={isOpen}\n        onOverflow={() => textFieldRef.current && textFieldRef.current.blur()}\n        positionalBaseElement={borderRef.current || undefined}\n        data-masking={props['data-masking']}\n      >\n        <div // eslint-disable-line jsx-a11y/no-static-element-interactions\n          id={`${uniqueId}__listbox`}\n          className={listBoxClassName}\n          role=\"listbox\"\n          tabIndex={-1}\n          onMouseDown={(e: React.MouseEvent): void => e.preventDefault()} // blur抑止のため、やむをえずonMouseDownを書いてる\n        >\n          <PopupBase paddingSize=\"zero\">\n            <div\n              className=\"vb-comboBox__listOptions\"\n              ref={listOptionsRef}\n              style={{ maxHeight: listOptionsMaxHeight }}\n            >\n              {isLoadingAll ? null : listIsEmpty ? (\n                <div className=\"vb-comboBox__emptyMessage\">\n                  <Note>{emptyMessage || '該当する候補はありません'}</Note>\n                </div>\n              ) : (\n                filteredOptions.map((option, i) => {\n                  const isSelected = i === selectedIndex;\n                  return (\n                    /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n                    <div\n                      id={`${uniqueId}__listOption__${i}`}\n                      key={i}\n                      className={vbClassNames('vb-comboBox__listOption', {\n                        modifier: {\n                          selected: isSelected,\n                          disabled: option.disabled,\n                        },\n                      })}\n                      role=\"option\"\n                      aria-selected={!(option.disabled || !isSelected)}\n                      aria-disabled={option.disabled}\n                      tabIndex={-1}\n                      onClick={(): void => onSelectOption(option)}\n                      ref={isSelected ? selectedOptionRef : undefined}\n                    >\n                      <ItemLabel fieldValue={textFieldValue} option={option} />\n                      {option.type && (\n                        <div className=\"vb-comboBox__listOptionSubLabel\">\n                          {option.type}\n                        </div>\n                      )}\n                    </div>\n                  );\n                })\n              )}\n              {isLoading ? (\n                <div className=\"vb-comboBox__spinner\">\n                  <InlineSpinner isLoading />\n                </div>\n              ) : (\n                hasNextPages && (\n                  <LoadMoreItem\n                    fieldValue={textFieldValue}\n                    isSelected={selectedIndex === filteredOptions.length}\n                    loadMore={loadMore}\n                    selectedOptionRef={selectedOptionRef}\n                    uniqueId={uniqueId}\n                  />\n                )\n              )}\n              {createNewItem &&\n                ![...values, ...filteredOptions].find(\n                  ({ label }) => label === textFieldValue\n                ) && (\n                  <CreateNewItem\n                    createNewItem={onClickNewItem}\n                    fieldValue={textFieldValue}\n                    isSelected={\n                      selectedIndex ===\n                      filteredOptions.length + (hasNextPages ? 1 : 0)\n                    }\n                    selectedOptionRef={selectedOptionRef}\n                    uniqueId={uniqueId}\n                  />\n                )}\n            </div>\n          </PopupBase>\n        </div>\n      </ScrollPortal>\n    </span>\n  );\n}\n\n/**\n * `MultiComboBox` に API による検索とページネーションの機能を付与したコンポーネントです。使い方・使い分けについては `MultiComboBox` も参照してください\n *\n * * リソース管理のため、基本的には`useApiMultiComboBox`を併用してください\n * * リスト内の項目が固定されている場合は`MultiComboBox`を使用してください。\n */\nconst ApiMultiComboBox = React.forwardRef(ApiMultiComboBoxInner);\nexport default ApiMultiComboBox;\n"
  },
  {
    "path": "src/lv2/combobox/CreateNewItem.tsx",
    "content": "import * as React from 'react';\nimport { MdAdd } from 'react-icons/md';\nimport vbClassName from '../../utilities/vbClassNames';\n\ntype Props = {\n  createLabel?: (fieldValue: string) => React.ReactNode;\n  createNewItem: (fieldValue: string) => void;\n  fieldValue: string;\n  isSelected: boolean;\n  selectedOptionRef: React.RefObject<HTMLDivElement>;\n  uniqueId: string;\n};\n\nexport const CreateNewItem = ({\n  createLabel,\n  createNewItem,\n  fieldValue,\n  isSelected,\n  selectedOptionRef,\n  uniqueId,\n}: Props) => (\n  /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n  <div\n    id={`${uniqueId}__listOption__createNew`}\n    className={`vb-comboBox__listOption ${\n      isSelected ? 'vb-comboBox__listOption--selected' : ''\n    }`}\n    role=\"option\"\n    aria-selected={isSelected}\n    tabIndex={-1}\n    onClick={() => createNewItem(fieldValue)}\n    ref={isSelected ? selectedOptionRef : undefined}\n  >\n    <div\n      className={vbClassName(\n        `vb-comboBox__fixedItem ${\n          isSelected ? 'vb-comboBox__fixedItem--selected' : ''\n        }`,\n        {\n          modifier: { add: true },\n        }\n      )}\n    >\n      <MdAdd\n        className={vbClassName('vb-comboBox__fixedItemIcon', {\n          modifier: { more: true },\n        })}\n        focusable={false}\n      />\n      {createLabel\n        ? createLabel(fieldValue)\n        : fieldValue\n        ? `${fieldValue}（新規登録）`\n        : '新規登録'}\n    </div>\n  </div>\n);\n"
  },
  {
    "path": "src/lv2/combobox/ItemLabel.tsx",
    "content": "import * as React from 'react';\nimport { MdAdd } from 'react-icons/md';\nimport vbClassName from '../../utilities/vbClassNames';\nimport type { InternalComboBoxOption, FixedItems } from './hooks';\nimport type { TrailingItem } from './hooks/singleComboBox';\n\nexport const ItemLabel = ({\n  fixedItemOption,\n  fieldValue,\n  option,\n  trailingItem,\n}: {\n  fixedItemOption?: {\n    fixedItems: FixedItems;\n    isSelected: boolean;\n  };\n  fieldValue: string;\n  option: InternalComboBoxOption;\n  trailingItem?: TrailingItem;\n}) => {\n  if (option.isTrailingItem && trailingItem) {\n    return <>{trailingItem.render(fieldValue)}</>;\n  }\n\n  if (fixedItemOption) {\n    const { fixedItems, isSelected } = fixedItemOption;\n    if (option.fixedItemType === 'more') {\n      return (\n        <div\n          className={vbClassName('vb-comboBox__fixedItem', {\n            modifier: { more: true, selected: isSelected },\n          })}\n        >\n          {fixedItems[0].label ? fixedItems[0].label(fieldValue) : 'もっと見る'}\n        </div>\n      );\n    } else if (option.fixedItemType === 'add' && fixedItems[1]) {\n      return (\n        <div\n          className={vbClassName('vb-comboBox__fixedItem', {\n            modifier: { add: true, selected: isSelected },\n          })}\n        >\n          <MdAdd\n            className={vbClassName('vb-comboBox__fixedItemIcon', {\n              modifier: { more: true },\n            })}\n            focusable={false}\n          />\n          {fixedItems[1].label\n            ? fixedItems[1].label(fieldValue)\n            : `${fieldValue}（新規登録）`}\n        </div>\n      );\n    }\n  }\n\n  return <div className=\"vb-comboBox__listOptionLabel\">{option.label}</div>;\n};\n"
  },
  {
    "path": "src/lv2/combobox/LoadMoreItem.tsx",
    "content": "import * as React from 'react';\nimport vbClassName from '../../utilities/vbClassNames';\n\ntype Props = {\n  createLabel?: (fieldValue: string) => string;\n  fieldValue: string;\n  isSelected: boolean;\n  loadMore: () => void;\n  selectedOptionRef: React.RefObject<HTMLDivElement>;\n  uniqueId: string;\n};\n\nexport const LoadMoreItem = ({\n  createLabel,\n  fieldValue,\n  isSelected,\n  loadMore,\n  selectedOptionRef,\n  uniqueId,\n}: Props) => (\n  /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n  <div\n    id={`${uniqueId}__listOption__loadMore`}\n    className={`vb-comboBox__listOption ${\n      isSelected ? 'vb-comboBox__listOption--selected' : ''\n    }`}\n    role=\"option\"\n    aria-selected={isSelected}\n    tabIndex={-1}\n    onClick={loadMore}\n    ref={isSelected ? selectedOptionRef : undefined}\n  >\n    <div\n      className={vbClassName(\n        `vb-comboBox__fixedItem ${\n          isSelected ? 'vb-comboBox__fixedItem--selected' : ''\n        }`,\n        {\n          modifier: { more: true },\n        }\n      )}\n    >\n      {createLabel ? createLabel(fieldValue) : 'もっと見る'}\n    </div>\n  </div>\n);\n"
  },
  {
    "path": "src/lv2/combobox/MultiComboBox.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { FormControl } from '..';\nimport { MultiComboBoxOption } from './hooks';\nimport { MultiComboBox } from './MultiComboBox';\nimport { number, select, text } from '@storybook/addon-knobs';\n\nexport default {\n  component: MultiComboBox,\n};\n\nexport const MultiComboBoxComponent = () => {\n  const [values, setValues] = React.useState<MultiComboBoxOption[]>([]);\n\n  return (\n    <>\n      <MultiComboBox\n        id={text('id', 'multicombobox-id', 'MultiComboBox')}\n        values={values}\n        onChange={(v) => setValues(v)}\n        options={[\n          {\n            id: 1,\n            type: '取引先',\n            label: 'freee株式会社',\n            keywords: [\n              'ふりーかぶしきがいしゃ',\n              'フリーカブシキガイシャ',\n              'freee',\n            ],\n            color: 'RE',\n          },\n          {\n            id: 2,\n            type: '取引先',\n            label: '株式会社サイトビジット',\n            keywords: ['さいとびじっと', 'サイトビジット', 'SiGHTViSiT'],\n            color: 'RE',\n          },\n          {\n            id: 3,\n            type: 'メモタグ',\n            label: '昼ごはん',\n            keywords: ['ひるごはん', 'ヒルゴハン', 'lunch', 'hirugohan'],\n            color: 'YE',\n          },\n          {\n            id: 4,\n            type: 'メモタグ',\n            label: '晩ごはん',\n            keywords: ['ばんごはん', 'バンゴハン', 'dinner', 'yorugohan'],\n            color: 'YE',\n          },\n          {\n            id: 5,\n            type: 'メモタグ',\n            label: '晩ごはん2',\n            keywords: ['ばんごはん2', 'バンゴハンツー', 'dinner', 'yorugohan'],\n            color: 'YE',\n          },\n          {\n            id: 6,\n            type: 'メモタグ',\n            label: '晩ごはん3',\n            keywords: [\n              'ばんごはん3',\n              'バンゴハンスリー',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 7,\n            type: 'メモタグ',\n            label: '晩ごはん4',\n            keywords: [\n              'ばんごはん4',\n              'バンゴハンフォー',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 8,\n            type: 'メモタグ',\n            label: '晩ごはん5',\n            keywords: [\n              'ばんごはん5',\n              'バンゴハンファイブ',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 9,\n            type: 'メモタグ',\n            label: '晩ごはん6',\n            keywords: [\n              'ばんごはん6',\n              'バンゴハンシックス',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 10,\n            type: 'メモタグ',\n            label: '晩ごはん7',\n            keywords: [\n              'ばんごはん7',\n              'バンゴハンセブン',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 11,\n            type: 'メモタグ',\n            label: '晩ごはん8',\n            keywords: [\n              'ばんごはん8',\n              'バンゴハンエイト',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 12,\n            type: 'メモタグ',\n            label: '晩ごはん9',\n            keywords: [\n              'ばんごはん9',\n              'バンゴハンナイン',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 13,\n            type: 'メモタグ',\n            label: '晩ごはん10',\n            keywords: ['ばんごはん10', 'バンゴハンテン', 'dinner', 'yorugohan'],\n            color: 'YE',\n          },\n          {\n            id: 14,\n            type: 'メモタグ',\n            label: '晩ごはん11',\n            keywords: [\n              'ばんごはん11',\n              'バンゴハンイレブン',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            id: 15,\n            type: 'メモタグ',\n            label: '晩ごはん12',\n            keywords: [\n              'ばんごはん12',\n              'バンゴハントゥエルブ',\n              'dinner',\n              'yorugohan',\n            ],\n            color: 'YE',\n          },\n          {\n            label: '海鮮助六',\n            type: 'メモタグ',\n            id: 16,\n            keywords: [\n              'かいせんすけろく',\n              'kaisensukeroku',\n              'さやか',\n              'sayaka',\n            ],\n            color: 'YE',\n          },\n          {\n            label: '助六',\n            type: 'メモタグ',\n            id: 17,\n            keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n            color: 'YE',\n          },\n          {\n            label: '助六',\n            type: 'メモタグ',\n            id: 18,\n            keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n            color: 'YE',\n          },\n        ]}\n        width={select(\n          'Width',\n          {\n            XSmall: 'xSmall',\n            Small: 'small',\n            Medium: 'medium',\n            Large: 'large',\n            Full: 'full',\n          },\n          'large',\n          'MultiComboBox'\n        )}\n        maxSelectionCount={number(\n          'maxSelectionCount',\n          0,\n          undefined,\n          'MultiComboBox'\n        )}\n        {...commonKnobs()}\n      />\n    </>\n  );\n};\n\nexport const SingleSelect = () => {\n  const options: MultiComboBoxOption[] = [\n    {\n      id: 1,\n      type: '取引先',\n      label: 'freee株式会社',\n      keywords: [\n        'ふりーかぶしきがいしゃ',\n        'フリーカブシキガイシャ',\n        'freee kabusikikaisha',\n      ],\n      color: 'RE',\n    },\n    {\n      id: 2,\n      type: '取引先',\n      label: '五反田食品株式会社',\n      keywords: [\n        'ごたんだしょくひんかぶしきがいしゃ',\n        'ゴタンダショクヒンカブシキガイシャ',\n        'gotanda shokuhin kabusikikaisha',\n      ],\n      color: 'RE',\n    },\n    {\n      id: 3,\n      type: '取引先',\n      label: '大崎インターナショナルデザイン株式会社',\n      keywords: [\n        'おおさきいんたーなしょなるでざいんかぶしきがいしゃ',\n        'オオサキインターナショナルデザインカブシキガイシャ',\n        'oosaki international design kabusikikaisha',\n      ],\n      color: 'RE',\n    },\n  ];\n  const [values, setValues] = React.useState<MultiComboBoxOption[]>([]);\n\n  return (\n    <FormControl fieldId=\"singleSelect\" label=\"単一選択\">\n      <MultiComboBox\n        id=\"singleSelect\"\n        values={values}\n        options={options}\n        onChange={(v) => setValues(v)}\n        maxSelectionCount={1}\n      />\n    </FormControl>\n  );\n};\n\nexport const MaxSelectionCount2 = () => {\n  const options: MultiComboBoxOption[] = [\n    {\n      id: 1,\n      type: '取引先',\n      label: 'freee株式会社',\n      keywords: [\n        'ふりーかぶしきがいしゃ',\n        'フリーカブシキガイシャ',\n        'freee kabusikikaisha',\n      ],\n      color: 'RE',\n    },\n    {\n      id: 2,\n      type: '取引先',\n      label: '五反田食品株式会社',\n      keywords: [\n        'ごたんだしょくひんかぶしきがいしゃ',\n        'ゴタンダショクヒンカブシキガイシャ',\n        'gotanda shokuhin kabusikikaisha',\n      ],\n      color: 'RE',\n    },\n    {\n      id: 3,\n      type: '取引先',\n      label: '大崎インターナショナルデザイン株式会社',\n      keywords: [\n        'おおさきいんたーなしょなるでざいんかぶしきがいしゃ',\n        'オオサキインターナショナルデザインカブシキガイシャ',\n        'oosaki international design kabusikikaisha',\n      ],\n      color: 'RE',\n    },\n  ];\n  const [values, setValues] = React.useState<MultiComboBoxOption[]>([]);\n\n  return (\n    <FormControl fieldId=\"maxSelectionCount2\" label=\"2つまで選べる\">\n      <MultiComboBox\n        id=\"maxSelectionCount2\"\n        values={values}\n        options={options}\n        onChange={(v) => setValues(v)}\n        maxSelectionCount={2}\n        width=\"large\"\n      />\n    </FormControl>\n  );\n};\n\nconst dummyOption: MultiComboBoxOption = {\n  id: 1,\n  type: '取引先',\n  label: 'freee株式会社',\n  keywords: ['ふりーかぶしきがいしゃ', 'フリーカブシキガイシャ', 'freee'],\n  color: 'RE',\n};\n\nexport const Error = () => {\n  return <MultiComboBox values={[dummyOption]} options={[dummyOption]} error />;\n};\n\nexport const Disabled = () => {\n  return (\n    <MultiComboBox values={[dummyOption]} options={[dummyOption]} disabled />\n  );\n};\n\nexport const LongOption = () => {\n  const options: MultiComboBoxOption[] = [\n    {\n      id: 1,\n      type: '長いテキスト',\n      label:\n        '寿限無寿限無五劫の擦り切れ海砂利水魚の水行末雲来末風来末喰う寝る処ところに住む処ところ藪柑子の藪柑子パイポパイポパイポのシューリンガンシューリンガングーリンダイグーリンダイのポンポコピーのポンポコナの長久命の長助',\n      color: 'RE',\n    },\n    {\n      id: 2,\n      type: '長いテキスト',\n      label:\n        'ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。広い門の下には、この男のほかに誰もいない。ただ、所々丹塗の剥げた、大きな円柱に、蟋蟀が一匹とまっている。羅生門が、朱雀大路にある以上は、この男のほかにも、雨やみをする市女笠や揉烏帽子が、もう二三人はありそうなものである。',\n      color: 'RE',\n    },\n  ];\n  const [values, setValues] = React.useState<MultiComboBoxOption[]>([\n    options[0],\n  ]);\n\n  return (\n    <MultiComboBox\n      values={values}\n      options={options}\n      onChange={(v) => setValues(v)}\n      width=\"large\"\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/combobox/MultiComboBox.tsx",
    "content": "import * as React from 'react';\nimport { PopupBase, Loading, Note } from '../../lv1';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport useUniqueId from '../../hooks/useUniqueId';\n\nimport {\n  createListBoxClassName,\n  MultiComboBoxOption,\n  useAdjustListPosition,\n  useMultiComboBox,\n} from './hooks';\nimport { ItemLabel } from './ItemLabel';\nimport { MultiComboBoxField, PropsFromTextField } from './MultiComboBoxField';\nimport vbClassNames from '../../utilities/vbClassNames';\nexport type { MultiComboBoxOption } from './hooks';\n\n// FIXME: これvibesの外に公開されているのおかしいのでexportやめたい。(型定義は MultiComboBoxFieldのファイルに移動してあるので、あとでこの行を消す)\nexport type { PropsFromTextField } from './MultiComboBoxField';\n\ntype Props = {\n  values?: MultiComboBoxOption[];\n  options: MultiComboBoxOption[];\n  /**\n   * 選択できる項目の最大数を指定します。無指定または `0` を指定した場合、いくつでも選択できるようになります\n   */\n  maxSelectionCount?: number;\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large';\n  emptyMessage?: string;\n  isLoading?: boolean;\n  onChange?: (values: MultiComboBoxOption[]) => void;\n} & PropsFromTextField &\n  CommonProps;\n\nconst baseClassName = 'vb-multiComboBox';\n\nconst MultiComboBoxInternal = (\n  {\n    values = [],\n    options,\n    isLoading,\n    emptyMessage,\n    listWidth,\n    id,\n    label,\n    labelledby,\n    name,\n    required,\n    disabled,\n    width,\n    error,\n    borderless,\n    onBlur,\n    onFocus,\n    onInput,\n    onKeyDown,\n    onChange,\n    maxSelectionCount,\n    ...props\n  }: Props,\n  ref: React.Ref<HTMLInputElement>\n) => {\n  const {\n    fieldValue: textFieldValue,\n    setFieldValue: setTextFieldValue,\n    isOpen,\n    setOpen,\n    selectedIndex,\n    setSelectedIndex,\n    borderRef,\n    selectedOptionRef,\n    listOptionsRef,\n    filteredOptions,\n    onSelectOption,\n    onRemoveOption,\n    handleKeyDown,\n  } = useMultiComboBox({\n    values,\n    options,\n    onChange,\n    onKeyDown,\n    maxSelectionCount,\n    alreadyFilteredByFieldValue: false,\n  });\n\n  const uniqueId = useUniqueId(id || baseClassName);\n  const { textFieldRef, listOptionsMaxHeight } = useAdjustListPosition(\n    isOpen,\n    ref\n  );\n  const listBoxClassName = createListBoxClassName({ isOpen, listWidth, width });\n\n  React.useEffect(() => {\n    if (maxSelectionCount) {\n      if (\n        document.activeElement?.isSameNode(textFieldRef.current) &&\n        values.length < maxSelectionCount\n      ) {\n        setOpen(true);\n      }\n      if (values.length >= maxSelectionCount) {\n        setOpen(false);\n      }\n    }\n  }, [values, maxSelectionCount, textFieldRef, setOpen]);\n\n  return (\n    <span\n      {...commonProps(props, baseClassName, {\n        widthXSmall: width === 'xSmall',\n        widthSmall: width === 'small',\n        widthMedium: width === 'medium' || !width,\n        widthLarge: width === 'large',\n        widthFull: width === 'full',\n      })}\n    >\n      <MultiComboBoxField\n        baseClassName={baseClassName}\n        originalId={id}\n        uniqueId={uniqueId}\n        withBorder={!borderless}\n        borderRef={borderRef}\n        textFieldRef={textFieldRef}\n        isOpen={isOpen}\n        values={values}\n        textFieldValue={textFieldValue}\n        selectedIndex={selectedIndex}\n        maxSelectionCount={maxSelectionCount}\n        onBlur={(e) => {\n          setOpen(false);\n          setTextFieldValue('');\n          if (onBlur) {\n            onBlur(e);\n          }\n        }}\n        onChange={(e) => {\n          setTextFieldValue(e.target.value);\n          setSelectedIndex(0);\n        }}\n        onFocus={(e) => {\n          (!maxSelectionCount || values.length < maxSelectionCount) &&\n            setOpen(true);\n          if (onFocus) {\n            onFocus(e);\n          }\n        }}\n        onKeyDown={(e) => {\n          handleKeyDown(e);\n        }}\n        onRemoveOption={onRemoveOption}\n        name={name}\n        width={width}\n        disabled={disabled}\n        error={error}\n        required={required}\n        onInput={onInput}\n        label={label}\n        labelledby={labelledby}\n      />\n      <ScrollPortal\n        isActive={isOpen}\n        onOverflow={() => textFieldRef.current && textFieldRef.current.blur()}\n        positionalBaseElement={borderRef.current || undefined}\n        data-masking={props['data-masking']}\n      >\n        <div // eslint-disable-line jsx-a11y/no-static-element-interactions\n          id={`${uniqueId}__listbox`}\n          className={listBoxClassName}\n          role=\"listbox\"\n          tabIndex={-1}\n          onMouseDown={(e: React.MouseEvent): void => e.preventDefault()} // blur抑止のため、やむをえずonMouseDownを書いてる\n        >\n          <PopupBase paddingSize=\"zero\">\n            <Loading isLoading={!!isLoading}>\n              {filteredOptions.length > 0 ? (\n                <div\n                  className=\"vb-comboBox__listOptions\"\n                  ref={listOptionsRef}\n                  style={{ maxHeight: listOptionsMaxHeight }}\n                >\n                  {filteredOptions.map((option, i) => {\n                    const isSelected = i === selectedIndex;\n                    return (\n                      /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n                      <div\n                        id={`${uniqueId}__listOption__${i}`}\n                        key={i}\n                        className={vbClassNames('vb-comboBox__listOption', {\n                          modifier: {\n                            selected: isSelected,\n                            disabled: option.disabled,\n                          },\n                        })}\n                        role=\"option\"\n                        aria-selected={!(option.disabled || !isSelected)}\n                        aria-disabled={option.disabled}\n                        tabIndex={-1}\n                        onClick={(): void => onSelectOption(option)}\n                        ref={isSelected ? selectedOptionRef : undefined}\n                      >\n                        <ItemLabel\n                          fieldValue={textFieldValue}\n                          option={option}\n                        />\n                        {option.type && (\n                          <div className=\"vb-comboBox__listOptionSubLabel\">\n                            {option.type}\n                          </div>\n                        )}\n                      </div>\n                    );\n                  })}\n                </div>\n              ) : (\n                <div className=\"vb-comboBox__emptyMessage\">\n                  <Note>{emptyMessage || '該当する候補はありません'}</Note>\n                </div>\n              )}\n            </Loading>\n          </PopupBase>\n        </div>\n      </ScrollPortal>\n    </span>\n  );\n};\n\n/**\n * 複数の項目を選択したり、種別をまたいで選択したりできるコンボボックスです\n *\n * - 選択できる項目が単一で、種別をまたがない場合には `SingleComboBox` または `ApiComboBox` の使用も検討してください\n *   - 「他の場所で MultiComboBox を使用している種別である」など、単一種別・単一項目を選択であってもMultiComboBoxの使用が妥当だと判断できる場合は MultiComboBox を使用しても問題ありません\n * - 選択した候補には `RE` `OR` `YE` `YG` `GR` `BG` `PU` `GY` の色を指定できます。種別ごとに一貫した色を使用してください。\n * - API経由での項目の取得が必要となる場合は `ApiMultiComboBox` の使用も検討してください\n */\nexport const MultiComboBox = React.forwardRef(MultiComboBoxInternal);\n"
  },
  {
    "path": "src/lv2/combobox/MultiComboBoxField.tsx",
    "content": "import * as React from 'react';\nimport { MdExpandMore } from 'react-icons/md';\nimport { FocusHighlight, TextField, VisuallyHidden } from '../../lv1';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { MultiComboBoxOption } from './hooks';\nimport { MiniTag } from '../tagBox/MiniTag';\n\nexport type PropsFromTextField = Pick<\n  Parameters<typeof TextField>[0],\n  | 'id'\n  | 'label'\n  | 'labelledby'\n  | 'placeholder'\n  | 'name'\n  | 'required'\n  | 'disabled'\n  | 'error'\n  | 'width'\n  | 'onFocus'\n  | 'onBlur'\n  | 'onInput'\n  | 'onKeyDown'\n  | 'borderless'\n  // 以下未対応\n  // | 'small'\n  // | 'large'\n>;\n\ntype WithBorderProps = {\n  withBorder: boolean;\n  children: React.ReactNode;\n} & Pick<PropsFromTextField, 'width'>;\n\nconst WithBorder = ({ withBorder, width, children }: WithBorderProps) => {\n  return withBorder ? (\n    <FocusHighlight\n      cornerStyle=\"round\"\n      width={width === 'full' ? 'full' : 'fit-content'}\n    >\n      {children}\n    </FocusHighlight>\n  ) : (\n    <>{children}</>\n  );\n};\n\ntype Props = {\n  baseClassName: string;\n  originalId?: string;\n  uniqueId: string;\n  withBorder: boolean;\n  borderRef: React.RefObject<HTMLSpanElement>;\n  textFieldRef: React.MutableRefObject<HTMLInputElement>;\n  isOpen: boolean;\n  values?: MultiComboBoxOption[];\n  textFieldValue: string;\n  selectedIndex: number;\n  maxSelectionCount?: number;\n  onBlur: React.FocusEventHandler<HTMLInputElement>;\n  onChange: React.ChangeEventHandler<HTMLInputElement>;\n  onFocus: React.FocusEventHandler<HTMLInputElement>;\n  onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n  onRemoveOption: (option: MultiComboBoxOption) => void;\n} & Pick<\n  PropsFromTextField,\n  | 'name'\n  | 'width'\n  | 'disabled'\n  | 'error'\n  | 'required'\n  | 'onInput'\n  | 'label'\n  | 'labelledby'\n>;\n\n/**\n * MultiComboBoxで使う、TextFieldと選択内容（MiniTag）コンポーネント\n */\nexport const MultiComboBoxField = ({\n  baseClassName,\n  originalId,\n  uniqueId,\n  withBorder,\n  borderRef,\n  textFieldRef,\n  isOpen,\n  values = [],\n  textFieldValue,\n  selectedIndex,\n  onBlur,\n  onChange,\n  onFocus,\n  onKeyDown,\n  onRemoveOption,\n  name,\n  width,\n  disabled,\n  error,\n  required,\n  onInput,\n  label,\n  labelledby,\n  maxSelectionCount,\n}: Props) => {\n  return (\n    <WithBorder withBorder={withBorder} width={width}>\n      {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\n      <span\n        className={vbClassNames(`${baseClassName}__border`, {\n          modifier: {\n            widthXSmall: width === 'xSmall',\n            widthSmall: width === 'small',\n            widthMedium: width === 'medium' || !width,\n            widthLarge: width === 'large',\n            widthFull: width === 'full',\n            disabled,\n            error,\n          },\n        })}\n        onClick={() => textFieldRef.current?.focus()}\n        ref={borderRef}\n      >\n        <span className={`${baseClassName}__flex`}>\n          <VisuallyHidden autoRead>\n            {values.length > 0\n              ? `選択している項目: ${values.length}個${\n                  maxSelectionCount\n                    ? `(${maxSelectionCount}個まで選択できます)`\n                    : ''\n                }`\n              : '選択している項目はありません'}\n          </VisuallyHidden>\n          <span className={`${baseClassName}__list`} role=\"list\">\n            {values.map((v) => (\n              // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n              <span\n                className={`${baseClassName}__listItem`}\n                role=\"listitem\"\n                key={v.id}\n                onClick={(e) => {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  !disabled && textFieldRef.current?.focus();\n                }}\n              >\n                <MiniTag\n                  disabledRemoveButton={disabled}\n                  removable={true}\n                  onRemove={() => onRemoveOption(v)}\n                  type={v.type}\n                  removeButtonTabIndex={-1}\n                  color={v.color}\n                >\n                  {v.label}\n                </MiniTag>\n              </span>\n            ))}\n          </span>\n          <span\n            className={`${baseClassName}__field${\n              maxSelectionCount && values.length >= maxSelectionCount\n                ? ` ${baseClassName}__field--maxSelectionCountReached`\n                : ''\n            }`}\n          >\n            <TextField\n              id={originalId}\n              borderless\n              role=\"combobox\"\n              ref={textFieldRef}\n              value={textFieldValue}\n              label={label}\n              labelledby={labelledby}\n              name={name}\n              required={required}\n              disabled={disabled}\n              width=\"full\"\n              onChange={(e) => {\n                (!maxSelectionCount || values.length < maxSelectionCount) &&\n                  onChange(e);\n              }}\n              onInput={onInput}\n              onFocus={onFocus}\n              onBlur={onBlur}\n              onKeyDown={onKeyDown}\n              aria-expanded={isOpen}\n              aria-autocomplete=\"list\"\n              aria-controls={`${uniqueId}__listbox`}\n              aria-haspopup=\"listbox\"\n              aria-activedescendant={\n                selectedIndex >= 0 && isOpen\n                  ? `${uniqueId}__listOption__${selectedIndex}`\n                  : undefined\n              }\n              aria-describedby={`${uniqueId}__description`}\n              aria-atomic={true}\n              IconComponent={MdExpandMore}\n            />\n            <VisuallyHidden id={`${uniqueId}__description`}>\n              {maxSelectionCount && values.length >= maxSelectionCount\n                ? `${maxSelectionCount}個の項目を選択済みのため、これ以上追加できません`\n                : '上下キーで選択、Enterキーで確定できます'}\n            </VisuallyHidden>\n          </span>\n        </span>\n      </span>\n    </WithBorder>\n  );\n};\n"
  },
  {
    "path": "src/lv2/combobox/SingleComboBox.stories.tsx",
    "content": "/* eslint-disable react/display-name */\nimport * as React from 'react';\n\nimport { MdAdd } from 'react-icons/md';\nimport { actions, action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../../lv1/buttons/Button';\nimport MarginBase from '../../lv1/bases/MarginBase';\nimport MaterialIcon from '../../lv1/icons/MaterialIcon';\nimport ScrollableBase from '../../lv1/bases/ScrollableBase';\nimport TaskDialog from '../dialogs/TaskDialog';\nimport SingleComboBox, { SingleComboBoxOption } from './SingleComboBox';\nimport TagBox from '../tagBox/TagBox';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport WithBalloon from '../withBalloon/WithBalloon';\n\nconst handlers = actions({\n  onChange: 'onChange',\n  onInput: 'onInput',\n  onFocus: 'onFocus',\n  onBlur: 'onBlur',\n  onKeyDown: 'onKeyDown',\n});\n\nconst sampleOptions = [\n  { label: '杏', id: 0, keywords: ['あんず', 'anzu'] },\n  { label: '円', id: 1, keywords: ['まどか', 'madoka'] },\n  { label: '桜', id: 2, keywords: ['さくら', 'sakura'] },\n  { label: '巴', id: 3, keywords: ['ともえ', 'tomoe'] },\n  { label: '焔', id: 4, keywords: ['ほむら', 'homura'] },\n  { label: '渚', id: 5, keywords: ['なぎさ', 'nagisa'] },\n  {\n    label: '海鮮助六',\n    id: 6,\n    keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n  },\n  {\n    label: '助六',\n    id: 7,\n    keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n  },\n  {\n    label: '助六',\n    id: 8,\n    keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n  },\n  {\n    label:\n      'とてもながいとてもながいとてもながいせんたくしのとてもながいひょうじ',\n    id: 9,\n    keywords: [\n      'totemonagaitotemonagaitotemonagaisentakushinototemonagaihyouji',\n    ],\n  },\n  {\n    label: '[+}-@test.com',\n    id: 10,\n    keywords: ['[+}-@test.com'],\n  },\n  { label: 'VibesAlpha', id: 11, keywords: ['VibesAlpha'] },\n  { label: 'VibesBeta', id: 12, keywords: ['VibesBeta'] },\n  { label: 'Vibes', id: 13, keywords: ['Vibes'] },\n  { label: 'disabled', id: 14, disabled: true },\n];\n\nexport default {\n  component: SingleComboBox,\n};\n\nexport const SingleComboboxComponent = () => (\n  <SingleComboBox\n    options={sampleOptions}\n    required={boolean('Required', false, 'SingleComboBox')}\n    disabled={boolean('Disabled', false, 'SingleComboBox')}\n    error={boolean('Error', false, 'SingleComboBox')}\n    small={boolean('Small', false, 'SingleComboBox')}\n    large={boolean('Large', false, 'SingleComboBox')}\n    placeholder={text('placeholder', '', 'SingleComboBox')}\n    borderless={boolean('borderless', false, 'SingleComboBox')}\n    width={select(\n      'Width',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'SingleComboBox'\n    )}\n    listWidth={select(\n      'listWidth',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n      },\n      'medium',\n      'SingleComboBox'\n    )}\n    emptyMessage={text(\n      'EmptyMessage',\n      '該当する候補が見つかりません',\n      'SingleComboBox'\n    )}\n    isLoading={boolean('isLoading', false, 'SingleComboBox')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\nconst trailingItem = {\n  onSelect: action('trailing item selected'),\n  isVisible: (fieldValue: string) => !fieldValue,\n  render: () => (\n    <span>\n      <span style={{ verticalAlign: 'middle' }}>\n        <MaterialIcon IconComponent={MdAdd} />\n      </span>\n      もっと見る\n    </span>\n  ),\n};\n\nexport const WithTrailingItem = () => (\n  <SingleComboBox\n    options={sampleOptions}\n    required={boolean('Required', false, 'SingleComboBox')}\n    disabled={boolean('Disabled', false, 'SingleComboBox')}\n    error={boolean('Error', false, 'SingleComboBox')}\n    small={boolean('Small', false, 'SingleComboBox')}\n    placeholder={text('placeholder', '', 'SingleComboBox')}\n    width={select(\n      'Width',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'SingleComboBox'\n    )}\n    listWidth={select(\n      'listWidth',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n      },\n      'medium',\n      'SingleComboBox'\n    )}\n    emptyMessage={text(\n      'EmptyMessage',\n      '該当する候補が見つかりません',\n      'SingleComboBox'\n    )}\n    isLoading={boolean('isLoading', false, 'SingleComboBox')}\n    trailingItem={trailingItem}\n    {...handlers}\n  />\n);\n\nexport const InteractiveSample = () => {\n  const [val, setVal] = React.useState<SingleComboBoxOption | undefined>(\n    sampleOptions[0]\n  );\n  return (\n    <SingleComboBox\n      value={val}\n      options={sampleOptions}\n      onChange={(opt) => {\n        setVal(opt);\n      }}\n      trailingItem={trailingItem}\n    />\n  );\n};\n\nexport const WithDialog = () => {\n  const [isOpen, setIsOpen] = React.useState(false);\n  const [values, setValues] = React.useState<\n    (SingleComboBoxOption | undefined)[]\n  >(Array(10).fill(undefined));\n\n  return (\n    <>\n      <Button onClick={() => setIsOpen(true)}>ダイアログを表示</Button>\n      <TaskDialog\n        closeButtonLabel=\"閉じる\"\n        isOpen={isOpen}\n        onRequestClose={() => setIsOpen(false)}\n        title=\"ダイアログ\"\n      >\n        {Array(10)\n          .fill(null)\n          .map((_v, i) => {\n            return (\n              <MarginBase key={i} marginBottom>\n                <SingleComboBox\n                  value={values[i]}\n                  options={sampleOptions}\n                  onChange={(option) =>\n                    setValues((values) =>\n                      values.map((value, j) => (j === i ? option : value))\n                    )\n                  }\n                />\n              </MarginBase>\n            );\n          })}\n      </TaskDialog>\n    </>\n  );\n};\n\nexport const InsideScroll = () => (\n  <div style={{ width: '50rem', height: '50rem', display: 'flex' }}>\n    <ScrollableBase scrollableX scrollableY>\n      <div style={{ position: 'relative', width: '200rem', height: '200rem' }}>\n        <div style={{ position: 'absolute', left: '100rem', top: '100rem' }}>\n          <SingleComboBox\n            options={sampleOptions}\n            onChange={action('onChange')}\n          />\n        </div>\n      </div>\n    </ScrollableBase>\n  </div>\n);\n\nexport const FixedItems = () => {\n  const [val, setVal] = React.useState<SingleComboBoxOption | undefined>(\n    undefined\n  );\n  const [options, setOptions] = React.useState<SingleComboBoxOption[]>(\n    sampleOptions.slice(0, Math.floor(sampleOptions.length / 2))\n  );\n\n  return (\n    <>\n      <SingleComboBox\n        value={val}\n        options={options}\n        onChange={(opt) => {\n          setVal(opt);\n        }}\n        emptyMessage=\"アイテムが登録されていません。新規登録してください。\"\n        fixedItems={[\n          {\n            onSelect: () => setOptions(sampleOptions),\n            isVisible: () => options.length < sampleOptions.length,\n            label: () => 'アイテムをもっと見る',\n          },\n          {\n            onSelect: (fieldValue: string) => {\n              const newOption = { label: fieldValue, id: '' };\n              setVal(newOption);\n            },\n            isVisible: (\n              fieldValue: string,\n              filteredOptions: SingleComboBoxOption[]\n            ) =>\n              !!fieldValue &&\n              (filteredOptions.length === 0 ||\n                !filteredOptions.find((e) => e.label === fieldValue)),\n            label: (fieldValue: string) => `${fieldValue}を新規登録する`,\n          },\n        ]}\n      />\n      <div>\n        <div>label: {val?.label}</div>\n        <div>id: {val?.id}</div>\n        <div>{val && !val?.id && '新規登録の選択肢です'}</div>\n      </div>\n    </>\n  );\n};\n\nexport const AllowNewOption = () => {\n  const [val, setVal] = React.useState<SingleComboBoxOption | undefined>(\n    undefined\n  );\n  return (\n    <>\n      <SingleComboBox\n        value={val}\n        options={sampleOptions}\n        onChange={(opt) => {\n          setVal(opt);\n        }}\n        trailingItem={{\n          selectIfOnly: true,\n          onSelect: (fieldValue: string) => {\n            const newOption = { label: fieldValue, id: '' };\n            setVal(newOption);\n          },\n          render: (fieldValue: string) => `${fieldValue} (新規登録)`,\n          isVisible: (\n            fieldValue: string,\n            filteredOptions: SingleComboBoxOption[]\n          ) =>\n            !!fieldValue &&\n            (filteredOptions.length === 0 ||\n              !filteredOptions.find((e) => e.label === fieldValue)),\n        }}\n      />\n      <div>\n        <div>label: {val?.label}</div>\n        <div>id: {val?.id}</div>\n        <div>{val && !val?.id && '新規登録の選択肢です'}</div>\n      </div>\n    </>\n  );\n};\n\nexport const AllowMoreOption = () => {\n  const [val, setVal] = React.useState<SingleComboBoxOption | undefined>(\n    undefined\n  );\n  const [options, setOptions] = React.useState<SingleComboBoxOption[]>(\n    sampleOptions.slice(0, Math.floor(sampleOptions.length / 2))\n  );\n\n  return (\n    <SingleComboBox\n      value={val}\n      options={options}\n      onChange={(opt) => {\n        setVal(opt);\n      }}\n      trailingItem={{\n        onSelect: () => setOptions(sampleOptions),\n        render: () => 'もっと見る',\n        isVisible: () => options.length < sampleOptions.length,\n        isMoreOption: true,\n      }}\n    />\n  );\n};\n\nexport const MultiSelect = () => {\n  const [selected, setSelected] = React.useState<SingleComboBoxOption[]>([]);\n  const messageRef = React.useRef<HTMLDivElement>(null);\n  const [message, setMessage] = React.useState<string>('');\n\n  return (\n    <>\n      <div>\n        {selected.map((val, i) => (\n          <TagBox\n            key={i}\n            removable\n            onRemove={() => {\n              setSelected(selected.filter((e) => e.id !== val.id));\n            }}\n            mb={0.5}\n            mr={0.5}\n          >\n            {val.label}\n          </TagBox>\n        ))}\n      </div>\n      <VisuallyHidden>\n        <div ref={messageRef} tabIndex={-1}>\n          {message}\n        </div>\n      </VisuallyHidden>\n      <SingleComboBox\n        options={sampleOptions.filter(\n          // 選択済みの選択肢を除外する\n          (e) => selected.findIndex((s) => s.id === e.id) < 0\n        )}\n        onChange={(opt) => {\n          if (opt) {\n            setSelected(selected.concat([opt]));\n            setMessage(`${opt.label} を選択しました`);\n            // スクリーンリーダー向けのメッセージをsetMessageするとともに、その部分へフォーカスを移動することで、\n            // コンボボックスにフォーカスが残り続け、選択肢ボックスが出ない状態になるのを防いでいる\n            messageRef.current?.focus();\n          }\n        }}\n      />\n    </>\n  );\n};\n\nexport const ManualFocus = () => {\n  const ref = React.useRef<HTMLInputElement>(null);\n  const onClick = () => {\n    ref.current?.focus();\n  };\n\n  return (\n    <>\n      <Button mr={1} onClick={onClick}>\n        フォーカスを当てる\n      </Button>\n      <SingleComboBox\n        ref={ref}\n        options={sampleOptions}\n        onChange={action('onChange')}\n      />\n    </>\n  );\n};\n\nexport const Events = () => {\n  const [eventList, setEventList] = React.useState<Array<string>>([]);\n  const eventAction = (signature: string) =>\n    setEventList([\n      ...eventList,\n      `${new Date().toString()} ${signature}イベント発火`,\n    ]);\n\n  return (\n    <>\n      <SingleComboBox\n        options={sampleOptions}\n        onChange={() => eventAction('onChange')}\n        onBlur={() => eventAction('onBlur')}\n        onInput={() => eventAction('onInput')}\n        onFocus={() => eventAction('onFocus')}\n        onKeyDown={() => eventAction('onKeyDown')}\n      />\n      <ul>\n        {eventList.map((e) => (\n          <li key={e}>{e}</li>\n        ))}\n      </ul>\n    </>\n  );\n};\n\nexport const WithSubLabel = () => (\n  <SingleComboBox\n    options={sampleOptions.map((opt) => ({\n      ...opt,\n      subLabel: opt.keywords?.[0],\n    }))}\n    onChange={action('onChange')}\n  />\n);\n\nexport const DescribedByBalloon = () => (\n  <WithBalloon\n    renderBalloonContent={() => <>注釈文を付けることができます。</>}\n    renderContent={(balloonId?: string) => (\n      <SingleComboBox\n        options={sampleOptions}\n        onChange={action('onChange')}\n        describedBy={balloonId}\n      />\n    )}\n  />\n);\n"
  },
  {
    "path": "src/lv2/combobox/SingleComboBox.tsx",
    "content": "import * as React from 'react';\nimport { MdExpandMore } from 'react-icons/md';\nimport {\n  MarginClassProps,\n  pickMarginClassProps,\n} from '../../utilities/marginClasses';\nimport commonProps, {\n  CommonProps,\n  pickCommonDataProps,\n} from '../../utilities/commonProps';\nimport TextField from '../../lv1/forms/TextField';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport NegativeMarginBase from '../../lv1/bases/NegativeMarginBase';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport Note from '../../lv1/typography/Note';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport Loading from '../../lv1/Loading';\nimport { ItemLabel } from './ItemLabel';\nimport {\n  SingleComboBoxOption,\n  InternalComboBoxOption,\n  FixedItems,\n  useAdjustListPosition,\n  createListBoxClassName,\n} from './hooks';\nimport { useSingleComboBox, TrailingItem } from './hooks/singleComboBox';\nimport { pickFunctionalMarginProps } from '../../utilities/functionalMarginClasses';\nimport vbClassNames from '../../utilities/vbClassNames';\nexport type { ComboBoxOption, SingleComboBoxOption } from './hooks';\n\ntype PropsFromTextField = Pick<\n  Parameters<typeof TextField>[0],\n  | 'id'\n  | 'label'\n  | 'labelledby'\n  | 'placeholder'\n  | 'name'\n  | 'required'\n  | 'disabled'\n  | 'error'\n  | 'small'\n  | 'large'\n  | 'width'\n  | 'onFocus'\n  | 'onBlur'\n  | 'onInput'\n  | 'onKeyDown'\n  | 'borderless'\n>;\n\ntype Props = {\n  value?: SingleComboBoxOption;\n  options: SingleComboBoxOption[];\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large';\n  emptyMessage?: React.ReactNode;\n  isLoading?: boolean;\n  onChange?: (option?: SingleComboBoxOption) => void;\n\n  /**\n   * @deprecated fixedItems を使用してください\n   */\n  trailingItem?: TrailingItem;\n  /**\n   * リストの最後尾に追加するアイテム 一つ目はもっと見る、二つ目新規登録を想定しています\n   */\n  fixedItems?: FixedItems;\n  describedBy?: string;\n} & PropsFromTextField &\n  MarginClassProps &\n  CommonProps;\n\nfunction SingleComboBoxInner(\n  props: Props,\n  ref?: React.Ref<HTMLInputElement> | React.MutableRefObject<HTMLInputElement>\n): React.ReactElement {\n  const {\n    value,\n    options,\n    id,\n    label,\n    labelledby,\n    placeholder,\n    name,\n    required,\n    disabled,\n    error,\n    small,\n    large,\n    width,\n    listWidth,\n    emptyMessage,\n    isLoading,\n    onChange,\n    onFocus,\n    onBlur,\n    onInput,\n    onKeyDown,\n    trailingItem,\n    fixedItems,\n    borderless,\n    describedBy,\n  } = props;\n\n  const {\n    filteredOptions,\n    isOpen,\n    fieldValue,\n    onFieldBlur,\n    onFieldFocus,\n    onFieldChange,\n    onFieldKeyDown,\n    selectedIndex,\n    listOptionsRef,\n    onSelectOption,\n    selectedOptionRef,\n  } = useSingleComboBox({\n    value,\n    options,\n    onChange,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    trailingItem,\n    fixedItems,\n  });\n  const uniqueId = useUniqueId('vb-comboBox');\n  const listBoxClassName = createListBoxClassName({ isOpen, listWidth, width });\n  const { textFieldRef, listOptionsMaxHeight } = useAdjustListPosition(\n    isOpen,\n    ref\n  );\n\n  return (\n    <div {...commonProps(pickCommonDataProps(props), 'vb-comboBox')}>\n      <TextField\n        ref={textFieldRef}\n        value={fieldValue}\n        id={id}\n        label={label}\n        labelledby={labelledby}\n        name={name}\n        required={required}\n        disabled={disabled}\n        placeholder={placeholder}\n        error={error}\n        small={small}\n        large={large}\n        width={width}\n        onBlur={onFieldBlur}\n        onFocus={onFieldFocus}\n        onChange={onFieldChange}\n        onInput={onInput}\n        onKeyDown={onFieldKeyDown}\n        borderless={borderless}\n        role=\"combobox\"\n        autoComplete=\"off\"\n        aria-expanded={isOpen}\n        aria-autocomplete=\"list\"\n        aria-controls={`${uniqueId}__listbox`}\n        aria-haspopup=\"listbox\"\n        aria-activedescendant={\n          selectedIndex >= 0 && isOpen\n            ? `${uniqueId}__listOption__${selectedIndex}`\n            : undefined\n        }\n        aria-describedby={`${describedBy || ''} ${uniqueId}__description`}\n        aria-atomic={true}\n        IconComponent={MdExpandMore}\n        {...pickMarginClassProps(props)}\n        {...pickFunctionalMarginProps(props)}\n      />\n      <VisuallyHidden id={`${uniqueId}__description`}>\n        上下キーで選択、Enterキーで確定できます\n      </VisuallyHidden>\n      <ScrollPortal\n        isActive={isOpen}\n        onOverflow={() => textFieldRef.current && textFieldRef.current.blur()}\n        positionalBaseElement={textFieldRef.current}\n        data-masking={props['data-masking']}\n      >\n        <div // eslint-disable-line jsx-a11y/no-static-element-interactions\n          id={`${uniqueId}__listbox`}\n          className={listBoxClassName}\n          role=\"listbox\"\n          tabIndex={-1}\n          onMouseDown={(e: React.MouseEvent): void => e.preventDefault()} // blur抑止のため、やむをえずonMouseDownを書いてる\n        >\n          <PopupBase paddingSize=\"small\">\n            <NegativeMarginBase marginSize=\"small\" top left bottom right>\n              <Loading isLoading={!!isLoading}>\n                {filteredOptions.length > 0 ? (\n                  <div\n                    className=\"vb-comboBox__listOptions\"\n                    ref={listOptionsRef}\n                    style={{ maxHeight: listOptionsMaxHeight }}\n                  >\n                    {filteredOptions[0].fixedItemType === 'add' && (\n                      <div className=\"vb-comboBox__emptyMessage\">\n                        <Note>\n                          {emptyMessage || '該当する候補はありません'}\n                        </Note>\n                      </div>\n                    )}\n                    {filteredOptions.map(\n                      (option: InternalComboBoxOption, i: number) => {\n                        const isSelected = i === selectedIndex;\n                        return (\n                          /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */\n                          <div\n                            id={`${uniqueId}__listOption__${i}`}\n                            key={i}\n                            className={vbClassNames('vb-comboBox__listOption', {\n                              modifier: {\n                                selected: isSelected,\n                                disabled: option.disabled,\n                              },\n                            })}\n                            role=\"option\"\n                            aria-selected={!(option.disabled || !isSelected)}\n                            aria-disabled={option.disabled}\n                            tabIndex={-1}\n                            onClick={(): void => onSelectOption(option)}\n                            ref={isSelected ? selectedOptionRef : undefined}\n                          >\n                            <ItemLabel\n                              fixedItemOption={\n                                fixedItems && { fixedItems, isSelected }\n                              }\n                              fieldValue={fieldValue}\n                              option={option}\n                              trailingItem={trailingItem}\n                            />\n                            {option.subLabel && (\n                              <div className=\"vb-comboBox__listOptionSubLabel\">\n                                {option.subLabel}\n                              </div>\n                            )}\n                          </div>\n                        );\n                      }\n                    )}\n                  </div>\n                ) : (\n                  <div className=\"vb-comboBox__emptyMessage\">\n                    <Note>{emptyMessage || '該当する候補はありません'}</Note>\n                  </div>\n                )}\n              </Loading>\n            </NegativeMarginBase>\n          </PopupBase>\n        </div>\n      </ScrollPortal>\n    </div>\n  );\n}\n\nconst SingleComboBox = React.forwardRef(SingleComboBoxInner);\nexport default SingleComboBox;\n"
  },
  {
    "path": "src/lv2/combobox/hooks/apiComboBox.ts",
    "content": "import { FormEvent, useCallback } from 'react';\nimport { KeyCodes } from '../../../utilities/keyboard';\nimport {\n  useComboBox,\n  SingleComboBoxOption,\n  FetchParams,\n  initialFetchParams,\n  ApiMetaData,\n  useFetchItems,\n  useFetchItemsForComboBox,\n} from '.';\n\nexport const useApiComboBoxInternal = ({\n  createNewItem,\n  currentPage,\n  fetchItems,\n  onBlur,\n  onChange,\n  onFocus,\n  onKeyDown,\n  options,\n  totalPages,\n  value,\n}: {\n  createNewItem?: (fieldValue: string) => void;\n  currentPage: number;\n  fetchItems: (params: FetchParams) => Promise<any>;\n  onBlur?: (\n    e: FormEvent,\n    fetchParams: FetchParams,\n    value?: SingleComboBoxOption\n  ) => void;\n  onChange?: (option?: SingleComboBoxOption) => void;\n  onFocus?: (\n    e: FormEvent,\n    fetchParams: FetchParams,\n    isFieldChanged: boolean,\n    value?: SingleComboBoxOption\n  ) => void;\n  onKeyDown?: React.KeyboardEventHandler;\n  options: SingleComboBoxOption[];\n  totalPages: number;\n  value?: SingleComboBoxOption;\n}) => {\n  const {\n    fieldValue,\n    isOpen,\n    isFieldChanged,\n    listOptionsRef,\n    selectedIndex,\n    selectedOptionRef,\n    setFieldValue,\n    setOpen,\n    setIsFieldChanged,\n    setSelectedIndex,\n  } = useComboBox({ value });\n  const { isLoadingMore, fetchParams, debouncedFetchItems, loadMore } =\n    useFetchItems({\n      fieldValue,\n      currentPage,\n      fetchItems,\n      totalPages,\n      isFieldChanged,\n    });\n\n  const handleSelectOption = useCallback(\n    (option?: SingleComboBoxOption): void => {\n      setFieldValue(option ? option.label : '');\n      if (onChange) {\n        onChange(option);\n      }\n    },\n    [onChange, setFieldValue]\n  );\n\n  const onFieldFocus = useCallback(\n    (e: React.FormEvent<HTMLInputElement>): void => {\n      setOpen(true);\n      setSelectedIndex(value ? options.indexOf(value) : -1);\n\n      if (onFocus) {\n        onFocus(e, fetchParams, isFieldChanged, value);\n      }\n    },\n    [\n      setOpen,\n      setSelectedIndex,\n      value,\n      options,\n      onFocus,\n      fetchParams,\n      isFieldChanged,\n    ]\n  );\n\n  const onFieldBlur = useCallback(\n    (e: React.FormEvent<HTMLInputElement>): void => {\n      const filteredByLabelOptions = options.filter(\n        (option: SingleComboBoxOption) => option.label === fieldValue\n      );\n      const labelMatchedOption =\n        filteredByLabelOptions.length === 1\n          ? filteredByLabelOptions[0]\n          : undefined;\n      if (labelMatchedOption) {\n        handleSelectOption(labelMatchedOption);\n      } else if (!fieldValue) {\n        handleSelectOption();\n      } else if (value) {\n        setFieldValue(value.label);\n      }\n      setOpen(false);\n      setSelectedIndex(-1);\n      setIsFieldChanged(false);\n      if (onBlur) {\n        onBlur(e, fetchParams, value);\n      }\n    },\n    [\n      options,\n      fieldValue,\n      value,\n      setOpen,\n      setSelectedIndex,\n      setIsFieldChanged,\n      onBlur,\n      handleSelectOption,\n      setFieldValue,\n      fetchParams,\n    ]\n  );\n\n  const onFieldChange = useCallback(\n    async (e: React.ChangeEvent<HTMLInputElement>): Promise<void> => {\n      const newFieldValue = (e.target as HTMLInputElement).value;\n\n      const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : null;\n      const selectedOptionIndex = selectedOption\n        ? options.indexOf(selectedOption)\n        : -1;\n\n      setFieldValue(newFieldValue);\n      setOpen(true);\n      setIsFieldChanged(true);\n      setSelectedIndex(selectedOptionIndex);\n      await debouncedFetchItems({ ...initialFetchParams, name: newFieldValue });\n      // onChange はoption確定時に呼ぶのでここでは呼ばない\n    },\n    [\n      selectedIndex,\n      options,\n      setFieldValue,\n      setOpen,\n      setIsFieldChanged,\n      setSelectedIndex,\n      debouncedFetchItems,\n    ]\n  );\n\n  const onSelectOption = useCallback(\n    (option?: SingleComboBoxOption): void => {\n      if (option?.disabled) {\n        return;\n      }\n\n      handleSelectOption(option);\n      setOpen(false);\n    },\n    [handleSelectOption, setOpen]\n  );\n\n  const onFieldKeyDown = useCallback(\n    (e: React.KeyboardEvent<HTMLInputElement>): void => {\n      const items = [\n        ...options,\n        currentPage < totalPages && 'loadMore',\n        createNewItem &&\n          !options.find(({ label }) => label === fieldValue) &&\n          'createNewItem',\n      ].filter((v) => v) as (\n        | SingleComboBoxOption\n        | 'loadMore'\n        | 'createNewItem'\n      )[];\n\n      switch (e.keyCode) {\n        case KeyCodes.UP:\n          if (selectedIndex > 0) {\n            setSelectedIndex(selectedIndex - 1);\n          } else {\n            setSelectedIndex(items.length - 1);\n          }\n          e.preventDefault();\n          break;\n        case KeyCodes.DOWN:\n          if (selectedIndex >= 0 && selectedIndex < items.length - 1) {\n            setSelectedIndex(selectedIndex + 1);\n          } else {\n            setSelectedIndex(0);\n          }\n          e.preventDefault();\n          break;\n        case KeyCodes.ENTER:\n          if (selectedIndex >= 0) {\n            const item = items[selectedIndex];\n\n            if (item === 'loadMore') {\n              loadMore();\n            } else if (item === 'createNewItem') {\n              if (createNewItem) {\n                createNewItem(fieldValue);\n                setOpen(false);\n              }\n            } else {\n              onSelectOption(item);\n            }\n          }\n          e.preventDefault();\n          break;\n      }\n      if (onKeyDown) {\n        onKeyDown(e);\n      }\n    },\n    [\n      options,\n      currentPage,\n      totalPages,\n      createNewItem,\n      onKeyDown,\n      fieldValue,\n      selectedIndex,\n      setSelectedIndex,\n      loadMore,\n      setOpen,\n      onSelectOption,\n    ]\n  );\n\n  return {\n    fieldValue,\n    isLoadingMore,\n    isOpen,\n    listOptionsRef,\n    loadMore,\n    onFieldBlur,\n    onFieldChange,\n    onFieldFocus,\n    onFieldKeyDown,\n    onSelectOption,\n    selectedIndex,\n    selectedOptionRef,\n  };\n};\n\n/**\n * ApiComboBoxのためにAPIをラップし、以下の機能を付与します。\n *\n * - 複数のApiComboBoxで利用するためのリソース管理\n * - ローディング状態の管理\n * - 初期化時のAPI呼び出し\n * - フォーカス時の挙動制御\n *\n * このhooksの利用は必須ではありません。\n *\n */\nexport const useApiComboBox = <T, E = never>({\n  createOptions,\n  fetchItems,\n  fetchOnInit,\n  initialName,\n  responseAdapter,\n}: {\n  createOptions: (items: T[]) => SingleComboBoxOption<E>[];\n  fetchItems: (params: FetchParams) => Promise<any>;\n  /**\n   * 初期化時にfetchを一回呼ぶ\n   */\n  fetchOnInit?: boolean;\n  /**\n   * 初期値としてセットするアイテム名\n   */\n  initialName?: string;\n  /**\n   * APIレスポンスの形が合わない場合に整形する\n   */\n  responseAdapter?: (response: any) => { items: T[]; meta: ApiMetaData };\n}) => {\n  const {\n    items,\n    meta,\n    options,\n    setResponse,\n    isLoading,\n    hasFetched,\n    currentFetchParams,\n    fetchItemsForComboBox,\n  } = useFetchItemsForComboBox<T>({\n    createOptions,\n    fetchItems,\n    fetchOnInit,\n    initialName,\n    responseAdapter,\n  });\n\n  /* eslint-disable @typescript-eslint/no-unused-vars */\n  const onFocus = (\n    _e: FormEvent,\n    _fetchParams: FetchParams,\n    _isFieldChanged: boolean,\n    _value?: SingleComboBoxOption\n  ) => {\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n    const nextFetchParams = {\n      name: '',\n      page: 1,\n    };\n\n    if (\n      !hasFetched ||\n      nextFetchParams.name !== currentFetchParams.name ||\n      nextFetchParams.page !== currentFetchParams.page\n    ) {\n      fetchItemsForComboBox(nextFetchParams);\n    }\n  };\n\n  return {\n    fetchItems: fetchItemsForComboBox,\n    isLoading,\n    meta,\n    onFocus,\n    options,\n    /**\n     * ApiComboBox の props としては使用しないが、useApiComboBox で取得したリソースを\n     * 他のコンポーネントから参照・編集したいケースのために返している\n     */\n    items,\n    createOptions,\n    setItems: (newItems: T[]) => setResponse({ items: newItems, meta }),\n    setMeta: (newMeta: ApiMetaData) => setResponse({ items, meta: newMeta }),\n  };\n};\n"
  },
  {
    "path": "src/lv2/combobox/hooks/apiMultiComboBox.ts",
    "content": "import React, { FormEvent, useCallback } from 'react';\nimport {\n  ApiMetaData,\n  FetchParams,\n  initialFetchParams,\n  MultiComboBoxOption,\n  useFetchItems,\n  useFetchItemsForComboBox,\n  useMultiComboBox,\n} from '.';\n\nexport const useApiMultiComboBoxInternal = ({\n  createNewItem,\n  currentPage,\n  fetchItems,\n  onBlur,\n  onChange,\n  onFocus,\n  onKeyDown,\n  options,\n  totalPages,\n  values,\n  maxSelectionCount,\n}: {\n  createNewItem?: (fieldValue: string) => void;\n  currentPage: number;\n  fetchItems: (params: FetchParams) => Promise<any>;\n  onBlur?: (\n    e: FormEvent,\n    fetchParams: FetchParams,\n    values?: MultiComboBoxOption[]\n  ) => void;\n  onChange?: (options: MultiComboBoxOption[]) => void;\n  onFocus?: () => void;\n  onKeyDown?: React.KeyboardEventHandler;\n  options: MultiComboBoxOption[];\n  totalPages: number;\n  values: MultiComboBoxOption[];\n  maxSelectionCount?: number;\n}) => {\n  const {\n    fieldValue,\n    setFieldValue,\n    isOpen,\n    setOpen,\n    selectedIndex,\n    setSelectedIndex,\n    borderRef,\n    selectedOptionRef,\n    listOptionsRef,\n    filteredOptions,\n    handleKeyDown,\n  } = useMultiComboBox({\n    values,\n    options,\n    onChange,\n    onKeyDown,\n    maxSelectionCount,\n    alreadyFilteredByFieldValue: true,\n  });\n  const { isLoadingMore, fetchParams, debouncedFetchItems, loadMore } =\n    useFetchItems({\n      fieldValue,\n      currentPage,\n      fetchItems,\n      totalPages,\n    });\n\n  const onFieldBlur = useCallback(\n    (e) => {\n      setOpen(false);\n      setFieldValue('');\n      if (onBlur) {\n        onBlur(e, fetchParams, values);\n      }\n    },\n    [fetchParams, onBlur, setFieldValue, setOpen, values]\n  );\n\n  const onFieldChange = useCallback(\n    async (e: React.ChangeEvent<HTMLInputElement>): Promise<void> => {\n      const newFieldValue = (e.target as HTMLInputElement).value;\n\n      setFieldValue(newFieldValue);\n      setSelectedIndex(0);\n      setOpen(true);\n      await debouncedFetchItems({ ...initialFetchParams, name: newFieldValue });\n      // onChange はoption確定時に呼ぶのでここでは呼ばない\n    },\n    [debouncedFetchItems, setFieldValue, setOpen, setSelectedIndex]\n  );\n\n  const onFieldFocus = useCallback(() => {\n    (!maxSelectionCount || values.length < maxSelectionCount) && setOpen(true);\n    if (onFocus) {\n      onFocus();\n    }\n  }, [onFocus, setOpen, maxSelectionCount, values]);\n\n  const onSelectOption = useCallback(\n    (option: MultiComboBoxOption) => {\n      if (option.disabled) {\n        return;\n      }\n\n      setFieldValue('');\n      setSelectedIndex(0);\n      if (onChange) {\n        onChange([...values, option]);\n      }\n      // もっと見るが出ている状態で全て選択し切ったら、loadMore()する\n      if (\n        filteredOptions.filter(({ id }) => id !== option.id).length === 0 &&\n        currentPage < totalPages\n      ) {\n        loadMore();\n      }\n    },\n    [\n      currentPage,\n      filteredOptions,\n      loadMore,\n      onChange,\n      setFieldValue,\n      setSelectedIndex,\n      totalPages,\n      values,\n    ]\n  );\n\n  const onRemoveOption = useCallback(\n    (option: MultiComboBoxOption) => {\n      if (onChange && values) {\n        onChange(values.filter((v) => v.id !== option.id));\n      }\n    },\n    [onChange, values]\n  );\n\n  const onClickNewItem = useCallback(\n    async (fieldValue: string) => {\n      if (!createNewItem) return;\n\n      createNewItem(fieldValue);\n      setFieldValue('');\n    },\n    [createNewItem, setFieldValue]\n  );\n\n  const onFieldKeyDown = useCallback(\n    (e: React.KeyboardEvent<HTMLInputElement>): void => {\n      handleKeyDown(\n        e,\n        currentPage < totalPages ? loadMore : undefined,\n        !filteredOptions.find(({ label }) => label === fieldValue)\n          ? onClickNewItem\n          : undefined\n      );\n    },\n    [\n      currentPage,\n      fieldValue,\n      filteredOptions,\n      handleKeyDown,\n      loadMore,\n      onClickNewItem,\n      totalPages,\n    ]\n  );\n\n  return {\n    filteredOptions,\n    isLoadingMore,\n    loadMore,\n    fieldValue,\n    isOpen,\n    setOpen,\n    selectedIndex,\n    listOptionsRef,\n    selectedOptionRef,\n    borderRef,\n    onFieldBlur,\n    onFieldChange,\n    onFieldFocus,\n    onFieldKeyDown,\n    onSelectOption,\n    onRemoveOption,\n    onClickNewItem,\n  };\n};\n\n/**\n * ApiMultiComboBoxのためにAPIをラップし、以下の機能を付与します。\n *\n * - 複数のApiMultiComboBoxで利用するためのリソース管理\n * - ローディング状態の管理\n * - 初期化時のAPI呼び出し\n * - フォーカス時の挙動制御\n *\n * このhooksの利用は必須ではありません。\n *\n */\nexport const useApiMultiComboBox = <T, E = never>({\n  createOptions,\n  fetchItems,\n  fetchOnInit,\n  responseAdapter,\n}: {\n  createOptions: (items: T[]) => MultiComboBoxOption<E>[];\n  fetchItems: (params: FetchParams) => Promise<any>;\n  /**\n   * 初期化時にfetchを一回呼ぶ\n   */\n  fetchOnInit?: boolean;\n  /**\n   * APIレスポンスの形が合わない場合に整形する\n   */\n  responseAdapter?: (response: any) => { items: T[]; meta: ApiMetaData };\n}) => {\n  const {\n    items,\n    meta,\n    options,\n    setResponse,\n    isLoading,\n    hasFetched,\n    currentFetchParams,\n    fetchItemsForComboBox,\n  } = useFetchItemsForComboBox<T>({\n    createOptions,\n    fetchItems,\n    fetchOnInit,\n    responseAdapter,\n  });\n\n  const onFocus = () => {\n    const nextFetchParams = {\n      name: '',\n      page: 1,\n    };\n\n    if (\n      !hasFetched ||\n      nextFetchParams.name !== currentFetchParams.name ||\n      nextFetchParams.page !== currentFetchParams.page\n    ) {\n      fetchItemsForComboBox(nextFetchParams);\n    }\n  };\n\n  return {\n    fetchItems: fetchItemsForComboBox,\n    isLoading,\n    meta,\n    onFocus,\n    options,\n    /**\n     * ApiMultiComboBox の props としては使用しないが、useApiMultiComboBox で取得したリソースを\n     * 他のコンポーネントから参照・編集したいケースのために返している\n     */\n    items,\n    createOptions,\n    setItems: (newItems: T[]) => setResponse({ items: newItems, meta }),\n    setMeta: (newMeta: ApiMetaData) => setResponse({ items, meta: newMeta }),\n  };\n};\n"
  },
  {
    "path": "src/lv2/combobox/hooks/index.ts",
    "content": "import { useState, useRef, useEffect, useMemo, useCallback } from 'react';\nimport vbClassName from '../../../utilities/vbClassNames';\nimport type { TextFieldWidth } from '../../../lv1/forms/TextField';\nimport { MiniTag } from '../../tagBox/MiniTag';\nimport { debounce } from 'throttle-debounce';\nimport { KeyCodes, Keys } from '../../../utilities/keyboard';\n\nexport type ComboBoxOption = {\n  label: string;\n  id: string | number;\n  keywords?: string[];\n  disabled?: boolean;\n};\n\nexport type MultiComboBoxOption<E = never> = ComboBoxOption & {\n  type?: string;\n  extras?: E;\n} & Pick<Parameters<typeof MiniTag>[0], 'color'>;\n\nexport type SingleComboBoxOption<E = never> = ComboBoxOption & {\n  subLabel?: string;\n  extras?: E;\n};\n\nexport type InternalComboBoxOption = ComboBoxOption & {\n  isTrailingItem?: boolean;\n  fixedItemType?: 'more' | 'add';\n} & Pick<SingleComboBoxOption, 'subLabel'>;\n\nexport type FixedItem = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onSelect: (fieldValue: string) => any;\n  isVisible?: (\n    fieldValue: string,\n    filteredOptions: ComboBoxOption[]\n  ) => boolean;\n  label?: (fieldValue: string) => string;\n};\n\n// TODO: [more: FixedItem, add?: FixedItem] TypeScript 4.0~\nexport type FixedItems = [FixedItem] | [FixedItem, FixedItem];\n\nexport type FetchParams = {\n  name: string;\n  page: number;\n};\n\nexport type ApiMetaData = {\n  limit: number;\n  currentPage: number;\n  totalPages: number;\n  totalCount: number;\n};\n\nexport const initialFetchParams = {\n  name: '',\n  page: 1,\n};\n\n// 選択肢のリストのスクロール位置を調整する\nconst adjustListOptionsScroll = (\n  listOptionsElement: HTMLDivElement,\n  selectedOptionElement: HTMLDivElement\n) => {\n  const selectedRect = selectedOptionElement.getBoundingClientRect();\n  const listRect = listOptionsElement.getBoundingClientRect();\n  if (selectedRect.bottom > listRect.bottom) {\n    listOptionsElement.scrollTop =\n      selectedRect.bottom +\n      listOptionsElement.scrollTop -\n      listRect.top -\n      listRect.height;\n  } else if (selectedRect.top < listRect.top) {\n    listOptionsElement.scrollTop =\n      selectedRect.top + listOptionsElement.scrollTop - listRect.top;\n  }\n};\n\nexport const useComboBox = ({ value }: { value?: ComboBoxOption }) => {\n  const [isOpen, setOpen] = useState<boolean>(false);\n  const [fieldValue, setFieldValue] = useState<string>(\n    value ? value.label : ''\n  );\n  const [selectedIndex, setSelectedIndex] = useState<number>(-1);\n  const [isFieldChanged, setIsFieldChanged] = useState<boolean>(false);\n\n  const listOptionsRef = useRef<HTMLDivElement>(null);\n  const selectedOptionRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (isOpen) {\n      return;\n    }\n    setFieldValue(value ? value.label : '');\n  }, [value, setFieldValue, isOpen]);\n\n  useEffect(() => {\n    if (\n      isOpen &&\n      listOptionsRef.current &&\n      selectedOptionRef.current &&\n      selectedIndex !== -1\n    ) {\n      adjustListOptionsScroll(\n        listOptionsRef.current,\n        selectedOptionRef.current\n      );\n    }\n  }, [isOpen, listOptionsRef, selectedOptionRef, selectedIndex]);\n\n  return {\n    fieldValue,\n    isOpen,\n    isFieldChanged,\n    listOptionsRef,\n    selectedIndex,\n    selectedOptionRef,\n    setFieldValue,\n    setOpen,\n    setIsFieldChanged,\n    setSelectedIndex,\n  };\n};\n\nexport const useMultiComboBox = ({\n  values,\n  options,\n  onChange,\n  onKeyDown,\n  maxSelectionCount,\n  alreadyFilteredByFieldValue,\n}: {\n  values: MultiComboBoxOption[];\n  options: MultiComboBoxOption[];\n  onChange?: (values: MultiComboBoxOption[]) => void;\n  onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n  maxSelectionCount?: number;\n  alreadyFilteredByFieldValue?: boolean;\n}) => {\n  const [fieldValue, setFieldValue] = useState<string>('');\n  const [isOpen, setOpen] = useState<boolean>(false);\n  const [selectedIndex, setSelectedIndex] = useState<number>(0);\n\n  const selectedOptionRef = useRef<HTMLDivElement>(null);\n  const borderRef = useRef<HTMLSpanElement>(null);\n  const listOptionsRef = useRef<HTMLDivElement>(null);\n\n  const filteredOptions = useMemo(() => {\n    const filteredOptions = options.filter(\n      (opt) =>\n        !values.find((v) => v.id === opt.id) &&\n        (alreadyFilteredByFieldValue ||\n          opt.label.includes(fieldValue) ||\n          opt.keywords?.some((k) => k.includes(fieldValue)))\n    );\n\n    const result = [\n      ...filteredOptions.filter((option) => option.label === fieldValue),\n      ...filteredOptions.filter((option) => option.label !== fieldValue),\n    ];\n\n    return result;\n  }, [options, values, fieldValue, alreadyFilteredByFieldValue]);\n\n  useEffect(() => {\n    if (\n      isOpen &&\n      listOptionsRef.current &&\n      selectedOptionRef.current &&\n      selectedIndex !== -1\n    ) {\n      adjustListOptionsScroll(\n        listOptionsRef.current,\n        selectedOptionRef.current\n      );\n    }\n  }, [isOpen, listOptionsRef, selectedOptionRef, selectedIndex]);\n\n  const onSelectOption = useCallback(\n    (option: MultiComboBoxOption) => {\n      if (\n        option.disabled ||\n        (maxSelectionCount && values.length >= maxSelectionCount)\n      ) {\n        return;\n      }\n      setFieldValue('');\n      setSelectedIndex(0);\n      if (onChange) {\n        onChange([...values, option]);\n      }\n    },\n    [onChange, values, maxSelectionCount]\n  );\n\n  const onRemoveOption = useCallback(\n    (option: MultiComboBoxOption) => {\n      if (onChange && values) {\n        onChange(values.filter((v) => v.id !== option.id));\n      }\n    },\n    [onChange, values]\n  );\n\n  const handleKeyDown = useCallback(\n    (\n      e: React.KeyboardEvent<HTMLInputElement>,\n      loadMore?: () => void,\n      onClickNewItem?: (fieldValue: string) => void\n    ) => {\n      const items = [\n        ...filteredOptions,\n        loadMore && 'loadMore',\n        onClickNewItem && 'onClickNewItem',\n      ].filter((v) => v) as (\n        | MultiComboBoxOption\n        | 'loadMore'\n        | 'onClickNewItem'\n      )[];\n\n      switch (e.key) {\n        case Keys.UP:\n          if (selectedIndex > 0) {\n            setSelectedIndex(selectedIndex - 1);\n          } else {\n            setSelectedIndex(items.length - 1);\n          }\n          e.preventDefault();\n          break;\n        case Keys.DOWN:\n          if (selectedIndex >= 0 && selectedIndex < items.length - 1) {\n            setSelectedIndex(selectedIndex + 1);\n          } else {\n            setSelectedIndex(0);\n          }\n          e.preventDefault();\n          break;\n        case Keys.ENTER:\n          // KeyboardEvent.keys では変換確定のEnterを除外する方法がない\n          // KeyboardEvent.isComposing (e.nativeEvent.isComposing) でも macOS Safari で変換確定のEnterではfalseになってしまったので、ここだけ keyCodeを使用している\n          if (\n            e.keyCode === KeyCodes.ENTER &&\n            selectedIndex >= 0 &&\n            items[selectedIndex]\n          ) {\n            const item = items[selectedIndex];\n\n            if (item === 'loadMore') {\n              if (loadMore) {\n                loadMore();\n              }\n            } else if (item === 'onClickNewItem') {\n              if (onClickNewItem) {\n                onClickNewItem(fieldValue);\n              }\n            } else {\n              onSelectOption(item);\n            }\n          }\n          e.preventDefault();\n          break;\n        case Keys.BACKSPACE:\n          if (fieldValue.length === 0 && values.length > 0) {\n            onRemoveOption(values[values.length - 1]);\n          }\n      }\n      if (onKeyDown) {\n        onKeyDown(e);\n      }\n    },\n    [\n      fieldValue,\n      filteredOptions,\n      onKeyDown,\n      onRemoveOption,\n      onSelectOption,\n      selectedIndex,\n      values,\n    ]\n  );\n\n  return {\n    fieldValue,\n    setFieldValue,\n    isOpen,\n    setOpen,\n    selectedIndex,\n    setSelectedIndex,\n    borderRef,\n    selectedOptionRef,\n    listOptionsRef,\n    filteredOptions,\n    handleKeyDown,\n    onSelectOption,\n    onRemoveOption,\n  };\n};\n\nexport const useAdjustListPosition = (\n  isOpen: boolean,\n  ref?: React.Ref<HTMLInputElement> | React.MutableRefObject<HTMLInputElement>\n) => {\n  const tmpTextFieldRef = useRef<HTMLInputElement>();\n  const textFieldRef = (ref ||\n    tmpTextFieldRef) as React.MutableRefObject<HTMLInputElement>;\n  const [listOptionsMaxHeight, setListOptionsMaxHeight] =\n    useState<string>('15vh');\n  // listOptionsMaxHeight が画面からはみ出さないようにtextFieldRefの位置を基準に\n  // 15vh ~ 50vh 間で調整\n  useEffect(() => {\n    if (!(textFieldRef.current && isOpen)) {\n      return;\n    }\n    const { top, height } = textFieldRef.current.getBoundingClientRect();\n    setListOptionsMaxHeight(\n      `${Math.min(\n        Math.max(\n          15,\n          Math.round(\n            ((window.innerHeight - (top + height)) / window.innerHeight) * 100\n          ) - 1\n        ),\n        50\n      )}vh`\n    );\n  }, [isOpen, textFieldRef]);\n\n  return {\n    textFieldRef,\n    listOptionsMaxHeight,\n  };\n};\n\nexport const createListBoxClassName = ({\n  isOpen,\n  width,\n  listWidth,\n}: {\n  isOpen: boolean;\n  listWidth?: 'xSmall' | 'small' | 'medium' | 'large';\n  width?: TextFieldWidth;\n}) =>\n  vbClassName('vb-comboBox__listBox', {\n    modifier: {\n      open: isOpen,\n      widthXSmall: listWidth === 'xSmall' || (!listWidth && width === 'xSmall'),\n      widthSmall: listWidth === 'small' || (!listWidth && width === 'small'),\n      widthMedium:\n        listWidth === 'medium' ||\n        (!listWidth && (!width || width === 'medium')),\n      widthLarge: listWidth === 'large' || (!listWidth && width === 'large'),\n    },\n  });\n\nexport const useFetchItems = ({\n  fieldValue,\n  currentPage,\n  fetchItems,\n  totalPages,\n  isFieldChanged,\n}: {\n  fieldValue: string;\n  currentPage: number;\n  fetchItems: (params: FetchParams) => Promise<any>;\n  totalPages: number;\n  isFieldChanged?: boolean;\n}) => {\n  const [isLoadingMore, setIsLoadingMore] = useState<boolean>(false);\n  const [fetchParams, setFetchParams] =\n    useState<FetchParams>(initialFetchParams);\n  const debouncedFetchItems = useMemo(\n    () =>\n      debounce(300, async (params: FetchParams) => {\n        try {\n          if (params.page > 1) {\n            setIsLoadingMore(true);\n          }\n          await fetchItems(params);\n          setFetchParams(params);\n        } finally {\n          setIsLoadingMore(false);\n        }\n      }),\n    [fetchItems]\n  );\n\n  const loadMore = useCallback(() => {\n    debouncedFetchItems({\n      name: isFieldChanged === false ? '' : fieldValue,\n      page: Math.min(currentPage + 1, totalPages),\n    });\n  }, [\n    currentPage,\n    debouncedFetchItems,\n    isFieldChanged,\n    fieldValue,\n    totalPages,\n  ]);\n\n  return {\n    isLoadingMore,\n    fetchParams,\n    debouncedFetchItems,\n    loadMore,\n  };\n};\n\nexport const useFetchItemsForComboBox = <T>({\n  createOptions,\n  fetchItems,\n  fetchOnInit,\n  initialName,\n  responseAdapter,\n}: {\n  createOptions: (items: T[]) => ComboBoxOption[];\n  fetchItems: (params: FetchParams) => Promise<any>;\n  fetchOnInit?: boolean;\n  initialName?: string;\n  responseAdapter?: (response: any) => { items: T[]; meta: ApiMetaData };\n}) => {\n  const [{ items, meta }, setResponse] = useState<{\n    items: T[];\n    meta: ApiMetaData;\n  }>({\n    items: [],\n    meta: {\n      limit: 30,\n      currentPage: 1,\n      totalPages: 1,\n      totalCount: 0,\n    },\n  });\n  const options = useMemo(\n    () => createOptions(items),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [items]\n  );\n\n  const [currentFetchParams, setCurrentFetchParams] = useState<FetchParams>({\n    name: initialName || initialFetchParams.name,\n    page: initialFetchParams.page,\n  });\n  const [isLoading, setIsLoading] = useState<boolean>(false);\n  const [hasFetched, setHasFetched] = useState<boolean>(false);\n  const fetchItemsForComboBox = useCallback(\n    async ({\n      name,\n      page,\n    }: Parameters<typeof fetchItems>[0] = currentFetchParams) => {\n      setIsLoading(true);\n      try {\n        let response = await fetchItems({ name, page });\n        if (responseAdapter) {\n          response = responseAdapter(response);\n        }\n\n        setResponse({\n          ...response,\n          items: page > 1 ? [...items, ...response.items] : response.items,\n        });\n        setHasFetched(true);\n        setCurrentFetchParams({ name, page });\n      } finally {\n        setIsLoading(false);\n      }\n    },\n    [currentFetchParams, fetchItems, responseAdapter, setResponse, items]\n  );\n\n  useEffect(() => {\n    if (fetchOnInit || initialName) {\n      fetchItemsForComboBox();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return {\n    items,\n    meta,\n    options,\n    setResponse,\n    isLoading,\n    hasFetched,\n    currentFetchParams,\n    fetchItemsForComboBox,\n  };\n};\n"
  },
  {
    "path": "src/lv2/combobox/hooks/singleComboBox.ts",
    "content": "import { useState, useCallback, useEffect } from 'react';\nimport { KeyCodes } from '../../../utilities/keyboard';\nimport {\n  useComboBox,\n  SingleComboBoxOption,\n  InternalComboBoxOption,\n  FixedItem,\n  FixedItems,\n} from './';\n\nexport type TrailingItem = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onSelect: (fieldValue: string) => any;\n  render: (fieldValue: string) => React.ReactNode;\n  isVisible?: (\n    fieldValue: string,\n    filteredOptions: SingleComboBoxOption[]\n  ) => boolean;\n  selectIfOnly?: boolean;\n  isMoreOption?: boolean;\n};\n\nexport const useSingleComboBox = ({\n  fixedItems,\n  onBlur,\n  onChange,\n  onFocus,\n  onKeyDown,\n  options,\n  trailingItem,\n  value,\n}: {\n  fixedItems?: FixedItems;\n  onBlur?: React.FormEventHandler;\n  onChange?: (option?: SingleComboBoxOption) => void;\n  onFocus?: React.FormEventHandler;\n  onKeyDown?: React.KeyboardEventHandler;\n  options: SingleComboBoxOption[];\n  trailingItem?: TrailingItem;\n  value?: SingleComboBoxOption;\n}) => {\n  const {\n    fieldValue,\n    isOpen,\n    listOptionsRef,\n    selectedIndex,\n    selectedOptionRef,\n    setFieldValue,\n    setOpen,\n    setSelectedIndex,\n  } = useComboBox({ value });\n  const [filteredOptions, setFilteredOptions] =\n    useState<InternalComboBoxOption[]>(options);\n\n  const [internalValue, setInternalValue] = useState<string>(fieldValue);\n\n  const filterOptions = useCallback(\n    (fieldValue: string): InternalComboBoxOption[] => {\n      // Search options matched with either label or keywords partially\n      const filteredOptions = options.filter(\n        ({ label, keywords }: InternalComboBoxOption) =>\n          label.includes(fieldValue) ||\n          (keywords ?? []).filter((kw) => kw.includes(fieldValue)).length > 0\n      );\n\n      // labelが完全一致するものを先頭に持ってくる\n      const result = [\n        ...filteredOptions.filter((option) => option.label === fieldValue),\n        ...filteredOptions.filter((option) => option.label !== fieldValue),\n      ];\n\n      if (\n        trailingItem &&\n        (!trailingItem.isVisible || trailingItem.isVisible(fieldValue, result))\n      ) {\n        return [\n          ...result,\n          {\n            label: '',\n            id: '',\n            isTrailingItem: true,\n          },\n        ];\n      }\n\n      return [\n        ...result,\n        ...(fixedItems\n          ? (fixedItems\n              .map((fixedItem: FixedItem, i: number) =>\n                !fixedItem.isVisible || fixedItem.isVisible(fieldValue, result)\n                  ? {\n                      label: '',\n                      id: '',\n                      fixedItemType: i === 0 ? 'more' : 'add',\n                    }\n                  : undefined\n              )\n              .filter((v) => v) as InternalComboBoxOption[])\n          : []),\n      ];\n    },\n    [fixedItems, options, trailingItem]\n  );\n\n  const handleSelectOption = useCallback(\n    (option?: InternalComboBoxOption): void => {\n      const value = option ? option.label : '';\n      setFieldValue(value);\n      if (onChange && fieldValue !== value) {\n        onChange(option);\n      }\n    },\n    // ここに fieldValue を追加すると挙動がおかしくなるため、追加しない\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [onChange, setFieldValue]\n  );\n\n  const onFieldFocus = useCallback(\n    (e: React.FormEvent<HTMLInputElement>): void => {\n      setOpen(true);\n      // focus した場合は選択項目を全て表示する\n      setInternalValue('');\n      const filteredOptions = filterOptions('');\n      setFilteredOptions(filteredOptions);\n      setSelectedIndex(value ? filteredOptions.indexOf(value) : 0);\n      if (onFocus) {\n        onFocus(e);\n      }\n    },\n    [filterOptions, onFocus, setOpen, setSelectedIndex, value]\n  );\n\n  const onFieldBlur = useCallback(\n    (e: React.FormEvent<HTMLInputElement>): void => {\n      const filteredByLabelOptions = options.filter(\n        (option: InternalComboBoxOption) => option.label === fieldValue\n      );\n      const filteredOptions = filterOptions(fieldValue);\n      const labelMatchedOption =\n        filteredByLabelOptions.length === 1\n          ? filteredByLabelOptions[0]\n          : undefined;\n      if (labelMatchedOption) {\n        handleSelectOption(labelMatchedOption);\n      } else if (\n        trailingItem?.selectIfOnly &&\n        filteredOptions.length === 1 &&\n        filteredOptions[0]?.isTrailingItem\n      ) {\n        trailingItem.onSelect(fieldValue);\n      } else if (\n        fixedItems &&\n        fixedItems[1] &&\n        filteredOptions.length === 1 &&\n        filteredOptions[0]?.fixedItemType\n      ) {\n        fixedItems[1].onSelect(fieldValue);\n      } else if (!fieldValue) {\n        handleSelectOption();\n      } else if (value) {\n        setFieldValue(value.label);\n      }\n      setOpen(false);\n      setSelectedIndex(-1);\n      if (onBlur) {\n        onBlur(e);\n      }\n    },\n    [\n      options,\n      filterOptions,\n      fieldValue,\n      trailingItem,\n      fixedItems,\n      value,\n      setOpen,\n      setSelectedIndex,\n      onBlur,\n      handleSelectOption,\n      setFieldValue,\n    ]\n  );\n\n  const onFieldChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>): void => {\n      const newFieldValue = (e.target as HTMLInputElement).value;\n      const filteredOptions = filterOptions(fieldValue);\n\n      const selectedOption =\n        selectedIndex >= 0 ? filteredOptions[selectedIndex] : null;\n      let selectedOptionIndex = selectedOption\n        ? filterOptions(newFieldValue).indexOf(selectedOption)\n        : 0;\n      // 完全一致するものがあれば先頭に選択を変える\n      if (filteredOptions.find(({ label }) => label === newFieldValue))\n        selectedOptionIndex = 0;\n      if (selectedOptionIndex === -1) selectedOptionIndex = 0;\n      // 空の場合は先頭を指す\n      if (newFieldValue === '') selectedOptionIndex = 0;\n\n      // trailingItem, fixedItemを選択中に非表示になる場合は選択を解除する\n      if (\n        (selectedOption?.isTrailingItem &&\n          trailingItem?.isVisible &&\n          !trailingItem.isVisible(newFieldValue, filteredOptions)) ||\n        (selectedOption?.fixedItemType === 'more' &&\n          fixedItems &&\n          fixedItems[0]?.isVisible &&\n          !fixedItems[0].isVisible(newFieldValue, filteredOptions)) ||\n        (selectedOption?.fixedItemType === 'add' &&\n          fixedItems &&\n          fixedItems[1]?.isVisible &&\n          !fixedItems[1].isVisible(newFieldValue, filteredOptions))\n      ) {\n        selectedOptionIndex = -1;\n      }\n      setFieldValue(newFieldValue);\n      setInternalValue(newFieldValue);\n      setOpen(true);\n      setSelectedIndex(selectedOptionIndex);\n      // onChange はoption確定時に呼ぶのでここでは呼ばない\n    },\n    [\n      filterOptions,\n      fieldValue,\n      selectedIndex,\n      trailingItem,\n      fixedItems,\n      setFieldValue,\n      setOpen,\n      setSelectedIndex,\n    ]\n  );\n\n  const onSelectOption = useCallback(\n    (option: InternalComboBoxOption): void => {\n      if (option.disabled) {\n        return;\n      }\n\n      if (option.isTrailingItem) {\n        trailingItem?.onSelect(internalValue);\n        if (trailingItem && !trailingItem.isMoreOption) {\n          setSelectedIndex(-1);\n          setOpen(false);\n        }\n        return;\n      } else if (fixedItems && option.fixedItemType) {\n        if (option.fixedItemType === 'more') {\n          fixedItems[0].onSelect(internalValue);\n          return;\n        }\n        fixedItems[1]?.onSelect(internalValue);\n        setSelectedIndex(-1);\n        setOpen(false);\n        return;\n      }\n      handleSelectOption(option);\n      setSelectedIndex(-1);\n      setOpen(false);\n    },\n    [\n      fixedItems,\n      handleSelectOption,\n      setOpen,\n      trailingItem,\n      internalValue,\n      setSelectedIndex,\n    ]\n  );\n\n  const onFieldKeyDown = useCallback(\n    (e: React.KeyboardEvent<HTMLInputElement>): void => {\n      switch (e.keyCode) {\n        case KeyCodes.UP:\n          if (selectedIndex > 0) {\n            setSelectedIndex(selectedIndex - 1);\n          } else {\n            setSelectedIndex(filterOptions(internalValue).length - 1);\n          }\n          e.preventDefault();\n          break;\n        case KeyCodes.DOWN:\n          if (\n            selectedIndex >= 0 &&\n            selectedIndex < filterOptions(internalValue).length - 1\n          ) {\n            setSelectedIndex(selectedIndex + 1);\n          } else {\n            setSelectedIndex(0);\n          }\n          e.preventDefault();\n          break;\n        case KeyCodes.ENTER:\n          if (selectedIndex >= 0) {\n            const selectedOption = filterOptions(internalValue)[selectedIndex];\n            if (selectedOption) {\n              onSelectOption(selectedOption);\n            }\n          }\n          e.preventDefault();\n          break;\n      }\n      if (onKeyDown) {\n        onKeyDown(e);\n      }\n    },\n    [\n      filterOptions,\n      internalValue,\n      onKeyDown,\n      onSelectOption,\n      selectedIndex,\n      setSelectedIndex,\n    ]\n  );\n\n  useEffect(() => {\n    const filteredOptions = filterOptions(fieldValue);\n    setFilteredOptions(filteredOptions);\n  }, [fieldValue, filterOptions]);\n\n  return {\n    filteredOptions,\n    isOpen,\n    fieldValue,\n    onFieldBlur,\n    onFieldFocus,\n    onFieldChange,\n    onFieldKeyDown,\n    selectedIndex,\n    listOptionsRef,\n    onSelectOption,\n    selectedOptionRef,\n  };\n};\n"
  },
  {
    "path": "src/lv2/descriptionList/DescriptionList.stories.tsx",
    "content": "import * as React from 'react';\n\nimport DescriptionList from './DescriptionList';\nimport TextField from '../../lv1/forms/TextField';\nimport { commonKnobs } from '../../../stories';\nimport { number, text, select } from '@storybook/addon-knobs';\nimport Note from '../../lv1/typography/Note';\n\nexport default {\n  component: DescriptionList,\n};\n\nexport const DescriptionListComponent = () => (\n  <DescriptionList\n    headCellMinWidth={\n      number('headCellMinWidth', 0, undefined, 'DescriptionList') || undefined\n    }\n    listContents={[\n      {\n        title: text('title', '見出し', 'DescriptionList'),\n        value: text('value', 'テキストテキストテキスト', 'DescriptionList'),\n      },\n      {\n        title: '見出し2',\n        value: 'テキスト2',\n      },\n      { title: '見出し3', value: <a href=\"hoge\">fuga</a> },\n      {\n        title: '見出し見出し見出し',\n        value: (\n          <>\n            テキスト\n            <br />\n            テキスト\n            <br />\n            テキスト\n            <br />\n            テキスト\n          </>\n        ),\n      },\n      {\n        title: (\n          <label htmlFor=\"descriptionList-textfield-1\">\n            見出し見出し見出し\n          </label>\n        ),\n        value: <TextField id=\"descriptionList-textfield-1\" />,\n      },\n      {\n        title: (\n          <label htmlFor=\"descriptionList-textfield-2\">\n            見出し見出し見出し\n          </label>\n        ),\n        value: (\n          <>\n            <TextField id=\"descriptionList-textfield-2\" />\n            <Note marginTop marginSize=\"xSmall\">\n              全角英数で入力してください\n            </Note>\n          </>\n        ),\n      },\n    ]}\n    spacing={\n      select(\n        'Spacing',\n        {\n          Normal: 'normal',\n          Compact: 'compact',\n          undefined: '',\n        },\n        '',\n        'DescriptionList'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/descriptionList/DescriptionList.tsx",
    "content": "import * as React from 'react';\nimport DescriptionListHeadCell from '../../lv1/lists/DescriptionListHeadCell';\nimport DescriptionListCell from '../../lv1/lists/DescriptionListCell';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  listContents: Array<{\n    title: React.ReactNode;\n    value?: React.ReactNode;\n  }>;\n  /**\n   * 見出しセルの最小幅を設定します\n   */\n  headCellMinWidth?: number;\n  /**\n   * リストの高さを設定します\n   */\n  spacing?: 'normal' | 'compact';\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * ## accessibility\n * DescriptionListにてフィールドを扱う場合、「フィールドとラベル」の紐付けを実装時に行う必要があります。\n *\n * 典型的な例として、以下のような対応が挙げられます。\n *\n * - valueに含まれるフィールドにidを付与する。\n * - titleを<label>で囲み、htmlForにフィールドのidを指定する\n *\n * storyのフィールドのある行が実装例として参考になります。\n *\n */\nconst DescriptionList: React.FC<Props> = (props: Props) => {\n  const {\n    listContents,\n    headCellMinWidth,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    spacing,\n  } = props;\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-descriptionList',\n        { responsive: useResponsive() },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginSize,\n          marginTop,\n        }\n      )}\n    >\n      <table className=\"vb-descriptionList__table\">\n        <thead className=\"vb-descriptionList__header\">\n          <tr>\n            <th>項目名</th>\n            <th>内容</th>\n          </tr>\n        </thead>\n        <tbody>\n          {listContents.map((listCont, index) => (\n            <tr\n              className={vbClassNames('vb-descriptionList__row', {\n                modifier: { spacingCompact: spacing === 'compact' },\n              })}\n              key={index}\n            >\n              <DescriptionListHeadCell\n                minWidth={headCellMinWidth}\n                spacing={spacing}\n              >\n                {listCont.title}\n              </DescriptionListHeadCell>\n              <DescriptionListCell>{listCont.value}</DescriptionListCell>\n            </tr>\n          ))}\n        </tbody>\n      </table>\n    </div>\n  );\n};\n\nexport default DescriptionList;\n"
  },
  {
    "path": "src/lv2/dialogs/GuideDialog.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { text, number } from '@storybook/addon-knobs';\nimport GuideDialog from './GuideDialog';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport { commonKnobs } from '../../../stories';\nimport ToggleDialog from './ToggleDialog';\nimport { walkthroughImage } from './parts/walkthroughImage';\n\nexport default {\n  component: GuideDialog,\n};\n\nexport const GuideDialogComponent = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <GuideDialog\n        isOpen={isOpen}\n        id={text('Id', '', 'GuideDialog')}\n        title={text('Title', 'ガイドダイアログ', 'GuideDialog')}\n        stepCount={number('stepCount', 1, undefined, 'GuideDialog')}\n        totalStepCount={number('totalStepCount', 3, undefined, 'GuideDialog')}\n        onRequestBackward={action('backward')}\n        backwardButtonLabel={text('BackwardButtonLabel', '戻る', 'GuideDialog')}\n        onRequestForward={action('forward')}\n        forwardButtonLabel={text('ForwardButtonLabel', '次へ', 'GuideDialog')}\n        onRequestClose={toggle}\n        closeButtonLabel={text('CloseButtonLabel', 'キャンセル', 'GuideDialog')}\n        image={{\n          src: walkthroughImage,\n          alt: '',\n        }}\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          サービスのチュートリアル\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </GuideDialog>\n    )}\n  />\n);\n\nexport const GuideStartDialogComponent = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <GuideDialog\n        isOpen={isOpen}\n        title={text('Title', 'ガイドスタートダイアログ', 'GuideDialog')}\n        onRequestForward={action('forward')}\n        forwardButtonLabel={text('ForwardButtonLabel', '次へ', 'GuideDialog')}\n        onRequestClose={toggle}\n        closeButtonLabel={text('CloseButtonLabel', 'キャンセル', 'GuideDialog')}\n        image={{\n          src: walkthroughImage,\n          alt: '',\n        }}\n        type=\"start\"\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          サービスの紹介\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </GuideDialog>\n    )}\n  />\n);\n"
  },
  {
    "path": "src/lv2/dialogs/GuideDialog.tsx",
    "content": "import * as React from 'react';\nimport { MdClose } from 'react-icons/md';\nimport Button from '../../lv1/buttons/Button';\nimport MarginBase from '../../lv1/bases/MarginBase';\nimport PageTitle from '../../lv1/typography/PageTitle';\nimport IconOnlyButton from '../../lv1/buttons/IconOnlyButton';\nimport DialogBase from '../../lv1/bases/DialogBase';\nimport Dialog, { DialogContentProps } from '../../utilities/Dialog';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport GuideStepCount from './parts/GuideStepCount';\n\ntype Props = {\n  /**\n   * ダイアログの見出しとなる文字列を指定します。\n   */\n  title: string;\n  /**\n   * レイアウトのタイプを指定します。指定しない場合はstepとなります。\n   * （start: 始点用、ステップ番号と戻るボタンなし, step: ステップ用）\n   */\n  type?: 'start' | 'step';\n  /**\n   * ダイアログの本文となる要素を指定します。\n   */\n  children: React.ReactNode;\n  /**\n   * 現在のステップ番号を指定します。\n   */\n  stepCount?: number;\n  /**\n   * 合計ステップ数を指定します。\n   * stepCount / totalStepCount で表示されます。\n   */\n  totalStepCount?: number;\n  /**\n   * 戻るボタンの click ハンドラを設定します。省略した場合はボタンは表示されません。\n   */\n  onRequestBackward?: React.MouseEventHandler;\n  /**\n   * 戻るボタンのラベルとなる文字列を指定します。\n   */\n  backwardButtonLabel?: string;\n  /**\n   * 次へボタンの click ハンドラを設定します。省略した場合はボタンは表示されません。\n   */\n  onRequestForward?: React.MouseEventHandler;\n  /**\n   * 次へボタンのラベルとなる文字列を指定します。\n   */\n  forwardButtonLabel?: string;\n  /**\n   * Close ボタンの click ハンドラを設定します。\n   */\n  onRequestClose: React.MouseEventHandler;\n  /**\n   * Close ボタンのラベルとなる文字列を指定します。\n   */\n  closeButtonLabel: string;\n  /**\n   * ダイアログ内に表示する画像を指定します。\n   */\n  image?: {\n    /**\n     * 画像のURLを指定します。\n     */\n    src: string;\n    /**\n     * 画像の横幅を指定します。\n     */\n    width?: string;\n    /**\n     * 画像の縦幅を指定します。\n     */\n    height?: string;\n    /**\n     * 画像のaltを指定します。\n     */\n    alt: string;\n  };\n} & DialogContentProps &\n  CommonProps;\n\nexport const GuideDialogContent: React.FC<Props> = ({\n  id,\n  titleId,\n  title,\n  type,\n  children,\n  stepCount,\n  totalStepCount,\n  onRequestBackward,\n  backwardButtonLabel,\n  onRequestForward,\n  forwardButtonLabel,\n  onRequestClose,\n  closeButtonLabel,\n  image,\n  ...props\n}: Props) => (\n  <div {...commonProps(props, 'vb-guideDialog', { responsive: true })} id={id}>\n    <DialogBase message>\n      <div className=\"vb-guideDialog__inner\">\n        <div className=\"vb-guideDialog__closeButtonBlock\">\n          <IconOnlyButton\n            appearance=\"tertiary\"\n            IconComponent={MdClose}\n            label=\"閉じる\"\n            onClick={onRequestClose}\n            mt={-0.5}\n            mr={-0.5}\n          />\n        </div>\n\n        <div\n          className={'vb-guideDialog__body'}\n          // 表示領域が足りないときにスクロールするので、tabIndexをつける（キーボードでスクロールできるようになる）\n          // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n          tabIndex={0}\n        >\n          {image && (\n            <img\n              className=\"vb-guideDialog__image\"\n              src={image.src}\n              alt={image.alt}\n              style={{\n                width: image.width,\n                height: image.height,\n              }}\n            />\n          )}\n          <PageTitle mb={1.5} id={titleId}>\n            {title}\n          </PageTitle>\n          {children}\n        </div>\n\n        {type === 'start' ? (\n          <>\n            {onRequestForward && (\n              <MarginBase mt={1}>\n                <Button\n                  hasMinWidth\n                  appearance=\"primary\"\n                  onClick={onRequestForward}\n                >\n                  {forwardButtonLabel || '次へ'}\n                </Button>\n              </MarginBase>\n            )}\n            <MarginBase mt={1}>\n              <Button onClick={onRequestClose}>{closeButtonLabel}</Button>\n            </MarginBase>\n          </>\n        ) : (\n          <>\n            {stepCount && totalStepCount && totalStepCount > 1 && (\n              <GuideStepCount\n                stepCount={stepCount}\n                totalStepCount={totalStepCount}\n                mt={1}\n              />\n            )}\n            <div className=\"vb-guideDialog__buttonBlock\">\n              <MarginBase mt={1}>\n                {onRequestBackward && (\n                  <Button hasMinWidth onClick={onRequestBackward}>\n                    {backwardButtonLabel || '戻る'}\n                  </Button>\n                )}\n              </MarginBase>\n              <MarginBase mt={1}>\n                {onRequestForward ? (\n                  <Button\n                    hasMinWidth\n                    appearance=\"primary\"\n                    onClick={onRequestForward}\n                  >\n                    {forwardButtonLabel || '次へ'}\n                  </Button>\n                ) : (\n                  <Button\n                    hasMinWidth\n                    appearance=\"primary\"\n                    onClick={onRequestClose}\n                  >\n                    {closeButtonLabel || '閉じる'}\n                  </Button>\n                )}\n              </MarginBase>\n            </div>\n          </>\n        )}\n      </div>\n    </DialogBase>\n  </div>\n);\n\n/**\n * チュートリアルなどのガイドで使用します。\n *\n * - `isOpen` propで開閉します\n *\n * ## accessibility\n * dialogが閉じた際、dialogが開く直前にフォーカスしていた要素（多くの場合はdialogを開かせたボタン）に戻るようになっています。\n *\n * ただし、UIの状態の変化等の理由でdialogが開く直前にフォーカスしていた要素に戻れない場合は、戻り先として適切な任意の要素を指定するようにしてください。(`elementFocusAfterClose`を使って指定できます)\n *\n */\nconst GuideDialog = (\n  props: Omit<Props, 'titleId'> &\n    Pick<\n      Parameters<typeof Dialog>[0],\n      'isOpen' | 'elementFocusAfterClose' | 'contentRef'\n    >\n) => (\n  <Dialog\n    id={props.id}\n    alertDialog={true}\n    contentRef={props.contentRef}\n    shouldCloseOnOverlayClickOrEsc={true}\n    isOpen={props.isOpen}\n    onRequestClose={props.onRequestClose}\n    elementFocusAfterClose={props.elementFocusAfterClose}\n    render={(p) => <GuideDialogContent {...props} {...p} />}\n  />\n);\nexport default GuideDialog;\n"
  },
  {
    "path": "src/lv2/dialogs/MessageDialog.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { text, boolean } from '@storybook/addon-knobs';\nimport TaskDialog from './TaskDialog';\n\nimport MessageDialog, { MessageDialogContent } from './MessageDialog';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport { commonKnobs } from '../../../stories';\nimport ToggleDialog from './ToggleDialog';\nimport ColumnBase from '../../lv1/bases/ColumnBase';\nimport { VibesProvider } from '../../utilities';\nimport { Button, SectionTitle, WithSideContent } from '../../lv1';\nimport { MdEdit, MdCheck, MdCancel } from 'react-icons/md';\n\nexport default {\n  component: MessageDialog,\n};\n\nexport const MessageDialogComponent = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <MessageDialog\n        id={text('Id', '', 'MessageDialog')}\n        isOpen={isOpen}\n        title={text('Title', 'タスクダイアログ', 'MessageDialog')}\n        onRequestClose={toggle}\n        closeButtonLabel={text(\n          'CloseButtonLabel',\n          'キャンセル',\n          'MessageDialog'\n        )}\n        responsive={boolean('Responsive', false, 'MessageDialog')}\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialog>\n    )}\n  />\n);\n\nexport const OnTaskDialog = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <>\n        <TaskDialog\n          isOpen={isOpen}\n          title=\"タスクダイアログ\"\n          onRequestClose={toggle}\n          closeButtonLabel=\"キャンセル\"\n        >\n          タスクダイアログ タスクダイアログ タスクダイアログ タスクダイアログ\n          タスクダイアログ タスクダイアログ タスクダイアログ タスクダイアログ\n          タスクダイアログ タスクダイアログ タスクダイアログ\n        </TaskDialog>\n        <MessageDialog\n          isOpen={isOpen}\n          id={text('Id', '', 'MessageDialog')}\n          title={text('Title', 'タスクダイアログ', 'MessageDialog')}\n          onRequestClose={toggle}\n          closeButtonLabel={text(\n            'CloseButtonLabel',\n            'キャンセル',\n            'MessageDialog'\n          )}\n          responsive={boolean('Responsive', false, 'MessageDialog')}\n          {...commonKnobs()}\n        >\n          <Paragraph>\n            文字量や構成要素のすくないメッセージなどは中央寄せで表示\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n          </Paragraph>\n        </MessageDialog>\n      </>\n    )}\n  />\n);\n\nexport const Responsive = () => (\n  <VibesProvider fixedLayout={false}>\n    <ToggleDialog\n      render={(isOpen, toggle) => (\n        <MessageDialog\n          isOpen={isOpen}\n          title=\"レスポンシブ\"\n          onRequestClose={toggle}\n          closeButtonLabel=\"閉じる\"\n        >\n          <Paragraph>\n            <code>responsive</code> prop または{' '}\n            <code>\n              &lt;VibesProvider responsive={'{'}false{'}'}&gt;\n            </code>{' '}\n            を使用すると、レスポンシブレイアウトで使用できます\n          </Paragraph>\n        </MessageDialog>\n      )}\n    />\n  </VibesProvider>\n);\n\nexport const BigContent = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <MessageDialog\n        isOpen={isOpen}\n        title=\"コンテンツの量が多いとき\"\n        onRequestClose={toggle}\n        closeButtonLabel=\"キャンセル\"\n      >\n        {Array(50)\n          .fill(0)\n          .map((i) => (\n            <Paragraph key={i}>\n              コンテンツの量が多い場合はスクロールします\n            </Paragraph>\n          ))}\n      </MessageDialog>\n    )}\n  />\n);\n\nexport const ContentSamples = () => (\n  <>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      <MessageDialogContent\n        title=\"メッセージダイアログ\"\n        onRequestClose={action('close')}\n        closeButtonLabel=\"OK\"\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogContent\n        title=\"メッセージダイアログ\"\n        onRequestClose={action('close')}\n        closeButtonLabel=\"OK\"\n        closeButtonAppearance=\"primary\"\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogContent\n        title=\"メッセージダイアログ\"\n        onRequestClose={action('close')}\n        closeButtonLabel=\"OK\"\n        closeButtonAppearance=\"secondary\"\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogContent\n        title=\"メッセージダイアログ\"\n        onRequestClose={action('close')}\n        closeButtonLabel=\"OK\"\n        closeButtonAppearance=\"tertiary\"\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogContent\n        title=\"メッセージダイアログ\"\n        onRequestClose={action('close')}\n        closeButtonLabel=\"OK\"\n        closeButtonAppearance=\"secondary\"\n        contentAlign=\"left\"\n      >\n        <ColumnBase ml={-1.5} mr={-1.5}>\n          <Paragraph>\n            原則としては文字量や構成要素のすくないメッセージが入ることを想定していますが、横や縦に長いコンテンツを入れざるを得ない場合は、横幅が70remまで広げられ、縦方向にはスクロールするようになります。場合に応じてColumnBaseを敷いたり、コンテンツのみを左寄せにするレイアウトも可能です。\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n          </Paragraph>\n        </ColumnBase>\n      </MessageDialogContent>\n    </div>\n  </>\n);\n\nexport const FocusElementAfterClose = () => {\n  const [mode, setMode] = React.useState<'view' | 'edit'>('view');\n  const [isModalOpen, setModalOpen] = React.useState(false);\n  const elmRef = React.useRef<HTMLHeadingElement>(null);\n  return (\n    <>\n      <WithSideContent\n        verticalAlign=\"middle\"\n        mb={1}\n        sideContent={\n          <>\n            {mode === 'view' ? (\n              <Button IconComponent={MdEdit} onClick={() => setMode('edit')}>\n                編集\n              </Button>\n            ) : (\n              <>\n                <Button\n                  IconComponent={MdCheck}\n                  appearance=\"primary\"\n                  mr={1}\n                  onClick={() => setModalOpen(true)}\n                >\n                  保存\n                </Button>\n                <Button\n                  IconComponent={MdCancel}\n                  appearance=\"tertiary\"\n                  onClick={() => setMode('view')}\n                >\n                  キャンセル\n                </Button>\n              </>\n            )}\n            <MessageDialog\n              title=\"変更を反映しました\"\n              onRequestClose={() => {\n                setMode('view');\n                setModalOpen(false);\n              }}\n              closeButtonLabel=\"OK\"\n              isOpen={isModalOpen}\n              elementFocusAfterClose={\n                (elmRef.current as HTMLElement) || undefined\n              }\n            >\n              なんか別の画面で見られたりします\n            </MessageDialog>\n          </>\n        }\n      >\n        <SectionTitle ref={elmRef}>見出し</SectionTitle>\n      </WithSideContent>\n      <Paragraph mb={1}>\n        <code>elementFocusAfterClose</code>\n        を指定することで、ダイアログを閉じたときに特定の要素にフォーカスを移すことができます。\n      </Paragraph>\n      <Paragraph mb={1}>\n        モーダルを開くのに使用したボタンが、ダイアログを閉じたときに存在しなくなる場合に使用します。\n      </Paragraph>\n      <Paragraph>\n        このサンプルでは編集モードから保存するときに確認ダイアログを表示し、閉じると見出し部分にフォーカスします\n      </Paragraph>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/dialogs/MessageDialog.tsx",
    "content": "import * as React from 'react';\nimport PageTitle from '../../lv1/typography/PageTitle';\nimport Button, { ButtonAppearanceType } from '../../lv1/buttons/Button';\nimport DialogBase from '../../lv1/bases/DialogBase';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport Dialog, { DialogContentProps } from '../../utilities/Dialog';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  /**\n   * ダイアログの見出しとなる文字列を指定します。（場合に応じて、アイコンを並べるなどもできます）\n   */\n  title: React.ReactNode;\n  /**\n   * ダイアログの本文となる要素を指定します。\n   */\n  children: React.ReactNode;\n  /**\n   * Close ボタンのラベルとなる文字列を指定します。\n   */\n  closeButtonLabel: string;\n  /**\n   * 導線の優先度から、ボタンの種類を指定するのに使います。\n   * primaryは背景ベタ塗り+白字、secondaryは白背景+グレーの枠線+リンク色字、tertiaryは枠線なし+リンク色字となります。\n   */\n  closeButtonAppearance?: ButtonAppearanceType;\n  /**\n   * 指定するとブラウザ幅に応じてダイアログも狭くなります。指定しない場合の幅は 40 rem 固定です。\n   */\n  responsive?: boolean;\n  /**\n   * コンテントの揃えを指定できます。デフォルトはcenterですが、情報量が多いときなど左揃えにすることもできます。\n   */\n  contentAlign?: 'left';\n} & DialogContentProps &\n  CommonProps;\n\n/**\n * Storybookの都合でDocsに表示されていませんが、 `isOpen` propで開閉します\n */\nexport const MessageDialogContent: React.FC<Props> = (props: Props) => {\n  const {\n    id,\n    titleId,\n    title,\n    children,\n    onRequestClose,\n    closeButtonLabel,\n    closeButtonAppearance,\n    responsive,\n    contentAlign,\n  } = props;\n  const baseClassName = 'vb-messageDialog';\n\n  // 雑にに書いてますが、各パーツをコンポーネントとして切り出すリファクタをする際に直します。\n  const alignLeftClass =\n    contentAlign === 'left' ? 'vb-messageDialog__body--alignLeft' : '';\n  return (\n    <div\n      {...commonProps(props, baseClassName, {\n        responsive: useResponsive(responsive),\n      })}\n      id={id}\n    >\n      <DialogBase message paddingSize=\"zero\">\n        <div className={`${baseClassName}__inner`}>\n          <div className={`${baseClassName}__header`}>\n            <PageTitle id={titleId}>{title}</PageTitle>\n          </div>\n          <div\n            className={`${baseClassName}__body ${alignLeftClass}`}\n            // 表示領域が足りないときにスクロールするので、tabIndexをつける（キーボードでスクロールできるようになる）\n            // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n            tabIndex={0}\n          >\n            {children}\n          </div>\n          <div className={`${baseClassName}__footer`}>\n            <Button\n              hasMinWidth\n              appearance={closeButtonAppearance}\n              onClick={onRequestClose}\n            >\n              {closeButtonLabel}\n            </Button>\n          </div>\n        </div>\n      </DialogBase>\n    </div>\n  );\n};\n\n/**\n * 確認に用いる閉じるボタンのみのダイアログです\n *\n * - 確認はなるべく短いメッセージにしましょう。（データの内容を表示するなど表示領域が必要な場合は、横幅は70remまで伸び縦にはスクロールが起こります）\n * - 選択肢が1つしかないため、Escキー押下またはモーダル領域外のクリックで閉じられます\n *\n * ## accessibility\n * dialogが閉じた際、dialogが開く直前にフォーカスしていた要素（多くの場合はdialogを開かせたボタン）に戻るようになっています。\n *\n * ただし、UIの状態の変化等の理由でdialogが開く直前にフォーカスしていた要素に戻れない場合は、戻り先として適切な任意の要素を指定するようにしてください。(`elementFocusAfterClose`を使って指定できます)\n */\nconst MessageDialog = (\n  props: Omit<Props, 'titleId'> &\n    Pick<\n      Parameters<typeof Dialog>[0],\n      'isOpen' | 'elementFocusAfterClose' | 'contentRef'\n    >\n) => (\n  <Dialog\n    id={props.id}\n    alertDialog={true}\n    contentRef={props.contentRef}\n    shouldCloseOnOverlayClickOrEsc={true}\n    isOpen={props.isOpen}\n    onRequestClose={props.onRequestClose}\n    elementFocusAfterClose={props.elementFocusAfterClose}\n    render={(p) => <MessageDialogContent {...props} {...p} />}\n  />\n);\n\nexport default MessageDialog;\n"
  },
  {
    "path": "src/lv2/dialogs/MessageDialogConfirm.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { MdOpenInNew, MdEdit, MdCheck, MdCancel } from 'react-icons/md';\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\n\nimport MessageDialogConfirm, {\n  MessageDialogConfirmContent,\n} from './MessageDialogConfirm';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport { commonKnobs } from '../../../stories';\nimport ToggleDialog from './ToggleDialog';\nimport TaskDialog from './TaskDialog';\nimport ColumnBase from '../../lv1/bases/ColumnBase';\nimport { VibesProvider } from '../../utilities';\nimport { Button, SectionTitle, WithSideContent } from '../../lv1';\n\nexport default {\n  component: MessageDialogConfirm,\n};\n\nexport const MessageDialogConfirmComponent = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <MessageDialogConfirm\n        id={text('Id', '', 'MessageDialogConfirm')}\n        isOpen={isOpen}\n        title={text(\n          'Title',\n          'タスクダイアログ（確認）',\n          'MessageDialogConfirm'\n        )}\n        onRequestClose={toggle}\n        onConfirm={action('confirm')}\n        closeButtonLabel={text(\n          'CloseButtonLabel',\n          'キャンセル',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonLabel={text(\n          'ConfirmButtonLabel',\n          'OK',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonHref={text(\n          'ConfirmButtonHref',\n          '',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonTarget={select(\n          'ConfirmButtonTarget',\n          {\n            _blank: '_blank',\n            _self: '_self',\n          },\n          '_self',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonIconComponent={\n          boolean('ConfirmButtonWithIcon', false, 'MessageDialogConfirm')\n            ? MdOpenInNew\n            : undefined\n        }\n        confirmButtonIconPosition={select(\n          'ConfirmButtonIconPosition',\n          { left: 'left', right: 'right' },\n          'left',\n          'MessageDialogConfirm'\n        )}\n        responsive={boolean('Responsive', false, 'MessageDialogConfirm')}\n        mobileButtonLayout={\n          select(\n            'mobileButtonLayout',\n            {\n              row: 'row',\n              column: 'column',\n              undefined: '',\n            },\n            '',\n            'MessageDialogConfirm'\n          ) || undefined\n        }\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogConfirm>\n    )}\n  />\n);\n\nexport const OnTaskDialog = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <>\n        <TaskDialog\n          isOpen={isOpen}\n          title=\"タスクダイアログ\"\n          onRequestClose={toggle}\n          closeButtonLabel=\"キャンセル\"\n        >\n          タスクダイアログ タスクダイアログ タスクダイアログ タスクダイアログ\n          タスクダイアログ タスクダイアログ タスクダイアログ タスクダイアログ\n          タスクダイアログ タスクダイアログ タスクダイアログ\n        </TaskDialog>\n        <MessageDialogConfirm\n          isOpen={isOpen}\n          id={text('Id', '', 'MessageDialogConfirm')}\n          title={text(\n            'Title',\n            'タスクダイアログ（確認）',\n            'MessageDialogConfirm'\n          )}\n          onRequestClose={toggle}\n          onConfirm={toggle}\n          closeButtonLabel={text(\n            'CloseButtonLabel',\n            'キャンセル',\n            'MessageDialogConfirm'\n          )}\n          confirmButtonLabel={text(\n            'ConfirmButtonLabel',\n            'OK',\n            'MessageDialogConfirm'\n          )}\n          responsive={boolean('Responsive', false, 'MessageDialogConfirm')}\n          mobileButtonLayout={\n            select(\n              'mobileButtonLayout',\n              {\n                row: 'row',\n                column: 'column',\n                undefined: '',\n              },\n              '',\n              'MessageDialogConfirm'\n            ) || undefined\n          }\n          {...commonKnobs()}\n        >\n          <Paragraph>\n            文字量や構成要素のすくないメッセージなどは中央寄せで表示\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n          </Paragraph>\n        </MessageDialogConfirm>\n      </>\n    )}\n  />\n);\n\nexport const Responsive = () => (\n  <VibesProvider fixedLayout={false}>\n    <ToggleDialog\n      render={(isOpen, toggle) => (\n        <MessageDialogConfirm\n          isOpen={isOpen}\n          title=\"レスポンシブ\"\n          onRequestClose={toggle}\n          confirmButtonLabel=\"OK\"\n          onConfirm={toggle}\n          closeButtonLabel=\"キャンセル\"\n        >\n          <Paragraph>\n            <code>responsive</code> prop または{' '}\n            <code>\n              &lt;VibesProvider responsive={'{'}false{'}'}&gt;\n            </code>{' '}\n            を使用すると、レスポンシブレイアウトで使用できます\n          </Paragraph>\n        </MessageDialogConfirm>\n      )}\n    />\n  </VibesProvider>\n);\n\nexport const BigContent = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <MessageDialogConfirm\n        isOpen={isOpen}\n        title=\"コンテンツの量が多いとき\"\n        onRequestClose={toggle}\n        confirmButtonLabel=\"OK\"\n        onConfirm={toggle}\n        closeButtonLabel=\"キャンセル\"\n      >\n        {Array(50)\n          .fill(0)\n          .map((i) => (\n            <Paragraph key={i}>\n              コンテンツの量が多い場合はスクロールします\n            </Paragraph>\n          ))}\n      </MessageDialogConfirm>\n    )}\n  />\n);\nexport const ContentSamples = () => (\n  <>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogConfirmContent\n        title=\"メッセージダイアログ（確認）\"\n        onRequestClose={action('close')}\n        onConfirm={action('confirm')}\n        closeButtonLabel=\"キャンセル\"\n        confirmButtonLabel=\"OK\"\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogConfirmContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogConfirmContent\n        title=\"メッセージダイアログ（デンジャー）\"\n        onRequestClose={action('close')}\n        onConfirm={action('confirm')}\n        closeButtonLabel=\"キャンセル\"\n        confirmButtonLabel=\"OK\"\n        danger\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogConfirmContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogConfirmContent\n        title=\"メッセージダイアログ（disabled）\"\n        onRequestClose={action('close')}\n        onConfirm={action('confirm')}\n        closeButtonLabel=\"キャンセル\"\n        confirmButtonLabel=\"OK\"\n        disabled\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogConfirmContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogConfirmContent\n        title=\"メッセージダイアログ（suspend）\"\n        onRequestClose={action('close')}\n        onConfirm={action('confirm')}\n        closeButtonLabel=\"キャンセル\"\n        confirmButtonLabel=\"OK\"\n        suspend\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogConfirmContent>\n    </div>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <MessageDialogConfirmContent\n        title=\"メッセージダイアログ（情報量が多い場合）\"\n        onRequestClose={action('close')}\n        onConfirm={action('confirm')}\n        closeButtonLabel=\"キャンセル\"\n        confirmButtonLabel=\"OK\"\n        contentAlign=\"left\"\n      >\n        <ColumnBase ml={-1.5} mr={-1.5}>\n          <Paragraph>\n            原則としては文字量や構成要素のすくないメッセージが入ることを想定していますが、横や縦に長いコンテンツを入れざるを得ない場合は、横幅が70remまで広げられ、縦方向にはスクロールするようになります。場合に応じてColumnBaseを敷いたり、コンテンツのみを左寄せにするレイアウトも可能です。\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n            <br />\n            テキストテキストテキストテキストテキストテキスト\n          </Paragraph>\n        </ColumnBase>\n      </MessageDialogConfirmContent>\n    </div>\n  </>\n);\n\nexport const ResponsiveMessageDialogConfirmSample = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <MessageDialogConfirm\n        id={text('Id', '', 'MessageDialogConfirm')}\n        isOpen={isOpen}\n        title=\"モバイルでボタンが横並びになる例\"\n        onRequestClose={toggle}\n        onConfirm={action('confirm')}\n        closeButtonLabel={text(\n          'CloseButtonLabel',\n          'キャンセル',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonLabel={text(\n          'ConfirmButtonLabel',\n          'OK',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonHref={text(\n          'ConfirmButtonHref',\n          '',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonTarget={select(\n          'ConfirmButtonTarget',\n          {\n            _blank: '_blank',\n            _self: '_self',\n          },\n          '_self',\n          'MessageDialogConfirm'\n        )}\n        confirmButtonIconComponent={\n          boolean('ConfirmButtonWithIcon', false, 'MessageDialogConfirm')\n            ? MdOpenInNew\n            : undefined\n        }\n        confirmButtonIconPosition={select(\n          'ConfirmButtonIconPosition',\n          { left: 'left', right: 'right' },\n          'left',\n          'MessageDialogConfirm'\n        )}\n        responsive={true}\n        mobileButtonLayout=\"row\"\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          文字量や構成要素のすくないメッセージなどは中央寄せで表示\n          <br />\n          テキストテキストテキストテキストテキストテキスト\n        </Paragraph>\n      </MessageDialogConfirm>\n    )}\n  />\n);\n\nexport const FocusElementAfterClose = () => {\n  const [mode, setMode] = React.useState<'view' | 'edit'>('view');\n  const [isModalOpen, setModalOpen] = React.useState(false);\n  const elmRef = React.useRef<HTMLHeadingElement>(null);\n  return (\n    <>\n      <WithSideContent\n        verticalAlign=\"middle\"\n        mb={1}\n        sideContent={\n          <>\n            {mode === 'view' ? (\n              <Button IconComponent={MdEdit} onClick={() => setMode('edit')}>\n                編集\n              </Button>\n            ) : (\n              <>\n                <Button\n                  IconComponent={MdCheck}\n                  appearance=\"primary\"\n                  mr={1}\n                  onClick={() => setModalOpen(true)}\n                >\n                  保存\n                </Button>\n                <Button\n                  IconComponent={MdCancel}\n                  appearance=\"tertiary\"\n                  onClick={() => setMode('view')}\n                >\n                  キャンセル\n                </Button>\n              </>\n            )}\n            <MessageDialogConfirm\n              title=\"変更を保存しますか？\"\n              onConfirm={() => {\n                setMode('view');\n                setModalOpen(false);\n              }}\n              onRequestClose={() => setModalOpen(false)}\n              confirmButtonLabel=\"保存\"\n              closeButtonLabel=\"キャンセル\"\n              isOpen={isModalOpen}\n              elementFocusAfterClose={\n                (elmRef.current as HTMLElement) || undefined\n              }\n              danger\n            >\n              この変更により、よからぬことが起きることがあります。本当に保存しますか？\n            </MessageDialogConfirm>\n          </>\n        }\n      >\n        <SectionTitle ref={elmRef}>見出し</SectionTitle>\n      </WithSideContent>\n      <Paragraph mb={1}>\n        <code>elementFocusAfterClose</code>\n        を指定することで、ダイアログを閉じたときに特定の要素にフォーカスを移すことができます。\n      </Paragraph>\n      <Paragraph mb={1}>\n        モーダルを開くのに使用したボタンが、ダイアログを閉じたときに存在しなくなる場合に使用します。\n      </Paragraph>\n      <Paragraph>\n        このサンプルでは編集モードから保存するときに確認ダイアログを表示し、閉じると見出し部分にフォーカスします\n      </Paragraph>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/dialogs/MessageDialogConfirm.tsx",
    "content": "import * as React from 'react';\nimport PageTitle from '../../lv1/typography/PageTitle';\nimport Button from '../../lv1/buttons/Button';\nimport Dialog, { DialogContentProps } from '../../utilities/Dialog';\nimport DialogBase from '../../lv1/bases/DialogBase';\nimport ButtonGroup from '../buttonGroup/ButtonGroup';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype Props = {\n  /**\n   * ダイアログの見出しとなる文字列を指定します。（場合に応じて、アイコンを並べるなどもできます）\n   */\n  title: React.ReactNode;\n  /**\n   * ダイアログの本文となる要素を指定します。\n   */\n  children: React.ReactNode;\n  /**\n   * Confirm ボタンの click ハンドラを設定します。\n   */\n  onConfirm: React.MouseEventHandler;\n  /**\n   * Confirm ボタンのラベルとなる文字列を指定します。\n   */\n  confirmButtonLabel: string;\n  /**\n   * Confirm ボタンの押下時に遷移させるURLを指定します。指定した場合は `<a>` 要素、空文字列もしくはundefinedの場合は `<button>` 要素となります\n   */\n  confirmButtonHref?: string;\n  /**\n   * Confirm ボタンの target を設定します\n   */\n  confirmButtonTarget?: string;\n  /**\n   * Confirm ボタンの アイコンの配置箇所を設定します\n   */\n  confirmButtonIconPosition?: 'left' | 'right';\n  /**\n   * Confirm ボタンの アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n   */\n  confirmButtonIconComponent?: React.ElementType;\n  /**\n   * Close ボタンのラベルとなる文字列を指定します。\n   */\n  closeButtonLabel: string;\n  /**\n   * Confirm ボタン、 Close ボタンともに disalbed に設定します。データの読み込み中や Confirm ボタンを押した後のレスポンス待ちの間など、ユーザーに何も操作させず待たせたいときに指定します。\n   */\n  disabled?: boolean;\n  /**\n   * Confirm ボタンのみを disalbed に設定します。Confirm 前に何かしらの操作が必要な場合など、「キャンセルはできるけど実行はできない」場合に指定します。\n   */\n  suspend?: boolean;\n  /**\n   * Confirm ボタンを danger に設定します。ボタンを押したものの動作が危険性を伴う場合に指定します。\n   */\n  danger?: boolean;\n  /**\n   * 指定するとブラウザ幅に応じてダイアログも狭くなります。指定しない場合の幅は 40 rem 固定です。\n   */\n  responsive?: boolean;\n  /**\n   * コンテントの揃えを指定できます。デフォルトはcenterですが、情報量が多いときなど左揃えにすることもできます。\n   */\n  contentAlign?: 'left';\n  /**\n   * ボタンのレスポンシブ時の並び方を指定できます。\n   */\n  mobileButtonLayout?: 'row' | 'column';\n} & DialogContentProps &\n  CommonProps;\n\nexport const MessageDialogConfirmContent: React.FC<Props> = (props: Props) => {\n  const {\n    id,\n    titleId,\n    title,\n    children,\n    onRequestClose,\n    onConfirm,\n    confirmButtonLabel,\n    confirmButtonHref,\n    confirmButtonTarget,\n    confirmButtonIconPosition,\n    confirmButtonIconComponent,\n    closeButtonLabel,\n    disabled,\n    suspend,\n    danger,\n    contentAlign,\n    mobileButtonLayout,\n  } = props;\n  const baseClassName = 'vb-messageDialog';\n  // 雑にに書いてますが、各パーツをコンポーネントとして切り出すリファクタをする際に直します。\n  const alignLeftClass =\n    contentAlign === 'left' ? 'vb-messageDialog__body--alignLeft' : '';\n  const responsive = useResponsive(props.responsive);\n  return (\n    <div\n      {...commonProps(props, baseClassName, {\n        responsive,\n      })}\n      id={id}\n    >\n      <DialogBase message paddingSize=\"zero\">\n        <div className={`${baseClassName}__inner`}>\n          <div className={`${baseClassName}__header`}>\n            <PageTitle id={titleId}>{title}</PageTitle>\n          </div>\n          <div\n            className={`${baseClassName}__body ${alignLeftClass}`}\n            // 表示領域が足りないときにスクロールするので、tabIndexをつける（キーボードでスクロールできるようになる）\n            // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n            tabIndex={0}\n          >\n            {children}\n          </div>\n          <div className={`${baseClassName}__footer`}>\n            <ButtonGroup\n              responsive={responsive}\n              mobileButtonLayout={mobileButtonLayout}\n            >\n              <Button\n                onClick={onConfirm}\n                disabled={!!disabled || !!suspend}\n                primary={!danger}\n                danger={!!danger}\n                href={confirmButtonHref}\n                target={confirmButtonTarget}\n                iconPosition={confirmButtonIconPosition}\n                IconComponent={confirmButtonIconComponent}\n                hasMinWidth\n              >\n                {confirmButtonLabel}\n              </Button>\n              <Button\n                hasMinWidth\n                onClick={onRequestClose}\n                disabled={!!disabled}\n              >\n                {closeButtonLabel}\n              </Button>\n            </ButtonGroup>\n          </div>\n        </div>\n      </DialogBase>\n    </div>\n  );\n};\n\n/**\n * 操作（タスク）の確認に用いるダイアログです\n *\n * - 確認が必要となる操作の例には、削除などの不可逆的な操作や支払いなど金銭が絡むなど操作が間違うとリスクを生む場合が当てはまります。\n * - 原則として確認はなるべく、短い質問で2択で答えるようにしましょう。（データの内容を表示するなど表示領域が必要な場合は、横幅は70remまで伸び縦にはスクロールが起こります）\n * - モーダルで行う必要のあるタスク自体には `TaskDialog` を使用してください\n * - TaskDialogよりも上に表示されるので、TaskDialogでの操作に対する確認としても使えます。\n *\n * ## accessibility\n * dialogが閉じた際、dialogが開く直前にフォーカスしていた要素（多くの場合はdialogを開かせたボタン）に戻るようになっています。\n *\n * ただし、UIの状態の変化等の理由でdialogが開く直前にフォーカスしていた要素に戻れない場合は、戻り先として適切な任意の要素を指定するようにしてください。(`elementFocusAfterClose`を使って指定できます)\n *\n */\nconst MessageDialogConfirm = (\n  props: Omit<Props, 'titleId'> &\n    Pick<\n      Parameters<typeof Dialog>[0],\n      'isOpen' | 'elementFocusAfterClose' | 'contentRef'\n    >\n) => (\n  <Dialog\n    id={props.id}\n    alertDialog={true}\n    contentRef={props.contentRef}\n    shouldCloseOnOverlayClickOrEsc={false}\n    isOpen={props.isOpen}\n    onRequestClose={props.onRequestClose}\n    elementFocusAfterClose={props.elementFocusAfterClose}\n    render={(p) => <MessageDialogConfirmContent {...props} {...p} />}\n  />\n);\nexport default MessageDialogConfirm;\n"
  },
  {
    "path": "src/lv2/dialogs/TaskDialog.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { text, boolean, select } from '@storybook/addon-knobs';\nimport TaskDialog, { TaskDialogContent } from './TaskDialog';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport TextButton from '../../lv1/buttons/TextButton';\nimport CheckBox from '../../lv1/forms/CheckBox';\nimport { commonKnobs } from '../../../stories';\nimport ToggleDialog from './ToggleDialog';\nimport MessageIcon from '../messageIcon/MessageIcon';\nimport { Button } from '../../lv1';\nimport { MdAdd } from 'react-icons/md';\nimport { VibesProvider } from '../../utilities';\n\nexport default {\n  component: TaskDialog,\n};\n\nexport const TaskDialogComponent = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <TaskDialog\n        id={text('Id', '', 'TaskDialog')}\n        isOpen={isOpen}\n        title={text('Title', 'タスクダイアログ', 'TaskDialog')}\n        onRequestClose={toggle}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel={text('CloseButtonLabel', 'キャンセル', 'TaskDialog')}\n        primaryButtonLabel={text('PrimaryButtonLabel', 'OK', 'TaskDialog')}\n        danger={boolean('Danger', false, 'TaskDialog')}\n        disabled={boolean('Disabled', false, 'TaskDialog')}\n        suspend={boolean('Suspend', false, 'TaskDialog')}\n        shouldCloseOnOverlayClickOrEsc={boolean(\n          'ShouldCloseOnOverlayClickOrEsc',\n          false,\n          'TaskDialog'\n        )}\n        responsive={boolean('Responsive', false, 'TaskDialog')}\n        mobileButtonLayout={\n          select(\n            'mobileButtonLayout',\n            {\n              row: 'row',\n              column: 'column',\n              undefined: '',\n            },\n            '',\n            'TaskDialog'\n          ) || undefined\n        }\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialog>\n    )}\n  />\n);\n\nexport const HeaderSideContentSample = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <TaskDialog\n        isOpen={isOpen}\n        id={text('Id', '', 'TaskDialog')}\n        title={text('Title', 'タスクダイアログ', 'TaskDialog')}\n        onRequestClose={toggle}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel={text('CloseButtonLabel', 'キャンセル', 'TaskDialog')}\n        primaryButtonLabel={text('PrimaryButtonLabel', 'OK', 'TaskDialog')}\n        responsive={boolean('Responsive', true, 'TaskDialog')}\n        headerSideContent={<Button>ボタン</Button>}\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialog>\n    )}\n  />\n);\n\nexport const DialogFooterSample = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <TaskDialog\n        isOpen={isOpen}\n        id={text('Id', '', 'TaskDialog')}\n        title={text('Title', 'タスクダイアログ', 'TaskDialog')}\n        onRequestClose={toggle}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel={text('CloseButtonLabel', 'キャンセル', 'TaskDialog')}\n        primaryButtonLabel={text('PrimaryButtonLabel', 'OK', 'TaskDialog')}\n        responsive={boolean('Responsive', true, 'TaskDialog')}\n        footerOptionalContent={<CheckBox>チェックボックス</CheckBox>}\n        footerSideContent={<TextButton>テキストボタン</TextButton>}\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialog>\n    )}\n  />\n);\n\nexport const ResponsiveDialogFooterSample = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <TaskDialog\n        isOpen={isOpen}\n        id={text('Id', '', 'TaskDialog')}\n        title=\"モバイルで上位2ボタンだけ横並びになる例\"\n        onRequestClose={toggle}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel={text('CloseButtonLabel', 'キャンセル', 'TaskDialog')}\n        primaryButtonLabel={text('PrimaryButtonLabel', 'OK', 'TaskDialog')}\n        responsive={true}\n        footerOptionalContent={\n          <Button appearance=\"tertiary\" IconComponent={MdAdd}>\n            ターシャリボタン\n          </Button>\n        }\n        footerSideContent={<TextButton>テキストボタン</TextButton>}\n        mobileButtonLayout=\"row\"\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialog>\n    )}\n  />\n);\n\nexport const Responsive = () => (\n  <VibesProvider fixedLayout={false}>\n    <ToggleDialog\n      render={(isOpen, toggle) => (\n        <TaskDialog\n          id={text('Id', '', 'TaskDialog')}\n          isOpen={isOpen}\n          title=\"レスポンシブレイアウト\"\n          onRequestClose={toggle}\n          onPrimaryAction={toggle}\n          closeButtonLabel=\"キャンセル\"\n          primaryButtonLabel=\"OK\"\n          mobileButtonLayout={\n            select(\n              'mobileButtonLayout',\n              {\n                row: 'row',\n                column: 'column',\n                undefined: '',\n              },\n              '',\n              'TaskDialog'\n            ) || undefined\n          }\n          {...commonKnobs()}\n        >\n          <Paragraph mb={1}>\n            <code>responsive</code> prop または{' '}\n            <code>\n              &lt;VibesProvider responsive={'{'}false{'}'}&gt;\n            </code>{' '}\n            を使用すると、レスポンシブレイアウトで使用できます\n          </Paragraph>\n          <Paragraph mb={1}>\n            <code>responsive</code> prop または{' '}\n            <code>\n              &lt;VibesProvider responsive={'{'}false{'}'}&gt;\n            </code>{' '}\n            を使用すると、レスポンシブレイアウトで使用できます\n          </Paragraph>\n          <Paragraph mb={1}>\n            <code>responsive</code> prop または{' '}\n            <code>\n              &lt;VibesProvider responsive={'{'}false{'}'}&gt;\n            </code>{' '}\n            を使用すると、レスポンシブレイアウトで使用できます\n          </Paragraph>\n          <Paragraph mb={1}>\n            <code>responsive</code> prop または{' '}\n            <code>\n              &lt;VibesProvider responsive={'{'}false{'}'}&gt;\n            </code>{' '}\n            を使用すると、レスポンシブレイアウトで使用できます\n          </Paragraph>\n          <Paragraph>\n            <code>responsive</code> prop または{' '}\n            <code>\n              &lt;VibesProvider responsive={'{'}false{'}'}&gt;\n            </code>{' '}\n            を使用すると、レスポンシブレイアウトで使用できます\n          </Paragraph>\n        </TaskDialog>\n      )}\n    />\n  </VibesProvider>\n);\n\nexport const ContentLabel = () => (\n  <ToggleDialog\n    render={(isOpen, toggle) => (\n      <TaskDialog\n        isOpen={isOpen}\n        id={text('Id', '', 'TaskDialog')}\n        title={text('Title', 'タスクダイアログ', 'TaskDialog')}\n        onRequestClose={toggle}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel={text('CloseButtonLabel', 'キャンセル', 'TaskDialog')}\n        primaryButtonLabel={text('PrimaryButtonLabel', 'OK', 'TaskDialog')}\n        responsive={boolean('Responsive', true, 'TaskDialog')}\n        headerSideContent={<Button>ボタン</Button>}\n        contentLabel={text('ContentLabel', 'タスクダイアログ', 'TaskDialog')}\n        {...commonKnobs()}\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialog>\n    )}\n  />\n);\n\nexport const ContentSamples = () => (\n  <>\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <TaskDialogContent\n        title=\"タスクダイアログ\"\n        onRequestClose={action('close')}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel=\"キャンセル\"\n        primaryButtonLabel=\"OK\"\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialogContent>\n    </div>\n\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <TaskDialogContent\n        title=\"タスクダイアログ（without primaryButton）\"\n        onRequestClose={action('close')}\n        closeButtonLabel=\"キャンセル\"\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialogContent>\n    </div>\n\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <TaskDialogContent\n        title=\"タスクダイアログ（disabled）\"\n        onRequestClose={action('close')}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel=\"キャンセル\"\n        primaryButtonLabel=\"OK\"\n        danger\n        disabled\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialogContent>\n    </div>\n\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      {/* $FlowFixMe */}\n      <TaskDialogContent\n        title=\"タスクダイアログ（suspend）\"\n        onRequestClose={action('close')}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel=\"キャンセル\"\n        primaryButtonLabel=\"OK\"\n        danger\n        suspend\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialogContent>\n    </div>\n\n    <div style={{ display: 'flex', marginBottom: '1rem' }}>\n      <TaskDialogContent\n        title={\n          <>\n            タイトルに文字列と他の要素を合わせて置く例\n            {/* タイトルと合わせて使う場合はMessageIconにlargeサイズの指定があると良い */}\n            <MessageIcon ml={0.5} label=\"ヘルプ\">\n              ここに説明が入ります\n            </MessageIcon>\n          </>\n        }\n        onRequestClose={action('close')}\n        onPrimaryAction={action('primary action')}\n        closeButtonLabel=\"キャンセル\"\n        primaryButtonLabel=\"OK\"\n      >\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n        <Paragraph>\n          フォームやリストなどのユーザー操作が含まれる場合はタスクダイアログを使用\n        </Paragraph>\n      </TaskDialogContent>\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv2/dialogs/TaskDialog.tsx",
    "content": "import * as React from 'react';\nimport PageTitle from '../../lv1/typography/PageTitle';\nimport Button from '../../lv1/buttons/Button';\nimport DialogBase from '../../lv1/bases/DialogBase';\nimport DialogFooter from './parts/DialogFooter';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport Dialog, { DialogContentProps } from '../../utilities/Dialog';\nimport { useResponsive } from '../../utilities/VibesProvider';\nimport { WithSideContent } from '../..';\n\ntype Props = {\n  /**\n   * ダイアログの見出しとなります。\n   * 基本は文字列のみの想定ですが、用途に応じて他の要素を合わせて表示もできます。\n   */\n  title: React.ReactNode;\n  /**\n   * ダイアログの本文となる要素を指定します。\n   */\n  children: React.ReactNode;\n  /**\n   * プライマリボタンの click ハンドラを設定します。\n   */\n  onPrimaryAction?: React.MouseEventHandler;\n  /**\n   * プライマリボタンのラベルとなる文字列を指定します。\n   */\n  primaryButtonLabel?: string;\n  /**\n   * Close ボタンのラベルとなる文字列を指定します。\n   */\n  closeButtonLabel: string;\n  /**\n   * プライマリボタンを danger に設定します。ボタンを押したものの動作が危険性を伴う場合に指定します。\n   */\n  danger?: boolean;\n  /**\n   * プライマリボタン、 Close ボタンともに disalbed に設定します。データの読み込み中やプライマリボタンを押した後のレスポンス待ちの間など、ユーザーに何も操作させず待たせたいときに指定します。\n   */\n  disabled?: boolean;\n  /**\n   * プライマリボタンのみを disalbed に設定します。Confirm 前に何かしらの操作が必要な場合など、「キャンセルはできるけど実行はできない」場合に指定します。\n   */\n  suspend?: boolean;\n  /**\n   * Esc キーの押下やオーバーレイのクリックでダイアログを閉じられるようになります。\n   *\n   *  - 無指定の場合は `false` の状態になっています\n   *  - ダイアログ内にフォーム等がある状態で `true` にする場合は、変更がある場合に確認ダイアログを出すなどして、Esc キーの押下やオーバーレイのクリックによって作業内容が不意に消えてしまうようなことが起きないようにしてください\n   *  - ダイアログ内にフォーム等がない場合や、フォーム等の値に変更がない場合は、 `true` にして問題ありません\n   */\n  shouldCloseOnOverlayClickOrEsc?: boolean;\n  /**\n   * 指定するとブラウザ幅に応じてダイアログも狭くなります。指定しない場合の最低幅は 40 rem です。\n   */\n  responsive?: boolean;\n  /**\n   * ヘッダーに右寄せでコンテンツを配置したい場合に使います。\n   */\n  headerSideContent?: React.ReactNode;\n  /**\n   * 左寄せのPrimaryアクションのボタンとキャンセルボタンに続けて置きたい場合に使います。\n   */\n  footerOptionalContent?: React.ReactNode;\n  /**\n   * 右寄せに何か置きたい場合に使います。\n   */\n  footerSideContent?: React.ReactNode;\n  /**\n   * 上位2ボタンのレスポンシブ時の並び方を指定できます。\n   */\n  mobileButtonLayout?: 'row' | 'column';\n  /**\n   * モーダルのaria-labelを指定できます。\n   * 指定しなかった場合はaria-labelledbyによってタイトルの文言が参照されます。\n   */\n  contentLabel?: string;\n} & DialogContentProps &\n  CommonProps;\n\nexport const TaskDialogContent: React.FC<Props> = (props: Props) => {\n  const {\n    id,\n    titleId,\n    title,\n    children,\n    onRequestClose,\n    onPrimaryAction,\n    primaryButtonLabel,\n    closeButtonLabel,\n    disabled,\n    suspend,\n    danger,\n    headerSideContent,\n    footerOptionalContent,\n    footerSideContent,\n    mobileButtonLayout,\n  } = props;\n  const baseClassName = 'vb-taskDialog';\n  const responsive = useResponsive(props.responsive);\n  return (\n    <div {...commonProps(props, baseClassName, { responsive })} id={id}>\n      <DialogBase paddingSize=\"zero\">\n        <div className={`${baseClassName}__inner`}>\n          <div className={`${baseClassName}__flex`}>\n            <div className={`${baseClassName}__header`}>\n              {headerSideContent ? (\n                <WithSideContent sideContent={headerSideContent}>\n                  <PageTitle id={titleId}>{title}</PageTitle>\n                </WithSideContent>\n              ) : (\n                <PageTitle id={titleId}>{title}</PageTitle>\n              )}\n            </div>\n            {/* 表示領域が足りないときにスクロールするので、tabIndexをつける（キーボードでスクロールできるようになる） */}\n            {/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */}\n            <div className={`${baseClassName}__body`} tabIndex={0}>\n              {children}\n            </div>\n            <div className={`${baseClassName}__footer`}>\n              <DialogFooter\n                responsive={responsive}\n                sideContent={footerSideContent && footerSideContent}\n                mobileButtonLayout={mobileButtonLayout}\n              >\n                {primaryButtonLabel && onPrimaryAction && (\n                  <Button\n                    onClick={onPrimaryAction}\n                    disabled={!!disabled || !!suspend}\n                    primary={!danger}\n                    danger={!!danger}\n                    hasMinWidth\n                  >\n                    {primaryButtonLabel}\n                  </Button>\n                )}\n                <Button\n                  hasMinWidth\n                  onClick={onRequestClose}\n                  disabled={!!disabled}\n                >\n                  {closeButtonLabel}\n                </Button>\n                {footerOptionalContent && footerOptionalContent}\n              </DialogFooter>\n            </div>\n          </div>\n        </div>\n      </DialogBase>\n    </div>\n  );\n};\n\n/**\n * 内部にフォームなどの複雑で大きなコンテンツを配置する場合に使用します。コンテンツ部分は大きくなるとスクロールします。\n *\n * - `isOpen` propで開閉します\n * - 表示するコンテンツが多く、入り切らない場合は `FullScreenModal` の使用を検討してください。\n *\n * ## accessibility\n * dialogが閉じた際、dialogが開く直前にフォーカスしていた要素（多くの場合はdialogを開かせたボタン）に戻るようになっています。\n *\n * ただし、UIの状態の変化等の理由でdialogが開く直前にフォーカスしていた要素に戻れない場合は、戻り先として適切な任意の要素を指定するようにしてください。(`elementFocusAfterClose`を使って指定できます)\n *\n */\nconst TaskDialog = (\n  props: Omit<Props, 'titleId'> &\n    Pick<\n      Parameters<typeof Dialog>[0],\n      'isOpen' | 'elementFocusAfterClose' | 'contentRef'\n    >\n) => (\n  <Dialog\n    id={props.id}\n    alertDialog={false}\n    shouldCloseOnOverlayClickOrEsc={!!props.shouldCloseOnOverlayClickOrEsc}\n    isOpen={props.isOpen}\n    onRequestClose={props.onRequestClose}\n    contentLabel={props.contentLabel}\n    contentRef={props.contentRef}\n    elementFocusAfterClose={props.elementFocusAfterClose}\n    render={(p) => <TaskDialogContent {...props} {...p} />}\n  />\n);\nexport default TaskDialog;\n"
  },
  {
    "path": "src/lv2/dialogs/ToggleDialog.tsx",
    "content": "import * as React from 'react';\nimport Button from '../../lv1/buttons/Button';\n\ntype ToggleDialogProps = {\n  render: (isOpen: boolean, toggle: () => void) => void;\n};\n\nconst ToggleDialog: React.FC<ToggleDialogProps> = (\n  props: ToggleDialogProps\n) => {\n  const [isOpen, setOpen] = React.useState<boolean>(false);\n  const toggle = () => setOpen(!isOpen);\n  return (\n    <>\n      <Button onClick={toggle}>open</Button>\n      {props.render(isOpen, toggle)}\n    </>\n  );\n};\nexport default ToggleDialog;\n"
  },
  {
    "path": "src/lv2/dialogs/parts/DialogFooter.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../../stories';\nimport Button from '../../../lv1/buttons/Button';\nimport TextButton from '../../../lv1/buttons/TextButton';\nimport CheckBox from '../../../lv1/forms/CheckBox';\nimport DialogFooter from './DialogFooter';\n\nexport default {\n  component: DialogFooter,\n};\n\nexport const DialogFooterComponent = () => (\n  <DialogFooter\n    sideContent={<TextButton>テキストボタン</TextButton>}\n    responsive={boolean('responsive', true, 'DialogFooter')}\n    mobileButtonLayout={\n      select(\n        'mobileButtonLayout',\n        {\n          row: 'row',\n          column: 'column',\n          undefined: '',\n        },\n        '',\n        'DialogFooter'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Button primary>ボタン1</Button>\n    <Button>ボタン2</Button>\n    <CheckBox>チェックボックス</CheckBox>\n  </DialogFooter>\n);\n\nexport const ResponsiveDialogFooter = () => (\n  <DialogFooter\n    sideContent={<TextButton>テキストボタン</TextButton>}\n    responsive={true}\n    mobileButtonLayout=\"row\"\n    {...commonKnobs()}\n  >\n    <Button primary>ボタン1</Button>\n    <Button>ボタン2</Button>\n    <CheckBox>チェックボックス</CheckBox>\n  </DialogFooter>\n);\n"
  },
  {
    "path": "src/lv2/dialogs/parts/DialogFooter.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../../utilities/commonProps';\nimport vbClassNames from '../../../utilities/vbClassNames';\nimport ButtonGroup from '../../buttonGroup/ButtonGroup';\n\ntype Props = {\n  /**\n   * 左寄せに置かれます。\n   */\n  children: React.ReactNodeArray | React.ReactNode;\n  /**\n   * 右寄せにボタン等を任意で置けます。\n   */\n  sideContent?: React.ReactNodeArray | React.ReactNode;\n  responsive?: boolean;\n  /**\n   * 上位2ボタンのレスポンシブ時の並び方を指定できます。\n   */\n  mobileButtonLayout?: 'row' | 'column';\n} & CommonProps;\n\n/**\n * Dialogのfooterに「任意のコンポーネントを置く & レスポンシブ対応する」ためのパーツです。\n *\n * 「左寄せでボタン等を並べられる」かつ「任意で右寄せに何か置ける」を想定しています。\n *\n *  レスポンシブ時は、全てのパーツが中央寄せで、縦済みになります。\n */\n\nconst DialogFooter: React.FC<Props> = (props: Props) => {\n  const { children, sideContent, responsive, mobileButtonLayout } = props;\n  const baseClassName = 'vb-DialogFooter';\n\n  return (\n    <div {...commonProps(props, baseClassName, { responsive })}>\n      <ButtonGroup\n        align=\"left\"\n        responsive={responsive}\n        mobileButtonLayout={mobileButtonLayout}\n      >\n        {children}\n      </ButtonGroup>\n      {sideContent && (\n        <div\n          className={vbClassNames(`${baseClassName}__sideContent`, {\n            modifier: { responsive },\n          })}\n        >\n          <ButtonGroup responsive={responsive}>{sideContent}</ButtonGroup>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default DialogFooter;\n"
  },
  {
    "path": "src/lv2/dialogs/parts/GuideStepCount.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../../utilities/commonProps';\n\ntype Props = {\n  stepCount: number;\n  totalStepCount: number;\n} & CommonProps;\n\nconst GuideStepCount: React.FC<Props> = (props: Props) => {\n  const { stepCount, totalStepCount } = props;\n\n  return (\n    <div {...commonProps(props, 'vb-guideStepCount')}>\n      <span className=\"vb-guideStepCount__currentStep\">{stepCount}</span>\n      <span> / </span>\n      <span>{totalStepCount}</span>\n    </div>\n  );\n};\n\nexport default GuideStepCount;\n"
  },
  {
    "path": "src/lv2/dialogs/parts/walkthroughImage.ts",
    "content": "export const walkthroughImage =\n  'data:image/gif;base64,R0lGODlhQAHwAPf/APb4+/7+/szZ6vPZg9zi6nKXxvz24Pz8/PLy8Ux6t2uRw/j6/PXek6vB3e7t7Oju9r3O5VSAupy11/D0+dXg7vbhm/bjo/r49pGt04mmzIamzv79+Pflquvw97zL3vjptfr6+UZ2tMnX6rDD3KG52YGizPnqutDc7FyGvcnU4/v8/fX08/vy1Zax1ZOqyf789f/+/P346OXs9X2eyeDo8maOwcfV6LXI4dLb5qO51XSYx/HRZY2r0fDPX/z13WCJv/PWef778U98uMLS5vHQYvnswFqFvPHSaPLWdvrwzVJ/uf39/eTe0Km/3O3y+OXo7fn17fT3++fm5Ofl5El4tZmx0t7d3Zq01vLTbPrvyfLVcqW82vPYfrLG4PXdjff29vruxf367X+gy/Du7bfK4kt5touozXibyero5+3s6/vx0cTL116IvqO1zfTbifn28YGhydTe67jD03aayHqdyUh4tvfu0/fszE99uMbS4uDl6/bqxP335Nvk8LPA0fXlsp2218/Y5evp6GKLwHybxYqo0PTz8+rs79LV2vz02t7n8kV1tOfas2iPwfz7+uzq6Kq809Pe7VB+uP345vvz2IOgxd3m8ZSu0Pjx3dni78vR2GWMv/jy4vb29cHO4Pjz5fbovZey1fDPYPTci+nWl/PaiffmrZy00/DOXLnL4+vUh+7TeVJ/up+21FeCuk17t46r0VqEuliDu5+42PXnuFN/ufX09H+dxJywy4Oiy4qkx2OLv/fw2Pb18+/PZEp6tvPbjOfq7V6Gu9fZ27C+0WmNvuPh4G6RwL/I1eTi4FF9t0p4tc7Ny4ajy/j39+bk4uLg39rZ18zLytzl8fHw7+Ph3+bk47vN5NHd7PDOXebl4+Xj4ePq9Pj29OTr9OXk4kd3tfLUb+Ti4cTT58PQ4f7888XU6Ke+3JSv1NPf7eTj4fjnsOfl46O72uXj4uHf3rbH3Nff6Iinz5Ov07/P5fj06PPckfHTb/Dozdvf5Z+z0O7RcOLg3vn39P///////yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjMzNDU3MjkyNkZGMTFFQkE5RTZEMDY0QzRBNkE2RTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjMzNDU3MkEyNkZGMTFFQkE5RTZEMDY0QzRBNkE2RTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMzM0NTcyNzI2RkYxMUVCQTlFNkQwNjRDNEE2QTZFNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMzM0NTcyODI2RkYxMUVCQTlFNkQwNjRDNEE2QTZFNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUDAP8ALAAAAABAAfAAAAj/AP0JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHu13yZhn/FKrXs26tevXsGPLnk27tu3buHPr3v1szJKzIFDvHk68uPHjyJMffwai7BLhyqNLn069+vRnv8eOWR2NGbNoqrt//w/vHbz18+jTq7c9hix0fsykSWOmOv78+vLpr9/Pv3/1Z2SxZp9+8OWH333+JajggrkFyF155I2XmnjmMWjhhRjy42CGHHbo4WsbfijiiBeGSOKJKK5HVj8stujiizDGKOOMNNZo44045qjjjjz26CONK/4o5JBEFmnkkUgOGWSSTDbp5JNQJrlklFRWaeWVTk6J5ZZcdukljFp+KeaYZEo5Vplopqkmj2Gu6eabarYJ55x0cimnjAhkUEYZGSBQ55+AsnlmjhksYugiGbDogRKHNuroo5BGCqkSHgRq6ZF3xlhGo2WwyKikoIYaqhKXlqrkoDhuemin/Xwq6quwLv9Cqqm0CiqWjoUemmg/i8bqq6SU1ipsjpnCmOeefQ6r7JzFLuvspc0+K22d0U5rrZvVXqttmdlu662X3W7y67iQbsLie+o9c25/6tIaLrnwHmpuP+im12696LVrarff9nslv/4GDCXAAhds5q0GJ2wnqgo3TCXBDkesY7eIuQjTxAzbWHGLFxObcY0bs9gxjhQfZvFLGCNMsskco+yxyjeG3M/IMX8MJMsiu7wyzBrjPLPONfMMss809yz0zYad7FLKYTFNmNItOf2V1IJBzRLVXWENmNUrab2V135xrRLYWZHNl9gpmX2V2nqhjRLbVcGNl9snyT2V3XbRbRLeUfH/TZfeJfn9lOByAU4S4U0hDpfhIym+lONuMS4S5ElRzpbkIVl+lOZqYQ4S50VJHGjRQx8tOrZAG9306dSmXvrqrDPrOtKwB12Y5x+BTpTuZ+HuEe9CAV+W7x0JD5TxDJNOO1jIw6z8jCUn3fLSL9eu+tPTR10989sPRjxHzfcUPvc5U7+z9a9jX77255Nvu/o/m//+1N1Xnf3V9Wed/9b3d73/1/8LW//GFsCyFfBsA0zbAde2wLYl8G0NjFsE5/bAuk3wbhfMWwX3lsG+dfBvGwzcBwc3wsKF8HAlTFwKF3fCxq3wcS+MXAsnF8PK1fByM8zcDTe3w87l8HM9DF0Q/9HyvY2MbydH9EoRNZLEnDSRK0vMyBNvMkWtRBEjVaxJFrFyxYtscSZftEoXLRLGmJSRKmOsyBlnBz2isVFG0bvdD3M3xKGsUSpppMgd2Tc/+60Pf+2jXyD9GD8+Xk+QfQxMHieyR0Amkn9/9N8g9TdJSBbSkYdUYh3NskiJNFKSj/xLJyPySQJWUpRz/N0mg1JKFUbSlKG04iqn9Dw42qyN0nulAk8pS172ZZQQaSUEfYlAXQ4zlgYk5l6A+RBhWlCZDjTmM5HJxVkm740xiiP8apnNW9oyl5cEZSYpSc1lprJ41vSJM5XCTIesU4TQzEs7G/JOFMaTgtLk4D0xuP9PDeYTnuUUYzprx00webOb4Czoi7TpvXOCb6Ae6YAIVGBEiCJSofMUSQ0WEQFAPECKFtXkP+0Z0Jvo4FAhmIEIAkDGkJITow6NyRAehYItTECPLoViTJmY04yowBWQooIGsOHJnvYynLAc509mAapdjCAKzTRqMpG6y5Le5AEhCFUCYOENekq1miN1YT8FwoIYxEQMrzqDV8cKwrDScKxZQAUq3JAFGLhEBKKShADWatW7ZHQhfKOEXOWKBVOEgSUBYAOoCtABd8busUKqCBIGK9ceMIAFK2lCpMCxhezwFbKg/aAJKEtZLXygHCiZABUgJQaWRjW0sO3rQF5ABNL/UlYUFUjESTQQKQy49rOxDa5BKVIB29oWCEUoSToclYqTLsK3jmXrXGplEQMY17i6JclGDQULfyzAuRiIrmzrQl2LcOG6lGWAXUnSBUP9YAEC+a6hpgHc5TV0XxYpAnpRQQQTnCQKQqBCHwiygELkAr4MqScP8VuRDezgukDgQ0qmoYiWSteEDK6IBYybDR8E76sMzDBFYnDdIxiAlSAWqIgp4gbKAiELPUCFiY+XYgmueCJxlSsRJuGPJMT4CBJWZ43R6C6MwAALck2uQHyMCi/8RMFGKS9GTIEKBhREDQNIwpOHzM9SaWQDSVivEIVL5oWO5QJlTnM/LkAWR6i5fcyOKAua3xxbNpclAHOmM2Qv8NuyOCLPepbYBeJMmkIb+tCITrSiF83oRjv60ZCOtKQnTelKW/rSmM60pjfN6U57+tOgDrWoR03qUpv61KhOtapXzepWu/rVsI61rGdN61rb+ta4zrWud83rXvv618AOtrCHTexiG/vYPgkIACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsEwCjACEBHQAACP8A/y34R7CgwYMIEypcyLChw4cQI0qcSLGixYsYMzYUQGXXiCgaQ4ocSbKkyZMoUd5YxDIBjz4pY8qcSbOmTZNRErDcqSDVwJtAgwodSlQjrJ1IJbXgVrSp06dQa/ZBSnWRjiEqomrdyrUrQ38KqlJ1NauD17No0wr1l4qgWKRlzKqdS7duSH8LJBl8O+in3b+Au4Lhsi6IRH/+QiGkWghA4MeQn5ZChUoUA0oR/TFViIeev8igQwM1Qbk0EhMvHCLWkZAKDcSIRcuebfLFjtKliVQw0NDfEIU6FsCmTbw4xgoEcZfmUmSDQn8qZBk0woNg8NjGs2t3yLugcso7LMTZQIiYRMEQkQJgsO53u/v3Bbkc/E4Z+UF/HcARJIFYPcsr8AX4HhgKKTcAef6I8U8BS8AWADqLdCHghNltcMRClDGQGnk0tNABbLC1R+GIslmwEBFFDHcfiCxiR+KLoI2XEBIxsIjgcDbCqCNkbiREBAs5GpRjkDsWSVcWByGxwz8/uriikyAaKeVcMGBREBGT+LDkj199NuWXgJlSUIr+aIkKlmCmKVsYPfzDAIhmsqDmnKBZ4MYLLIaRiJd09vlXi/8Q6eegaAUZJaGIFupkoIsm6ihUKiYUEAAh+QQFAwD/ACwTAJ8AHwEdAAAI/wAbFOgS5Z/BgwgTKlzIsKHDhxAjSpxIsaLFixgzaty48MeiRa9gTeNIsqTJkyhTqlyJUsLHlwpSLWBJs6bNmzhzlpQR4uVLSaG86RxKtKjRoxrp+Fw6Z9wSpFCjSp3K0p+NpVhlkehAtavXr2AV+lti5B/WpeBIhF3Ltq1Of/62IDz7UZ7bu3jzkvTnhEpCrOhm6h1MOGyYDRXh5mK4KIKIwpAjS6WUbUcFAxT9nWBYoANcf5JDi8bJApVpVFzAIIboL8CghREUfQY9urbtk1pOmz5iIcZDuCMSNvIb+/Pt48gxftB9OpubJDAa+ouS4GCECTaIy07OvTvEIKIMMtk3jWVdmIVweRwUADd74wne48tHyCDh+B4MWIjNZDDU7OwhcDPfgN5RgopC46GSSEJwaVCCCrP5w00fBFbIHRANnQbECwxG6KGFIN5mwkMWwEAbQh5+GOKKkm2wA0NHqDFbh8b9EyGLOEJWwULZ+HAjjSfOmOOQeRlwoEJahCEkinCJReSTeHGB0D0fGJTkiVBmORoYB2VDiT8jopKklmSKtsERBnHwmQmm1Vfmm5BZ8A8XJn5WBBYjwqmnXuV8EESKTe4pqFs//jjooV8taWONiDZKFaMGNRkQACH5BAUDAP8ALBIAmgAfAR8AAAj/AP91aTDhn8GDCBMqXMiwocOHECNKnEixosWLGDNq3LhQxqJFVDRE4kiypMmTKFOqXIlyiayPHzd1icKyps2bOHPqNEkCJsxXsKbtHEq0qNGjGjuA8+lTQaoFSKNKnUq1pj8xTJlKCiWjqtevYMMu9CfgX9asc7iJXcu27U5/AdgcPAuzgdu7ePNy9OfPLsKzhaDqHUy4MEN/E8os/IiHnuHHkAnzlcewwAO+kTNrtpkkCwyLfCkwxBCAr7/NqFNz5IMKFRYOYSryrZEQj0HSmFXr3i1xw47WqLJ5UTOR7w2EPybouF2at/PnCysAB67lQ5CI/gAIMUilj78FOj6G7IJOnryB6dNFMaD0kC8Ggw1Mg18Uobx951wQokcFxMSLw/7QQMUMpcnXjgj3JagaGKgktB8RFVynEF9RFGhabgpmmNkGRyy0nwljXSgihhqWWJgFDTLU2ij/hWiaQSKaKONgMWTTkCgmvDihjjDyOOOPbbnBEBIGxLjjaQiRCOSSYSWRYkIfjMjklJnBcE9CPRiUo49UdknYOk+Gw4cWWiLp5ZmEhZHlPz0k4k8YWrRWBJp0DsaAQeuYBicq4dTp512UoDIADBeGUQEYZv6pKFh8bHDhP0YuKilVkT466aVSWdpjoph2OhSXCAUEACH5BAUDAP8ALBIAZgAdAVAAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnPgPBpJwBihq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqD2mo5F6b7pFiwpAUNH6Lg3YsCNIkFG7bgHcsEPQsbGkd1x6wIEb2eLEuFsVrpIDB5frRADnaf35myVd+qARtLGX/9X+IITA7sDNiTerfQZB9DoArB/vT8RB3ODOXZ8/PgAbhGxk4g9/7PlzDkLmaKcdgWNpNwEVByVwgoIMNrXOB0FMpJ0GBLEhAB7/SLhghUr5gAoqojBASUTaRTIQOAJmgsciCWBD4lIb7HDiiUCY8MJD2m0i0DkKyhjbjUtZsOOOO1SQEUPadfGPDgEo6E8mBaSCpFJ8oCLQkidyAcYGC/mzhAgAWEnhlkoN4OWXYB5hQQwJqWnngGwilcWbBIGJihthHGTnP2rmiRQMWCAEJhgIWTmQo4YexQGfB2XDAQyNrimQppESFUY2CWHBAqQFjdhpU15QOtAoQRR6qlVqqFUqEAeDvmqVFpTuMCuntlL1AZ9cBMHFrr1iFYQoAu0Qgz8vDIvKOsVixYCXYCjY7D9IRHuVDz1UoOYL6ySCp7ZUbVCoq+RORSqp6UbFLq/tPmWqQQEBACH5BAUDAP8ALBIAZAAbAU8AAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnCjwg5ZwGMMBYUGxo8ePIEOKHEmyZEkYPVCpXOnGpMuXMGPKnEnT4IuVK3sUqcmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGOXBrBENmQaCVzNemC7MbZFwEPMEBGgd+IAbIArZ3NugvHDDZRLp6Ih0nPCE8pI376pS5Trf/35/yu0vfwrWNPA8xVPQWD58unU7xVfY+B74LI6yNcr/obB7TM4t19e4gEgxEGLlNHFgOv5gwFCIognHoN4iacIQmx0ICGFFfpTAEF4kCBQhhNyaJd4EBAEgT8LLpKhiWC9YEERG0wkngoRCFSIhF0ARweMX5mg0g4W8CGReBL8wwYAErIIzhVAemUATqgMAAYMD4k3gQTcNClebVF6NQCVqBzBQQwOealmmF6BgYpAVGYzShJYKrSml2xyBcMRbw5EZTjrBGHnhgI1mSdXHPRJEJU9MFDjQYYOROihWcWQTUI4TYLQpJSC5YaiB+0Ahj+dtpUEqAVxEUOkpaIFwz2o/mGTDQcw4NlqWuvEms2ott56VhgpEXSErLyS6qtaDChqQQxYEGvssWmx0CcQG/jDrKxJQLuWFqgQwYeE11agrVpFZFOEl2GsE8az45pVq6G9tlsWq6zKSxan/+Brr1jsGhQQACH5BAUDAP8ALBIAYQAZAU8AAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnDhwg4GLGDMGocixo8ePIEOKHEnSI6UjqFKqXNnjQ8mXMGPKnEmTppaVOFX2CFOzp8+fQIOO3JCzKCoWQpMqXcr05wtUBnMSKde0qtWrWDvmDKcmq9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIO3XXBGBz0VwkXTWMTc1awHyUHXYM48xAwRAaJz7kK9O5tzE7Rn/47yqnt3Khoiia/szx8s8/A3dYmyPnL7af/gw391ov7j9v4oMJB+1Nng33/+pFIQfLUYeKBj7S2gxEHMzdHBg5C1FwpCswTQHoYQ+iMDQgpEASCIjbU3R0Er/lPihygu1t44BGngjwQClRgjY+0tIYtAbJh4I3N07MijPyT8Aw4FAA5Zg5Fz8bFODBy1N0EBNzTZXh/hQRkXFym5kQUME2lpppdyVbASFqbwBNGZWqIJlwE59eBFVw7FKVCTcsI1AFT/4KTFB1QxxOdAJ/bpFhiADrSSKBUkslCiBPmj6FswoBTVSkAkcalgHDRa0EpcfBpYDNmIepAPlpr6lxuqEmrEwAuHurpXEikZREQRZ9q6Fwz3xMoFrbX6qtc6oooi0LCUGqtXGD00qgYHy9LqrF8MAGpBe9SiwsUG1/bFQkpAwABgt3iGuxcQO/ChpQkcmKvuXi+UE6ee8+ZVa7H52tXsP//2W1erCAUEACH5BAUDAP8ALBIAXwAWAU4AAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEhwg4GLGDNi5AODosePIEOKHEmypEmIHEShWsmyZUssSU7KnEmzps2bJT+43LmzhwGcQIMKHUrUIxZUCnlWKMq0qdOnMzcgXbjTDdSrWLNqPfjCoUsLW8OKHbvV5Y4wZNOqXXuzZY9SP9nKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uHG5NtBlOk7b1aJFjW4sYA5bw/PneNDRoN463fXvBeip/+Cuusb37xEAPSBf2p+/LufPh5ghIgD70O4BvIof38iQ+6C5h4FA/H1XAoCfuWdJQfzp4ASCnrnnTwEGXQdOE/ZBGKE/1yDERibuabjhArUcVMMEEorYmXtXFBSBQCeGqOJm7skQwkCvcHMOjBPMyJmEcwxEhnvnPFfDeD5q5p45AjUjoT9FLsJNkkr6s8QPg0TxpD9DpEIljVYGsKWMXwZmAFoejfnPlmUClggq2XihBkVqrplim34Z0FI46wQh0ZME3YlnX1y41AMDlEAk6EBkDrpXESsJ1BISJnTlKGUb7DCVpCwRUUFcl0ZmwaYDucRFEaFCNkmkB7U0Z6qOuXlBqkGocGEprIxlwapB2XAAw6K4HgbDUQfdQwmbwSpmyq4DHYtssoiF0cOs/xxhAKDQKubFpuFkQUS112bLmBqRZpOIPyx8a624jGmB1DoSpvuPG/6wq5hOA/waLxAmNGovYTCA8QK2z/5b2LPYGmwYsMAqLJi/BAUEACH5BAUDAP8ALBMAXwATAUsAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnCjQgJseqDJq3LixhxsDFEOKHEmypMmTKFMmNEAElUONRECqnEmzps2bOEO6iahxZ86fQIMKHfqwh8SMRokqXcq0qUl/E5E6nUq1qlWBUI+i8nm1q9evNLNCzBgTrNmzaCWKbYj0Y9q3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHMLXDJOhm7cNxYtmjNuyW/aIoQLl0Wiw/HYAYwoFw6uhIAAz11vmT6dTYMJ2VX7/3NChfv0MoUohD/tz58G8+ZrpMK+XnT7EwLhc+dW3377XQTpBwt9/YHW3ggGTSfJEAWO1l4UCRy0SAEPrNWgZ+35w8NB4EyT4YWhtdcHQhEo0h6IBranAEFzmEPFPyVaiOJm7aUyUC0d+GNDeRHQMONn7S0giUA2ZLjjIoX8iGF7ofyDQYbtiTAHNkouuYAAS0B5YpVLaqkll11u+SWYNH44EJRkClaBFqaEERKaBG2ZJmA7IOWFGhTJOadhFnCkxQfl7LkZHxn9s5EoFSQiaGYDuDTQRkCYsMGilWVRKEEb7WCBTJRCBgMWjhq0kSmdRsbBpQdltE6pkIWRTagGEWxRhJmsMuYFrAQBwceYtSqmBqoDeQGDl70ypgWu/+zgA6/FJrYOql4QkeyyMjZ7WBAYCQQEDCxIq6y1jjFA1iTtdZvsC+AyRklGs2bIQrLlVJsuYRWY8mUQQdA6L2Jw/tPvvof9qy/AhQ1MUEAAIfkEBQMA/wAsEwB9ABABKgAACP8A//1bILCgwYMIEypcyLChw4cQI0qcSLGixYsYKcIKQUdEgIwgQ4ocSbKkyZMgdSxaaWSLE5QwY8qcSbOmxWsrc1LRcMKmz59AgwqFuKBWzqO7RkQZyrSp06cg/fm7crRqAh59oGrdylWrVBkhqopVkIpg17No056U6m/OP7Fi3aqdS7duRLbmCsLNKcGu37+A/0ldYuRgVSEQAitefJZtu4QrFchgTLmyU6kdwCUssISt5c+gabItobCL59CoU5OU2tOgBjYCTftTTbu2RakBfhTctKADm5VdbAsf7pBtA4FlLGH+vSgr8efQBUqdUOafbMy78DyIzn0422sNArD/xa2iu3nb49NLPc9etXrB49vL/5y+YPz5+Bmftr8+v3/A+/0n4E9hfBDDgAgGxgAqqLiRBQwJRjiXKQwyiIUpYUioIVdhZFMhgz14wcKGJDrlBYMCfajFB+WU6OJPaqBoUIWiVJDIizjOpAUqCX0IRBY5BmnSBzL2iAoWQiYpUhCi8LjQDkn0p+SUFVVQ5EEDhHEflVxClMiVAvWwDgz1dWmmQ0CAqUUQZZ7ppkImFNmDQECwKeWbeBq0wQ5O/mPCOnSymeegB1nJoxdSAfoPEC0S6qgBFtrpzzo8gjGbo4QO0AML6RVRQTl3YurmC1re16aob24JX6ionsnqegEBACH5BAUDAP8ALBQAeQAMASwAAAj/AP81mUFPxb+DCBMqXMiwocOHECNKnEixosWLGDNq3AgxwaJFrmY94EiypMmTKFOqXIlR3sePIWaICMCyps2bOHPqnJjupU82TSbsHEq0qNGjDf3V8OmTioZISKNKnUoVoz9/XZhqrdElStWvYMMivQrglVatr8iIXcu2Lcqr/jAcPOsTndu7ePNGhGtJ4dlQBvUKHpwXboGFLyOIIMy48Vq41xrqcHLVseXLUa+qqMWQTYfKmEOLxgn3isIaBz37G8269durMkIgNBKly79Fnl3r3p0R7pmDIdJdzbroxwLeyJM/hGvuIAm4WBeBc6K8uvWDV5cUKLEE+j8Kma6L/08OvTzo8eh1mzefvn3r8ti9u59/WX788/TzE4arEL/+/wAGKOCABBZo4IEn3aFFBYkg6OBXFqAiIRBFbPDghUfxIuGGO1jAB4Yg7sSFhAdtOAAYMISoIkugkIjQhkdwEMOKNJr0xhEuvihhNqMkUeOPGkWISkMbImEhkEhOFEM2QzqEChYpJiklRG7kuJAbQfA35ZYKJWElQqJ8AB+XZP4Dwz1f7mAAe2WSuc6X/3AwZptchtFDk/9gwcVB62hJJ5kMkJgNCy/s+U+ff7bJAoly+lPoQWCsliiZWqDCBQxwPWqCf5MimYUbMXi3gQ/2dSrlnKWamqSf96m6JacIBQEEACH5BAUDAP8ALBUAdAAJAS4AAAj/AP/JuBbln8GDCBMqXMiwocOHECNKnEixosWLGDNqbFhjUQJYfTaKHEmypMmTKFNWnLGo5SIFqRaonEmzps2bOCGKcOlSUihuOYMKHUq0qMIAbHjy1DFkidGnUKNKpejPXxOlSmWR6DC1q9evRKtOoIJVKTgxIcGqXctWZFV/Gv6VVaqjrd27eBu+jYRwrqt0eQMLtvu2RkKlMyYMXsy469suDMuMCNC4suWwVaO8WqhDRdXLoEPTfAsrYQiDMzyLXs165NtpCc3F/Tejte3bFt8WOIjO3xINLcVQxk28uMK3qQzWWFD1d8tMxqMbf7sgQgIab31LgKVCunfcbx88/cj++bt52+TT+zvPfjV5g+/by6+cHWH9+fgH3z9YPr///wAGKOCABBZo4IEIJqjgghphAgWDEAoFCio7VIBJhBjWRAsqHKIyQBYwZCiiSVD40iGHWHAQxogsblQBhwdxmI0XarRoY0W8wIhQh1p8EMSNQD40gI4JcSgKA4kEqWRCE6LSUIcrLrnkG0cQudAoMKwnpZIWWIlQDx/Et6WNnGTj5T9a+JDemECW4qUoMazJ5o17nAlEEG/NqWQ4OnKxjkF3aqknkOvASEScf/5z56BBBtEDh0W8Veg/FgjKaIsMOEneB1gk0d+lI4Zhwgb3iQkqi/vtd+qIedqnZUAAIfkEBQMA/wAsFgBwAAUBMAAACP8A/52QNGfckn8IEypcyLChw4cQI0qcSLGixYsYM2rcyDFhk0UgZZHo0LGkyZMoU6pcyTJihxAgQYIrISBAy5s4c+rcybOhmJhA2TSY0LOo0aNIkfrzJwCo0zKFKCSdSrWqVYtLA7BxyrXGDQBXw4oda3Spvyb/uHKtFYWs27dwS5qdQAWh2pgoFsTdy7evQ7P+5C3kKoao38OI45pN1xBkghuJI0sWC7hGwzKKlk7ezPmo2S4ONSzx17m06ZtmAbxSKIsOQtGnY8s2aRZDwhAnVMwACXu2798UzVpKCGipbpBogStfvhBwgX8KVJhV8bMB8+vMzUbS8ACwvwAysIv/B+69POnx6Gd7/1c+vXvT69kDfk9/8/yE9+vrR6x5v///AAYo4IAEFmjggQgmqOCCDDbo4IMEvkELLxBWyNIfqKDCBShvWOhhSXtkmOEOFmDy4YkYvYFFhv+I6EYWMKAoo0QWsJhQhliYEsaMPDL0STY23ohKDwyw0OOR/wATpEIiamECkjPesSRDGe4IJYpaTKlQNuuYdeWHGKLi0D2UxPclhPWIoiUDL7R3ZoUMTEmEAWa+CaEdIibUwz9H0NmfnRYCYSMDSezZ53mAWkgLi1q0WSiffCCa6INQ+DJkImY9asGfkzpYgZjeqcGAn5J2uuAbvJiZn6kOeqmQq6y2BcrpQgEBACH5BAUDAP8ALBcAawABATMAAAj/AP/9k0FmgsCDCBMqXMiwocOHECNKnEixosWLGDNqFKhgERV56TaKHEmypMmTKFM21LCo5aIaXQConEmzps2bOBFGcunyFQZLOYMKHUqU6CaePAtcU1G0qdOnUCH6m9oFKdJaV2RE3cq1K86p/qK8soo0xJmQXtOqXXsRrD9Y/8giVcC2rt27CcFOQyjXFTa8gAN7dUuXL086BgUrXlzUbSqGVEYEYEy58tepCyQtVLBgquXPoE26DZUQnEAdnUOrXo0RrFaE4zDERc26tu2HbucchOUvAIaWOpjeHk78H9hxAnd17v170Yni0GuDXWKkjCW3AbbAWhC9e2i3HR64//XsvTzo8ej9mV9PebxA9+zjC3Z7kL78+3fB5lWPv7///wAGKOCABBZo4IEIJqjgggw26OCDEEYo4YQUVojRJxbcYeGGEVWACipa/FEPhyQqBMqHH4pijx0ltvjGER8K9CEQtEDRIocWxHjQh0RUYMCNFXKSjY4IfTgAGDAAKWEpRCb04RHrKAnhHig2hEoPG0jp4Bv3NJnQDlnop+WCHHh50ABhwDcmgp/04GUP68Cg5poI2uPlDj7MSeeBd1T5TzZE/IOnmHsqqIWOHLAQ6KCFMvhHjAO84Y+iqOzAB3+NIlgPEZVy0s9UlK5DXqYHVpDNHv18OlUiHARBKKkF1hSTqqr1vQprgali+t6ot+Laj0MBAQAh+QQFAwD/ACwZAGcA/AA1AAAI/wD//RsyI9UCgQgTKlzIsKHDhxAjSpxIsaLFixgzaryoYNEiJaFkbBxJsqTJkyhTqozYzqPLOeOWrJxJs6bNmzgVdgDn0qUsEh1yCh1KtKhQf0hL9OwJroSAAEajSp1KFSJSfyeWamXTYELVr2DD3rwa4IdWrWXaiV3Lti3Gq/4aCDzbs4Dbu3jzJrw6oUzCs3S86h1MGCzcQgtdlhkBtbDjx0XhZmr4w5I/yJgzj73aiGEERZc1ix5tEi4ZhSio/PtMurXrt0gX4EFYhoYNKotYv97NuyFcdAi7IL2dO2jv473h0hAo5uo/4tiQS98NV4OCCXD/9bExvXtruOCde/8fPxr8v/Dk02M2fz67+veE3QuUD7/+XaT28+vfz7+///8ABijggAQWaOCBCCao4IIMNujggxBGKOGEFFYoFi8W3GHhhgmVggoqWvwBBYcWcvDhh0QwwAuJE37Sw4cCfcgFKCOy+KA9MCL04Q4VYGJjg3ecuNCHA2QBw48KapHjkKhgYQKSCP4hpENa4AclgfUQseRCWvgg3pUCMrBlQhVswB6YAPIyJUK+gIIemgJyMSYWmJwJJ4C0TOlLNv9gEcOXdwIIxQ457gEKn36GFqiAFcBYQT/9gPJPk2Eouuh/mMD4BqSRZoMKGFZe+l8pvvDCKaRqrGNmqKLy9wYUp/YPgxB9rfbHqUKA1mrrQwEBACH5BAUDAP8ALBsAVgD2AEQAAAj/AP8JHEiwoMGDCBE6S8avYTUECSNKnEixosWLGDNq3MixY8c0DUNK8UiypMmTKFOqPLkw5MOVMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9ecHQpoSPe1rFmB9BaprdElytm3WqMkUKv2FYZpcPNW5UG3b4FUC/QKXuqvcJ++iGtdkTG4cdHChRUgnjzH3BLHmH1C9pfq3+TJRhhnHo1z8wJJAj/TBceNtGubm0MR/MyGwuvbMze3NkhXg1vcwFdu9qcDYSp/wZOr3DwEoYbLyqOX3KxCFkFwBTw/l86942YSBNup/5ihdnv38xc3dwghsMASf+PVAkJPv+JmMf8kdSj8L76G+gBGtFkmjYiw2T9LCABAgAwaNNyDyDUoYUHDCVThhBgeOJCGGE4IGYURdijiiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjz2aBUlHHDi42tYoJJNKXsMOZoXqDSJyj0cfKJkY2o4KRAqPdhzx5SC3dMkQU0i8QcUXL7FgZUFoUIEA7yUWdYnPXx5UJNcbOlmV/bImRAw/N2p1R1oHgQEJh/6mRUSehZkwRv9FGroVX8EKtARd/RjqaOPVgUFEYn+MwAUljYaYqZWMaAnEQJ9aimpWvFipSi8VEOQKqisasXFl39YWkGTA7wxaq1UgdJkKaH2sysqhP4KbFRvHIHFJ8X+80eumC4bFRSgRiuQqMpaG1WoIHbr7VOrIhQQACH5BAUDAP8ALB0AVgDxAEIAAAj/AP8JHEiwoMGDCBMK5MeQn5QACiNKnEixosWLGDNq3MixY8GG/Jx5HEmypMmTKFNWBPlQpcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qVAnGMgscEq1Ks0tixbhaUHDqtevJtNlHVuAngqwaNNerDF2rKtZD9TKnSvQn11/Xdq2DTFDBES6gK3e9QfglV69bM5NCMyY6WB/GA4fplLobOPLRgdbGih5bIgOmEMPfVyAoGRJ40SrDjr42kGyoFfL7jlYRa2D4LYsmc175+MrB6nY8Ne7OM7BMkIQDCFpkXDj0Gk+PkNwlqIIzm1E3w5zsLmBBXZf/3cugLt5lIOXGPmH54Hdf+PRnZ9P8nGDf0MG/5Nxzgn9/x09psJjxAFo4EYE/vPYgQxmpF9ddzUoYUURElThhBhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOMNNZo4404qkQJCzlGF0Y2qGjxQT099rbBDqgkKYo9dhQ5WwVJovJPkkj8AYWTohkQJUGoEFEBL1hixkWSBiXJBShvhBkYGFsehMoOFhCpplwwHEFmQqj80c+cclnQ5kFcfNLPoHyiFQOQUhqUjQVvDEpooWC5cSdBWNzhqKOQgpXEnwJxcOmjmXoFAxaTZiOQnqCG+hUHWx5hhxanpj6qqlWf9EDmHv1wooWUtMg6K1XAJFmBo7qicgSmv1p1BypINEosMKj6muxSdtRzKUHXTmtVtgNJqy1T3v4TEAAh+QQFAwD/ACwgAFYA6wBAAAAI/wD/CRxIsKDBgwgTDuTHsFonhRAjSpxIsaLFixgzatzIkSG/RxxDihxJsqTJkxc9OkTJsqXLlzBjypxJs6bNmzhz6qwZYKfPn0BlRmHjalaHoEiTKs3YYZHTEGJE9FxKtarVf3OcamXTZMLVr2Bt+hvrb5zWs1Q0pAvLti1Ksv6WyDpLt0YXAG7z6sUI1x8JuoBfwYq3t7DhhHA7gPsHGDC8w5Ah9xUzsLFTKoEia97bV4BBuj8Ibx7tFm4ANgedwkJAujXbvg0QNvDnujZYuBPKfDYiw7bvqn3lFUQXYpERPb+TI+1LoXILfxCKy0KuvPrOvjUE1lAhMPqiXdbD4//se2NRAhpju1MpIL59TbgLMIiAK5BaL/f4Y/al3Te/f5j9CUTffwSyRFZBBxaooEm0LejggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxlhhGDDISGASqBzBQQw25gcGKkBmM0oSNfYY3gY7AInKP6iEw8EnRlpngZIDodKDPXdEmdwkVBaEihZ/1KOlbaUAiRAqojDAy5itZdElQtlg0g+bm8GAhZkJcfFGP3zSGRkHbxKUjQV78jmnn4eFkQ2eBGFxh6GGIgqZF4H2ICekh0pqmBqB/oNEPZFqGpkWeGrBgUCfZirqYR8oKQov/Zw1igoQUKi66l5BiALkH4YCikoFfd5qGAOolILpHzuAEqqweoXxAajLQsrsYdIOtOy0ewV7UEAAIfkEBQMA/wAsIwBWAOUAPgAACP8A/wkcSLCgwYMIEw7kx5CfIIUQI0qcSLGixYsYM2rcaLEhvwMcQ4ocSbKkyZMQPT5EybKly5cTZfw4Y24JzJs4c+p0SW+RTyPtOuwcSrSo0YL+/gEQ4tMnuBInAhydSrWqSH9YsWJoyvVHAwdWw4odezArVkVc05bJgIOs27dTzforkLZujREI4Ord+1IuBIF10+LRw7ew4atmVUQgGHhRgieHI0u2KFeCwbQ1CEzezDmhXBkhEC66ZKiz6dMC5dI5uMgT6ted5dq4vIjOCti4I8tdYoRgmTM+becezlfuloGLuvRqFvw28edk5ToBJ3CG1OU+L0HfLlZurkWyJvj/6/cPuxnu6KnKtUQnHdZ+5LvFc56+PlG5qceTt8+/qFmC+vUn4E5ZGQTfgAgmqOCCDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44ImIMFBGDMiOAAqqGTjhRo59mcCj6j8g4oWHwQRZHovEMHjQKiIwgAlS3JXAZEFoYLEH1BUSZwBWBqEChEV8OJlblw8mRAq9ux35mlFhIlQKfC5+eZmG+yg5kEVvFGnnXdKZoGcA+2wx58HBrpZDIT+g8QniAKqaGRuENrDoXVOaloWYXJxxD+XJqopZzBg8eQOYfDyaaiSjnqYKURmMDGeqqj0gImorkYWRg+oVPAeeUegYkemuUrGAQMb/PrPJ7z8WSxn7xVE7LOSRYtQQAAh+QQFAwD/ACwnAFYA3QA8AAAI/wD/CRTYwcnAgwgTKly4kJ9DcSAYSpxIsaLFixgzatyo8UEZcGIEBOC40SG/MSRTqlzJsqXLgx1CLJrJpsGhlw0fRsTJs6fPnxT9CRU6Y6bRMhpwAF3KtKlTl0OFijBKdVGNEQieat3KlWtUfwFQVKUqBFa8rmjTqmX5dYvAsVSPeei1tq7duwm/TqAyEK5ReHgDC077VUPCsUb0DF7MmOlXbAuNwqHWuLLll1/97VK46BXgy6BDk/w64vAiD6JTq7b4NUqCg0aFKF1Nu/bBr7D6vhrxa5Fs28BXf+3TF3CK3r+DK7+cWcGif7n69ft3fNGP5dgrf021CAU16dNTsP+5lL384K9LRugBP928+/NDB7J/Tx9v/IPg6+vfz7+///8ABijggAQWaOCBCCao4IIMNujggxBGKOGE/PWBwmYUZqjhhhx26OGHIIYo4ogklmjiiSimqOKKwIFRxAYsBhgDKqjsUIEBMfoHwxE00jgAGDDkuB8HPQqEyhEcxCAkfWFkQyNC2biRRJBLljdKkQihcs86n1SJXRJYKtQDMJx4qVw4T0r0h3Rm2rZOmAkBA0V+ba4WRA9pIkQELey1V6dqDMD5DxB89Onnn6JRIqgF/syHKG1I5EmEQBzQ+ehqJhQZThhcCGQBm5eu9gIRNGaTiD8vcEHjp4eGGloFNJokMlSqNVrqKmgGZDMADFG9UMEejt4KWhi83idQsMKGZuyx0wUEACH5BAUDAP8ALCsAVQDWADwAAAj/AP8JFEhmUBU9AxMqXMiwocOHECNKnEixosWLGDH68yfwzKJFIc6Q65WRIr+T/ByUXMmypcuXJTfKJPOxppEcwWAyRFlNp8+fQINGlLlxAZ6aNanASdHtJ8qUQqNKneqSqL8WSLP+aEKNqtevYMP+s8ptYNaav8zgEMu2rduMVv0VSHi2Jpy3ePPqTWjVA8OzOvYKHhzW6ooIDWuaQUC4sWOhRPud+rtIkqfHmDO/jPwkhMKPu55oHk1a48Z+/eiYTXq5tOvXDmWizrO6Rq1FVFrD3g1bdr9uKAQuEqIn3u3cvJO7Po06x8d/Hvr9M447nvLrmZn3O0RlUTPU0uNF/1gUCLt5x/7A/8sxg5r6f4esn58vOD3qhO/p699rf7///wAGKOCABBZo4IEIJqjgggw26OCDEEYo4YQUVmjhhRg+JEANKHSIwg8NZFjhHGeBIyKFZHSX1YkstujiizDGKOOMNNZo44045qhjgBvsmCAY2QBRRI8+ErgOKkjuYAEfRQoYRjZICoTKAGDA0OR/XiCJSkJHcBDDlfqpoeVC2YyShJVgmqfFmAuhEs46QaR53QdsNrTDBtLJuVsQokTpEBcw5KdnaQzUqZAFMNiX56ClUWKoQFio4duijJIGhKE7hBFZpbCZ8KgXiW7EKWwb7OAnEAwIxECio+5WgZZE8DkBQ6qorMpRq64ZoKUJG82K5Afp4eoaF6h4QRQMFWQDRn/CjuaDBS8QJVCo9zVbmrQDMWstaaI2FBAAIfkEBQMA/wAsMABUAM4AOwAACP8A/wn8t0JHjQbUBipcyLChw4cQI0qcSLGixYsYM0L0569fv0OLQr4yE0+jyZMoU6pcybIhR4/9CoSceQyeoZYK+el85ginz59Ag7706GmmUSWX9PjUqfNm0KdQo1oc2q+Xq39GjerwtIQlU55Sw4odK7AjzFYKs4aURaID2bdw406F2e8JuIVqF4GDILev3790+81wmJXe38OIxQZOQThkLRuJI0v+GbgbG4Yz57idzLkzysBb0s68FMCz6dMWAx8qIzArm82oY8tmGLhZ65AzQr4e6CyZzmTOZgufHDhQSKyDR+jenIYpvzTDoyMO3G/TWgf9/ilfVENg79/BpYv/7xtYeYgUMP91CXF5vPvp6RHMGEFXoIwo7/MD9riQv/7/AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFD00wzYYcdrgAhhM2AE5eM0UQCYgQPjAiiTP9gOKDJ7CY1YsOTvCKWpjR6KAIKOCo449ABinkkEQWaeSRSCap5JIOJmFKDEwqSAQq2biRBAxRGugGKlyics86YWQ5YBZdDtQDAyyICSAMWJSpkBYflKNmfqa4uRARFfgw53hh9MDlQ6gAwYI/e0bnhZ0NVcARoYXKpgaiC7kRxqKMNoqaFpD+08MHlHJkaWwfQKqFD51W+qlpQYjyp0KlbEDpqbNVRuDmDgK16imssiVS5g4xVFCrq6biahoQXYLBkayouLGosKiZ8CelyAaxLLOebXAEEsB6akIRr1JbLZbTlhWut56NW5ZAAQEAIfkEBQMA/wAsNABTAMYAOwAACP8A/wkU2M1TvIEIEypcyLChw4cQI0qcSLGixYsD+2nU6GnRIgXwEGAcSbKkyZMoUW7UGM+jR0mXCKScSbOmzZsNV/ZT4NJlgSEqaPIbWk0kzqNIkzrUCU9gT4+ySHSYOZTfFKVYsyLViUASwqchxOQxZrJqUa1o06bUeUnh00VsGixRS7duXZ0yF749YbevX6U6CzDsqSHo38OI16704Nblq1SJI0seqXOFq68uFXibzLmzRJ2nBvYMkc6z6dMKdT4J4dRjiEV4MqGefVrnjEVOFUTCs0jIGoFDoVGjTfyvzjwe/73y5i8T71fIgPPTVry63ZXdUHhM5c/fv0xCFh3/+xd8uPXzaFf+27IoV3fv3+nYQE9f7UaBvVKs+Ne9vv//AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhKYtQcM0GGaoIYaWAEBhg+bI8taIi1AxSwAfJtgHFSS22ESKCPIwokOLyALjgWe8BRFuNxbYwlM9TvgAbz0FKaElOoBTpJFMNunkk1BGKeWUVFZp5Y2J7MBFERtcaWARqIS5gwWTeDngC0SEico/a2ZhZoAVqIkQFqa86Z8BciaUjRdq2IkeF3kyFISfxYEZ5kNhwEfoaRvsEKhCWJTz3qKnWfAoQqME8Z6ilHIWw6X/iGLCpv116pkbj/bgA6mmnpbFpV7ATTBpq6bBgIWcRzAgUKyl0uqZKXImAYOuqPDKqa+ShdFDmBZ0NyyzsyI7mReoILHBezDEaUq00kZmQAUxbCrQoOJ2y1m5A/Vq7mTqJhQQACH5BAUDAP8ALE0AVgCtADYAAAj/AP8JHEiwoEGB/BLykxLgoMOHECNKnEixosWLGDEq5Ocso8ePIEOKHDlxI0OSKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qFGUCgUdXSpU4QGmUHkmjUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2LclpZ6gsmku3bl0qZ6a5pTotAV2KixLo3cv0zF+LZwgzlbsIIxXFSxlDFmu48WSwfedexhxX8+bPoEOLHk26NNMYWTaYvqoF1Q4LMVZTHYCqNio3WWDIXgrG9kAspsLsLgrjiO+BPbyw8DdcKIfjBbV8KNf8Z5hstR+KqsCnes9R0A96efFH3nvOJOELYqFEvrz5m+HSCxwVpL379zXXpRdlwv59/DQF0UN2BDHgH4A5MZBeBe0hmBMlxyXhhUAM/ucgTUjYZoE/MHhRW4XMXViTCbUBAQN5HdbGR4MizvTCDkRMYh8MFVRwooUtvsRHbPYN1GOONbFIUIgDBQQAIfkEBQMA/wAsUABWAKMANQAACP8A/wkcSLCgwYH8ElbrdbChw4cQI0qcSLGixYsOE/J7hLGjx48gQ4okqHHhyJMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSpQkP2sHiirNmXDF0qc0EyKFSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7evX7pBKnwI8leoCVSoejCg5K+wzxjZEKP6h8TEC8c83UgeSKSCgcaYbybZXJBLkQ2ha8K4R7rgDgsxUs9c1/qgmxegZbcM06O2QT7+gutuycD3wB1ZggsfvpKF8X8DwihfzlylltrZ1sGYnrt6yg++TUxG996yHBHSWASK705eZYXNFsJoUU+9fUofkoFsl48YTH37JwGBChGTKMcfA8oBmBIYRPg3XRAmSJeggimNN5CFFKL0H0EBAQAh+QQFAwD/ACxSAFYAngAzAAAI/wD/CRxIsKBBgvwS8hN0sKHDhxAjSpxIsaLFiwgVHsDIsaPHjyA/KlwYsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CD8kyYzJnQozcTpkHKVCZRo02jSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6n1YQYupMHt/HkGFqgcDFv4C77RAGJVALR/KKcY5qbFjgaIqJEo8mWapxgaBFNnQWWYW0Ad3WODDuTRLGFhQNzTlr7XrlBxkH+RQu/btlGGy6R5IxERv379Rehn+Dwjr48lTqhnuZcNx29FNatG9wwf07Ck/oD4eReRfd+TgUQYR1RgIDBblz2NPH5IBYSLP4aPa8QI9/ZCUEFbEcfDtEERv/5lkAQf/QBfEgQgmeFKEAyEYEAAh+QQFAwD/ACxUAFYAmAAyAAAI/wD/CRxIsKBBg/wSJrtwsKHDhxAjSpxIsaLFign5jbnIsaPHjyBDZlwYsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDpkwIjZrQozQTWkPK9CVRo02jSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67diOXuBk2CSsuHIHp7mkBFWFSFRP4C5yxHhDAqgUBMbFB8s4JjgjsqGEhMWaaPywYHgIHROSYQ0AaPcIjBufTKIqgPigrir7Xrkxt2xC7IBUZt27dLWtg90ILv38FR8nH8mOARNb9rJ085IDYR1tGnpwSzu9QG5NpRwj84chlJBYHepYdHycGxqM3nUaUHvv5jmGyEP/y2jIoD+PohjYKKG9H5Y0EPYGQHIEh8cFCOggJBuGBI6hEkXUAAIfkEBQMA/wAsVgBWAJMAMQAACP8A/wkcSLCgwYP8EvJzcLChw4cQI0qcSLGiRYgKq13cyLGjx48bFS4ESbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz580FQoCShSmwgNFk6oUqrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dpg8SA6xPGEVQDwMCgqxPGDlSAj3CI4Y/vTQuAUQnMNipJYcMzYyRWPDDcuiCPIb90k9hgDwYsMmtemaVzQyQmNogebRIGFtMNOfibzRqlKdgGj/iYTbt2yTA9cA90E4Z3b98kvQjv8cH4ceQg1QiXbRw6Si24s4HhbR3lh87ZimA6+aede/eS5UQlNuUvxuvyz897rAB4AIzZ7lGJuh9f/sZEqOzwj3ExcMFAdf59BIYBA8ZnXoIgPWhQQAAh+QQFAwD/ACxHAFYAngAwAAAI/wD/CRxIsKDBgwgTCuTH8JsjhRAjSpxIsaLFixgRMmSIIKPHjyBDiry40eHIkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KkaG1A0ST2mS4QqnTmEaRPp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt65CGCw2XHSWbCM/B3ZdWkC1wwIffxTT+OVXLXBLDqgioxoABgZiiHz9Ana8Mkw2yQKPcIhxmfPOUaAHZhuVpLTpm0lSFwy3Lojr1zPDyS7Yg4GP27hfrtttkIi/48CDqwzSg7jqdciTK0/JwPk/LCyiS59+koVkVAW92FKOzh0mkt3hNpAvD9ME8VLqt7NH+YII6AoVBMI/Ph9mBclIqPcfKvvJ119IBkQmigHIDWgCcge2xAUqD0bHAReHQRihSjEk8c96Amm4YUv8IRQQACH5BAUDAP8ALE0AVgCUAC8AAAj/AP8JHEiwoMGDCBHyWwiNWsKHECNKnEixosWLCRfy04axo8ePIENO1NhQpMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQINeXJjMmdCjMBemQcp0JVGjTaNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cF/yihFXKK9sqNxkgeFvJNELdVVywosKFRZTYfpC1MhvTGCVAwqjEtjDixp/ig9qTAb4Mco9kicP1PKhXGbPMd/ck2xQVIVEp1G7XMcaIRATfGW7DNOjNkIwmGPrPsnAt0EgQYIPX8ki9EELfJUvV6nF+D8sl4MLny7yg3Xg2rmvSCxHxDgRFtLFq6zA+kiSHf/Op1d/0kfoyz52oJKPmX5KIIVZEFx+qAARnn8mFVFgdJj5wMUHByIYEgxgBPHPfBf2JyFKGh4UEAAh+QQFAwD/ACw5AFMApQAxAAAI/wD7CfxHsKDBgwgTKlzIsKHDhxAjSpy4UKDFfhQzatzIsaNHhxcvfhxJsqTJjhapnfLUq58/fydH8pvJT8qSmDhPWsxB0FWrDi9h5txIk9+XoUg9WkxhEJwYAQH8OUuWNGJRm1WzZrS4CyGbBhOCah1L1qTFJgrLyKMgtKzbt1v7UUuwcFGNLgDg6t3L0KKZhIsCB37V4ibfw3wtxkMouPGiDogj67WowKDjwAlSSd7s1iK8gov+OW7EjbNpsgIRSBIdmPUiXVYmzoRG7bTtiRYvORa9TE7GmdpuC39okcDlBIvK+JY4u/bw5xUF6miMLhOeRQlOQN8+0uIQwTUW/P+zjj0d9/MeVbjCTqMgeQzo42/cEoLMQUsSHsjfT3EC//8ABijggAQWaOCBCCao4IIMNujggxBGKOGEDW2ACYX/DYAKELRA0RaG23GByoi+WMDHS0gVhQaIHBUx4ogEDQAGDB+eVBQILGq0wQ4vGnQEBzHUKBNNK+aoUQU9HpTNKEnQaORmmLyIikLhrBOEkE/CpSGMC40SFJZZjrWHlAr1AMaXYer1xhFJHqSFAV+CmWZWFrRZUAUbxDmnXpxkYycDeu65FzB2/rOOWILudQeZ6wBB0KEoJqqXFi96GQQQI0Iqp6RJfTAiFlf6c+mIJ0bKKVlBiJINC18GMQAXLyAReipZaqjxD5oFyTprWboeFBAAIfkEBQMA/wAsPQBWAJ0ALQAACP8A+wns96+gwYMIEypcyLDhQn4Qq9lySLGixYsYDw4U6C+jx48PIQoCSbJkyY39/KnsaLJlQ4j8JLqcSXPhwCfjFqxkWbOnz580B7L5pySUjJ1Akypd6nBggYNzxi1ByrSq1Z8CPSSURaID1atgw34UuMKVQnBiBATgKbat24YCZzFcxKbBhLd48xoU+CCEwkWAF5UpREOvYbEcZyQMzPgpRZgjD0smmVIEQsaBayGzCPPA5M8ZUwYYWnDRP8zHEHEWCbr1RZVNSgM+vYhKgwCuc/tUOYEK5tN0lugeTnOlBsymF2kQTrx5SZWRMI+bAXi58+sfO9YI3OKfCuqL5GH/H5+xAeBNhgquoAOYAPn3FKm9+uXe4ApYGVbA38+QgB7+AAYo4IAEFmjggQgmqOCCCG7AYIBZ9MBFEf8Q9CB566Ci4Q4VYCLQhdeF0YOGqBQ0wB4wsNUTTNWkB2JJXpB4EBYchKHSTzCh8WJJLJBY4kHZeKHGjTSx6OKOIGkho0JarBMEkUga9sGSC+3wwkpR6lWOKFQmBESKUGb5VgVdHlTBBl+J6VYiPiJ0RBI7qahmW0B0uYONac7pVhFtGsQAmHoatoEvMmrBQEF/hhmoW2Rq2IMBMByKSqJyLgoWLyR+oFKkGmqqqKVgcYHKADvBQCYYeYJqlR0VfEKVg6mqBgrWpwYFBAAh+QQFAwD/ACxBAFYAlgAsAAAI/wD/CRxIsKDBgwgTKlzIryE/QQsjSpxIsaLFixgZOnSUsaPHjyBDJnT4UKRJkf38+TvJsqVLlilVrnxJs6ZNhTFlqrzJs6fLnDp3+hxKFGNMc3TILAg6s6jTpwdVFhCIpwU3plCzQlXZpKAOeiqCah071N8EKgZruUDksGJDawfIyq2oUgPCEAX8vLPYcMXcvxFVpku4aFEsXIgmvo0LuDFClTUMFp68iAogx5g9quwimXLhqZlDX/QH4FXnyWeciF5NUSWGgYUFFqbSIADr2xL9TZM9WSCbPriDL+zX75jnRf+E4BDO/CBxeJ5R/FqkvLn1gf0MKZlcJl6K6dWvX/2vMrnrv+/Un4i3LiPEIjq2BZ5IsEjAeuuFGk0oaMlG/PsABijggAQW6BIMDDDAwj9NGXibAahEqMUH5Qjl4GpaRIjKP6JU4ANxF4r2gYYbCgQELVCk1BJJ2jAWokXliKJhQb5UwIeFIpFky4sYVTDjQQOAAUODHrHoIo8UJUJiQkckIhOSWgHxI0JZ6AQlVCYsadAOYIh1pVMb7DDlQFzE4OWXTlkw5j8WDPkkmlBBOGYpG7wJJ1QD/MiFQHTaeWdRYJDoRj8V/INKnzj+6RMMR0SIRT3E+bihlYoSxQEq2dxBXEo+IkFppT6FAcQH/2wqkBphfAoqUaYWNFNAACH5BAUDAP8ALEQAVgCPACsAAAj/AP8JHEiwoMGDCBMqXPiPn8NkzhhKnEixosWLGCk65Ocgo8ePIEOKHLgR4siTKFOqXMmypcuXMGPKnEmzps2bH/3p9Iezp0+CO3f+HGozqFGiSF/udJZs40aPDyMmnQo0ij45TrNidJiGqtd//kgIjIVrWNanGvmZ/ErVBsEyhSgY1cm2LsUlRgzWuLEgqN2/C/1tQShkniK6gBMfdAIO4aJFBSCoUEx5oL9cBx9rjkAiQGXKKTJr1nzos+JuPwg+/jf61wjTivs1GTia9aJNBGBTpvZL4OhF/y4Z0k3ZHw/bo19l4klccabfi8oswpOpOWUFo0OdSDC9unXAZDQ39Zq8ffq07ytjZNkgcgGeRQm4DSwfCr1KJKh2WOCDOOOVRWQURAE6D9iXkhuoJPjPAGDA0F9FS3RgYExJJKjgP0dwEMaDEyYFwz0WEpTNKGr0Y2JKTo3R4UXrWIiKQfdw8Ek/zI1U0ooWhdFDiAf1YI8BQoGUIo4WMcAjQm74ReRNLLiI0BGUKLmkTVocSVApn0g5ZU0fODmQKH+YGOSWNpVDhJWlvCFmjWTaVIGV/9ijJodtzuSDk1l4IZCcY9ZJExAWWuAPDKUkaI+WfsZURIJAbKDTG4WiAiSdibq0wQ5E8KdTP29UwICDlFba0iQxgEUnXQEBACH5BAUDAP8ALEYAVgCJACsAAAj/AP8JHEiwoMGDCBMqXCiQn0N+aRhKnEixosWLGBM+5Jexo8ePID1ujBiypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+TDqFR+8nTXxqOKB1qI7rTn7NkD0sGHco0p7+rWK9W3Xoxq1etXMMu/PpVrNmCC0poOBGAbNazZjMtWvTvR4MobrHC5drLCF2BvzLg6Ee4cOG9XHPMLdhoBALD/RBzDUblb0E8lwgQlhwWzuKDiwp4WMF564nPBefOdZWpNNMAgywPpKt6kQjXTEeg/qeaNx56uE+WgwEySgLLtUM/8Be8pI8eRziEEajXIo/FyQEtAdv8oxpU4LON/1LjtaJc2rVnqODevSOMe+Djh1sXpLxEBckbzVXfPuS6+PH90wMDlNinEBm1abCEBvup0N9HYfQAIHgDIWHCC28lZIUQqw3zzzuEzHULQg8lc8GDCjEwISoFEVGBAVcddpAui4SAzEAgLrIJiQ+NgWJCLKzIokE++GMYcwVpIow+BsmBCI/8mPhjQlqsaJAW9R05ZUwfWEkQAxvEWBiSW7r0AhFe7gBGVoaVGVMFVmaTiFebuRmTD0L+A0R9WNVpJ0xcABidQHv26eefLRUBIHnrEMpnm4i2tMEO4FlAXaP/MPCPkTI+5VA1pEVakgWoAEHcpv58IAqmWh71kCCilhQUhHQDZSjQmP94yg+osa7EXkEBAQAh+QQFAwD/ACxEAFYAhQArAAAI/wD9CXSWjJ/BgwgTKlzIsKHDhwrdORJIsaLFixgzatxIMQ3EjyBDikSIgKPJkygxEhzJsiVLiSljypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTpyZXuvwoCKpVfx6ngjxw9alUrQ6rdh1LtqzZs2jTql3Ltq1bn/3iyp1Lt67du3jz6t3Lt6/fv4ADCx5MuDBfHDOaUDPMuLHjx3PNLFqUwEw8yJgza8Y7brJnBakWvG27RJZnz5JCcRu9lsTp1zqGqGD908eHMDc7gHv9WhaJDrR5akGVzYsam2J48wYnL7hOBqiio9LyIchMAcp5KwngHCcL6dJFMe2gFDMAm+yea9DonnM4eOlATLxA2QD9onmi2eP88P79jgoGmHQIFcoJ4YdLYuknUDlE9NcfFyxslMYtyoFzoEsTKShQBQ72N8pGziDzmhDKLGJhSwlq6EOH4CHBh0k1nDaOIhEsQoUNGuIEBIuoVLDBSTd4BotANNpIQY42FdHhDlmkBIAQi+ySnz9FjoBkTRvs4OAAP6ZEAgqWWCTDNbNdSZMF7zWISildmskUH+D1kAiHa7bpplIDSLfOhtG5AcOdS4ER3QB/8olKgBp9ZdAjgOIEAxZH4FbRB3tKuBBXjdpUznwzKcoPo5kiFRAAIfkEBQMA/wAsQABWAIIALAAACP8A/wkcSLCgwYMIEypcyHAgv4fQqDWcSLGixYsYJz7kpy2jx48gQ1LcGFGkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz48PrR34STTkwxVFk2IMOlSp06dQo0qdSrWq1atYs2rdirWf135cnX79Graov7No0ZbNieOHhkhp455da3PLors1ukSRG5euR7UNn4S4e/cVrGl80/q92JfhGcJ3BSpItSCxv8UVEyskB3kRQSWhZGjGvDCGFjdZYPBF2M1IZ4Nzxi1RTHohGFS4sZgKM5qgXcgIUey9XHvhhh24BfbwwqL3PydUXhtUNizjxmpItVbAjYqglg/lVgv1bCadYDFN/DxuFLTVAHeDoiokavzvRPl/IVy827j0IXauAySHEBAmbDDXQLtIlwBc9BWn0G0CIrRDDAWNUJ4EAjXo4EEwHBFhQbgREUZBUSQAmSQF3IXhP7RtmBAH7xmEChcUGsQDZPQsoIOKGR7oIkIxZPPhP91xoNpBfRDGg0A63tXFjxO58SEq2ajRIkEKLPLDAgM1SQKUDSURI5GoeKEaYAQJoIMiBamQyRJgMgTDPQIS4QVuZqK50EPuOBLnQutwh4oJMDCA55Ej8YPAnwoF0QOeAhWKmwUV8eknowkZikU5A0laAaYpGTCKDwbxAYNAAQEAIfkEBQMA/wAsPQBgAIoAJQAACP8A/wkcSLCgwYMIEw7kxy+ZM4UQI0qcSLGixYsJGabByLGjx48gCzJ0GLKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrRo0X79/PkzylQiOUjBkipV2rRqQUPgFlGBcyLAVKpWrTZaRPbfrhFRvoINW3QE2UUDE/Doo3YpW5VqOSLA87agAjIL6t49WdeuxUt9DUpqwS3v4JCFWYSxSOAtXITH1jDk93EzP3ZL2KrN8i+bFzWGIxZIjLASw5Cee4n+yoJguHVBJHpgbfAYIs4gPYO+q1ZLwR4MKKU2uCICb4HgtgR4jPfrB4RITLxIeOo5GwprqZvjVFuOyEFUqIhUMHDwSQjeGpZMFY9SbQWD6POj4gLG4IzECfyzSHzz0VeSWj4UpN+CCRIkQl+SePPfgPKFZ6BHagEh0IILegFDQQGg8BY9/qgwoTwFXviRWkUMxCEqopiA0Dlk8UCViWSltZyKGKm1wQ6obKgfEuwhNMErmyxAkBUutCEQQ9UgwGNHalmAnpCoZNNgQlEoqRBDUkzJkVp85IflEUVyBKWUYvY43wBmApFFD6ig2eZNBYKRHxF8/JMEnUf0eWdOMByBXosC/YkKA4PqxMGiBanBRRKN5rRBFhskFBAAIfkEBQMA/wAsOwBgAJIAKwAACP8A/wkcSLCgwYMIEx7kxw8aNYUQI0qcSLGixYsWGWrDyLGjx48gJTJ0GLKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIk+bsx1Sp04krmEr15++pVYPkwDUagYApVapXw0JaRBbPJQJfv4Z9GowK2UUCC9BTkRbsWqRw3hJ0NetB3ap3W9rlmEJvwRB05LxjyDglY35jrtbl2G2XYYOucCFq7JjhNsl/X2yw2OTywQTDGHZmGBn01zBEdlQwQJHaL9MFNy0AHFhlXT4DUQ0AA0OiGdwDeQDoLbjuAIKojnCIATHeW7gEJdEbzNx3WjAHs7n/SVIcoQLTCbyl7b6yLowjCFHdWxfmIDzTi2bQVcs+ZV0OB6EiICo9AHNHQQjgoRcbGpClH3/9nVRXDNlAN+CFqOxR0CVvgUPBEg3mtx9vEYb01yjBYTjgEZgURMBbW1BlCyFkuaDaQIyhUWJHdSUhkIoDlvLJQQUsosMSgL1zyyJtLMQQCDti5N49P2IoygcJxYOBEwYN4yQ/OkYpZVrrCPgPhlmI2VNdQfRg5oVYUKemTpMxMOA/RHzgJhYtzpkTfyxcaMI/SezZp582QYiEgAwMVCgqXCDa0weoYFEOQUn4UoGkPG2wDnCc7uhMMgwJEipQaTzmyKk+jVoqqzIFAQQAIfkEBQMA/wAsOQBgAJwAKwAACP8A/wkcSLCgwYMIEyr8x6+hoIUQI0qcSLGixYsWG/I7gLGjx48gQ1LU+FCkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp04r9nkqF2q9q1KlYE1rdmrWrwF4ZZuTpttWfWa9TnyxaiyLHoapm46J92mitQCq5AsU16ywZP5kat4EAaqgavylLBKJpiGbliLWLCG7qEsVsGo1/X2IeA3Rxw04CDfOrZvDsRwRC7BZ8BWtaX8yaGwombBixYsYCkyCxEGPvRwyQESpItUDu3JQMUCl3kwSG74sEgieUJMDfcZVJlCv/h8VUmOcVC6j/PriWzHWVMO5pH9iDAYu91id6kF5wUZku51eu046qoJYP5YC30AoRjEdQDTTElx9KYfSwnkGiVJCIWVVFdAp9/yzCQ3GmLXhScg8e5IY/VkH0RAjjraVAZcZ5KBIL/CUEBIkVQnTGeAqoaIVGCck2mIsSaRFiQQwEWCNE5EgXgARrbTJMQwo1xBmQEX0QI0FEFNFiRN0YsVYtHQjE5CLHZIaQj1RGVA4RQ4bDx5YEwYBEOAYYlMNa5hDEpCxpnlTBlf9kA4aAER1SQysGnfBAnyb5EKMWWAQ6KIWMBgWEdqIYEAMWqAhK4VWV9lSEdh+YtWmnlNAYqk8b7IDKiHGdH5qFqqv2ZIIbQRhXjg+19iqQlL4exc82wRYFbLExBQQAIfkEBQMA/wAsOQBgAKEAKwAACP8A/wkcSLCgwYMIEyokyI+ftQMLI0qcSLGixYsYMw5suEKjx48gQ4qs2PDhyJMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1Yn9sma9ynWg1q9dufajtiUQWJ4NGwoC6hDiRmov+50SuGsEtX7+8u5My8+tT34dN7KL64HgK1jT8uq9yXftz7YEmeD7p9jfyhURDBa4tqBy2JEbiKBC8uFFZcsn5SKsdUWG4s8hYRxBRZtIBR+nTz4JkTDEHHNLYIfkQJu2QC5FNngO2Y+OwkWLjJwT/jFMtuIEd1jgk9tjvzwJoYv/n0Ddo5fiqAwOAANjecZuKA6KX1TmRnmPatAjPMKh3OuM/eQgH3Q10HDfR+FglxAH/2V0CBUELSLQIrpYIVFD0MB1YEHr6HeQFtwtdtAHWoRjYjhAsFBQP80MJN4/QqzBz0QlbVhQED0oWBADpqGGEAw5ooeKGysGMqF4EEqyxoX8ZGjjjh4KtAMYDSL0gpCo9FCEQf3s8o94odgAYQSKPJkRJVH+w2CV3jUgXiMq/CPmIhFwYyZGSOgokAnufUTNK4skYKdAc0pw50UmoCeKGlrQxiebGmGwCBkFnQDLA4da9IJojvoTRqOoPCqiRytgmmlIFdA2imKfZtneqKfuJGQAKlgE8VoYo1hAmY+x9sRCGGhV00uvSTX0CLFI8SMssjMFBAAh+QQFAwD/ACw7AGAApgArAAAI/wD/CRxIsKDBgwgTKiTIj18yZwsjSpxIsaLFixgzImyYRqPHjyBDitTY8OHIkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat36sp/Xog35VbPVk983RwSrgaDptW2/oWEF+eSHgKEDtv16KVBSRY8/oGGr9Sp7dqDYtTO9IqAiMMQcc0v+chWZKIy/y5gT92tW0Ei7DpIna2SBKtuoJJgzw/Qa6CC4EicChBZd0Qeq26jCrQuS+nLXfpsS/mgwgfZFILhR/evBgEXv2Sm9jlhYplAm4xRNJCeIxMSL5xQ3GP8YT758EIJeqb1KuKj9ogbYJb4ggtsgkQo+wC+kdCS5f1Q9fIBeP7Ag5N4iIdATX0TVkLLdQVwUkVpEWvz3Xw9hDORVPAcdGAEyC4UlRQC08cPEgwg555tCG1hoIQsDHlPQgToMI1FYF9CWRjWroFiQGxusqNALyhX0HxHlDAgPQYv8054uE4lIonFg+ChQgEJe9F84ahjUjyG1COSekxEosmBFMPR3W0Fa5AedSl5d4aR7PFCxSJlnUsSBj4lM2JJXMoTgXi7+2GAnnnlGFEM29Q10hAF+stSPP2e0Z0QU/xRqpytLJBrRKMlpAUYPqDwaKZz+mINgOgTZkMAPU3pImlASuIkCaRKkHsHHqSotEQoEBkWhgqwLwRDObR9ghisqo6hG7FDroOJGppKpwQUYZfGzDWLPErRBFhsY1VBd3TLV0Lbl5hQQACH5BAUDAP8ALD0AYACpACsAAAj/AP8JHEiwoMGDCBMqJMiPHzRqCyNKnEixosWLGDMubGhNo8ePIEOKBNnw4ciTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cpVasOGU5bo5LdNykB+6rqO/Mrvy86GDEHg7EeXLlG2YceWPZt2Ll09Cgpl8qdWpD/CPek2GNiIzILCHg9L5kn3CTiCeNDRQAy5ouTPnEFuMEC6tOnSfGAQpDvjYAF6KjpPBFOBBejJHzmIQsW7t2/fWJIMpJsiYYRZD2QvxMJby4dytw9n/PC7evUeBgTS7cZGYYgZIgIo/z9Yofc/URV8RA89kblC6xWG91uccJF9NhPGF0xkfiCQIhtER9EGqERUnRvyTVAGQvbZVwYiCjWUjDNcAcGbQTtYwMdtE70w0W8WrOZPIQc1uIgwa0TUkANcmdCfQQOAAQNuIv22QxgiUmCQiZVYoSI/E3K1wQ4XJnQEGCj51kMp2YnoTw0F2UeFOfopZMGLBfHGQE2H3TCQff/YJ0GVCRmAJUGoeFEOl/4AIESYDiogJpkIDXDmP0SYwJ5Mh2FgYhcL6DAnnQWBgSUqQGwoHZuKNCjGP/4Eat8IhBIEwxFF/sMbEEF8xqY/BSwiS36QSopBpQRx0B9ziHa6qE0CKD6QTkEqnBAbqgLFkM2FN66zqatCNSSFeKiO0lsWAvmK6AZ38UMhqknwFt9AysYwlLDEVgoDEFwwS5AawsEUEAAh+QQFAwD/ACw7AHQArQAhAAAI/wD/CRxIsKDBgwgTKlwokJ9DfmMYSpxokF81gvzQUNzIsaPHjwsffgNJMuHFkihTqtz4EOLKjhYxanxZsl8/f/5o6tzJs6dCQ70E2sRJ1KfRo0g96sHj6tSToUSLJp1K9aMBNz1Qad3KlWsPNwb+4VhENsSMPAGiqq3KlqNUmgaIoJq4lUjYXWTzsmkyQW3UtoAX+n3phuPWwg3y5v1HRUM6v38DSx6Icwm+Rw5s5UzZo6PWztReKV5EsEYXAJA3Tw6Mk9E/UaoYUXvrUfXGzwLNjCZNMEGlNS0dMnwYcbVOf64HriqygfZG2xS1Fv4XbzdCOS0nOkxm/PgjXwV3WP/gE5kidIla7Q48NvqgMk0PtTss3n0lTgsIB4CBgfP5bVRfhTUQPNYRpEMH/dW3mj8xKHQEBw1WZYgS7QkEzhZpJaigZDhNhxAq2YyiRlWXFDjEYBtymMWHXYVBlR4FsoHgWikC5g8MWBjUFSoMsKWDYmVIIJCM/9BYY1U4maJjXUW05YliXfjTBVlElnckVf6E0ZlAc/2jFRCTANaLK2SJUaSUZM0hkHNXIoWTF1xqJRAREQLWyiKyTEBQGyFUUhE/abSZlD8jermVQFq4CJgDofRhkBUICSfoUThpwdUAJiCqqKAOBTqpUTh9sNUOLpqgVaKfpppUOaJotaJApqJEgp+qtPpUASoVFFQEEIXW6itNQez367DEFmvsscgmK1EASywRgLLQctRJNQ8ZEu21DKXRkiDYdouQM98kk8w2nXibbEAAIfkEBQMA/wAsOAB0AI8AIQAACP8A/wkcSLCgwYMIEypcmJCfw20gGEqcOJBfQX7UKGrcyLFjRYcYPYo8yI/dyJMoO4KEmHKjRYIhW8qcSbNmx379bOrcyVMhzp89gwqt+bOov6FIk94s2s+fU6VQoxIkBytFN6ZNnT6VypXjGAf/HEScyGbRol1NqBnVyrar24XVQDo8MBGWWbMJzMTDydafs2QgRTqcsuQtTZBMSDHqdpRhvLtmBSqAt4BtGrkvOYL8YnhmmmrQSAnEwiFMY4XHIC8aKKkFN6d/5XocXLizTKcsCGbzombrQXiqDeoYoqKtbdtatRjU8iHIaYKGlAQ36CqV7+OdnX5AKIoBpecCq0z/N0gHu3mn5YgoBGJiA0E9ISAf1NEBvHm3WisoRIVqhwUYA80x3j/gbLGEVvch548PCPHnYDZBDOTJeGxQ8E9fCRqmFRAGOcjfDmAQ1Iss07HRgUDGZYifP0UU5CEqXMRgUCuqkbiIiQIFRlI1CKgolFMb7OAiKtlwAKBBwYBzVxk0dGEWG/nkqBA/Uvj4oz8WCMSflkTkhpAYd40gkJM3WrEQPzxaGZRTfPzjYTY7oNIlQimYNQNBZGaipoZODeAhBz7EOadB3TTCxiEFiZDKntn5A4aDXMCwoKCJHNQLoyo+dYScMgoUKCpZYiqqQOtkEyJBBpQ26qovrOqqUEvEFvrqrDnygwatr4JEF66iJuNrGry6FRAAIfkEBQMA/wAsOAB0AJIAIQAACP8A/wkcSLCgwYMIEypcyJCfQ36PGEqceLAaCIoYM2rcmPAhvwMcQxLk50CkyZMnPUZEydEiy5cwY8qcSbOmzZs4c+rcybOnz59Ag97sR7Sf0KMyxyzJWLQo0qcoqzFt6tSmQ2OdoML0OJUoAWpN/dV0mEbrS2jQqqUJAgMj0Tz/fmXAQdSfXZlXs5pFaddfoh5HOMSY+JZgoxEL+t7dy1ig3SQDs41K0lYh0W5GCuJpQUNxY8Z2YWApGG5dEMv9ciAsQE+F2M9m+5o62IMBi9cFiR6iktDVrAewY/sL0yMhEhMvDBLNdXCR80UhZggI/rQvA4WoiFQwQJBoIIPPwy//ykQdqV0WCVGpV89dYNFdBcU7L7Cg/NG+Wg6uV4+kXPd+TQy0iEDhheDCOx3xk8wF9tnU1wcF7adeBRvk1g81CfzzHIGLuIJMQ/yM0aCD/pQjCkH77ZAFQkSZoeGG/4CzBogLjlhTXxUIpN4/6mXjQ0JExSOfQGx0YKN5fum4o3pAnHZQUQqEx8YNISxS5JFC9QXEflhwwKSTyv0Dz3NUkAdBlVdi+VNfRayXzW3rfJkQApI4F6BAZy6igZpA2bXBDupx8I9dcaJyXUKXLDJHAATRg0IqfPb5jwWocFGZQB8QAWFCDnQxQaR7BbFOGDMtsQSjoKb6j0PJXKQqqA4hDPBqpMkkM4UjswoVEAAh+QQFAwD/ACw7AHQAkgAhAAAI/wD/CRxIsKDBgwgTKlzI8B+/h9V6NZxIkZ86ihgzatzY8CG/RxxDCuQHQqTJkyhHQpSYsuLFljBjypxJs6bNmzhz6tzJs6fPn0CDCh1KVKgDakWTCuUnRalCj2mcwkzGsV8/nh6looRWbYU/jVbD5oSqFaW/s2cxhrWqR0GhTGXjFkS7wYvatQ3+LVrUiMwCuXHR8hl4718YhmufgBu4CA86GoC1okWScW2/GQX3FqCnInJStCYOavlQDuHaFAf3Rpj1wDPRsy+IKPRhcG03NgkXhZghIoBroGgrLARCCwpBvAj3Kmcz4ffPs7QTopru687AtRPKZFauvAyigg/ZHfNwXhMtF4TT0++5HtZfIYLclQtbc/AhS/Iy0RYxmH76jvXHWeUPBYzFt0glVtTHj3j40XTWBjsQ1B8qA3BSm4D+1FDgXlSY0yBwZ1lQUHocwGBaP2fdoJxeyknwIYiD/TOdQNOVssGJZwEgxIplKLCXiy/2hFYp/f1DJCqlGHchWhhw18UCOvwYJE9oZdEfA/5wMN0AShaE4lmKKCfGWVDuNcKUO50FAxbThfPCWVqiAsxBXwpUwCKyNCdQmRigqRNaWmaTCEFaUraQAApEUtACAiywhG9+5hQGF6EVZMcnInmEVKRBPtQUpx8mk8w2hoAqVEAAIfkEBQMA/wAsPAB0AJEAIQAACP8A/wkcSLCgwYMIEypcyHAgv4f8pCxpSJEhPzQVM2rcyJEiRH5fOnasJrKkyZMIP0pE6REjy5cwY8qcSbOmzZs4c+rcybOnz59AgwodSpSiA1tFkwblR03pwofWDjhFyU/QVIUPV1wtCS2Z1K0GoX4F+7NfP3/+yKoliLYtRQQCzbZFu3YqjCKU/s11qzAFlR9NqJ3dm7ZuUTCoUCEx8YJw4YMjFkn+ZSaTY7qGg/pInJhIBQOXDVJLIFnyPwVkFoTO/JML58T/uBTZ4LigmdKm/+FpQePyY9Y5i7xGNXCHhRiEzQqMh3tRwQL0VNQGnnPDjtcG3WSB0dZsP4EKmhv/rOUC0Ud+Bx9apd4QxDZ+yS4IRPPQ5T8Lww9iWcfdu0B44h1EhXkPJfTQWOwlRA1EYwhUzUMkCcRHfgj54I9yAhkiCW4ICWNFgSlVlSBD7sEn3z/0XUTQABQWZAFa3xF0SYAEFQLAbyPihBh2BB2hBl8E6UGjbvQAmSNOMBzBo0BuhDHXQToESEVvTx6ZEwcUZsPCXjES5AmNOqhWpZU2hZENdj38QwQLesHYpUC9uIKbETz8s0iYe5F5kxevuZHIdWu2iSFBrZQWQiQBYCAZnkbqKZManB3hpA+A5nXhmwI9AY5ks6C1hKKLhPLPEqSOWqqjMYWTWBJtUYoKA3FhNCqQGIsUMNFAuiyiT1gRBYDqSx+gYkFBPjCQl0LchNKBQVak95Ajv7IEgwE4JWPtI9H6FBAAIfkEBQMA/wAsOAB0AJEAIgAACP8A/wkcSLCgwYMIEypcyHAhv4fQqDWcqJCfRIoYM2rciPEhP20cM34MSbKkSYcQL56sqHKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodytABCKJIgfI7kJThw2ormprk50wqSkFWQ0JjlzXh06hdw4odq7Af2bP+0m7sx5bt2bBp4/pr+MTQv7Zt574lyuIeAxZy5SpMEUJJFT14+wneC5QDqsdITLwIHPegp0WYF+nw1IstZcY++TweTaSCD8pqCa5wlXnRP1mtgqFODTrngNGPBXIpsmH2wFOtXf8DV0JAgLTOknnkN/Fhy9oVk1UVyAg3KoI7LEzy/SRE64JsGkz/SLP8YfNn0Js7IOgL98FSWWAEFjgjuMEyGtaUb+g8vVPpBJFiHULh9EZbHvYhZEll/tUURjbuHRSOfHoJ1A0K3x1UAwAVNljTKAMW5EUQtA20RYIEtbBAhx7SlESIAoliAoMFHUJFhgJFIMJiLdYUTog7GDCfQc0kCM6CQ/Y40zowcvBZQYGgWMMETyoZUxA94IYFF/+gwsE/SQ60S2sozPLPIlMGsMSaSyC0ZgBWhsTAaNmw8AIXj33J40AjZAZOOv6cg9kuw/zjEUIPGXNBnBuxMJqT/tz5WBFgligQNa9g1kpcgi5yi0DMecXPGIxuhAQqXFD4j6QmLATLIsf0H0JQA3i0wVAyyWhzVKkZJeFFGAXBwAdDweRwCK9hBQQAIfkEBQMA/wAsOAB0AMIAJQAACP8A/wkcSLCgwYMIEypcyLChw4cMq4GASLGixYsYM2rcyJCfA44gQ4ocSTKkxJIoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AR45ZErSoUYvVjvrkx/SRUof8nvZkyu+AVIXV0lzVSdXp1q9gw4odS7as2bMc+/VDW9OfW39g1cpl+5IPjH9v816Vy3ct3ZSmUGExFSavXqX9qPWd+5ckB1SQezBgYfhw0ByLjsEz1PftRn7GOjVmkg0y5H/7/pSr7DaomUWL/impokeu4YxMtTZWZfr0P1EVErFu3RMH7IEh5njqZdhZsougRf/lx6g3qoJAimxg7bNG7IKy2nX/qNxYI4x71g3usMDnds8Rxw2CK3EigOfyGdelP0jEMk8EQnyH0A8NTICfRmH00BtCFRAHFAbxGQTbIkYcqBED+w20AxgO7tQHCrsIRECEBE24SC4WZsRChv9wEcN9RRUgYEGLUNFAAClmpMV+WGzn308ekHjcD33A5dASS+CY40AfZOgFDO4BtUIEAk6IAgD+dJJUQ1SNsaRA5RDRmxcM/IPKk1H+VEV8JmIQQBpRQcWPNV8KVIFpWJQDA4ZnQgnjT3qEEBtsc+gAGwbOfONQMsmIg0Cd//gAWTaU+bMnZCbgZWRRZ0wYgRMLGLqIm5BaxAUqHBAEQwXh+CAVORPmJSFQqLDRU2pFfBRx11i9GLHIJQQtMEcZ6dxqbAqtGGKQCsYuGRAAIfkEBQMA/wAsOAB0AMIAJwAACP8A/wkcSLCgwYMIEypcyLChw4cM+amDSLGixYsYM2rc2JAfCI4gQ4ocSRKkxJIoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59ARzqgFrSoUYv8pBwFyo+fO0dLGSaL+rMpAqoIoVVbgZVn06ddw4odS7as2bNo06pdy7YtSX/+3MpFCbeu2X5zU24QWLfv2H6AAads+g3q2T3Z9jH6x6/alKZN1cXFGrgfAg+HUFpFywGVZ1+kmECGDAIu1coY/lHJFQhvSMKGzULp4dnzv1WM3kXua/po4BwEd42Ikjcjg9q2/x2xEIO336KBg1EpmABWn8nFIbJAjopgNjdJYDj/1ymgBorzKH40+FcZDkIFqRZkh4iEu0Es68I8xzlnkf//4AgUWAoKSRIKN/M1ZIJ9BxFRTm85kUHFf/8JCFg3uyT0nw4iJKjQC0QghxAQ4p0GWBMHUehfGR4qVAGDBFmwAXZLBUbNLwWpuAg46y20xI95+QCjckns51tgZhCkYyzIONSUNgHMxQWDROjHm4n9xJPjf4QM8xBkF8xVBIxeiHdljYEp8I9/AvkXgZcOJSOnIFHKtcEOyGlxHCplnolmP/BQ2OYiNUzQYkMW1CaKATDs2addUQWGAB4UhnKOf4UeutAktX1g2p7riFXZJf81ooI/lxJqqKYJuYGKGwTBKvBiEX8BRoB/CSAYV6ojsJqQARYEYdBeZ+mwyA0FdUGHDL6yOkE6zR4aEAAh+QQFAwD/ACw8AHQAvgAoAAAI/wD/CRxIsKDBgwgTKlzIsKHDhwn5oYFIsaLFixgzatyYsBrHjyBDihypUSLJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPnwUd2AJKtOhDftSM8uTHrxoCpQr5CYK6k6kUqgehJTuAFSdTp13Dih1LtqzZs2jTql3Ltq3bt3DjQvUndyRTNAHMgtjGlN8/pgRNYu1HOCVTEGap9e1r0KPOCdMiS5684B/hyyTv5i27d/FigYJxNgC3qLTp0xEiXe4XyBUdG5vrPmTBoMgGf7hz5975gPTp36V/rIYkcJGRLU5kO3SDCtUOCzF0S6d78wTw64ssE34CjiCVZidiK/8/+KE5KoFussCYvrvmhFfADWZfPUP+rhFRxh98QaQ5QSymhMEedTSJgEJ8Bq2WQkIJ8NCHfgVVYF5BPXihxnRUXdYNGwmVpkAqlUHow4QHafFBELgNdlkDCP0WQXIJLbGEeGhx4R9CqIjCQViXTVCGfL/VMkxUTX2xVhEkFmQeEDwS5o88BQF3DCIMMeXAWhvscKNBqAwQhlhOUkDQb1Tg0lAyyTxzAVsWJPlPc9mYsh6Y/eBWw5ilJfAghAXxkWRzWFCiW5O43fBPacWVhgGNfA6wZXM7+DAoj7gBIIRp/0RAh6KM6pfFhKhg0V+k7XVVJ24YnCaCCjNwyudAMGBLYV4PibAwqqRk5aaIaS3gxmppLL4qEAfmrSOQrc7FkCt1BSxSgwoD/bqFsAKFkU2XMAyEbBJoRSKGNwUtwU2n+lWgxZcEGQAGVgEBACH5BAUDAP8ALEAAdAC6ACoAAAj/AP8JHEiwoMGDCBMqXMiwocOHBvlRg0ixosWLGDNq3EiQnzaOIEOKHEnSosSSKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fLR2AAEq0qEN+B4zu5McUjVKF/Jw91cmU39CpBaGxw4qzqlOuYMOKHUu2rNmzaNOqXcu2rdu3cOOGXEJjmt27eO1aAsCSqQO5J2mak7WosOHDh6nMCrCSXzXAW2f2oYK4cuUmKv0CnjiTh2WFi2T16+evtNyKpU3/PFOZ4aLR/hZQUOHv9MPU/sJ44RCDZwvEDmGX+OdqVgfVthPiNvEPVTY3SWDkfIAHeEPS8gaGECMiQO3kB3HH/8gmEBWqe+vC4LSkA9zh6/7SGWTTZMJ38ARxjyJovgcDFmGR5k8NB1GhQTrIgYdbEgeZp8UH5XBVWhcKbTJCFAwtoaFaqcEQDkLmEVGBD1OVBsAroCVQiSZQMZVGWritk5B55nHxwlOlYZDQYcIsxFQyMKYWRA8N0ohKD+opVZolByEWQhsKJSMlZ2jhxkBBRpoXDiVYlVZAQYixQQF+AuEG4EBZosLAjV36c41BhmmAIZllpoYEmjT2UERYpS1Qi0CFAarAEnQOtFxzqCBqnox8+nMFoIH+s4gGhBaK2wtE0PhPD1os2qgMIRwGyAySUlroP7hVYOQ6QQDhKVilzU1hWAFLqDBDYabSiZsPNA5QWqvm7SmhP+YUhscDqNpamA2npvYPF6gcEYZpwFYg1hJGLEIPQSrwoEAHpxKURDhqFPQCGGyGZYkA4cYVEAAh+QQFAwD/ACxDAHQAtwAtAAAI/wD/CRxIsKDBgwgTKlzIsKHDhwSrgYBIsaLFixgzatz4j58DjiBDihxJEqLEkihTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPnxbHLAFKtOjCakZ38uO3bWLSg/ye6lw6RmrBamms3lzaVKvXr2DDih1LtqzZs2jTql3Ltq3bt/+mnaGyqK7du3epnJmmkl81Q29PwpyWwK7DRQn4olyK5q3HmGcMQzyT0i9gt4Jf0l1UkQrctZst+hv9+eJo0hy8JIFRMzLniqdJl4YYG0Y2VKiwmAozk3Bd2LFPz24Y3Atu3D0YsJApN/TD0UMwpAs+fGFsNQKP49byodxTf7IE1v/oEiV2dYTBtRDULqpCIqP+5BF8BSvTkvv3H+ZHG/yDQe2oAFHEBkD5Q8FBxUBixVJLNbTUNwfw5481/DDRA0La7QBGgTUgpIwumjTIEINfSMigKhhqx0GBNyx0DDHQMJRMMmgMxR+F/DBykHbZcMAaUAAIkZBdRtBznkDBAVGQdlhQAh8GCOFVwpFInmbCQAB64R18ihyE1xlOUPlPbC/sgOVxQATxXQFeLkJFAwGIOWZsFeCWHRC4pZmUPxAQ9Ns/P/Qh50CxGXDcP0hssE6eahqlQgQC3fVPDRP4M+icp3GBmygGjLZogD8S5Y8E/9zlCmeUXoqpP2Dg9oFwi4pCQmBR/sgQgl2vyHBOXakOKtwGXFSAqUCUGPAdHXalItCui9SwgKpo2VCXBgQxyw20Zy2xySZRFDROn9ieFWe4ZwUEACH5BAUDAP8ALEUAdACEADAAAAj/AP8JHEiwoMGDCBMqXMiwocOHAvmpg0ixosWLGC/yA5Gxo8ePIBNKDEmypMmTKFOqXMmypcuXMGPKnEmzps2bCx1Qw8lTJT8pPRXy4wdtZ9CHyY6K5GdNKUNo1VY4NTi06NSrWLNq3cq1q9evYMOKHUu2bMqh4jiaRTjS5tAxa0WqnTlU3dy4BNviVToJxt6e/gL7W4fq3rowf20KDswBleMeDFgkprk4TDbHmLV8eIFQ8OSSi/2NEojZMZEKPgyG9vcZ5OIkBEs75lJkw0DBAZboXpJRd4DJocMZlL3DwqR//rBhQDa0+VCLVXslbl4twDqEson4bSTwR5thzp9T/xyaZnLzL0F6YMfMQGALggkqrUlGv37ShvTdOTPPr7q/9gWVRkQRA3GziEEFXLNAaK1BtBglAWIGBB8F6YBQLVfI4FmDDoWGxEClYWFbQUMoFMIc5vDGYUOhmQBiaV74RZAKriS0yI1GpLIii4K9QAQqpI3CgGMxFjQLQjcmWcCODIVWgWP/HBEEDEOiUuRAHYRwUJKLNOINk016hpkagf1T5QcFiVHQgf/ceIUKYIZZJheoWLAYDBVgASFBIrDZ5o3/uCIAa3EutCEfJvhVZkIBsDEQl2x0sGihJjUhUJK13BgpoZSWNAEVSYJDQReadtDpSRokuYVApC7CRhSnlh6Uzo0FqPhPqyfEWpICrphKkDkj/KZrSEvAOSxJAQEAIfkEBQMA/wAsRgB0AIcAMwAACP8A/wkcSLCgwYMIEypcyLChw4cC+aGBSLGixYsYM/6rprGjx48gEUoMSbKkyZMoU6pcybKly5cwY8qcSbOmzZsIHdjCyVMlP2o9g5bkJ0ioUY/Qkh04yrSp06dQo0qdSrWq1atYs2rdapQfvylLuB4cydPrF7EHOeL0ChZtQbJujfrz9+/FgFJZYMTlOXeuD1SAsXAIs9dm37laAAPO5kVN4ZmH/X34p1hxuHVBHsM8HESUwMqAezCgpLll5AoFQaNC8gfKySWwSx9OdFA1ETv+Oqn96JXfo8L8rEUGgrBytjv+0vTmx9vrY36RTRQPfOefP2ffkmnXrnH7GODWrPf/3bAjtWIv9QT6G3IiQOS5pTueJlh58sATi/79aDDhPd34GB1mwECglbLBQA+EMFAChWTi338AQhTZAASi4gVgpbgm0Az5EdQIGQu8F6GEh4EBmEAV+MMBYANoKEKHBeGBDg2HjUjiXDAcARgSG8y1IirACBQACjAaVAA9KkBoI0ORrSgKH339syIXA51TpEGLRDDLAks6FGUYA4BR4z+8aPjPBFQgtMiaa47TZUNRPqTBlQKxuUgJXL5ZEjZXdrhIAjfoidImMLL5TyPcKCloSF0UyuYQcS4aUhQJ1LlmCItQYQN8kpIEi52bZBJBppt2StI0bJZhyT+KjEqFCKaSIKTAml0M1OoiCsQa0jWLzBAAQTSU4KauHwWQiQrEhhQQACH5BAUDAP8ALEYAdACNADYAAAj/AP8JHEiwoMGDCBMqXMiwocOHA/lRg0ixosWLGDMa5MdOo8ePIEM6lCiypMmTKFOqXMmypcuXMGPKnEmzps2bOGk6AJGzZ0x+B3wKZcnP2dCjJ6F1RMq0qdOnUKNKnUq1qtWrWLNq3cq1JT9+j7punNj06xKxBPlpKwsWbVqybqP6mztXYKIYcZHSpUsJFSo3WWDkFbrXnwG/frGYCjM4Z2F/XP4hRtXDy53GNh+DGTgZlZY/9TDPLAzjSMHJoiokarnkrOjHFg52BmJCcMqv2xy55ZeGYOEY2Qx29qtm5dcVcZP5Luzm9PABG1QmSyYlKFrey/cmITi8xzrbdEWv/yR9T+BwLasFPhaP8vE6852LD3xcl33JwmF6wEe8wwdBJxPQ5499ID3GACrm3bOHKKj0J5ATQoBTwgkB0EegRo+x4Nc/Pdjxzx1ENOifE+AsItAPDUQh4IUX7SWQFn5x0I9ALIQ4gEAlmDhQAoVksiKLEIUn0AeoDNDPjDRyUYRAAiyiI0GNkLFAYUBmBEMWLygUABtPFoQHOjQIWWVKDXRp0CIF0OPamChNUIaZAznpZBdsqlQInALJ6QoNdaZEgZMFmegkHRP0iRAIziS6ZkU1dClnGSMEYKhBB0jx1VfJdHLRDU/KuQgZYk76TxqXXprMog8BIISOnuLh44CiClKkTqmXGmXRPIIuUkYXCSziKqyxTkHrVzxZpIinI/xzQq+uxirQCsMKklEBg0qqbK9sOCtQJ4JIIQUa1Fh7EQSLuFLoQCegAIu2Ji3RhSLsnhQQACH5BAUDAP8ALEYAdACSADkAAAj/AP8JHEiwoMGDCBMqXMiwocOHBKGBgEixosWLGDMu5OdAo8ePIENalCiypMmTKFOqXMmypcuXMGPKnEmzps2bOHN+HLNEp0+a1X4KhclvqNGV1dIcXcq0qdOnUKNKnUq1qtWrWLNq3UqVHzRqXAlWmxiVn7awAzmW/YpW4Ni2W/35gztVrt25dJ3elRvGBJ+8TPcyQIVqwJ43gIfuXTcQ1RELYRL73BukB0FU2byomblkSQDJAwUfRKVlXRCi/PgZCsvvC8K9lBKiEsUgtsvUglijSbgXyWjChJGAYZks2bZOrF2/vmuiIPDnqHaAlrn3BZHG0AnvyDKd+l0G2KFz/4ncPeZeXuEJZ+MAIzTe8izv9uNC+N/zcOT/7X0P/6R8UMDZ1wNhWpC3n1z9oWRXP2/sEOAHJhBo4IH8JfiRXQJVAJwbc0VIWhA0yFLANSpQaOGFCP6DCWFHnCaQhybQs8gi/0RwhQwmnhjSANlsRhAYFQSxgBA0ChTCGeYskaOOGUGR30HozFiQEe04sR+TK9EgpUHglHBCABhiqVIBRSL0QwNiEhSAM2yKJGOZBc24yCvepAnCN6mVpEIEcBIkpyQdpClFniYBsmWcixTwQJpLpFaUSQ+EAKecIbTTU5oBVEOoSXRMukgIJ4Qp5hibliTClnIuMkOJFTKJABpSSD5hUgBG0DjjK2LMuGqraZ60RaqpLKGBrir0ytIEVMyogUDCzoiOsSwNi0IUAy0hzyItQJtlLn0YJMNn2oYUEAAh+QQFAwD/ACxGAHQAmAA8AAAI/wD/CRxIsKDBgwgTKlzIsKHDhwT5JYNIsaLFixgzVuQHQqPHjyBDepQosqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6lzogNrOnzj5SQFKlObEokhbQqu2IqnTp1CjSp1KtarVq1izat3KtavXryH5SXQGlp+6rWLTgP3HMavYZGS/ml1Lt67du1r96cV7Va+/foD5TvULGLA/wVAJ94PCIclenUsiIyaoFzAHgeHWBXl8Uywar9UCMKzc7w7BHgwocaYplt+Brvy+NPwLWItBJCZeHJ6ZrLfarqFnF/6DkEgFA5N10u5XT9RBVNC5FNmQ/GbhfhUMQt+OagcHGNVpXv9PRJC7eVRhwos3DGTgeehEiqhf38+ffFQCzwPhM5++vw07QJffdhZQ1996elmw3YCisECZX7sdqJJh/vDBnUBEoEKEgwJB6JeEE+41AHcW+BDghh16CCGIJtUnEBjbAUGdiRqS18UZqSyg4moshgTDERryJxCNFvyDwiL/SBIKNzvy2KNGpqAiH0EGWJBeC4sgKZAOQyzRZI8BOBNXRkEoxE2WBclCQgc7gvhFMmKxpAOaBYEjhgABrHhgAHDy09IQdB7ERgMTRNifM3G2pIIsgRaUZRkNgAhCay6R0OhAWWapAYuPJMpSByFoaVCWsCzAYgDUoCHFUCyJ0SiakgxVYeiTLQnw6iIKPPAhrS4FwAadmRohw668ttQEmlnuEqqwThaL0gRUZBpBBxAs+8+szqYkT6YiCFTtIkZEkW1L6WSJDkHfcjNuS2LQYSpBfaSz7kkBAQAh+QQFAwD/ACxFAHQAnQBAAAAI/wD/CRxIsKDBgwgTKlzIsKHDhwb5SYFIsaLFixgzauSnsaPHjyBDCpQosqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6qzowNbOnzr5UQNKtCY/QUWTwoSW7IDSp1CjSp1KtarVq1izat3KtavXr2DDFuWHRqzYambBkk3Ltq3bt3Djyp1Lt+7Ffv38RV2yJEBdvP4C603Kj18yEFv5WYMIWHBgwvwQcOXI2LHln8mSTXGUeHHlwCZKFdng2C7QvIHDCdxhgc9l0zkFWyg4AAyM0rBtCo5xEAuHMI9z6w7sBmE2L2qED/eX5SCq56jCrQuiXKZgGFgKQt/e40P1mIJNEf/cTp7Bd5iCw/QQiOof+ecVNpxHH9iL++f3n+9oPp++PzXk3cdFGATh1t9JjmkRICpHGFDgaweWJNgH5AHRA4MOCmSZgfMd4IwzH+kVhCjQHRFEEhc2+A8NsNCjwobBfYdANYWJVAF0yf2DIoPlFLLIIq7M8gCMMcLmSGGUhZTIc7MNtOMkqfwoUAgziBAAkbkZUqNJDHgBQ0EGJPLPAkpIORAbTUwAI2ydbBlTKGYSRIUGkUBYVwBSuPmSDD8uglANXURRZF1LjCHFoTHNEadBi7xyRYQujbMoQX0KAWlLS8gyqUA/okDBpS2RMKmUGkQBaksdgBPnj6+kItipLJVNsOoieGTCIawmCWBmownQauuguIoUABt9LpLKCb3WOliwKDXQpwYCIUurIsym5EAZi6AwlEAp/LJIE9WmBIsQOBQUDySShYtSL+qqFBAAIfkEBQMA/wAsRAB0AKIAQwAACP8A/wkcSLCgwYMIEypcyLChw4cI+aWBSLGixYsYM2osmGyjx48gQ4r8J3GkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rc6dEBCJ5AgfI7ELQoTn7OjCqdCY3d0qdQo0qdSrWq1atYs2rdyrWr169gw4odyI/a2LH8tJ0VW3at27dw48qdS7eu3bt4Cy5ZEiAvVX6AzWItGRewFK0d4SZLts1QVsIV/Un251fq5MmVn17enLno5s+dgU6OYSIM6NA5Jw/418OLms+UUdecXIGglg/lOMumKdmAQVEVEmHePXMyF4RATBCf7a/IQVTQd1jwvRym5A07CkLfDn2AmuovJVv/0M59OxDwLiXHGAj9X3lUWFigL+jIWVKRk924374f+qggAl0G3hiA8WOSZFn01x4qonxA0GmydQIYSpLBgMV7/wDxwoOwxdYZgQZS6I8p5fUAHRcb/vMAICcE0GFn1EyoUhgmbpcFByduyMMii/zQwAQv+nXANjKm5MV2tf2DIypcbHADjwIlUEgmHXpolyNpSHFYSmpAp8UGAy2pxgJ4QDlQI2QsANt8HiEhCnUDfVABmOiYSRAe6NCgG5sZBRGGQjTwuAhCBdCjgmR8rlSAnQdFcE6iK9Ej6EGClgGpSipEwOhAPEYgwqUqAbIplHM4AapKD4TA6CJUNOCilaeOUjSDnTzWooiAsZpEzqSLlEHFIrXE08+wuZrUjRGCLtKEJ7/W8g+xxY6Ug6BndPMPs8DqEa1Jh/zqyiEDYQvJtiYVQoUABZ0ASBTkjrQEu+2aFBAAIfkEBQMA/wAsQwB8ALcAPgAACP8A/wkcSLCgwYMIEypcyLChw4cIxyyBSLGixYsYM2rcKLAax48gQ4ocSZEfyZMoU6qEWC3NypcwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdytRoNRBNo+Lk50CqVZpPr2rdyrWr169gw4odS7as2bMol6hFyxYhP35SAkTl96Utxrf8HM1FY9disr+PpNLtS7iw4cOIEys+6K/xYrKNIz8OG7myv8ldLVvGvFWzZox9UOzifLMxDAsVfHi+THppYz4DuRTZ4Lm10sZaCO6wwGezbaSNPxwckAWG498bQThzptJfEFEIsXAIgzxjgEdvVzZmYBCVd1TZvKj/qW4RQXbt/ih1//5diw/yEAWdRw9kICqB7L8XoVi5dZr5zfljgn33/cOeKMLx59tkIFQDYEr+bLCDgd/hh4oWBli0GmYgPCKFFC81VkF+BVawgUXYAKLIaqzBF5I/BpDonRcwWPTDIosUcI0KG7r4UWNc5KfFjDVSVAiOAkVwhQws+sgRGOwNAAMDRFKUCY6LDBTCGeYsUZuTGW1whHc7UDeldxVU1AiSBRnRjhMLgnmRBd5lMdCZ4VREBpYHgVPCCQEcJ+dFYdzDQUEwZAEbRQvgwSZCP4wzqE/o8GkQlnNM2hMNlhaEYyPeaNpTAY8KhGQVK4jakwed/rNIBHn0UyOrqjutEMGjOCpAjayz0prTKXwu4ugiuvLqa04PhIAlOJmck2sUgh5r0wxYNiGQs8QuIG1OIuA4h1zX4pjJtjgF8IMsHRR0TQPgkmvTAtq6m1NAACH5BAUDAP8ALEEAfAC5AEAAAAj/AP8JHEiwoMGDCBMqXMiwocOHCh1Qg0ixosWLGDNq3EiQnxSOIEOKHEnSYrKSKFOqXEkRWrUVLGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnCvmpg0p1Jz8QVbPWlKq1q9evYMOKHUu2rNmzaNOqXblkSYC1cA/y42fswtNqb+NqnDvmKb9OejMmS6YNq1O8gRMrXsy4sePHkCNLnjxQQA0UmFH8aEDZ65xFoEOD69yVDJXQoUnr9Mfan+qvrWO/1hpb9myotXPf3gjCmTOZuYPvtrhEylyarE0wUBOc9XCIaY4j90dEoJYPQZo/b/hMOnIGBEUx/6Cke/tC4/xs+mNxEIiJF87NL+w1N/10JAh3VDAgn+EXQVJ8hJwJB6FiICpcgLEBRK31p5I/L1RX0IEHHgHGQ+U5OJI/FRCEikAUGtihQ9ppGJI/Pgx0IIgHVrAgQ9TwMMsDzblmokascfFPiCDukMVDHoAWwgwiBFDijRf5U8SOPA4QBkSHlAGaQCicM0GNSFbkzwY7hGggEEFQJE9qAlGhATZHZvmQBSFq8WWYD1FAJkGbjBBFbWpSNAmFWASxzpsQ1TDlQQnA0keDeUJUioHZsPfPn6gAAcNDI8x5kALBJErRHgZaQBAHqGTzyUPUvDKoQaHhoClEbwAxwBsF3WlxB0WwWDrQIkJ4sCpO8di6yD8K6NHPrjgVMCdogCyBKLE0XXPsIhLgyexMKkQw6CJsgBbtstPGdAVqPEShgLbcdruSDCGA9gMA/4gLWhPm1nTGIlT0MZC7dMRL0wl4dFEQADd0oG9KAQEAIfkEBQMA/wAsPwCIALsANwAACP8A/wkcSLCgwYMIEypcyLChw4cJ+aGBSLGixYsYM2rcaLAax48gQ4oceVEiyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AbS5ZEiCo0aMH+Skdg5QgP2tNfSqFGlUgv6o7kyUThwDrU6xgw4odS7asWaMTpqldy3bB2bcgG4BbRLeu3QiR4OrF+GCu3b90f+wdTPEE4MOLCCtuOOEVYIOJF0tOKALF48mYM2vezLmz58+KA1xw5gy0ZxDPlM70x9q0TDSqV7Oe7bplAKVXZc+mXVtlstgydwtv3ZskNeDBhwsvPtIQGilSZCcx8UI5b+Zm/ZXL9o9IBR/W/WH/P+tPC0EuRTYMH5/9g8EdFvjsftjvOvucQUQhLPUPBsT6y913kz8VHITKgVhwEIZDAK4nIE3+JGLggQdm48UkCvVSQCwkdGDdg6sBQRAqAlFIIQcKIeAXOCUIEMCHILrkjwkDUVgihW4EsRAcdQnERgMTwBjjShvs8I+JJB7Zg3sMpdDjQGVkgEM/VFZJ5ZAq9VMgkiRqYYdD3fzwJEE1jICAlf1gmVI/vHB5IAMQNTFmQUJgQMCVaqrEBZKiHFigQ9T8QpdCizSQ50qgmHgEJgP4+RAPcxJEFwSHqvTGDhTu8Q8UjaLyJ0OZRDpQBAJUupIFjgrEKSrZvOGQApEuaUJHkKaqxEkPQLg6EBQW0PIQGXMugs6LxNV60ie6YrQAHk/SFYEi8xkLVAs9LlIIFYs8a5+0PNFglxj/2ICttuJx+5MOdBkxgUDiLmJEUeb+RM8iIZxAkLgowBtvTyrAQoZBTgCwb04BAQAh+QQFAwD/ACw9AIgAvQA6AAAI/wD/CRxIsKDBgwgTKlzIsKHDhwz5UYNIsaLFixgzatx4kB87jiBDihxJMqPEkihTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKhRi/zSHF1aNBnTp0CTQp1KleMSGtOyat2a1RKAqmBLmpO1qKzZs2epzAoQtu3GPlTQypXbxK3dizzmKlwk665fiGfkMlz0tzDDFmgNK874AE/ixZApWtIB7mzky5gza97MubNnzAGcif7c2Zk4fvxIcw6wDbVqziBcv958AHXq2ZrTyMYNGgEaKVJw+hvOG/Pw4/6KR0aOXLlh5syd+4VOXbrb4UFgUD9uHay/LP/urf8Lsp34wn7ozXfXaWJgDwYstjNE3y/6+psviBRE8uGF/YSBeGBIfdDdV5M/FRxERAU+JLcQNXEpUYUe9FXYj4Ez8YIQKqgAQQsUCnVjhFkh6OBJLxbSh+FL/XBxEIcc7lABJgnlYNZAsrQSTIrordgSLQWhIhCMHPbwCUKHxFUWQeCIkUI3Kfq4EhQ7DATjkDBy8UZCcNxo0A8NTNCclCn1kyCWHA6ZjQVbJpSClweVUcgDDpKZEo3/EJkmFnc0tAucBi1yhZ0r9TOAnhwSwYlDTQBK0CIKdEDoSnsgyuEAIDJETQKO/hPCFSpMutIbRxCJhAWXZrqQGY7KIgB3oqZshCqHomg4K6YMxQPoIuj8F+tInGTD4R8DzWpBQwp4WdkiEvj6a0huoFJKQRaIAkpDqdwoRB/JMjvmsyJhwkE9GC0giVkQ/BNFt7OoBy5PoZQlz0DrlhXquz7pAQ4bEw1EjRlb4AsUAf0K7FNAACH5BAUDAP8ALDsAiAC/ADwAAAj/AP8JHEiwoMGDCBMqXMiwocOHD6GBgEixosWLGDNq3JiQnwOOIEOKHElyo8SSKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGV/L4cXWqUHxqmUIUmjUq1qsZpZ6gs2sq1a1cqZ6ZZHTtyWgKuDhclEEu2rcYzaCGecUv3otZFFanU3QvxLt+/JeHiBUwYpNmthRNfzYpYsePHkCNLnky5smWCS5w5u2x5RTV+/DhTPvA5tOjJK0CfpuxM9erJUly/hrxkjJTbs3Pr3s27t+/fwMn68xf87/DjxeseX5687fLnxCn2m948J/TnD6dr71fd5vbv3xce/zIEnnp3mf0sVMBUfjtCHFSUXNLT/jxMTAMH7HnTnrvBFF3p4Ekv9dm3Uj/3EHSEBZyUd1A3KMQlCwkdXBedgShxYFA2btzhHkJbxCUQOCUIEMB1GJb0SQ8I3fNHPQodctdgBLHRwATYpUiSPQeh4qMo9tiRUDMiFlRGIRQgp+NIdyDk45NI8HJQIF0ltEiSS5LUDxIE+SjQkz7+gdAuRRK0CBsTZFmSmF8+2WY2FryB0AhlDiQPAGqWBAURbbr5DxZNJkTNK2XiAcFweZbEwD9gPgkMjAvBUuQi2DCXqEi8NPqkPXIuFE+VAp1ZoZKXgsRFo1j4yClDx6AVQYiiWlda6kaggAkEFKWo2mlC8HRFTj90nvmEebNu9MYOPhKB3xu5orKoQoYosdUl/gU7Q7EiVeAjLQMxiwoWDFWxyCaGEDRCAjlgGxInvjzbLS1CitfKE+ruFBAAIfkEBQMA/wAsOQApANYAoAAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSFEgDW4VM2rcyLGjx48QudEASbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+eW+SWDvpAfCOoIpWPfzr279+/gw9v/rBZAPL8v4smLX8++vfv38OPLn0+//uUDzpyBH8Ov/3dn/fEDHjX+gYdAgd8t4Q6C3jnigBRS2CfhhBRWaOGFGGZoXD/9sMZhhy99yGFqIn64kiFPlGiiaSqOiNIxixzjgSEi+mNjaS2uWFINi/QYQRV6cGjjkP6IlmOJJI3QY4//hHCGJ0sQOWRo/bwBxZEudkTNK0sSZMQWTkh5o2dvaCGKPXZgCSJHsHRZEDi5nBCAlGQSMRAQtFzZokfxLLkIQoM0EMWUnlVQkC8V8KLiRzAymVAJY3rGCyoHcQHKG2t6BI+fCIGTymhcIITKERZwApIhSrhZEBsUkAaKqKigvJJNKXt8VIWqA2kwaJGivXFEQZT+E+uwFnikRwi4akCnaMUONKxAw4pSq0c64LrICEiGxkk20A4bLCpa8AKSJ5y2skuP2OoI2gDdevsPA1CQ1IssS57RzSHnXqvuZ3t4660FmX7Uio+HdIhvj3qU9gYW/sYqyh0mBQPOInkQdMgxu1BjGgf+WuALKg+b5IEnr33Sw7AM/GPHxyFDx0CsWmwgkA87oLIDDNCxgEoPPhDkwxFAYPdBEgbhzFFAACH5BAUDAP8ALDYAKADaAKcAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEiRoAoIEFRU3Mixo8ePIENKhJCgEQSRKFOqXMnSIwQFbE62nEmzps2QnTBqvMmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fvVflJ/wHPkB95heLPq1/Pvr379/CV8rMWX6D5+PPr69/Pv7///wAGKOCABJoGgjPOwJcGP/e5ZwiD8T0CIXwOTPgeCNVY6B4IaUgxXoEghijiiCSWaOKJKKYoWz/91Mfii+zFc0kK3bwI43lnLLIIG5A4YCOL/tjG4k056KhjGRngYKM/TM72Y02HUGHkQDWMgEA/TGYZ5Gs/3shSLlMSJAQGNGiZJZddDrlSIEYuclABGWmJZppeirRLmAdF0MCZc9KpZkgNtJkQG03C1s8doLzh558eUfMKngX90MeWsH2SzT87WIDJoiGZIWhBhQBA2xtHDJTNAHso2mVI8XwqkBAe1M8JmwWoFIQFB5/YiNIxkMqih66ycXKpQdkAc0eLKMEjqBAhLOIrsLGVghAqqGjxRz0iGSLJlJ540Oyzsra2R60GUUutKAxwEtIlRsLCorfOBhNua/cURO0/5lLLQUh66LiLIcjC64FtHJCLr7kHozIAtiGJgYciBQnQxAK2BdGDQPne28M6KQWwk28MJJyvFomcR0nG5pqyHhIZ90Atx+eZkO8RBgDx8nkvEGGuGv8EYTMqH5xXAbUWDOQzKkScZ0A2QMBAUBAVFKHeJBuoFBAAIfkEBQMA/wAsMwAmAN8ArgAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSPHggkyZFlTcyLGjx48gQ26cJs+VK3nTRKpcybKlS5AL5C2aSUWexpc4c+rcKTKTKxRUFLRwlYmn0aNIkxYM9DMVoEVElUqdSlWkFQ2LIsy0WbWr168ONWkwiRKs2bNorQTKiLat27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4v/H0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4IAEVsRPGgU2lEyCCx3I4IMQRijhhBRWOJeDFgq0YIYYZujhhyCGKOKIJJZo4okoTgeCM85UuAQa/PBjoQMxZihFjRbCKKOFX8S4Y4XOPCKFFCkWaeSRSCap5JJMNunkk1D+1s+U/UxIQA4EUEllhAXMVIAHK2hZJYNVzDRTBKc8IeaYA+oRgpkChUAHOd1o6Q+BOsBJkBE5HDKlP4DeCaAnZi5iEBW5BBIooAD2IoueB21CT6DVbclTK4UmNAil0625UzDgQFqQEekwSt2alr4khqgDzeAAm5Wi+zrlSylkOtAvI6Qaq6yzstQNG6L+4Keup/Kq5UqQZFqGQLsM22t1nwBTASbGPvuRA2XA6UEOMzV7bHW0oCLQAHu8watKGZhpxpTcLrILNcRG90kPBB1hASeoqpTJTD8swOg5M43DaXUMiEtQNl6oMbBKCiTQh6n/pHLFTdixYPBBHwTREgATkIcEQqigIgoDlBRowsUCGRxyyEBoLOALRBC0csohZ8MHgRVcvLLKWLBQoA8q7yyuFy4XyIXQNZsgaIJFIB0yBxBusMPO2SDxNIQW7MzBC0ejAjWDfKzMBQz/cB3yBw8OgMoOMQxkNgMPshBOFgVtAEY5HQUEACH5BAUDAP8ALDAAJADkALYAAAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEgx4YRx5syNm1Cxo8ePIEOKHAlSBKACZcoUACSCpMuXMGPKdCmi0KKbOAu1nMmzp8+fLycAwkl0ESCOQJMqXcq04LgCNwdGGLKowLimWLNqdWmuzKJNChZF6CNmURlzW9OqXesQnlcjlhSQvXmWrd27duVAXdRogph/N63iHUy46bArOKkQPVq4seOe8GwW1fm4smWX8K6gVMnysufPHofJgacRKejTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOL/x9Pvrz58+jTq1/Pvr379/Djy59Pv779+/jz69/Pv7///wAGKOCABBZo4IEIJqjgggw26OCDEEYo4YQUVmjhhRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjz26OOPQELEzxdBDsQPGkUKNGSSTDbp5JNQRinllFRWaWWBFzjjTJCOsMMPP0UK8mWS0IxZ5DZmBolAmkGuIIgUUlwp55x01mnnnXjmqeeefPbpJ3j9BApkIUZUoUegiPYoy00hnEFOL4j2syNiOP1jRA7BRCrpjTKEUKlAVMCRQjeR3njGpwTt0gQ1pdJoDlEH/f9iRjyB+uPPjEssGlVCVfRjK42twIpQK77eOuMT4KBKUAIjJFpjWbsSVAMBgt6YgrACiWGIszf+oKwQOLR6oLhANQErHb/8Ay65BGparU8TJIBTDYak8Msi63Lbrrvv8iRZAtzYeoK8eExgq7EGHqzwwT1lchMZDJ/wihAG/3rgwhhbHFMo7fyj8QSmKZhxxjhaQEQFiYyssI1coCIQECZsoLKNJrg80A4VGIDxjRvscNAAYMCgsY0V2FwQKkdwEEOOBhh9NCrZjJIEDDcO4DQqNmONtRc3gnE11gJpbcGNMBwxkNZg/yOKCTly4DLaWgPBh44xZAM31gPIvOMod0M4DQaPScDtBRZ+7whDOFprsUEMhGfzt47rYN2DDwIxDvXcOQbRAyofEBRDOEQsraMJphi0wQsgBQQAIfkEBQMA/wAsLAAhAOsAvwAACP8A/wkcSLCgwYMIEypcyLChw4cQI0qcSLFhAG4CBHALULGjx48gQ4ocSVJglAYNmqhsgjJKyZcwY8qcSTJSOwl4FulchEdCu0g0gwodShRmpBE1dipdVGME0KJQo0qdSjBKu6RLldZo55Kq169gRzaQsNPgTgkNwqpdy5ZhgAY5Fx2UUIBnA45t8+pVy61JWYKLmkz4obMJt72IE0cV4FdnsxZyA0/AGliA4suYZcppvKjRAg2Sa/zb2cRy5tOoP2ri/E/MAnqTBZI+nLq2bYg54gpE50S0bLt4bwsfblAfWZ1mdaIlzrz5sFaUszLl2rz6cGQNomt1ar37bWStcCr/7fnTu/naw/TlWMmyQdfz8FFrkqMxePz7+PPr38+/v///AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZqaI7V2HeoQPx8sWhBiT4q6aSUVmrppZhmqummnLoZgDOgSnrBNvzwM+kzpU7qSKmmSroEq5Q6/5AqpQigIYUUneaq66689urrr8AGK+ywxBZrbJALFNBIFwD4008/h8qw0ysYxPPss4XWhdw/x8BjyLWDpqLUQEpUoce10P65QC1/DRTCHJ70Aq6fV7RbkCytBDPvntLaWxA4nuyr5xz+EhQCOQLnac64BrmSQsJ5LmFEwXQcArGeJPjbSjcX69kBOPbuYjG2gZbw1wwCidxxngIolUE/OeikMsl+BsCGTmw06885OhXgz8/+ANrAIuD8A/Q/fjUCdNB/RiHGNUYz/Y8MAER9rI5LT7r00YdunXWhXntNaNhiB+oPHy+QvfWfSaCyQwUGqP3zn1mgMhAXYGxA9p8wYI9h90BHWBDD2oBy8HdBbiQBg9R/hpHN4QShgoUpYQjqBeQDoaJ5DwywAKgamGv+j+ak8wGoFoeTbjfpA2wA6Ad/qy56D+vAEGgQoqwu+z+JMP4nA7Jvzofvf1ISvOZaVE4oEKojATsqyRNqAumiGPDP9NArH+gLO2huwkDYV0BoBaiMUlAR4YBBaBAmvCBTQAAh+QQFAwD/ACwpAB4A8QDIAAAI/wD/CRxIsKDBgwgTKlzIsKHDhxAjSpxIMWKHadM6VNzIsaPHjyBDikwoAF2LBvToNWiBTsDIlzBjypwpk0ahazdmyFq0SNaMG9cK0aBJtKjRozTpASITgadTpxHIAKKHtKrVq1gTqiz0tKvTQiizih1LFiYNQFyfEuxaCNDQsnDjynVYiIzag0/JFJrLty9fAdea8lQI9ZpLv4gTX0V3w6nCAlec3kCnuLJlmi1mOEaoYwENpzNaXB5N+mOHBjsXJewsw8g/nrIaaCxNu/bDafQ207MBbiBr16950ptmu7jxg2tyD/4Hy1/jf78HOh1+vPpxRE1SD2zgT0J06T1lW/8fbxuD5uUhhvhT0Xotz9Dk45c203j5vwQU2rtfNFm+f8typCKYagKBQ0VBhR3234J+NWPXZgbltReDFPKlyRVpQRjcV25V6KFcxDSRoVdfhfXhiWURcwVTJC4S1VQoxkiWJs2kklNqPgEllIw8jpXCJeg0kEoqK7XU45FkPRFPRkg26eSTUEYp5ZRUVmnllVhmqeWWXHbp5ZdghinmmGSWaeaZaKap5ppstunmm3DGKeecdNZp55145qnnnnz26eefgAYq6KCEFmrooYgmquiijDbq6KOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMb/KuustNZq66245qrrrrz26uuvwAYr7LDEFmvsscgmq+yyzDbr7LPQRivttNTyyY811SbET7YHXcvtt+CGK+645JZr7rnopkvtEs44I24v1fCzLbgHxDsvuJ3IO+4F+o6LRr/hBjAGGlJIoe7BCCes8MIMN+zwwxBHLPHExgZgTh/jmsOTAqks4I8/3PbhmCShcONPP9kqAKEOHqzQD8rSpqLhP66c8sTL0S4gycz/hDBDHt3g7GwoPA+Ewha9CL0sN0UTlMLLMC+rQ9P/5OKy0soOUfQr8EAd9bIqpEbgQI3o4TW0JGgYQiBnQ9tBCJuF8I8QOEAtrRiOKRCIEHPX/411swI49Yo3/sQhxCJ02/1sAGzwlMrH/mSCxyJ0QB5tA4toADnImdBhg+XQLnGCCqAT9DHFqKeu+uqsy3W6uJuDDG7spVNL++bZ3h77tLrTLi0LlPSOu7MGoPIPEia8ILzszAbRg/H/EFGBD70/ywD0A3FRxAa7P8sCKtgPtIMFkzAPLRLhDwR+KVnAEO0H6asPPhYcbPDsC0SED75A4INfBLQVwF7/oAc+N7wAWj7Y3z8GaLwefGBaXDAeA1GhBepNqwgTBB8YqrWBHTAwG6joQRKqZYEBhsMHWAjhCKfFh/5lgxL/iEEKRUitAYDPFAORISqQQK0soGIA7suhFwn+Ry1K2G8mAQEAIfkEBQMA/wAsmAAbAIUAjQAACP8A/wkcSLCgwYMIEypcyLChw4VOHjxw8rCixYsYM2Z0MqLEDAwkSGCYUWIERY0oU6pcOdAJhlwiLHVBp0EDui6WROTCcJKlz59ACdI7k6nLoEVIkyId1CXTGXpBo0rVSEJCuh9Ksyb9kU4Cialgwyok0YAMOK0CtYIj0+Cr2Ldi6UkgkxVhVjISoMLdG3TCmXRnkTJMCi7dmQl8E7PEkAmr4IZbM2FQTFmjk1xdklZM2iVXz8qgG44QcfTxQjyA2CQdJGJE6NcMS1jSzBBPJn/t/iWdVgK2b4QzMptOaNtfJjy6kXaZ8bt5SwzoaP8zUstg8eNpkaLj6bw5DRIaTFP/WfDA1aKB15EPRKqBBI3uvzXNCn9+ID3jCQSmL8jePXzfiMASnWkJUOCPOeDsR1BS2332H2iECFefQBHI4E9Txqm3oHLMPQgbIbMN988PE/iT4UG79ebha/qQJp1ABSyAnUGrtbbia4iIIaFBtVBhl3Ke3fiaLo29qFBkkwkZGiI6AGYkikgVdpiSrxFzBV1K/ZgUXnpRGZoLZQWWZXJKrdWWl761YpVjWinFlVdo/uYBUUa1uQhTTnUZJ2yHwFKCCNPMVNNN0+jE3Z7OHdKEGB+FNFJJDiLaXTAE0BCppJhmqummnHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGkyrrrLTWauutuOaq66689urrr8AGK+ywxBZr7LHIJqvsssw26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar7rrstuvuu/DGK++89NZr77345qtvt/ykcW0y1va778AEF2zwwQgnrDC3BzjjDLUI8CPxtCBIzA/EE1NrSMbTBmANx9Ie4IAUJEsbEAAh+QQFAwD/ACyWABkAiQCPAAAI/wD/CRxIsKDBgwgTKlzIsKHDhA+65GqkoEABBY1ydXnwsKPHjyBDfhQxR0cXbipk9OkjQwW3LjrmiBBJs6bNmwRp6CgkY5qERuAWCV0ErpGEaTIK6aCBs6nTpwZvKMiErcDQq1gLYMuk4AbUr2BDBgilYUIhrGixFpqgIVSAsHDjJgzV4sEgrAixDnrQIpTcv39vaHhg5CrDq0YeaPAKuDFUGgom3B3q8OqgCQqYOt58U0ems0I/Di2USQfn0yJFFMJm2ONVbIVmop79cI4Mq6FBDi0gYw7t3wsf6JhG2aMY3/+GTtPBEbjzgl26SChe+Z+/JQmSC5UQ/bl3gbm4Nf/KXRmQ9XEDhTbiluu790Yqgi56uMi8PxtU0hNV0cj9cwUyUCeQPFYZVJ91+BE0lAwK+OdcAX0IqIA/KugwX3r2JaigUH0U4CBwx0RI3j8J0OBPFLtceOB9+RU0VIcf/tZIgCP+g4IT/jzgilAZtuiiUAzGSNsm8dX4jwIL+JNJAj3mtV9/QqJGiHhG/iNGAP5wg6CPBi6yXntRntaGdAIOhI4/aGp40FDcdRHmaYgUQFyV/zTAokLKMffmabzhdqFBP4SAp1C8IbfnZnLIw1qZDb0W26GnHfMZo4cJRZppkHKmSSOStVapUJdllulpIwxWGKU/CpXYYqOidgk6duH1taZlfPnV6mndXFIWaGmltVZbb92K2ghTVdXrVVpxxZiwsxFQAE8+AXVVUUcltRSzzuWhg0koqcSSSzDJhO13T4wwUUUXZbTRuOy26+678MYr77z01mvvvfjmq+++/Pbr778AByzwwAQXbPDBCCes8MIMN+zwwxBHLPHEFFds8cUYZ6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfs8sswxyzzzDTXbPPNOOes88489+zzz0AHLfTQRBdt9NFIJ6300kw37fTTUEct9dRUV2311ViP64gzzqCcBj/8oLwC2Cl/HTbKY5CNsiPJqH0yCGlIIcXJAQEAIfkEBQMA/wAslAAWAI4AkgAACP8A/wkcSLCgwYMIEypcyLChQ4ZOzDVBV6gQuibmnDzcyLGjx48gB8ogsesHjyb0RIig14THj10kZIScSbOmTYKWxPxo0iGAJZazZqG0FKBDkx9iLN1cyrSpQQDoftBbIkKDpEVYs2KVpEHEEno/0AFwSrYsSEWbAC2gt0urW7e76C0AtEmR2bt4FQpAceKBjreLCALW8eAECgF5EyfeS+PE1awMtUo6QeOw4stkFaGgMY4K5IdZqYyrbBez6ZoANp044Rlrx9CrN409TfsjulkPHgf2mFXSg1noagvfaOnHgr+uQWbVseCH0uHQFYqhR+9zyKzUxUTfblDGjyVtd9P/xLpryQ+Z3NOTaCLCekcjjQZmFdGERPr0mzpoSO5RQRR/2gmElQYdbHLfdk78EMBjH/nnjz8zyLeIJAH8oNGBw5nDgyXuPeTfP/4AIhhWlvBgDobDNYFShw19GGJB2KmIonDosMTfQAl0sQU4CLkookFYoRTcjLQVIsIsNwrUjD//NCDeQD4ihNUsIhRCJG2VHJnkPxF0wCQ6T0Yp5SJUWnmlabrY+ORAjQDgTwAz7CbmmEKeaRouK275Dx0B+LOAAovMeVCMTdiJGTGFcKjnPxg86EQJUYD4Y0JZlXiioYohoiCDCDXApEAvLrRVhRdimtgP+i36TwhDMBmqqIsQ/2igqYq5cE57qiaQzqsKzVcfrYpp8l14CoUQgUPkmYcesHkRQh2Lr2GVHbOKrcHGcdCChhVzzlGrGAa46fZRb78N6W1eCOyyWmtrNgTbCbKdq1g8RnDG7kahjYZCafImlsJmjmkVWW+UWdbvZSkY0Rdybo3oFmGGIXYwZvHsohZbgAEW11x1TXwaAhhIRZVVGXPlFVhieVxbPDP8cE5PPzUR1FBFHZWUytDpcUpJhaBkjjksuQTTsjhHF4wnW1ySgUUYlVr001BHLfXUVFdt9dVYZ6311lx37fXXYIct9thkl2322WinrfbabLft9ttwxy333HTXbffdeOet995892/t99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuGMIgjPOJB4AGvzwo/gYwS8uRfGKP4J84s4EL7zizjwihRSJBwQAIfkEBQMA/wAskgAUAJIAlAAACP8A/wkcSLCgwYMIEypcyLChw4YPUrWYoaBGDQUzWqR68LCjx48gQ4os+IDEjwgazo3LpEhRpnHnNET4QYLjyJs4c+osSKOZJHSZAqjoQ68BCRIN6PVRESATOknNaOycSrUqQgChap0DEOXGnASLwooNm2DOjSgAztUKBcCq27c3p7HRMMFJizJj8+Yt08LJBA1spsEdTJjhkFrXljR4lRdh3lcNllyrNaSw5cv/brjq06HAWIdjC3To4+oG5tNuh7iSQcOI2I9ijdCQ4aoy6ts5p9XqQyPCa5BiI9DoU0sw7uMgAbC51sF12JGxO1xj0xa5dYehNCzx/Pym2AJLNIT/uk5eIY1aExr8xim2wYRaUsvLJ9jsnBPGi6aGfeXkXLP5AD4gCQAtdKffIi0AIIlNAJJHAjpR4JUfVWGVEQU6JDRY3g+Z3GCgSBGk44QOBIV1QyY/aHjdAxEEMMeHIEWgyD/+mDZQWHMEEAGDKt6WigYqgDVhSDIKFEUjJS6SgAoapNLjcS2c0weMHhX5TxQKGBRWH+e08CRuM4xDD5UPWYnlQWHRM84MX96mQCbqDUlQAiL0sYmcBJmZJZqLNJDJnm1iVoMiJJBJhz//dCDLQXomFBYJitQQ6Gm7EEqmEA8g2scrBTXq6CKQSjrpZcXASeY/g0SBqAjgDOTpp34C/zoqYTqIeeo/BaiAaBf5vfqpmmzOWpguUt76jwaI/nOFr59y6aWwhEGSS5DGzoJoADadyRBZTDoJ7WCatPgingalkuyVsiqEo448fuuWMB0a+w8VAiCqbUMmouguYS7ME6G8eAjATbrqLmIhhvuCqwyB8gKHoILtJlwVIfbhdyB//kk8GAHoxUluSO29F5/Gb12iHXcfe/RdeOORDBcCy3Xwz3oOL2KEdNS5PFg8SvDmW8OOhSUcccbpDJcHq0lFM2hhyUabbUYPNsJmnX2G73ejlRa1ZR4okdhijfEpFmSSUbb1ZfHMVddderVtcF9/BXY2ZtRcohVXXgmpV1lnpdy1VnVzY0ZALj8FNVRRRyW1VFNPRRX4cXq0clJ9K00zzUsxzVTT4+Q9Ac8lFFmEkUYRc2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxBdv/PHIJ6/88sw37/zz0Ecv/fTUV2/99dhnr/323Hfv/ffghy/++OSXb/756Kev/vrst+/++/DHL//89Ndv//3456///vz37///AAygAAdIwAIa8IAITKACF8hABoLAGc743gGkwA9+gO8RFQxfMjIIPm1w8HuG+OD3eiEIKUjhewEBACH5BAUDAP8ALI8AEgCXAJYAAAj/AP8JHEiwoMGDCBMqXMiwocOH/wJwG9cAUIsWgBqM4xYAosePIEOKHDlwAQQNEYQokHeFBIkr8hQIiaABwgKSOHPq3GnwAQYhjZr0CeCvaJQoRf0F6NOkkRAMD3hKnUo1YRQMrwop8jdhCIYCERaJXRShAIYhE/wpKvQKQ5SqcOPmHBJBzAN/AsRQGcu3LxUxAvw9EBNhiNzDiBuqmMfKBt5GfRH2bRTYBqt5KhJr3vwPwBwFHSb84+uQ9IQOCuYA4MwaLgAFMxZQMDL241gjFBbMULC6tW+dKubMWCIigdiRYhOIWDJjTubf0EXOU7BARIjjJMWGELFAwbzo4D0O/2HVgYLxRTqTU+jAynD49wqjRLAxgTb6nWKNTLAR4S38/wVhUII/o93H03H+lIABgAz+88ArDwiA3VRiCfBgVA3Ch0Eh/kBmoFRiNeJPIQtmGN4CQigi4YcULiKAIkLcZGJ09IgoxoQkgYMBOlQQJJYYHdIzY3QaNDHBXjqBA0FRoRS0CBUTNKHBkL8FEEEfQ+AokpIC+dOCk4sMkUkEHVHJGjdCBICBliBx+Y8/NvTo4yIYBCAEN2ayNo4C/hTAYpsQdBnnQYsU4I8C4+TJWQPy+BOWQiEw5CacchpElj/yNKDoZoBc4Q+bA90QABmRIjTpoJIt4s8VgGyqWQskRP8B6j9lEPhPE3/+c2qlhC4SBQlfuoqYLrHO+g89tsLC4q4LifVrsMLK5YKnxiaQCYFL0GEgs82qymq0h+GigaO5DuTKXZ01IhC3zUaAqabgxkUMn34utIt/HRjBbrOGIhpvXJq8oqaxAunwnCVCvokqQ2LVeee/cdWCJcECNUoQpQ+JJSaZEMNFiJFIMkSCrRhnDKWUHcMFiY0U/xNCKkUt3NCPQaZclRWvqNjyP1SE0gKvM7sIo4w2T1UJhx5WFeKIJRY91RMJRLgzSBVe6HRVsAxYYItvKnh1VQ7UQp99By6iH3/+fT2VB0qUd156iySwXntqwwULddZNrZB23Hn/VzdcK+gwXHF696occ879DRc1sMlmX7l755fbbr0pXhU1OoAmGmlBH3daapVbXtUKsCjhmAAe1tbrWJTBedlzosvlQS124aVXX7g/CZhghLkXO2IOwJKAVlx5BRZfZZ2V1lptpf17Yk/A8kpQmRBlFFJFBZBJU09h+DxrCHiQSwSvrNTSSzHNVBPR3//WjR6eQFLFJRhpxFH7+Oev//789+///wAMoAAHSMACGvCACEygAhfIwAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQTodIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFrfIRRMGwBlghCEItsEPfsSQHWWM4QHKaEYYBqAaaYzhGOIYQwSgQQpSeGFAAAAh+QQFAwD/ACyNABEAmgCXAAAI/wD/CRxIsKDBgwgTKlzIsKHDhwNlXJul4UyBAmc0zLomA6LHjyBDihxZMMAJHrLqKJC35UaqVDe2yFNQRxaPEwFI6tzJs+fBBSNQsMIgYIE/f0uiPHgQZcnRBQIwsEIxYoHPq1izKgyQytUuCCr80RhRYhC4RWgXgRtUYgQNfyog7HKVKqfWu3h3yijgil4AAA1qpEVLcPCiGg0ABKDnqkDHvJAjOxwihEeUBe3wpGWYFk+7BVF4CBkiubRpgk0SQPAnAAVhj2hRCPAHIUGT07ghS1BCYYmE1yHRSlhCQYmE3MixNlCiaAEd4CLR0lmgSEmD5Nh1DklAYUEB6CPRFv9YQCEB6ezoPT4QQm/J80U+pS+hJ+RB+vsMAxTg4e83/KvC+cNDAXbhZ2BBXUUhAHg9oSVAFHQdKKFAC/S1gGt4LYLCAoxZNaGBI+wSQDv/ZdhOALuM8CF+AaAAAQCaQbYIHgBAgEKBK2J3AisqNFBiXos0oAIrJ+SIHg8Y+CNYfIA80IVBh/mDAQ9GZieLADQwGN1t//izS0Fo0SCALFUmJ0MdQP1I0iJc/tPBK1BWVcdjZZ52jQL+lKDmlgN1wMZBi5TgjwLX1InbLPL4M8ieILHZ55+ADuKPPLMYepoGWyxxlkJCSMJZm34mpNYSW2hgqWln3BAFowMpAIAKGrD/+o+jAoWq0CJR3HDGqaUVkMoDsv7DpQoFIESrm5De+kAqxfIa2TG/BtuICgJFMQiUoCarLLPORlaAqsH+o4E/Aj0QQWHZOoSrrt1CRkimmyoECLn/ZJKAQMfayhk4pJraLl4uJLooQ2TQO85Z6aorKaX/4gUJnnoyBM5sAjWQsLqCEtrwXZqgOUK4AuFhiUH6qisnnRtj5QqWWhpkRAcEldxQmGOmfFclSS7ZUCMA1KqtujVISaXNWcmhTI8gD0SHEzT8rK6QRBKd1TuxvBgjkDTaiKPUPTUgIokynpgi11khYCGGd2nIoSsekn0VPK4o2LJODkKYittZdXMMf/5h/xXggFvjzZMe7Lk3d6OL0DFffYJr5QF33h0OkXjkmdf4XVsw55zkMydOnXWX41UFb75xfusiwxV3XOh4baEaa64lDaaGs9XWJut3eVDZZZlttlBnn4U2Gu6R6XFMX38FZlhhgyGmGGOOES9ZN3B/FdZYZZ2V1lptvRXXXHVJbxoCDaCgBFFGIaUUU075A5VUVLUtvmndpGBGSiu19FJMM9V0U+Dzw40e4HGKXMzhIhnZCMoCyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEGqHSMQiGvGISEyiEpfIxCY68YlQjKIUp0jFKlrxiljMoha3yMUuevGLYAyjGMdIxjKa8YxoTKMa18jGNrrxjXCs0hKc4QwjdiIZ/OBHEZeARz0W0Rl5PCII8ujHIgoikEYMADXQIAUpEDEgACH5BAUDAP8ALPQAEAA0ADQAAAj/AP8JHEiwoMElMk7QS5WK3gkZSwxKnEhxYgBsswr8WuSqhsAarhb9KjALW4CKKFE+kCBLSIkumQD4m0kTQKYuJYTIkvAgpc+BDwpRmUNvgT8V6chI4NGsGQ8JZNKp8LeA3hwqhXr+pKhiSwIxffxFuTEnwaKzBM8uSjDnRhR/fcQk2KJiq0EZCn4I8PcAQ5lFPxeVwfDAn4AfCmTYHShCSKEFC66AA7x4EbgrkAsJEbE4FZUb/tIZobx44CIj6fzdoJJqa6pf4/w1AFd6IrgG/sb9ap1SBJVxAUKRrm1wUagA46hwrihDCGjhxCsaVy1E8UQVCgrJHh5d4iLchRTU/5W45ceCdLS7owSXbsGPLRIfJBCwwIh6n0YWCEiglWAhMf5cwd193l3hjxiFFPQAFX08kB6B6z3QBxX9/SPBGf5gMCCExWHgzxkSDBSALPREUQaHBL1ChURlREGPLCf9g40QC9ywoXpXLDHBJsXdsIAQ2Ag0Swn+zIGiQIAMRIJEc/hTwiwCFdCFCgkcmaRAC3hkUAIqdFHAP0v8kkk6NxJ35T8L6DDRIulk8gtCiwBARpmlnZkmRYuQAcAiCbnijwR0/sPGT3aqiacE/riiUA3+8ICSgQt8WVGhKfHgTw0L/eNPMyhlItAEP1BEaUrN+PNPKm1oymlF85j6jzcRSP80KqmmpgLJJo2mdMNA6ZxI0KyVXkqPHBH8GSg4AgxETwgDAYvSIogqqkmcc6YkhCUDNQGYs8/qyec7ZYwZqEBGdDAQLNw+2+ab/ygwZZU+NQKAQDGiaahdXHopkAtEGvkTHRENdGdpTT4pEDI02rgVLK4OXJmPQAr0jisl+vrTFlTdu1iLL9brQpMa2sVGrLUt4iGIBD3BoINHUgSOhBQWZAaAArZcnIEIGvTEL/TZZzNB+e1X4UA5mIfezwKx5x58Eq3QiHYNjEvcd/6EN55EejjnD3RHTndDdSjl8VtwUm9lHHLK+QRPGbHNBuFtue22FTyfhTZad6elthpvW5Fu4xhkkpWd1mWZbVabHo3oxZdfZQtGmGGIWVfbCjn8ApZYZJmFlmlnseUWXHLRdd8TZgxV1FFJLdXUU1FNVdVVWaH4RBUtvRQTTTXdlNNOQ3PYTSCnaMRRDcSDJBJJJiFdUC96pOABPA09FHBtAQEAIfkEBQMA/wAs9AAQADQANAAACP8A/wkcSLCgQYHYzCk0h+2gw4cQIwrcNFGixYv/ABWMYpAjQY0YL/KoU5DCQA0aBpokWIdHSIjnXj6MKbMgGxE1C4pgk9OgBCo5qUjoKbCMwJVEjxbNOSJpwaYvjf674tQg1X9SL16tWnDrRahcDYKdqTSsw5U0D+I0G3GtQZf/hrJ1KBcuS4FA5x7MS/LjHL0W54AUaATwxcKGDw5KHFYMY6JIH5fcKPmhx4aVI2IbQjGzw01DTnommHKggn+lR6MeSGyXaoOgkb0+iNnjbNtlVUduNNuh496/ewuHiHj4P8EF++Z9zPeh3Md1HbqVPP3sY7QSx87VLtGrWe8RpYI9d3o1K0buRNFblBoZ8tKXeQj+DPo86U2nO40PTOu0r8qTqbXXkmG/4SaQR78NZtgxA3XWWW+BDDQEZj0FBAAh+QQFAwD/ACz0ABAANAA0AAAI/wD9CRxIsKDBgwgTKlxo8AE9EoXoFChApxAJeg8YalwYIBIsFOAaaSDRJVWqLiQ0NAKHAlakABtj+lPRhQ0eWCIADIzSoUOUgQBEwMLDposKmQoDQHC1K9VRb12a1aCyqOoiKjWadfE2M9UuVxBgIi34oECEVAEAjGhkta3bqo1GAAiQKkKBjGMFmpNUKMqCLbXeCnZba8uCKIUkmcs7IkEqfyfYDJ7sls0Jf6kSjEBKQlK6JbNCUB5tNcSsJekkkYg5QpKiBWJIy7YqZoEiSZsZ2kiQboGO2cAX6ViQLoGNhQ8kpVoSOzhwMUtSScJ7MICOQv5mOXc+y18hHWINQv+IEOWE6O3AQ5yIEgHCQRWyUi2QjD44mwWpZB0t2GVXgC31bbdFALt0UVAAbKQCQGABBlcLAKmwEZ4/keChwggNbjeCCnhEQhAGsPjDVoZvAfIAhm814g8sGBCEggjekPhWEwMNIpg3IqAw0APgANCFjG3RKNADCQjWBQDg4EWPis0AWZWQ/nRA31vNiEiPQCn5U4OTUEo5WQ3+jCSQRf5QRZkQksjW5ZSCUeEPRALR0UUUoykAwBIajLYmaVF0QYdABaTSgZ4CqfDbYHuS1kEqBfjDzzGCjtbIflHsIliiijLqaAFzkqbBjq64hSmffjp6y2pmUgbIQJkU+eRAXs7/5iac/Ljw6Zak3TCQOeAsMippYIrJDyRgNkkaOAIM1MCvpFXZyJX8aBKCj7PhYYlBsQZ3ZJKO8iMLjMAZ0QFB2QaHo47dVhLiiLI1olOUbAKnIosC8cMPMkJcGNwcTtAQL3AbdlivvUYoyKCTkz0YoVj9NDyCfwAiPNmABQ7UcD8ruCLfvxIvcl9++/lzcT8ekGdex22px557Fl/cTQHYaYdyVd19N+HI/TyhHHMzQycddQLh3A85vPnW8XDFHVeQ0P00gcdrzQFZ2225Lc30KXh8FhqJpqGmGkJMN9yEY5BxDJxlmGmWUNgNe8KXX4BtV9hhiS22Nts5m4WWWuxKWCoXXXYBfRDeDXfjAVNO+QOVVKleldVWXX0VFkOEX2zICCgIgdO7/vDkE1BCEWXURpWP3E0gZhgR0kglnZTSSi29JFPpTOvhwSkanDFRRRcJHhPtled1UEAAIfkEBQMA/wAs9QARADIAMgAACP8A/QkcSLCgwYMIEypcSLCDgBtbSJDYckNAB4YYF6qwwYNNnUFiMLRogUHMoDpseNhQkbGlvwmAIvwggY3lQRXYSPyIAGiCS4ULJLwqQcHfAhFXzqB4tWjRKxRnrohY4I9CiVcSqP4sKMDIHBr+sGlI0LSs2bIJNGDzR2OOEQFbBS4BhOda1QJn8+otUPQaHkBLfi4oUUMGAFh6E+uFBUBGjRJaMS7QUSCKJTaKM59lYylKAR2RFS4pUWDBCTyaU5fFc2JBgRKBF86qEeUEFdW4F1E5EaXGrIUC8MiwhDo3bjyWZOCBi3CBkWsAMBvPzQbANSOhCUqY4w/xdOOw/M3/kXBwwisaFL5/p0Djlc+CgEr4w6veeAF/JQAVVBGBArb632FDQQQ2CSTCD/5oAKBe4GCAATh5aeDPDyIQxAMJC5C1oFngQCAQBnklsAAJPBDEBjYibMihhx/qJQI2bAzUQR0qXKFiUx0OBAGEeV2hQh0X+SPAIP6ccWOOAu2Y2Bn+DMLcDWL4g4KKSPqjZGIo+CPGDQJtgYE/TCnWRQCphKBYlVcm9oo/GGwhEAkt+KNZAAI1kBiaPGbmTwsk+MOPC3FqZleLZ+Gp2p59/vllmIklUJQ/AdCxoo55ZrZmm362EeWUmUUgg0ALNIIji1ZWmlmWW/opB4JGavbDe04Y/2Eobkw66SciNNqYWgE2KUIPpcb5CKSf/BiBIm4SFpQmbi/GSGwlGGqY2m/AGiciiQLxw48fMSqIGxlJmqqahBRmy48VtfiXW4PziKuagASa+6d89N2o2H35DdTPvockgJ69mbHnnr779lMFd94BfFZ44xFUcD8IPBedwmZVd11oD/eTgnDEUbwIcsoxR/DDp9Bmm8K79Uatwxn3MkNpp9nLmmuwGZTxvoYUUNllKnLmGWgH3YzzDIUdtiBjjkGGkND79lKFEHZRUG9ufPnjF2AJMV1wCl6BJZa0iqW1VltvLaR1wQhUkQBRRiGlVJhPRTVVVVdlxdDZDx9SRS0z1S6EEE468fTe3Xg/vAI5ZqDwUUgjlXRSSiu5VDjTwaQwQg6tTFRRkFtNXnhcBgUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAAh+QQFAwD/ACwAAAAAAQABAAAIBAD/BQQAIfkEBQMA/wAsAAAAAAEAAQAACAQA/wUEACH5BAUDAP8ALAAAAAABAAEAAAgEAP8FBAA7';\n"
  },
  {
    "path": "src/lv2/dropdown/Dropdown.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport Dropdown from './Dropdown';\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\nimport Note from '../../lv1/typography/Note';\n\nexport default {\n  component: Dropdown,\n};\n\nexport const DropdownComponent = () => (\n  <Dropdown\n    onRequestClose={action('onRequestClose')}\n    contents={[\n      {\n        type: 'selectable',\n        text: 'freee株式会社',\n        ariaLabel: 'freee株式会社 に切り替える',\n        onClick: action('menu clicked'),\n        'data-test': '選択可能なアイテム',\n      },\n      {\n        type: 'selectable',\n        text: (\n          <>\n            テスト（株）<Note>備考備考備考</Note>\n          </>\n        ),\n        ariaLabel: 'テスト（株） に切り替える',\n        onClick: action('menu clicked'),\n      },\n      {\n        type: 'selectable',\n        text: '株式会社テストテストテスト に切り替える',\n        onClick: action('menu clicked'),\n      },\n      {\n        type: 'selectable',\n        text: '株式会社テストテストテスト に切り替える（unread）',\n        unread: true,\n      },\n      {\n        type: 'selectable',\n        text: '株式会社テストテストテスト に切り替える（選択不可）',\n        disabled: true,\n      },\n      {\n        type: 'selectable',\n        text: '削除',\n        danger: true,\n      },\n      {\n        type: 'selectable',\n        text: '削除',\n        disabled: true,\n        danger: true,\n      },\n      {\n        type: 'selectable',\n        text: 'リンク',\n        url: 'https://www.freee.co.jp',\n      },\n      {\n        type: 'selectable',\n        text: '外部リンク',\n        url: 'https://www.freee.co.jp',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      },\n      {\n        type: 'selectable',\n        text: 'リンク (disabled)',\n        disabled: true,\n        url: 'https://www.freee.co.jp',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      },\n      {\n        type: 'selectable',\n        text: 'リンク（with react-router）',\n        url: 'https://www.freee.co.jp',\n        onSelfWindowNavigation: action('selfWindowNavigation'),\n      },\n      {\n        type: 'selectable',\n        text: 'とてもとてもとてもとてもとてもとてもとてもとてもとてもとても長い',\n        url: 'https://www.freee.co.jp',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      },\n      {\n        type: 'checkbox',\n        text: 'チェックボックス',\n        value: 'checkbox',\n        name: 'checkbox',\n        onChange: action('checkbox change'),\n        checked: false,\n        'data-test': 'チェック可能なアイテム',\n      },\n      { type: 'rule' },\n      {\n        type: 'textOnly',\n        text: '現在の事業所番号\\nXXX-XXXX-XXXX',\n        'data-test': 'テキストアイテム',\n      },\n    ]}\n    align={\n      select(\n        'align',\n        { left: 'left', right: 'right', none: '' },\n        '',\n        'Dropdown'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  />\n);\nexport const SingleOption = () => (\n  <Dropdown\n    contents={[\n      {\n        type: 'selectable',\n        text: 'freee株式会社',\n        ariaLabel: 'freee株式会社 に切り替える',\n        onClick: action('menu clicked'),\n      },\n    ]}\n  />\n);\n"
  },
  {
    "path": "src/lv2/dropdown/Dropdown.tsx",
    "content": "import * as React from 'react';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport DropdownMenuContent from './DropdownMenuContent';\nimport { Keys } from '../../utilities/keyboard';\n\ntype Props = Pick<\n  Parameters<typeof DropdownMenuContent>[0],\n  'contents' | 'firstSelectableItemRef' | 'onRequestClose'\n> & {\n  align?: 'left' | 'right';\n  positionRelative?: boolean;\n} & CommonProps;\n\n/**\n * ドロップダウンメニューのコンポーネントです。\n *\n * 「ボタンを押したらメニューが表示される」UIであれば、DropdownButtonコンポーネントを使用してください。\n */\nconst Dropdown: React.FC<Props> = (props: Props) => {\n  const {\n    firstSelectableItemRef,\n    onRequestClose,\n    contents,\n    align,\n    positionRelative,\n  } = props;\n  return (\n    <div\n      {...commonProps(props, 'vb-dropdown', {\n        alignRight: align === 'right',\n        positionRelative,\n      })}\n    >\n      {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n      <div\n        className=\"vb-dropdown__body\"\n        onKeyDown={(e) =>\n          e.key === Keys.ESC && onRequestClose && onRequestClose()\n        }\n      >\n        <PopupBase paddingSize=\"zero\">\n          <DropdownMenuContent\n            contents={contents}\n            onRequestClose={onRequestClose}\n            onFocusOut={onRequestClose}\n            firstSelectableItemRef={firstSelectableItemRef}\n          />\n        </PopupBase>\n      </div>\n    </div>\n  );\n};\nexport default Dropdown;\n"
  },
  {
    "path": "src/lv2/dropdown/DropdownMenuContent.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport DropdownMenuContent from './DropdownMenuContent';\nimport { DropdownContent } from './types';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../../lv1/buttons/Button';\nimport Note from '../../lv1/typography/Note';\n\nexport default {\n  component: DropdownMenuContent,\n};\n\nexport const DropdownComponent = () => (\n  <DropdownMenuContent\n    contents={[\n      {\n        type: 'selectable',\n        text: 'freee株式会社',\n        ariaLabel: 'freee株式会社 に切り替える',\n        onClick: action('menu clicked'),\n      },\n      {\n        type: 'selectable',\n        text: (\n          <>\n            テスト（株）<Note>備考備考備考</Note>\n          </>\n        ),\n        ariaLabel: 'テスト（株） に切り替える',\n        onClick: action('menu clicked'),\n      },\n      {\n        type: 'selectable',\n        text: '株式会社テストテストテスト に切り替える',\n        onClick: action('menu clicked'),\n      },\n      {\n        type: 'selectable',\n        text: '株式会社テストテストテスト に切り替える（unread）',\n        unread: true,\n      },\n      {\n        type: 'selectable',\n        text: '株式会社テストテストテスト に切り替える（選択不可）',\n        disabled: true,\n      },\n      {\n        type: 'selectable',\n        text: 'リンク',\n        url: 'https://www.freee.co.jp',\n      },\n      {\n        type: 'selectable',\n        text: '外部リンク',\n        url: 'https://www.freee.co.jp',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      },\n      {\n        type: 'selectable',\n        text: 'リンク (disabled)',\n        disabled: true,\n        url: 'https://www.freee.co.jp',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      },\n      {\n        type: 'selectable',\n        text: '削除',\n        danger: true,\n      },\n      {\n        type: 'selectable',\n        text: '削除',\n        disabled: true,\n        danger: true,\n      },\n      {\n        type: 'selectable',\n        text: 'リンク（with react-router）',\n        url: 'https://www.freee.co.jp',\n        onSelfWindowNavigation: action('selfWindowNavigation'),\n      },\n      {\n        type: 'selectable',\n        text: 'とてもとてもとてもとてもとてもとてもとてもとてもとてもとても長い',\n        url: 'https://www.freee.co.jp',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      },\n      {\n        type: 'checkbox',\n        text: 'チェックボックス',\n        value: 'checkbox',\n        name: 'checkbox',\n        onChange: action('checkbox change'),\n        checked: false,\n      },\n      { type: 'rule' },\n      {\n        type: 'textOnly',\n        text: '現在の事業所番号\\nXXX-XXXX-XXXX',\n      },\n    ]}\n    {...commonKnobs()}\n  />\n);\nexport const SingleOption = () => (\n  <DropdownMenuContent\n    contents={[\n      {\n        type: 'selectable',\n        text: 'freee株式会社',\n        ariaLabel: 'freee株式会社 に切り替える',\n        onClick: action('menu clicked'),\n      },\n    ]}\n  />\n);\nexport const ManyOptions = () => {\n  const [state, setState] = React.useState<number>(new Date().getTime());\n\n  const contents: DropdownContent[] = [...Array(100)].map((_, i) => ({\n    type: 'selectable',\n    text: `リンク${i}`,\n    onClick: action('menu clicked'),\n  }));\n\n  return (\n    <>\n      <Button onClick={() => setState(new Date().getTime())}>refresh</Button>\n      <DropdownMenuContent key={state} contents={contents} />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/dropdown/DropdownMenuContent.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport Item from './Item';\nimport { Keys } from '../../utilities/keyboard';\nimport { DropdownContent } from './types';\n\ntype Props = {\n  contents: Array<DropdownContent>;\n  firstSelectableItemRef?: React.Ref<\n    HTMLButtonElement | HTMLAnchorElement | HTMLInputElement\n  >;\n  menuMaxHeightOffset?: number;\n  onRequestClose?: () => void;\n  onFocusOut?: (direction: 'upward' | 'downward') => void;\n} & CommonProps;\n\nconst getFocusableItemsOfList = (listEl: HTMLElement) =>\n  listEl.querySelectorAll(\n    '.vb-dropdownItem--selectable:not(.vb-dropdownItem--disabled) button, .vb-dropdownItem--selectable:not(.vb-dropdownItem--disabled) a, .vb-dropdownItem--checkbox input:not([disabled])'\n  );\nconst getIndexOfTargetElement = (\n  targetEl: Element,\n  items: NodeListOf<Element>\n) => Array.prototype.indexOf.call(items, targetEl);\n\nconst handleKeyDownSelectableItem = (\n  e: React.KeyboardEvent<\n    HTMLButtonElement | HTMLAnchorElement | HTMLInputElement\n  >,\n  selfRef: React.Ref<HTMLUListElement>,\n  onFocusOut?: (direction: 'upward' | 'downward') => void\n): void => {\n  const current =\n    selfRef instanceof HTMLUListElement\n      ? selfRef\n      : typeof selfRef === 'object'\n      ? selfRef?.current\n      : null;\n  switch (e.key) {\n    case Keys.UP:\n      e.preventDefault();\n      if (current) {\n        const items = getFocusableItemsOfList(current);\n        const currentIndex = getIndexOfTargetElement(\n          e.target as Element,\n          items\n        );\n        if (currentIndex > 0) {\n          const prev = items[currentIndex - 1];\n          if (\n            prev instanceof HTMLButtonElement ||\n            prev instanceof HTMLAnchorElement ||\n            prev instanceof HTMLInputElement\n          ) {\n            prev.focus();\n          }\n        } else if (currentIndex === 0) {\n          onFocusOut && onFocusOut('upward');\n        }\n      }\n      break;\n    case Keys.DOWN:\n      e.preventDefault();\n      if (current) {\n        const items = getFocusableItemsOfList(current);\n        const currentIndex = getIndexOfTargetElement(\n          e.target as Element,\n          items\n        );\n        if (currentIndex >= 0 && currentIndex < items.length - 1) {\n          const next = items[currentIndex + 1];\n          if (\n            next instanceof HTMLButtonElement ||\n            next instanceof HTMLAnchorElement ||\n            next instanceof HTMLInputElement\n          ) {\n            next.focus();\n          }\n        } else if (currentIndex === items.length - 1) {\n          onFocusOut && onFocusOut('downward');\n        }\n      }\n      break;\n  }\n};\n\n/**\n * ドロップダウンメニューの内部コンポーネントです。\n *\n * - 単体で使用される想定のないコンポーネントです。PopupBaseに包んで使用してください。\n * - ボタンをクリックした際に表示されるような場合はDropdownButton、そのボタン部分をカスタマイズしたい場合はWithDropdownを使用してください。\n */\nconst DropdownMenuContentInternal: React.ForwardRefRenderFunction<\n  HTMLDivElement,\n  Props\n> = (props: Props, ref: React.Ref<HTMLDivElement>) => {\n  const selfRef = React.useRef<HTMLUListElement>(null);\n  const {\n    firstSelectableItemRef,\n    menuMaxHeightOffset = 0,\n    onRequestClose,\n    onFocusOut,\n    contents,\n  } = props;\n\n  const forwardFocus: React.FocusEventHandler<HTMLElement> = (e) => {\n    if (e.target !== e.currentTarget) {\n      return;\n    }\n    const firstElm = getFocusableItemsOfList(e.currentTarget)[0];\n    if (\n      firstElm instanceof HTMLAnchorElement ||\n      firstElm instanceof HTMLButtonElement ||\n      firstElm instanceof HTMLInputElement\n    ) {\n      firstElm.focus();\n    }\n  };\n\n  const [menuMaxHeight, setMenuMaxHeight] = React.useState<\n    number | undefined\n  >();\n  React.useEffect(() => {\n    if (selfRef?.current) {\n      const rect = selfRef.current.getBoundingClientRect();\n      const windowHeight = window.innerHeight;\n      setMenuMaxHeight(windowHeight - rect.top - menuMaxHeightOffset);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [selfRef?.current?.getBoundingClientRect().top]);\n\n  let selectableItemIdxCounter = 0;\n  return (\n    <div\n      {...commonProps(props, 'vb-dropdownMenuContent')}\n      // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n      tabIndex={-1}\n      // ここにフォーカスが来たら最初の選択可能アイテムにフォーカスを移動する\n      onFocus={forwardFocus}\n      ref={ref}\n    >\n      {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n      <ul\n        className=\"vb-dropdownMenuContent__list\"\n        role=\"menu\"\n        ref={selfRef}\n        style={{\n          ...(menuMaxHeight\n            ? { maxHeight: `min(60vh, calc(${menuMaxHeight}px - 1rem)) ` }\n            : {}),\n          minHeight: '2.5rem',\n        }}\n        // ここにtabIndexをつけているのは、親要素のtabIndex=-1へのフォーカス移動を阻止するため\n        tabIndex={-1}\n      >\n        {contents.map((content, i) => {\n          const isAvailable =\n            (content.type === 'selectable' || content.type === 'checkbox') &&\n            !content.disabled;\n          // selectableなcontentの中で何番目か\n          const selectableItemIdx = isAvailable\n            ? selectableItemIdxCounter++\n            : 0;\n          const itemRef =\n            isAvailable && selectableItemIdx === 0\n              ? firstSelectableItemRef\n              : undefined;\n          return (\n            <Item\n              key={i}\n              content={content}\n              onKeyDown={(e) =>\n                handleKeyDownSelectableItem(e, selfRef, onFocusOut)\n              }\n              selectableItemRef={itemRef}\n              onRequestClose={onRequestClose}\n            />\n          );\n        })}\n      </ul>\n    </div>\n  );\n};\nconst DropdownMenuContent = React.forwardRef(DropdownMenuContentInternal);\nexport default DropdownMenuContent;\n"
  },
  {
    "path": "src/lv2/dropdown/Item.tsx",
    "content": "import * as React from 'react';\nimport { DropdownContent } from './types';\nimport { MdOpenInNew } from 'react-icons/md';\nimport CheckBox from '../../lv1/forms/CheckBox';\nimport MaterialIcon from '../../lv1/icons/MaterialIcon';\nimport { pickCommonDataProps } from '../../utilities/commonProps';\nimport selfWindowNavigator from '../../utilities/selfWindowNavigator';\n\ntype Props = {\n  content: DropdownContent;\n  onKeyDown: (\n    e: React.KeyboardEvent<\n      HTMLButtonElement | HTMLAnchorElement | HTMLInputElement\n    >\n  ) => void;\n  selectableItemRef?: React.Ref<\n    HTMLButtonElement | HTMLAnchorElement | HTMLInputElement\n  >;\n  onRequestClose?: () => void;\n};\n\nconst Item: React.FC<Props> = ({\n  content,\n  onKeyDown,\n  selectableItemRef,\n  onRequestClose,\n}: Props) => {\n  const baseClass = 'vb-dropdownItem';\n  switch (content.type) {\n    case 'rule':\n      return (\n        <li className={`${baseClass} ${baseClass}--rule`} role=\"separator\" />\n      );\n    case 'textOnly':\n      return (\n        <li\n          className={`${baseClass}${\n            content.unread ? ` ${baseClass}--unread` : ''\n          }`}\n          role=\"menuitem\"\n        >\n          <span\n            className={`${baseClass}__text`}\n            {...pickCommonDataProps(content)}\n          >\n            {content.text}\n          </span>\n        </li>\n      );\n    case 'checkbox':\n      return (\n        <li className={`${baseClass} ${baseClass}--checkbox`} role=\"menuitem\">\n          <span className={`${baseClass}__checkBoxItem`}>\n            <CheckBox\n              value={content.value}\n              checked={content.checked}\n              onChange={content.onChange}\n              name={content.name}\n              disabled={content.disabled}\n              onKeyDown={onKeyDown}\n              ref={selectableItemRef as React.Ref<HTMLInputElement>}\n              {...pickCommonDataProps(content)}\n            >\n              {content.text}\n            </CheckBox>\n          </span>\n        </li>\n      );\n    case 'selectable':\n    default: {\n      const unreadClass = content.unread ? ` ${baseClass}--unread` : '';\n      const disabledClass = content.disabled ? ` ${baseClass}--disabled` : '';\n      const dangerContentClass = content.danger\n        ? ` ${baseClass}__content--danger`\n        : '';\n\n      return (\n        <li\n          className={`${baseClass} ${baseClass}--selectable ${unreadClass} ${disabledClass}`}\n          role=\"menuitem\"\n        >\n          {content.url ? (\n            <a\n              href={content.url}\n              target={content.target}\n              className={`${baseClass}__selectable${\n                content.target === '_blank'\n                  ? ` ${baseClass}__selectable--rightIcon`\n                  : ''\n              }`}\n              onClick={(e) => {\n                content.onClick && content.onClick(e);\n                if (onRequestClose && !content.disableOnRequestClose) {\n                  onRequestClose();\n                }\n                const navigator = selfWindowNavigator(\n                  content.onSelfWindowNavigation\n                );\n                navigator && navigator(e, content.url);\n              }}\n              onKeyDown={(\n                e: React.KeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n              ): void => {\n                onKeyDown(e);\n              }}\n              ref={selectableItemRef as React.Ref<HTMLAnchorElement>}\n              aria-label={content.ariaLabel ? content.ariaLabel : undefined}\n              rel={content.rel}\n              {...pickCommonDataProps(content)}\n            >\n              {content.target === '_blank' && (\n                <span className={`${baseClass}__rightIcon`}>\n                  <MaterialIcon IconComponent={MdOpenInNew} />\n                </span>\n              )}\n              <span className={`${baseClass}__content`}>{content.text}</span>\n            </a>\n          ) : (\n            <button\n              className={`${baseClass}__selectable`}\n              type=\"button\"\n              disabled={content.disabled}\n              onClick={(e) => {\n                content.onClick && content.onClick(e);\n                if (onRequestClose && !content.disableOnRequestClose) {\n                  onRequestClose();\n                }\n              }}\n              onKeyDown={(\n                e: React.KeyboardEvent<HTMLButtonElement | HTMLAnchorElement>\n              ): void => {\n                onKeyDown(e);\n              }}\n              ref={selectableItemRef as React.Ref<HTMLButtonElement>}\n              aria-label={content.ariaLabel ? content.ariaLabel : undefined}\n              {...pickCommonDataProps(content)}\n            >\n              <span className={`${baseClass}__content ${dangerContentClass}`}>\n                {content.text}\n              </span>\n            </button>\n          )}\n        </li>\n      );\n    }\n  }\n};\nexport default Item;\n"
  },
  {
    "path": "src/lv2/dropdown/types.ts",
    "content": "import * as React from 'react';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\nimport { CommonDataProps } from '../../utilities/commonProps';\n\nexport type DropdownContentSelectable = {\n  type: 'selectable';\n  text: React.ReactNode;\n  ariaLabel?: string;\n  onClick?: React.MouseEventHandler;\n  unread?: boolean;\n  disabled?: boolean;\n  danger?: boolean;\n  url?: string;\n  target?: string;\n  rel?: string;\n  disableOnRequestClose?: boolean;\n} & SelfWindowNavigationProp &\n  CommonDataProps;\n\nexport type DropdownContentCheckbox = {\n  type: 'checkbox';\n  text: React.ReactNode;\n  value?: string;\n  name?: string;\n  onChange?: React.ChangeEventHandler<HTMLInputElement>;\n  checked?: boolean;\n  disabled?: boolean;\n} & CommonDataProps;\n\nexport type DropdownContentTextOnly = {\n  type: 'textOnly';\n  text: string | React.ReactNode;\n  unread?: boolean;\n} & CommonDataProps;\n\nexport type DropdownContent =\n  | {\n      type: 'rule';\n    }\n  | DropdownContentTextOnly\n  | DropdownContentCheckbox\n  | DropdownContentSelectable;\n"
  },
  {
    "path": "src/lv2/dropdownButton/DropdownButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport type { StoryObj } from '@storybook/react';\nimport DropdownButton from './DropdownButton';\nimport { text, boolean, select } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\nimport TaskDialog from '../dialogs/TaskDialog';\nimport Button from '../../lv1/buttons/Button';\nimport { InlineLink, Note } from '../../lv1';\nimport { FormActions } from '../../../src';\nimport { DropdownContent } from '../dropdown/types';\n\nexport default {\n  component: DropdownButton,\n};\n\nexport const DropdownButtonComponent = () => (\n  <DropdownButton\n    buttonLabel={text('ButtonLabel', 'ボタンラベル', 'DropdownButton')}\n    disabled={boolean('Disabled', false, 'DropdownButton')}\n    small={boolean('small', false, 'DropdownButton')}\n    large={boolean('large', false, 'DropdownButton')}\n    appearance={\n      select(\n        'Appearance',\n        {\n          undefined: '',\n          primary: 'primary',\n          secondary: 'secondary',\n          tertiary: 'tertiary',\n        },\n        'secondary',\n        'DropdownButton'\n      ) || undefined\n    }\n    iconOnly={boolean('iconOnly', false, 'DropdownButton')}\n    iconPosition={\n      select(\n        'IconPosition',\n        {\n          undefined: '',\n          left: 'left',\n          right: 'right',\n        },\n        'right',\n        'DropdownButton'\n      ) || undefined\n    }\n    dropdownContents={[\n      {\n        type: 'selectable',\n        text: 'menu1',\n        ariaLabel: 'menu1',\n        onClick: action('click'),\n        'data-test': '選択可能なアイテム',\n      },\n      {\n        type: 'selectable',\n        text: 'menu2',\n        ariaLabel: 'menu2',\n        onClick: action('click'),\n      },\n      {\n        type: 'selectable',\n        text: 'とてもとてもとてもとてもとてもとてもとても長い',\n        ariaLabel: 'menu3',\n        onClick: action('click'),\n      },\n      {\n        type: 'selectable',\n        text: 'menu4 (disabled)',\n        ariaLabel: 'menu4',\n        disabled: true,\n      },\n      {\n        type: 'checkbox',\n        text: 'チェックボックス',\n        value: 'checkbox-value',\n        onChange: action('checkbox change'),\n        checked: false,\n        'data-test': 'チェック可能なアイテム',\n      },\n      { type: 'selectable', text: 'もっと見る', disableOnRequestClose: true },\n      {\n        type: 'textOnly',\n        text: (\n          <Note>\n            詳しくは{' '}\n            <InlineLink href=\"https://support.freee.co.jp\" target=\"_blank\">\n              ヘルプページ\n            </InlineLink>\n            をご覧ください\n          </Note>\n        ),\n        'data-test': 'テキストアイテム',\n      },\n    ]}\n    onOpen={action('open')}\n    onClose={action('close')}\n    {...commonKnobs()}\n  />\n);\n\nexport const IconOnlyDropdownButton = () => (\n  <DropdownButton\n    buttonLabel={text(\n      'ButtonLabel',\n      'ボタンのラベルはaria-labelとなるため、必ず意味のあるものを指定してください',\n      'DropdownButton'\n    )}\n    disabled={boolean('Disabled', false, 'DropdownButton')}\n    iconOnly={true}\n    small={boolean('small', false, 'DropdownButton')}\n    large={boolean('large', false, 'DropdownButton')}\n    appearance={\n      select(\n        'Appearance',\n        {\n          undefined: '',\n          primary: 'primary',\n          secondary: 'secondary',\n          tertiary: 'tertiary',\n        },\n        'secondary',\n        'DropdownButton'\n      ) || undefined\n    }\n    iconPosition={\n      select(\n        'IconPosition',\n        {\n          undefined: '',\n          left: 'left',\n          right: 'right',\n        },\n        'right',\n        'DropdownButton'\n      ) || undefined\n    }\n    dropdownContents={[\n      {\n        type: 'selectable',\n        text: 'menu1',\n        ariaLabel: 'menu1',\n        onClick: action('click'),\n      },\n      {\n        type: 'selectable',\n        text: 'menu2',\n        ariaLabel: 'menu2',\n        onClick: action('click'),\n      },\n      {\n        type: 'selectable',\n        text: 'とてもとてもとてもとてもとてもとてもとても長い',\n        ariaLabel: 'menu3',\n        onClick: action('click'),\n      },\n      {\n        type: 'selectable',\n        text: 'menu4 (disabled)',\n        ariaLabel: 'menu4',\n        disabled: true,\n      },\n    ]}\n    {...commonKnobs()}\n  />\n);\n\nexport const CheckboxDropdown = () => {\n  const options = ['ステータスを表示', '金額を表示', '負の値を△で表示'];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(options.length).fill(false)\n  );\n  return (\n    <DropdownButton\n      buttonLabel={text('ButtonLabel', '表示設定', 'DropdownButton')}\n      disabled={boolean('Disabled', false, 'DropdownButton')}\n      small={boolean('small', false, 'DropdownButton')}\n      appearance={\n        select(\n          'Appearance',\n          {\n            undefined: '',\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n          },\n          'secondary',\n          'DropdownButton'\n        ) || undefined\n      }\n      dropdownContents={options.map((opt, idx) => ({\n        type: 'checkbox',\n        text: opt,\n        checked: status[idx],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[idx] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const SingleOption = () => (\n  <DropdownButton\n    buttonLabel={text('ButtonLabel', 'ボタンラベル', 'DropdownButton')}\n    disabled={boolean('Disabled', false, 'DropdownButton')}\n    small={boolean('small', false, 'DropdownButton')}\n    appearance={\n      select(\n        'Appearance',\n        {\n          undefined: '',\n          primary: 'primary',\n          secondary: 'secondary',\n          tertiary: 'tertiary',\n        },\n        'secondary',\n        'DropdownButton'\n      ) || undefined\n    }\n    iconPosition={\n      select(\n        'IconPosition',\n        {\n          undefined: '',\n          left: 'left',\n          right: 'right',\n        },\n        'right',\n        'DropdownButton'\n      ) || undefined\n    }\n    dropdownContents={[\n      {\n        type: 'selectable',\n        text: 'menu1',\n        ariaLabel: 'menu1',\n        onClick: action('click'),\n        target: '_blank',\n        url: 'https://www.freee.co.jp',\n      },\n    ]}\n    {...commonKnobs()}\n  />\n);\n\nexport const InBigBlock = () => (\n  <div style={{ padding: '20rem 80rem' }}>\n    <DropdownButton\n      buttonLabel={text('ButtonLabel', 'ボタンラベル', 'DropdownButton')}\n      disabled={boolean('Disabled', false, 'DropdownButton')}\n      small={boolean('small', false, 'DropdownButton')}\n      large={boolean('large', false, 'DropdownButton')}\n      iconOnly={boolean('IconOnly', false, 'DropdownButton')}\n      appearance={\n        select(\n          'Appearance',\n          {\n            undefined: '',\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n          },\n          'secondary',\n          'DropdownButton'\n        ) || undefined\n      }\n      iconPosition={\n        select(\n          'IconPosition',\n          {\n            undefined: '',\n            left: 'left',\n            right: 'right',\n          },\n          'right',\n          'DropdownButton'\n        ) || undefined\n      }\n      dropdownContents={[\n        {\n          type: 'selectable',\n          text: 'menu1',\n          ariaLabel: 'menu1',\n          onClick: action('click'),\n        },\n        {\n          type: 'selectable',\n          text: 'menu2',\n          ariaLabel: 'menu2',\n          onClick: action('click'),\n        },\n        {\n          type: 'selectable',\n          text: 'とてもとてもとてもとてもとてもとてもとても長い',\n          ariaLabel: 'menu3',\n          onClick: action('click'),\n        },\n        {\n          type: 'selectable',\n          text: 'menu4 (disabled)',\n          ariaLabel: 'menu4',\n          disabled: true,\n        },\n      ]}\n      {...commonKnobs()}\n    />\n  </div>\n);\n\nconst TaskDialogSample = () => {\n  const [isOpen, setIsOpen] = React.useState(false);\n\n  return (\n    <>\n      <Button onClick={() => setIsOpen(true)}>open dialog</Button>\n\n      <TaskDialog\n        onRequestClose={() => {\n          setIsOpen(false);\n        }}\n        title=\"TaskDialog\"\n        isOpen={isOpen}\n        closeButtonLabel=\"閉じる\"\n      >\n        <DropdownButton\n          buttonLabel={text('ButtonLabel', 'ボタンラベル', 'DropdownButton')}\n          disabled={boolean('Disabled', false, 'DropdownButton')}\n          small={boolean('small', false, 'DropdownButton')}\n          large={boolean('large', false, 'DropdownButton')}\n          iconOnly={boolean('IconOnly', false, 'DropdownButton')}\n          appearance={\n            select(\n              'Appearance',\n              {\n                undefined: '',\n                primary: 'primary',\n                secondary: 'secondary',\n                tertiary: 'tertiary',\n              },\n              'secondary',\n              'DropdownButton'\n            ) || undefined\n          }\n          iconPosition={\n            select(\n              'IconPosition',\n              {\n                undefined: '',\n                left: 'left',\n                right: 'right',\n              },\n              'right',\n              'DropdownButton'\n            ) || undefined\n          }\n          dropdownContents={[\n            {\n              type: 'selectable',\n              text: 'menu1',\n              ariaLabel: 'menu1',\n              onClick: action('click'),\n            },\n            {\n              type: 'selectable',\n              text: 'menu2',\n              ariaLabel: 'menu2',\n              onClick: action('click'),\n            },\n            {\n              type: 'selectable',\n              text: 'とてもとてもとてもとてもとてもとてもとても長い',\n              ariaLabel: 'menu3',\n              onClick: action('click'),\n            },\n            {\n              type: 'selectable',\n              text: 'menu4 (disabled)',\n              ariaLabel: 'menu4',\n              disabled: true,\n            },\n          ]}\n          {...commonKnobs()}\n        />\n      </TaskDialog>\n    </>\n  );\n};\n\nexport const InsideTaskDialog = () => <TaskDialogSample />;\n\nexport const FixedDropdownButton: StoryObj<typeof DropdownButton> = {\n  parameters: {\n    docs: {\n      story: {\n        height: '500px',\n        inline: false,\n      },\n    },\n  },\n  render: () => {\n    const dropdownContents: DropdownContent[] = [\n      {\n        type: 'selectable',\n        text: 'menu1',\n        ariaLabel: 'menu1',\n        onClick: action('click'),\n      },\n      {\n        type: 'selectable',\n        text: 'menu2',\n        ariaLabel: 'menu2',\n        onClick: action('click'),\n      },\n    ];\n\n    return (\n      <div style={{ height: 2000 }}>\n        <div\n          style={{\n            position: 'fixed',\n            top: 0,\n            right: 0,\n            left: 0,\n            background: 'white',\n            padding: '1rem 2.5rem',\n          }}\n        >\n          <DropdownButton\n            buttonLabel={'ヘッダー表示設定'}\n            appearance=\"primary\"\n            dropdownContents={dropdownContents}\n          />\n        </div>\n        <div style={{ position: 'sticky', top: '8rem', marginTop: '12rem' }}>\n          <DropdownButton\n            buttonLabel=\"position: sticky\"\n            appearance=\"primary\"\n            dropdownContents={dropdownContents}\n          />\n        </div>\n        <FormActions align=\"left\" position=\"fixed\">\n          <DropdownButton\n            buttonLabel={'フッダー表示設定'}\n            appearance=\"primary\"\n            dropdownContents={dropdownContents}\n          />\n        </FormActions>\n      </div>\n    );\n  },\n};\n"
  },
  {
    "path": "src/lv2/dropdownButton/DropdownButton.tsx",
    "content": "import * as React from 'react';\nimport { MdArrowDropDown, MdMoreHoriz } from 'react-icons/md';\nimport Button, { ButtonAppearanceType } from '../../lv1/buttons/Button';\nimport IconOnlyButton from '../../lv1/buttons/IconOnlyButton';\nimport { DropdownContent } from '../dropdown/types';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport WithDropdown from '../withDropdown/WithDropdown';\nimport {\n  ButtonAriaProps,\n  filterButtonAriaProps,\n} from '../../utilities/AriaProps';\n\ntype Props = {\n  /**\n   * ボタンのラベルとなる文字列。必ず指定してください。 `iconOnly` を使用する場合も必ず指定してください。\n   */\n  buttonLabel: string;\n  disabled?: boolean;\n  small?: boolean;\n  large?: boolean;\n  dropdownContents: Array<DropdownContent>;\n  appearance?: ButtonAppearanceType;\n  /**\n   * trueにすることでラベルを省略し、アイコンのみのボタンとなります。\n   * デフォルトのアイコンは「…」です。\n   */\n  iconOnly?: boolean;\n  iconPosition?: 'left' | 'right';\n  /**\n   * @deprecated このプロパティは使用されません\n   */\n  contentsFixed?: boolean;\n  /**\n   * iconOnly時のデフォルトのアイコンは「…」ですが、任意のアイコンを指定することもできます。\n   * アイコンはreact-iconsの利用が想定されています。\n   */\n  IconOnlyComponent?: React.ElementType;\n  /**\n   * dropdownを開いた時に発火します。useEffectのトリガーになるためメモ化したものを渡すことを推奨します。\n   */\n  onOpen?: () => void;\n  /**\n   * dropdownを閉じた時に発火します。useEffectのトリガーになるためメモ化したものを渡すことを推奨します。\n   */\n  onClose?: () => void;\n} & MarginClassProps &\n  ButtonAriaProps &\n  CommonProps;\n\n/**\n * ボタンを押すとドロップダウンメニューが表示されるボタン。\n *\n * - 上下キーでフォーカス移動、ESCキーで閉じられます。Tabキーでフォーカスを移動させる場合、メニューの外に出るとボタンへのフォーカスに戻ります\n * - メニューに入れられる項目は「クリック可能な項目（ボタンまたはリンク）」「チェックボックス」「区切り線」「テキスト」です\n *   - クリック可能な項目は `url` を渡されるとリンクとなります。遷移先のURLを特定できる場合は必ず `url` を渡してください\n *   - リンクに `target=\"_blank\"` を渡した場合、右側に OpenInNew アイコンが表示されます。\n * - `iconOnly` を `true` とすることで、ラベルを表示せず「…」アイコンのみのボタンとなります。 **この場合も `aria-label` として使用するため、必ず `buttonLabel` に意味のある文字列を指定してください**\n * - ユーザーが設定したものが並ぶ場合など、項目が多くなるときは `DropdownButton` の使用を検討してください。\n *\n * ## `SelectBox` との違い\n *\n * DropdownButtonは「押下するとドロップダウンメニューを開く **ボタン**」で、SelectBox は「選択肢のなかから一つを選ぶ **フォームの部品** 」です。\n *\n * - `SelectBox` は `TextField` などのフォームコンポーネントと同じく、別に配置した `FormControlLabel` などのラベルを紐付けて使用します。\n *   `DropdownButton` はボタンのラベルが accessible name （スクリーンリーダーが認識する名称）となり、別に配置したラベルを紐付けることはできません。\n * - コンポーネントを操作していないとき、 `SelectBox` は選択中の選択肢の名前を表示します。 `DropdownButton` はボタンのラベル ( `buttonLabel` ) を表示します。\n * - `DropdownButton` のボタンのラベル ( `buttonLabel` ) には、「押下することでメニューが開く」挙動であることが自然な文言を指定してください（「選択中のもの」の表示に使用しないでください）\n *\n * @param props\n */\nconst DropdownButton = (props: Props): React.ReactElement => {\n  const {\n    buttonLabel,\n    disabled,\n    small,\n    large,\n    dropdownContents,\n    appearance,\n    iconOnly,\n    iconPosition,\n    IconOnlyComponent,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n    onOpen,\n    onClose,\n  } = props;\n\n  return (\n    <span\n      {...commonProps(\n        props,\n        'vb-dropdownButton',\n        {},\n        { marginTop, marginLeft, marginRight, marginBottom, marginSize }\n      )}\n    >\n      <WithDropdown\n        dropdownContents={dropdownContents}\n        disabled={disabled}\n        renderButton={(dropdownId, isOpen, ref) =>\n          iconOnly ? (\n            <IconOnlyButton\n              {...filterButtonAriaProps(props)}\n              IconComponent={IconOnlyComponent || MdMoreHoriz}\n              appearance={appearance}\n              aria-controls={dropdownId}\n              aria-expanded={isOpen}\n              aria-haspopup={true}\n              disabled={disabled}\n              label={buttonLabel}\n              small={small}\n              large={large}\n              ref={ref as React.Ref<HTMLButtonElement>}\n              type=\"button\"\n            />\n          ) : (\n            <Button\n              {...filterButtonAriaProps(props)}\n              IconComponent={MdArrowDropDown}\n              iconPosition={iconPosition || 'right'}\n              disabled={disabled}\n              small={small}\n              large={large}\n              appearance={appearance}\n              aria-expanded={isOpen}\n              aria-haspopup={true}\n              aria-controls={dropdownId}\n              ref={ref as React.Ref<HTMLButtonElement>}\n              type=\"button\"\n            >\n              {buttonLabel}\n            </Button>\n          )\n        }\n        onOpen={onOpen}\n        onClose={onClose}\n      />\n    </span>\n  );\n};\n\nexport default DropdownButton;\n"
  },
  {
    "path": "src/lv2/emptyStates/NoDataCreated.stories.tsx",
    "content": "import * as React from 'react';\n\nimport NoDataCreated from './NoDataCreated';\nimport { commonKnobs } from '../../../stories';\nimport { select, text } from '@storybook/addon-knobs';\nimport Button from '../../lv1/buttons/Button';\n\nexport default {\n  component: NoDataCreated,\n};\n\nexport const NoDataCreatedComponent = () => (\n  <NoDataCreated\n    actionWord={text('ActionWord', '作成', 'NoDataCreated')}\n    objectName={text('ObjectName', '取引', 'NoDataCreated')}\n    mainText={text('MainText', '', 'NoDataCreated')}\n    subText={text('SubText', '', 'NoDataCreated')}\n    size={\n      select(\n        'Size',\n        {\n          medium: 'medium',\n          'fit-height': 'fit-height',\n          'fit-width': 'fit-width',\n        },\n        '',\n        'NoDataCreated'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Button mt={1} appearance=\"primary\">\n      新規作成\n    </Button>\n  </NoDataCreated>\n);\n"
  },
  {
    "path": "src/lv2/emptyStates/NoDataCreated.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport SectionTitle from '../../lv1/typography/SectionTitle';\nimport NoDataIllust from '../../lv1/images/NoDataIllust';\nimport { SwallowProps } from '../../lv1/images/SwallowContainer';\n\ntype Props = {\n  /**\n   * 「作成・登録・追加」など、データを作る際の言葉を指定できます。指定しない場合は「作成」と表記されます。\n   */\n  actionWord?: string;\n  /**\n   * データの名前を指定できます。指定しない場合は「データ」と表記されます。\n   */\n  objectName?: string;\n  /**\n   * 任意の画像を使用したい場合に使います。\n   */\n  image?: {\n    /**\n     * 任意の画像のURLを指定します。\n     */\n    src: string;\n    /**\n     * 任意の画像の横幅を指定します。\n     */\n    width?: string;\n    /**\n     * 任意の画像の縦幅を指定します。\n     */\n    height?: string;\n  };\n  mainText?: React.ReactNode;\n  subText?: React.ReactNode;\n  /**\n   * テキストの下に新規作成ボタンなどのアクションを用意する際に使います\n   */\n  children?: React.ReactNode;\n} & Pick<SwallowProps, 'size'> &\n  CommonProps;\n\n/**\n * このコンポーネントは作成されたデータがまだ存在しない場合に使う、empty UIです。\n * 検索条件に合致するものがない場合は `NoSearchResults` の使用を検討してください。\n *\n * - 「まだデータがないこと」「作成されると一覧に表示されること」の２つをデフォルトの表示として伝えています。\n * - テキストはそれぞれ任意のものにも差し替え可能です。\n * - テキストの下に新規作成ボタンなどのアクションを用意することも可能です。\n * - オンボーディングにつなげるなどの理由でより複雑なレイアウトにしたい場合は独自にempty UIを用意してください。\n *   - このコンポーネントはそういった特別な意図がない場合に手軽に empty UI を構築する用途で使用することを想定しています。\n */\nconst NoDataCreated: React.FC<Props> = (props: Props) => {\n  const {\n    actionWord,\n    objectName,\n    image,\n    mainText,\n    subText,\n    children,\n    size = 'medium',\n  } = props;\n  const baseClassName = 'vb-noDataCreated';\n  return (\n    <div {...commonProps(props, baseClassName, {}, {})}>\n      {image ? (\n        <img\n          className={`${baseClassName}__image`}\n          src={image.src}\n          alt=\"\"\n          style={{\n            width: image.width,\n            height: image.height,\n          }}\n        />\n      ) : (\n        <NoDataIllust mb={1} size={size} />\n      )}\n      <SectionTitle headlineLevel={-1} mb={0.25}>\n        {mainText ||\n          `${actionWord || '作成'}された${\n            objectName || 'データ'\n          }はまだありません`}\n      </SectionTitle>\n      <Paragraph>\n        {subText ||\n          `新規に${actionWord || '作成'}をすると一覧として表示されます`}\n      </Paragraph>\n      {children}\n    </div>\n  );\n};\n\nexport default NoDataCreated;\n"
  },
  {
    "path": "src/lv2/emptyStates/NoSearchResults.stories.tsx",
    "content": "import * as React from 'react';\n\nimport NoSearchResults from './NoSearchResults';\nimport { commonKnobs } from '../../../stories';\nimport { text, select } from '@storybook/addon-knobs';\n\nexport default {\n  component: NoSearchResults,\n};\n\nexport const NoSearchResultsComponent = () => (\n  <NoSearchResults\n    objectName={text('ObjectName', '取引', 'NoSearchResults')}\n    mainText={text('MainText', '', 'NoSearchResults')}\n    subText={text('SubText', '', 'NoSearchResults')}\n    size={\n      select(\n        'Size',\n        {\n          medium: 'medium',\n          'fit-height': 'fit-height',\n          'fit-width': 'fit-width',\n        },\n        '',\n        'NoSearchResults'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/emptyStates/NoSearchResults.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport NoSearchResultsIllust from '../../lv1/images/NoSearchResultsIllust';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport SectionTitle from '../../lv1/typography/SectionTitle';\nimport { SwallowProps } from '../../lv1/images/SwallowContainer';\n\ntype Props = {\n  /**\n   * 検索対象の名前を指定します。\n   */\n  objectName?: string;\n  /**\n   * 任意の画像を使用したい場合に使います。\n   */\n  image?: {\n    /**\n     * 画像のURLを指定します。\n     */\n    src: string;\n    /**\n     * 画像の横幅を指定します。\n     */\n    width?: string;\n    /**\n     * 画像の縦幅を指定します。\n     */\n    height?: string;\n  };\n  mainText?: React.ReactNode;\n  subText?: React.ReactNode;\n} & Pick<SwallowProps, 'size'> &\n  CommonProps;\n\n/**\n * このコンポーネントは検索結果に合致するデータがない場合に使う、empty UIです。\n * データ自体が１件もない場合は `NoDataCreated` を使用してください。\n *\n * - 特に特別な考慮が必要のない時に使う想定です。\n * - 画像やメッセージは任意のものにも入れ替えられるようになっていますが、それ以上の事を実装したい場合は独自にempty UI を用意してください。\n * - デフォルトの見せ方で良い場合は、`objectName` を指定するだけで使えます。\n */\nconst NoSearchResults: React.FC<Props> = (props: Props) => {\n  const { objectName, image, mainText, subText, size = 'medium' } = props;\n  const baseClassName = 'vb-noSearchResults';\n  return (\n    <div {...commonProps(props, baseClassName, {}, {})}>\n      {image ? (\n        <img\n          className={`${baseClassName}__image`}\n          src={image.src}\n          alt=\"\"\n          style={{\n            width: image.width,\n            height: image.height,\n          }}\n        />\n      ) : (\n        <NoSearchResultsIllust mt={2} mb={1} size={size} />\n      )}\n      <SectionTitle headlineLevel={-1} mb={0.25}>\n        {mainText ||\n          `検索に該当する${objectName || 'データ'}はありませんでした`}\n      </SectionTitle>\n      <Paragraph>\n        {subText || '検索条件を変えて再度絞り込みをお試しください'}\n      </Paragraph>\n    </div>\n  );\n};\n\nexport default NoSearchResults;\n"
  },
  {
    "path": "src/lv2/fileUploader/FileDropArea.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport FileDropArea from './FileDropArea';\nimport { Button, Loading, Paragraph } from '../../lv1';\n\nexport default {\n  component: FileDropArea,\n};\n\nexport const FileDropAreaComponent = () => (\n  <FileDropArea\n    fileLabel={text('fileLabel', 'ファイルラベル', 'FileDropArea')}\n    fileName={text('fileName', 'dummy.csv', 'FileDropArea')}\n    onFileSelect={action('file select')}\n    multiple={boolean('multiple', true, 'FileDropArea')}\n    status={\n      select(\n        'Status',\n        {\n          default: 'default',\n          selected: 'selected',\n          uploading: 'uploading',\n          processing: 'processing',\n          undefined: '',\n        },\n        '',\n        'FileDropArea'\n      ) || undefined\n    }\n    processingMessage={text(\n      'processingMessage',\n      '処理中のメッセージ',\n      'FileDropArea'\n    )}\n    disabled={boolean('disabled', false, 'FileDropArea')}\n    disabledMessage={text(\n      'disabledMessage',\n      'disabled時に表示するメッセージ',\n      'FileDropArea'\n    )}\n    {...commonKnobs()}\n  >\n    <Paragraph mb={1}>\n      長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n      長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n      長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n    </Paragraph>\n    <Button onClick={action('button clicked')}>ファイルを選択</Button>\n  </FileDropArea>\n);\n\nexport const FileDropAreaWithLoading = () => (\n  <FileDropArea\n    fileLabel={text('FileLabel', 'ファイルラベル', 'FileDropArea')}\n    fileName={text('FileName', 'dummy.csv', 'FileDropArea')}\n    onFileSelect={action('file select')}\n    multiple={boolean('Multiple', true, 'FileDropArea')}\n    status={\n      select(\n        'Status',\n        {\n          default: 'default',\n          selected: 'selected',\n          uploading: 'uploading',\n          processing: 'processing',\n          undefined: '',\n        },\n        '',\n        'FileDropArea'\n      ) || undefined\n    }\n    processingMessage={text(\n      'processingMessage',\n      '処理中のメッセージ',\n      'FileDropArea'\n    )}\n    disabled={boolean('disabled', false, 'FileDropArea')}\n    disabledMessage={text(\n      'disabledMessage',\n      'disabled時に表示するメッセージ',\n      'FileDropArea'\n    )}\n    {...commonKnobs()}\n  >\n    <Loading isLoading={true}>\n      <Paragraph mb={1}>\n        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト\n      </Paragraph>\n    </Loading>\n    <Button onClick={action('button clicked')}>ファイルを選択</Button>\n  </FileDropArea>\n);\n"
  },
  {
    "path": "src/lv2/fileUploader/FileDropArea.tsx",
    "content": "import * as React from 'react';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport { useDropFile } from './hooks';\nimport { FileType, FileUploaderStatus } from './types';\nimport { CSSTransition } from 'react-transition-group';\nimport { MdBlock } from 'react-icons/md';\nimport vbClassNames from '../../utilities/vbClassNames';\n\ntype Props = {\n  children: React.ReactNodeArray | React.ReactNode;\n  /**\n   * 選択可能なファイル種別を設定します\n   */\n  acceptFileTypes?: Array<FileType>;\n  /**\n   * 表示用のファイルタイプを設定します\n   */\n  fileLabel: string;\n  /**\n   * 選択中のファイル名を設定します\n   */\n  fileName?: string;\n  /**\n   * 複数選択可能かどうかを設定します\n   */\n  multiple?: boolean;\n  /**\n   * ファイル選択時のイベントハンドラを設定します\n   */\n  onFileSelect: (files: Array<File>) => any;\n  /**\n   * ファイルの状態を設定します\n   */\n  status?: FileUploaderStatus;\n  /**\n   * 処理中の際に表示するメッセージ\n   */\n  processingMessage?: string;\n  /**\n   * DnD可能かどうかを設定します\n   */\n  disabled?: boolean;\n  /**\n   * disabled === true かつ、ドラッグした際に表示するメッセージ\n   */\n  disabledMessage?: string;\n} & CommonProps;\n\nconst overlayClassName = (\n  partName: 'overlay' | 'icon' | 'contentDescription',\n  disabled?: boolean\n) =>\n  vbClassNames(`vb-fileDropArea__${partName}`, {\n    modifier: { disabled },\n  });\n\nconst DraggingContents: React.FC<{\n  fileLabel: string;\n  status?: FileUploaderStatus;\n  processingMessage?: string;\n  disabled?: boolean;\n  disabledMessage?: string;\n}> = ({ fileLabel, status, processingMessage, disabled, disabledMessage }) => {\n  if (disabled) {\n    return (\n      <>\n        <MdBlock className={overlayClassName('icon', true)} />\n        <Paragraph>\n          <div className={overlayClassName('contentDescription', true)}>\n            {disabledMessage ?? 'ドラッグ＆ドロップできません'}\n          </div>\n        </Paragraph>\n      </>\n    );\n  } else if (status === 'uploading' || status === 'processing') {\n    return (\n      <>\n        <svg\n          className=\"vb-fileDropArea__icon\"\n          width=\"48\"\n          height=\"48\"\n          role=\"img\"\n        >\n          <path\n            d=\"M38.7 12.08C37.34 5.18 31.28 0 24 0c-5.78 0-10.8 3.28-13.3 8.08C4.68 8.72 0 13.82 0 20c0 6.62 5.38 12 12 12h26c5.52 0 10-4.48 10-10 0-5.28-4.1-9.56-9.3-9.92zM38 28H12c-4.42 0-8-3.58-8-8s3.58-8 8-8h1.42C14.74 7.38 18.96 4 24 4c6.08 0 11 4.92 11 11v1h3c3.32 0 6 2.68 6 6s-2.68 6-6 6z\"\n            id=\"a\"\n          />\n        </svg>\n        <Paragraph>\n          <div className=\"vb-fileDropArea__contentDescription\">\n            {status === 'uploading' ? 'アップロード中' : processingMessage}\n          </div>\n        </Paragraph>\n      </>\n    );\n  } else {\n    return (\n      <>\n        <svg\n          className=\"vb-fileDropArea__icon\"\n          width=\"48\"\n          height=\"48\"\n          role=\"img\"\n        >\n          <path\n            d=\"M38.7 12.08C37.34 5.18 31.28 0 24 0c-5.78 0-10.8 3.28-13.3 8.08C4.68 8.72 0 13.82 0 20c0 6.62 5.38 12 12 12h26c5.52 0 10-4.48 10-10 0-5.28-4.1-9.56-9.3-9.92zM28 18v8h-8v-8h-6L24 8l10 10h-6z\"\n            id=\"a\"\n          />\n        </svg>\n        <Paragraph>\n          <div className=\"vb-fileDropArea__contentDescription\">\n            {fileLabel}をドロップしてアップロード\n          </div>\n        </Paragraph>\n      </>\n    );\n  }\n};\n\nconst FileDropAreaInnerContainer: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    acceptFileTypes,\n    fileLabel,\n    multiple,\n    onFileSelect,\n    status,\n    processingMessage,\n    disabled,\n    disabledMessage,\n  } = props;\n\n  const nodeRef = React.useRef<HTMLDivElement>(null);\n  const { canDrop, isOver, drop } = useDropFile(\n    disabled ? () => undefined : onFileSelect,\n    acceptFileTypes,\n    multiple\n  );\n  const isDragging = status !== 'uploading' && canDrop && isOver;\n  const isActive =\n    isDragging || status === 'uploading' || status === 'processing';\n\n  return (\n    <div ref={drop} {...commonProps(props, 'vb-fileDropArea')}>\n      {children}\n      <CSSTransition\n        classNames=\"vb-fileDropArea__fade\"\n        in={isActive}\n        timeout={300}\n        exit\n        unmountOnExit\n        // StrictModeで、\"Warning: findDOMNode is deprecated in StrictMode.\"が出ないように\n        // [FYI] https://github.com/reactjs/react-transition-group/issues/668#issuecomment-695162879\n        nodeRef={nodeRef}\n      >\n        <div ref={nodeRef} className={overlayClassName('overlay', disabled)}>\n          <DraggingContents\n            fileLabel={fileLabel}\n            status={status}\n            processingMessage={processingMessage}\n            disabled={disabled}\n            disabledMessage={disabledMessage}\n          />\n        </div>\n      </CSSTransition>\n    </div>\n  );\n};\n\n/**\n * D&Dでしか操作できないことを防ぐため、必ず「ファイル選択ボタン」か` <input type=\"file\"> `と一緒に使ってください\n */\nconst FileDropArea: React.FC<Props> = (props) => {\n  return (\n    <DndProvider backend={HTML5Backend}>\n      <FileDropAreaInnerContainer {...props} />\n    </DndProvider>\n  );\n};\nexport default FileDropArea;\n"
  },
  {
    "path": "src/lv2/fileUploader/FileUploader.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport ContentsBase from '../../lv1/bases/ContentsBase';\nimport FileUploader from './FileUploader';\nimport { FileUploaderStatus, FileTypes } from './types';\nimport Button from '../../lv1/buttons/Button';\nimport { MdFileUpload } from 'react-icons/md';\n\nexport default {\n  component: FileUploader,\n};\n\nexport const FileUploaderComponent = () => (\n  <div style={{ height: '25rem' }}>\n    <FileUploader\n      fileLabel={text('FileLabel', 'ファイルラベル', 'FileUploader')}\n      fileName={text('FileName', 'dummy.csv', 'FileUploader')}\n      isUploading={boolean('IsUploading', false, 'FileUploader')}\n      onFileSelect={action('file select')}\n      multiple={boolean('Multiple', false, 'FileUploader')}\n      status={\n        select(\n          'Status',\n          {\n            default: 'default',\n            selected: 'selected',\n            uploading: 'uploading',\n            processing: 'processing',\n            undefined: '',\n          },\n          '',\n          'FileUploader'\n        ) || undefined\n      }\n      type={\n        select(\n          'Type',\n          {\n            Normal: 'normal',\n            Compact: 'compact',\n            undefined: '',\n          },\n          '',\n          'FileUploader'\n        ) || undefined\n      }\n      width={\n        select(\n          'Width',\n          {\n            Medium: 'medium',\n            Full: 'full',\n            undefined: '',\n          },\n          '',\n          'FileUploader'\n        ) || undefined\n      }\n      processingMessage={text(\n        'processingMessage',\n        '処理中のメッセージ',\n        'FileUploader'\n      )}\n      {...commonKnobs()}\n    />\n  </div>\n);\n\nexport const AcceptFileTypes = () => (\n  <>\n    <FileUploader\n      fileLabel=\"CSVファイル\"\n      acceptFileTypes={[FileTypes.CSV]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      marginBottom\n    />\n    <FileUploader\n      fileLabel=\"TSVファイル\"\n      acceptFileTypes={[FileTypes.TSV]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      marginBottom\n    />\n    <FileUploader\n      fileLabel=\"画像\"\n      acceptFileTypes={[FileTypes.JPG, FileTypes.GIF, FileTypes.PNG]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      marginBottom\n    />\n    <FileUploader\n      fileLabel=\"PDFファイル\"\n      acceptFileTypes={[FileTypes.PDF]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      marginBottom\n    />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [files, setFiles] = React.useState<File[]>([]);\n  const [status, setStatus] = React.useState<FileUploaderStatus>('default');\n  const disabled = status !== 'selected';\n  const fileName = React.useMemo(() => {\n    if (!files.length) {\n      return '';\n    }\n    return files.length > 1 ? `${files.length}個のファイル` : files[0].name;\n  }, [files]);\n\n  const handleFileSelect = (files: File[]) => {\n    if (files.length) {\n      setFiles(files);\n      setStatus('selected');\n    } else {\n      setFiles([]);\n      setStatus('default');\n    }\n  };\n\n  const handleClickUpload = () => {\n    setStatus('uploading');\n    setTimeout(() => {\n      setFiles([]);\n      setStatus('default');\n    }, 3000);\n  };\n\n  return (\n    <ContentsBase>\n      <div style={{ display: 'inline-block', textAlign: 'center' }}>\n        <FileUploader\n          acceptFileTypes={[FileTypes.CSV]}\n          fileLabel=\"CSVファイル\"\n          fileName={fileName}\n          onFileSelect={handleFileSelect}\n          status={status}\n          multiple\n          mb={1.5}\n        />\n        <Button\n          IconComponent={MdFileUpload}\n          disabled={disabled}\n          onClick={handleClickUpload}\n        >\n          アップロード\n        </Button>\n      </div>\n    </ContentsBase>\n  );\n};\n\nexport const StatusSample = () => (\n  <>\n    <FileUploader\n      fileLabel=\"画像\"\n      acceptFileTypes={[FileTypes.JPG, FileTypes.GIF, FileTypes.PNG]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      status=\"default\"\n      marginBottom\n    />\n    <FileUploader\n      fileLabel=\"画像\"\n      acceptFileTypes={[FileTypes.JPG, FileTypes.GIF, FileTypes.PNG]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      status=\"selected\"\n      marginBottom\n    />\n    <FileUploader\n      fileLabel=\"画像\"\n      acceptFileTypes={[FileTypes.JPG, FileTypes.GIF, FileTypes.PNG]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      status=\"uploading\"\n      marginBottom\n    />\n    <FileUploader\n      fileLabel=\"画像\"\n      acceptFileTypes={[FileTypes.JPG, FileTypes.GIF, FileTypes.PNG]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      status=\"processing\"\n      marginBottom\n    />\n  </>\n);\n\nexport const ProcessingMessageSample = () => (\n  <>\n    <FileUploader\n      fileLabel=\"画像\"\n      acceptFileTypes={[FileTypes.JPG, FileTypes.GIF, FileTypes.PNG]}\n      isUploading={false}\n      onFileSelect={() => undefined}\n      status=\"processing\"\n      processingMessage=\"OCR処理中\"\n      marginBottom\n    />\n  </>\n);\n"
  },
  {
    "path": "src/lv2/fileUploader/FileUploader.tsx",
    "content": "import * as React from 'react';\nimport { ConnectDropTarget, DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { MdBlock, MdRefresh } from 'react-icons/md';\n\nimport CsvUploadIllust from '../../lv1/images/CsvUploadIllust';\nimport CloudUploadIllust from '../../lv1/images/CloudUploadIllust';\nimport FileUploadIllust from '../../lv1/images/FileUploadIllust';\nimport ImageUploadIllust from '../../lv1/images/ImageUploadIllust';\nimport CloudSkeletonIllust from '../../lv1/images/CloudSkeletonIllust';\n\nimport Button from '../../lv1/buttons/Button';\nimport Paragraph from '../../lv1/typography/Paragraph';\n\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { useDropFile } from './hooks';\nimport {\n  FileUploaderStatus,\n  FileType,\n  FileTypes,\n  ImageTypes,\n  FileExtensions,\n} from './types';\nimport { VisuallyHidden } from '../..';\n\ntype Props = {\n  /**\n   * 選択可能なファイル種別を設定します\n   */\n  acceptFileTypes?: Array<FileType>;\n  /**\n   * 表示用のファイルタイプを設定します\n   */\n  fileLabel: string;\n  /**\n   * 選択中のファイル名を設定します\n   */\n  fileName?: string;\n  /**\n   * @deprecated status を使用してください\n   */\n  isUploading?: boolean;\n  /**\n   * 複数選択可能かどうかを設定します\n   */\n  multiple?: boolean;\n  /**\n   * ファイル選択時のイベントハンドラを設定します\n   */\n  onFileSelect: (files: Array<File>) => any;\n  /**\n   * ファイルの状態を設定します\n   */\n  status?: FileUploaderStatus;\n  /**\n   * 処理中の際に表示するメッセージ\n   */\n  processingMessage?: string;\n  /**\n   * 幅を設定します\n   */\n  width?: 'medium' | 'full';\n  /**\n   * コンポーネントの表示方法を設定します\n   */\n  type?: 'normal' | 'compact';\n} & MarginClassProps &\n  CommonProps;\n\ntype InnerProps = Omit<Props, 'isUploading'> & {\n  canDrop?: boolean;\n  connectDropTarget: ConnectDropTarget;\n  isOver?: boolean;\n  invalidFileDropped: boolean;\n};\n\nconst getFileIllust = (\n  mimeTypes: FileType[] | undefined\n): React.FC<CommonProps> => {\n  if (!mimeTypes) {\n    return FileUploadIllust;\n  } else if (mimeTypes.every((value) => ImageTypes.indexOf(value) >= 0)) {\n    return ImageUploadIllust;\n  } else if (mimeTypes.length === 1 && mimeTypes[0] === FileTypes.CSV) {\n    return CsvUploadIllust;\n  }\n  return FileUploadIllust;\n};\n\nconst FileUploaderInner = (props: InnerProps) => {\n  const {\n    acceptFileTypes,\n    canDrop,\n    connectDropTarget,\n    invalidFileDropped,\n    fileLabel,\n    fileName,\n    isOver,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    marginSize,\n    marginTop,\n    multiple,\n    onFileSelect,\n    status = 'default',\n    processingMessage = '処理中',\n    width,\n    type,\n  } = props;\n\n  const fileInputRef = React.useRef<HTMLInputElement | null>(null);\n  const handleFileSelected = React.useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>): void => {\n      if (status === 'uploading') {\n        return;\n      }\n      const files = Array.from(event.target.files ?? []);\n      if (!files.length) {\n        return;\n      }\n\n      onFileSelect(files);\n\n      // 同じファイル名をアップロードしようとするとvalueが同じなのでonChangeが発火されないのでvalueを空にしておく\n      if (fileInputRef.current) {\n        fileInputRef.current.value = '';\n      }\n    },\n    [onFileSelect, status]\n  );\n\n  const isDragging = status !== 'uploading' && canDrop && isOver;\n  const classModifier = {\n    widthMedium: width === 'medium' || !width,\n    widthFull: width === 'full',\n    typeNormal: type === 'normal' || !type,\n    typeCompact: type === 'compact',\n    active: isDragging,\n    error: invalidFileDropped,\n  };\n\n  const FileIllust = getFileIllust(acceptFileTypes);\n  const acceptValue = acceptFileTypes\n    ? acceptFileTypes\n        .reduce(\n          (prev, t) => prev.concat([t], FileExtensions[t] || []),\n          [] as string[]\n        )\n        .join(',')\n    : undefined;\n\n  const handleClick = () => {\n    // eventを作ってinputに発火させる\n    const evt = document.createEvent('mouseevent');\n    evt.initEvent('click', false, false);\n    fileInputRef.current && fileInputRef.current.dispatchEvent(evt);\n  };\n\n  return (\n    <div\n      ref={connectDropTarget}\n      {...commonProps(props, 'vb-fileUploader', classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginTop,\n        marginSize,\n      })}\n    >\n      <div className=\"vb-fileUploader__dropMessage\" aria-hidden={!isDragging}>\n        {/* いい感じのトランジションを表現するために、要素を消すのではなくaria-hiddenしています */}\n        <div className=\"vb-fileUploader__contentIllust\">\n          <CloudUploadIllust mb={1} />\n        </div>\n        <div className=\"vb-fileUploader__contentDescription\">\n          <Paragraph marginBottom>\n            {fileLabel}をドロップしてアップロード\n          </Paragraph>\n        </div>\n      </div>\n      <VisuallyHidden autoRead assertive={true}>\n        {invalidFileDropped ? 'このファイル形式は受け付けられません' : ''}\n      </VisuallyHidden>\n      <div\n        className=\"vb-fileUploader__errorMessage\"\n        aria-hidden={!invalidFileDropped}\n      >\n        <MdBlock className={'vb-fileUploader__icon'} />\n        <div className=\"vb-fileUploader__contentDescription\">\n          <Paragraph marginBottom>\n            このファイル形式は受け付けられません\n          </Paragraph>\n        </div>\n      </div>\n      {status === 'uploading' && (\n        <div\n          className={vbClassNames('vb-fileUploader__content', {\n            modifier: { disabled: invalidFileDropped },\n          })}\n        >\n          <div className=\"vb-fileUploader__contentIllust\">\n            <CloudSkeletonIllust mb={1} />\n          </div>\n          <div className=\"vb-fileUploader__contentDescription\">\n            <Paragraph>アップロード中</Paragraph>\n          </div>\n        </div>\n      )}\n      {status === 'processing' && (\n        <div\n          className={vbClassNames('vb-fileUploader__content', {\n            modifier: { disabled: invalidFileDropped },\n          })}\n        >\n          <div className=\"vb-fileUploader__contentIllust\">\n            <CloudSkeletonIllust mb={1} />\n          </div>\n          <div className=\"vb-fileUploader__contentDescription\">\n            <Paragraph>{processingMessage}</Paragraph>\n          </div>\n        </div>\n      )}\n      {status === 'selected' && (\n        <div\n          className={vbClassNames('vb-fileUploader__content', {\n            modifier: { disabled: invalidFileDropped },\n          })}\n          aria-hidden={isDragging}\n        >\n          <div className=\"vb-fileUploader__contentIllust\">\n            <FileIllust mb={1} />\n          </div>\n          <div className=\"vb-fileUploader__contentDescription\">\n            {fileName && <Paragraph mb={1}>{fileName}</Paragraph>}\n            <Button\n              IconComponent={MdRefresh}\n              onClick={handleClick}\n              disabled={invalidFileDropped}\n              type=\"button\"\n            >\n              ファイルを再選択\n            </Button>\n          </div>\n        </div>\n      )}\n      {status === 'default' && (\n        <div\n          className={vbClassNames('vb-fileUploader__content', {\n            modifier: { disabled: invalidFileDropped },\n          })}\n          aria-hidden={isDragging}\n        >\n          <div className=\"vb-fileUploader__contentIllust\">\n            <FileIllust mb={1} />\n          </div>\n          <div className=\"vb-fileUploader__contentDescription\">\n            <Paragraph mb={1}>{fileLabel}をここにドラッグ＆ドロップ</Paragraph>\n            <Paragraph mb={1}>または</Paragraph>\n            <Button\n              onClick={handleClick}\n              disabled={invalidFileDropped}\n              type=\"button\"\n            >\n              ファイルを選択\n            </Button>\n          </div>\n        </div>\n      )}\n      <input\n        accept={acceptValue}\n        multiple={multiple}\n        onChange={handleFileSelected}\n        ref={fileInputRef}\n        style={{ display: 'none' }}\n        type=\"file\"\n      />\n    </div>\n  );\n};\n\nconst FileUploaderInnerContainer = (props: Props) => {\n  const {\n    acceptFileTypes,\n    isUploading,\n    multiple,\n    onFileSelect,\n    status: tmpStatus,\n    ...others\n  } = props;\n  // status が設定されていない場合は isUploading の値を status に変換して props から isUploading を取り除く\n  const status = tmpStatus ?? (isUploading ? 'uploading' : 'default');\n  const { canDrop, isOver, drop, invalidFileDropped } = useDropFile(\n    onFileSelect,\n    acceptFileTypes,\n    multiple\n  );\n\n  return (\n    <FileUploaderInner\n      {...others}\n      acceptFileTypes={acceptFileTypes}\n      canDrop={canDrop}\n      connectDropTarget={drop}\n      isOver={isOver}\n      invalidFileDropped={invalidFileDropped}\n      multiple={multiple}\n      onFileSelect={onFileSelect}\n      status={status}\n    />\n  );\n};\n\nconst FileUploader: React.FC<Props> = (props) => {\n  return (\n    <DndProvider backend={HTML5Backend}>\n      <FileUploaderInnerContainer {...props} />\n    </DndProvider>\n  );\n};\n\nexport default FileUploader;\n"
  },
  {
    "path": "src/lv2/fileUploader/hooks.ts",
    "content": "import { useState } from 'react';\nimport { useDrop } from 'react-dnd';\nimport { NativeTypes } from 'react-dnd-html5-backend';\nimport { FileType, FileTypes } from './types';\n\n// FileTypesに加えてAcceptする必要のあるMIME types\nconst extraMIME: { [key: string]: string[] } = {\n  // ExcelのインストールされたWindowsマシンではMIMEタイプがExcelになっていることがある……\n  [FileTypes.CSV]: [FileTypes.XLS],\n};\n\nconst filterFiles = (\n  files: File[],\n  mimeTypes: FileType[] | undefined,\n  multiple: boolean\n): File[] => {\n  if (!mimeTypes || mimeTypes.length === 0) {\n    return multiple ? files : files.slice(0, 1);\n  }\n\n  const acceptableTypes: string[] = mimeTypes.reduce(\n    (prev, type) => prev.concat([type], extraMIME[type] || []),\n    [] as string[]\n  );\n  // MIME typeと一致しているもののみを返す\n  // ただしIE/EdgeでMIME typeが扱えない問題があるので、typeが空文字列のものは許容する\n  const filtered = files.filter(\n    (file) => acceptableTypes.indexOf(file.type) >= 0 || file.type === ''\n  );\n  return multiple ? filtered : filtered.slice(0, 1);\n};\n\nexport const useDropFile = (\n  onFileSelect: (files: Array<File>) => any,\n  acceptFileTypes?: Array<FileType>,\n  multiple?: boolean\n) => {\n  const [invalidFileDropped, setInvalidFileUploaded] = useState<boolean>(false);\n  const [{ canDrop, isOver }, drop] = useDrop({\n    accept: NativeTypes.FILE,\n    drop: (\n      item: any // react-dnd 側の型が間違っているかも。DragObjectWithType を求められるが 実際には { files: Array<File> } のみ\n    ) => {\n      if (status === 'uploading') {\n        return;\n      }\n      const droppedFiles = item.files as Array<File>;\n      const filteredFiles = filterFiles(\n        droppedFiles,\n        acceptFileTypes,\n        !!multiple\n      );\n      if (filteredFiles.length > 0) {\n        onFileSelect(filteredFiles);\n      } else {\n        setInvalidFileUploaded(true);\n        setTimeout(() => {\n          setInvalidFileUploaded(false);\n        }, 3000);\n      }\n    },\n    collect: (monitor) => ({\n      canDrop: !!monitor.canDrop(),\n      isOver: !!monitor.isOver(),\n    }),\n  });\n  return { canDrop, isOver, drop, invalidFileDropped };\n};\n"
  },
  {
    "path": "src/lv2/fileUploader/types.ts",
    "content": "export const FileTypes = {\n  CSV: 'text/csv',\n  TSV: 'text/tab-separated-values', // tab区切りファイルのMIMEタイプ参考: https://www.iana.org/assignments/media-types/text/tab-separated-values\n  TXT: 'text/plain',\n  JPG: 'image/jpeg',\n  PNG: 'image/png',\n  GIF: 'image/gif',\n  PDF: 'application/pdf',\n  XLS: 'application/vnd.ms-excel',\n  XLSX: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  DOC: 'application/msword',\n  DOCX: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  PPT: 'application/vnd.ms-powerpoint',\n  PPTX: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n  ZIP: 'application/zip',\n} as const;\n\nexport type FileType = typeof FileTypes[keyof typeof FileTypes];\n\nexport const FileUploaderStatus = {\n  DEFAULT: 'default',\n  SELECTED: 'selected',\n  UPLOADING: 'uploading',\n  PROCESSING: 'processing',\n} as const;\n\nexport type FileUploaderStatus =\n  typeof FileUploaderStatus[keyof typeof FileUploaderStatus];\n\n/** @deprecated Use `FileUploadedStatus` type instead. */\nexport type FileStatus = FileUploaderStatus;\n\nexport const FileExtensions: { [key: string]: string[] } = {\n  [FileTypes.CSV]: ['.csv'],\n  [FileTypes.TSV]: ['.tsv'],\n  [FileTypes.TXT]: ['.txt'],\n  [FileTypes.JPG]: ['.jpg', '.jpeg'],\n  [FileTypes.PNG]: ['.gif'],\n  [FileTypes.PDF]: ['.pdf'],\n  [FileTypes.XLS]: ['.xls'],\n  [FileTypes.XLSX]: ['.xlsx'],\n  [FileTypes.DOC]: ['.doc'],\n  [FileTypes.DOCX]: ['.docx'],\n  [FileTypes.PPT]: ['.ppt'],\n  [FileTypes.PPTX]: ['.pptx'],\n  [FileTypes.ZIP]: ['.zip'],\n};\n\nexport const ImageTypes: FileType[] = [\n  FileTypes.JPG,\n  FileTypes.PNG,\n  FileTypes.GIF,\n];\n"
  },
  {
    "path": "src/lv2/filterTag/FilterTag.stories.tsx",
    "content": "import * as React from 'react';\nimport { commonKnobs } from '../../../stories';\nimport FilterTag from './FilterTag';\nimport { Button, Text, HStack, VStack, PopupBase, TextField } from '../..';\n\nexport default {\n  component: FilterTag,\n};\n\nexport const Base = () => {\n  return (\n    <VStack>\n      <Text>labelのみが設定されている場合</Text>\n      <FilterTag\n        label=\"取引先\"\n        renderPopup={() => <></>}\n        {...commonKnobs()}\n      ></FilterTag>\n      <Text>labelとvalueが設定されている場合</Text>\n      <FilterTag\n        label=\"取引先\"\n        value=\"取引先名\"\n        renderPopup={() => <></>}\n        {...commonKnobs()}\n      ></FilterTag>\n    </VStack>\n  );\n};\n\nexport const Popup = () => {\n  const [value, setValue] = React.useState('');\n  const [currentValue, setCurrentValue] = React.useState('');\n  return (\n    <>\n      <FilterTag\n        label=\"取引先\"\n        value={value}\n        renderPopup={(onRequestClose) => (\n          <div style={{ width: '20rem' }}>\n            <PopupBase paddingSize=\"small\" fitContent>\n              <TextField\n                value={currentValue}\n                onChange={(e) => setCurrentValue(e.target.value)}\n              />\n              <HStack gap={0.5} mt={0.5}>\n                <Button\n                  appearance=\"primary\"\n                  onClick={() => setValue(currentValue)}\n                >\n                  適用\n                </Button>\n                <Button onClick={onRequestClose}>閉じる</Button>\n              </HStack>\n            </PopupBase>\n          </div>\n        )}\n        {...commonKnobs()}\n      ></FilterTag>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/filterTag/FilterTag.tsx",
    "content": "import * as React from 'react';\nimport { MdArrowDropDown } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { WithPopup } from '..';\n\ntype RenderPopupT = Parameters<typeof WithPopup>[0]['renderPopup'];\n\ntype Props = {\n  /**\n   * ポップアップを描画するrender functionです。詳細は `WithPopup` の `renderPopup` propを参照してください。\n   * Render function for popup. See `renderPopup` prop of `WithPopup for details.\n   */\n  renderPopup: RenderPopupT;\n  /**\n   * ボタン内に表示するラベルを指定します。\n   * The label of the button.\n   */\n  label: string;\n  /**\n   * ボタン内に表示する値を指定します。\n   * 値を指定している場合はボタンがアクティブになり、値の前に「：」が表示されます。\n   * The value of the button.\n   * If the value is specified, the button will be active and a colon will be displayed before the value.\n   */\n  value?: string;\n} & CommonProps;\n\n/**\n * フィルタなどの絞り込み処理において、下記を満たす表示となります\n * - 項目毎に存在\n * - 適用中、適用なしの状態を持つ\n * - クリック可能で、その項目の変更を行う導線を表示できる\n *\n * ボタンをクリックすることで、項目に合わせたポップアップを表示します。\n * ポップアップの中身は `renderPopup` prop を用いて指定します。\n */\nconst FilterTag: React.FC<Props> = ({\n  renderPopup,\n  label,\n  value,\n  ...props\n}: Props) => {\n  const baseClass = 'vb-filterTag';\n\n  return (\n    <span {...commonProps(props, baseClass)}>\n      <WithPopup\n        render={(popupId, isOpen, controlRef) => (\n          <button\n            ref={controlRef as React.RefObject<HTMLButtonElement>}\n            className={`${baseClass}__block ${\n              value != null && value !== '' ? 'active' : ''\n            }`}\n            aria-controls={popupId}\n            aria-expanded={isOpen}\n          >\n            <span className={`${baseClass}__body`}>\n              {label}\n              {value != null && value !== '' ? '：' : ''}\n              {value}\n            </span>\n            <MdArrowDropDown className={`${baseClass}__icon`} />\n          </button>\n        )}\n        renderPopup={renderPopup}\n      />\n    </span>\n  );\n};\n\nexport default FilterTag;\n"
  },
  {
    "path": "src/lv2/filterableDropdownButton/FilterableDropdownButton.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\nimport FilterableDropdownButton from './FilterableDropdownButton';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { Button } from '../..';\nimport { MdAdd } from 'react-icons/md';\n\nexport default {\n  component: FilterableDropdownButton,\n};\n\nexport const FilterableDropdownComponent = () => {\n  const data = [\n    { label: '杏', keywords: ['あんず', 'anzu'] },\n    { label: '円', keywords: ['まどか', 'madoka'] },\n    { label: '桜', keywords: ['さくら', 'sakura'] },\n    { label: '巴', keywords: ['ともえ', 'tomoe'] },\n    { label: '焔', keywords: ['ほむら', 'homura'] },\n    { label: '渚', keywords: ['なぎさ', 'nagisa'] },\n    {\n      label: '海鮮助六',\n      keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n    },\n    {\n      label: '助六',\n      keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n    },\n  ];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  return (\n    <FilterableDropdownButton\n      buttonLabel={text(\n        'buttonLabel',\n        '開閉ボタン',\n        'FilterableDropdownButton'\n      )}\n      appearance={\n        select(\n          'appearance',\n          {\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n            undefined: '',\n          },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      iconOnly={boolean('iconOnly', false, 'FilterableDropdownButton')}\n      disabled={boolean('disabled', false, 'FilterableDropdownButton')}\n      small={boolean('small', false, 'FilterableDropdownButton')}\n      large={boolean('large', false, 'FilterableDropdownButton')}\n      dropdownContents={data.map((d, i) => ({\n        type: 'checkbox',\n        text: d.label,\n        keywords: d.keywords,\n        checked: status[i],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[i] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      iconPosition={\n        select(\n          'iconPosition',\n          { left: 'left', right: 'right', undefined: '' },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      {...commonKnobs()}\n    ></FilterableDropdownButton>\n  );\n};\n\nexport const FilterableMenu = () => {\n  const data = [\n    { label: '杏', keywords: ['あんず', 'anzu'] },\n    { label: '円', keywords: ['まどか', 'madoka'] },\n    { label: '桜', keywords: ['さくら', 'sakura'] },\n    { label: '巴', keywords: ['ともえ', 'tomoe'] },\n    { label: '焔', keywords: ['ほむら', 'homura'] },\n    { label: '渚', keywords: ['なぎさ', 'nagisa'] },\n    {\n      label: '海鮮助六',\n      keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n    },\n    {\n      label: '助六',\n      keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n    },\n  ];\n  return (\n    <FilterableDropdownButton\n      buttonLabel={text(\n        'buttonLabel',\n        '開閉ボタン',\n        'FilterableDropdownButton'\n      )}\n      appearance={\n        select(\n          'appearance',\n          {\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n            undefined: '',\n          },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      iconOnly={boolean('iconOnly', false, 'FilterableDropdownButton')}\n      disabled={boolean('disabled', false, 'FilterableDropdownButton')}\n      small={boolean('small', false, 'FilterableDropdownButton')}\n      dropdownContents={data.map((d) => ({\n        type: 'selectable',\n        text: d.label,\n        keywords: d.keywords,\n        onClick: action(`click menu ${d.label}`),\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      iconPosition={\n        select(\n          'iconPosition',\n          { left: 'left', right: 'right', undefined: '' },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      {...commonKnobs()}\n    ></FilterableDropdownButton>\n  );\n};\n\nexport const WithFixedItems = () => {\n  const data = [\n    { label: '杏', keywords: ['あんず', 'anzu'] },\n    { label: '円', keywords: ['まどか', 'madoka'] },\n    { label: '桜', keywords: ['さくら', 'sakura'] },\n    { label: '巴', keywords: ['ともえ', 'tomoe'] },\n    { label: '焔', keywords: ['ほむら', 'homura'] },\n    { label: '渚', keywords: ['なぎさ', 'nagisa'] },\n    {\n      label: '海鮮助六',\n      keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n    },\n    {\n      label: '助六',\n      keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n    },\n  ];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  return (\n    <FilterableDropdownButton\n      buttonLabel={text(\n        'buttonLabel',\n        '開閉ボタン',\n        'FilterableDropdownButton'\n      )}\n      appearance={\n        select(\n          'appearance',\n          {\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n            undefined: '',\n          },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      iconOnly={boolean('iconOnly', false, 'FilterableDropdownButton')}\n      disabled={boolean('disabled', false, 'FilterableDropdownButton')}\n      small={boolean('small', false, 'FilterableDropdownButton')}\n      large={boolean('large', false, 'FilterableDropdownButton')}\n      dropdownContents={data.map((d, i) => ({\n        type: 'checkbox',\n        text: d.label,\n        keywords: d.keywords,\n        checked: status[i],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[i] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      iconPosition={\n        select(\n          'iconPosition',\n          { left: 'left', right: 'right', undefined: '' },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      fixedItems={[\n        {\n          onSelect: () => {\n            // no-op\n          },\n          isVisible: () => true,\n          label: 'もっと見る',\n          disableOnRequestClose: true,\n        },\n        {\n          onSelect: () => {\n            // no-op\n          },\n          isVisible: () => true,\n          label: (value) => `${value}を新規登録`,\n        },\n        {\n          onSelect: () => {\n            // no-op\n          },\n          isVisible: (value) => !value,\n          label: 'valueが空の時だけ表示',\n        },\n      ]}\n      {...commonKnobs()}\n    ></FilterableDropdownButton>\n  );\n};\n\nexport const WithNoItems = () => {\n  const data: any[] = [];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  return (\n    <FilterableDropdownButton\n      buttonLabel={text(\n        'buttonLabel',\n        '開閉ボタン',\n        'FilterableDropdownButton'\n      )}\n      appearance={\n        select(\n          'appearance',\n          {\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n            undefined: '',\n          },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      iconOnly={boolean('iconOnly', false, 'FilterableDropdownButton')}\n      disabled={boolean('disabled', false, 'FilterableDropdownButton')}\n      small={boolean('small', false, 'FilterableDropdownButton')}\n      large={boolean('large', false, 'FilterableDropdownButton')}\n      dropdownContents={data.map((d, i) => ({\n        type: 'checkbox',\n        text: d.label,\n        keywords: d.keywords,\n        checked: status[i],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[i] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      iconPosition={\n        select(\n          'iconPosition',\n          { left: 'left', right: 'right', undefined: '' },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      {...commonKnobs()}\n    ></FilterableDropdownButton>\n  );\n};\n\nexport const WithDropdownBottomContent = () => {\n  const data = [\n    { label: '杏', keywords: ['あんず', 'anzu'] },\n    { label: '円', keywords: ['まどか', 'madoka'] },\n    { label: '桜', keywords: ['さくら', 'sakura'] },\n    { label: '巴', keywords: ['ともえ', 'tomoe'] },\n    { label: '焔', keywords: ['ほむら', 'homura'] },\n    { label: '渚', keywords: ['なぎさ', 'nagisa'] },\n    {\n      label: '海鮮助六',\n      keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n    },\n    {\n      label: '助六',\n      keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n    },\n  ];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  return (\n    <FilterableDropdownButton\n      buttonLabel={text(\n        'buttonLabel',\n        '開閉ボタン',\n        'FilterableDropdownButton'\n      )}\n      appearance={\n        select(\n          'appearance',\n          {\n            primary: 'primary',\n            secondary: 'secondary',\n            tertiary: 'tertiary',\n            undefined: '',\n          },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      iconOnly={boolean('iconOnly', false, 'FilterableDropdownButton')}\n      disabled={boolean('disabled', false, 'FilterableDropdownButton')}\n      small={boolean('small', false, 'FilterableDropdownButton')}\n      large={boolean('large', false, 'FilterableDropdownButton')}\n      dropdownContents={data.map((d, i) => ({\n        type: 'checkbox',\n        text: d.label,\n        keywords: d.keywords,\n        checked: status[i],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[i] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      renderDropdownBottomContent={(requestClose) => (\n        <Button\n          type=\"button\"\n          appearance=\"tertiary\"\n          iconPosition=\"left\"\n          IconComponent={MdAdd}\n          onClick={() => requestClose()}\n          mr={1}\n        >\n          取引先を追加\n        </Button>\n      )}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      iconPosition={\n        select(\n          'iconPosition',\n          { left: 'left', right: 'right', undefined: '' },\n          '',\n          'FilterableDropdownButton'\n        ) || undefined\n      }\n      {...commonKnobs()}\n    ></FilterableDropdownButton>\n  );\n};\n"
  },
  {
    "path": "src/lv2/filterableDropdownButton/FilterableDropdownButton.tsx",
    "content": "import * as React from 'react';\nimport Button, { ButtonAppearanceType } from '../../lv1/buttons/Button';\nimport IconOnlyButton from '../../lv1/buttons/IconOnlyButton';\nimport WithFilterableDropdown from '../withFilterableDropdown/WithFilterableDropdown';\nimport { MdArrowDropDown, MdMoreHoriz } from 'react-icons/md';\nimport { pickCommonProps } from '../../utilities/commonProps';\n\ntype PropsFromWithFilterableDropdown = Omit<\n  Parameters<typeof WithFilterableDropdown>[0],\n  'render'\n>;\n\ntype PropsFromButton = Pick<\n  Parameters<typeof Button>[0],\n  'iconPosition' | 'IconComponent'\n>;\ntype Props = PropsFromWithFilterableDropdown &\n  PropsFromButton & {\n    /**\n     * ボタンのラベルとなる文字列。必ず指定してください。 `iconOnly` を使用する場合も必ず指定してください。\n     */\n    buttonLabel: string;\n    small?: boolean;\n    large?: boolean;\n    appearance?: ButtonAppearanceType;\n    /**\n     * trueにすることで、ラベルを省略し「…」アイコンのみのボタンとなります\n     */\n    iconOnly?: boolean;\n    /**\n     * スピナーを表示する\n     */\n    isLoading?: boolean;\n  };\n\n/**\n * 選択肢をフィルター可能なドロップダウンボタンです。\n *\n * - 項目が少なく、フィルターが不要な場合は `DropdownButton` を使用してください。\n * - ボタン部分のカスタマイズがどうしても必要な場合は `WithFilterableDropdown` を使用してください。\n * - 上下キーでフォーカス移動、ESCキーで閉じられます。Tabキーでフォーカスを移動させる場合、メニューの外に出るとボタンへのフォーカスに戻ります\n * - メニューに入れられる項目は「クリック可能な項目（ボタンまたはリンク）」「チェックボックス」です\n *   - `DropdownButton` と違い、「テキスト」「区切り線」は使用できません。\n *   - 項目には複数の `keywords` を設定できます。読みがなやショートカットコードなどを指定すると、フィルターに使用できます\n *   - クリック可能な項目は `url` を渡されるとリンクとなります。遷移先のURLを特定できる場合は必ず `url` を渡してください\n *   - リンクに `target=\"_blank\"` を渡した場合、右側に OpenInNew アイコンが表示されます。\n * - `iconOnly` を `true` とすることで、ラベルを表示せず「…」アイコンのみのボタンとなります。 **この場合も `aria-label` として使用するため、必ず `buttonLabel` に意味のある文字列を指定してください**\n */\nconst FilterableDropdownButton: React.FC<Props> = (props: Props) => {\n  const {\n    iconOnly,\n    appearance,\n    buttonLabel,\n    small,\n    large,\n    disabled,\n    dropdownContents,\n    onFilterChange,\n    onOpen,\n    iconPosition,\n    IconComponent,\n    isLoading,\n    fixedItems,\n    noResultsMessage,\n    noDataMessage,\n    renderDropdownBottomContent,\n  } = props;\n\n  return (\n    <WithFilterableDropdown\n      disabled={disabled}\n      dropdownContents={dropdownContents}\n      onFilterChange={onFilterChange}\n      onOpen={onOpen}\n      isLoading={isLoading}\n      fixedItems={fixedItems}\n      noResultsMessage={noResultsMessage}\n      noDataMessage={noDataMessage}\n      renderDropdownBottomContent={renderDropdownBottomContent}\n      {...pickCommonProps(props)}\n      render={(dropdownId, isOpen, ref) =>\n        iconOnly ? (\n          <IconOnlyButton\n            IconComponent={IconComponent || MdMoreHoriz}\n            appearance={appearance}\n            aria-controls={dropdownId}\n            aria-expanded={isOpen}\n            aria-haspopup={true}\n            disabled={disabled}\n            label={buttonLabel}\n            small={small}\n            large={large}\n            ref={ref as React.Ref<HTMLButtonElement>}\n            type=\"button\"\n          />\n        ) : (\n          <Button\n            IconComponent={IconComponent || MdArrowDropDown}\n            iconPosition={iconPosition || 'right'}\n            disabled={disabled}\n            small={small}\n            large={large}\n            appearance={appearance}\n            aria-expanded={isOpen}\n            aria-haspopup={true}\n            aria-controls={dropdownId}\n            ref={ref as React.Ref<HTMLButtonElement>}\n            type=\"button\"\n          >\n            {buttonLabel}\n          </Button>\n        )\n      }\n    />\n  );\n};\n\nexport default FilterableDropdownButton;\n"
  },
  {
    "path": "src/lv2/footer/Footer.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Footer from './Footer';\n\nexport default {\n  component: Footer,\n};\n\nexport const FooterComponent = () => (\n  <Footer\n    width={\n      select(\n        'width',\n        { none: '', narrow: 'narrow', normal: 'normal', wide: 'wide' },\n        '',\n        'Footer'\n      ) || undefined\n    }\n    disableAppStoreBadge={boolean('disableAppStoreBadgbe', false, 'Footer')}\n    AppStoreUrl={text('AppStoreUrl', '', 'Footer') || undefined}\n    disableGooglePlayBadge={boolean('disableGooglePlayBadge', false, 'Footer')}\n    GooglePlayUrl={text('GooglePlayUrl', '', 'Footer') || undefined}\n    copyright={text('copyright', '', 'Footer') || undefined}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithSectionNode = () => (\n  <Footer\n    sectionNode={\n      <div\n        style={{\n          alignItems: 'center',\n          backgroundColor: 'lightgray',\n          display: 'flex',\n          height: 40,\n          justifyContent: 'center',\n          width: 120,\n        }}\n      >\n        <span>dummy badge</span>\n      </div>\n    }\n  />\n);\n"
  },
  {
    "path": "src/lv2/footer/Footer.tsx",
    "content": "import * as React from 'react';\nimport AppStoreBadge from '../../lv1/images/AppStoreBadge';\nimport GooglePlayBadge from '../../lv1/images/GooglePlayBadge';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Link = {\n  title: string;\n  url: string;\n};\ntype Props = {\n  links?: Link[];\n  AppStoreUrl?: string;\n  GooglePlayUrl?: string;\n  disableAppStoreBadge?: boolean;\n  disableGooglePlayBadge?: boolean;\n  copyright?: string;\n  width?: 'normal' | 'narrow' | 'wide';\n  /**\n   * フッタの右側に表示する要素を指定します。（この値を指定すると強制的にバッジは非表示になります。）\n   */\n  sectionNode?: React.ReactNode;\n} & CommonProps;\n\nexport const defaultLinks = [\n  {\n    title: '利用規約',\n    url: 'https://www.freee.co.jp/terms/',\n  },\n  {\n    title: 'プライバシーポリシー',\n    url: 'https://www.freee.co.jp/privacy_policy/',\n  },\n  {\n    title: '会社情報',\n    url: 'https://corp.freee.co.jp/',\n  },\n];\n\nfunction createLinks(links?: Link[]): React.ReactNode {\n  const linkDatas = links ? links : defaultLinks;\n  const linkItems = linkDatas.map((linkCont, index) => (\n    <li key={index} className=\"vb-footerLinks__item\">\n      <a href={linkCont.url} target=\"_blank\" rel=\"noreferrer noopener\">\n        {linkCont.title}\n      </a>\n    </li>\n  ));\n\n  return linkItems;\n}\n\nconst Footer: React.FC<Props> = (props: Props) => {\n  const {\n    links,\n    AppStoreUrl,\n    GooglePlayUrl,\n    disableAppStoreBadge,\n    disableGooglePlayBadge,\n    copyright,\n    width,\n    sectionNode,\n  } = props;\n\n  const defaultAppStoreUrl =\n    'https://itunes.apple.com/jp/app/freee/id811207074?l=ja&ls=1&mt=8';\n  const defaultGooglePlayUrl =\n    'https://play.google.com/store/apps/details?id=jp.co.freee.freee';\n  const defaultCopyright =\n    '© Copyright 2012-' + new Date().getFullYear() + ' freee K.K.';\n\n  return (\n    <footer\n      {...commonProps(props, 'vb-footer', {\n        widthNarrow: width === 'narrow',\n        widthWide: width === 'wide',\n      })}\n      role=\"contentinfo\"\n    >\n      <div className=\"vb-footerLinksArea\">\n        <ul className=\"vb-footerLinks\">{createLinks(links)}</ul>\n        <address className=\"vb-footerCopyright\">\n          {copyright ? copyright : defaultCopyright}\n        </address>\n      </div>\n\n      {sectionNode ? (\n        <div className=\"vb-footerSection\">{sectionNode}</div>\n      ) : (\n        <ul className=\"vb-footerBadges\">\n          {!disableAppStoreBadge && (\n            <li className=\"vb-footerBadges__item\">\n              <a\n                href={AppStoreUrl ? AppStoreUrl : defaultAppStoreUrl}\n                target=\"_blank\"\n                rel=\"noreferrer noopener\"\n              >\n                <AppStoreBadge />\n              </a>\n            </li>\n          )}\n\n          {!disableGooglePlayBadge && (\n            <li className=\"vb-footerBadges__item\">\n              <a\n                href={GooglePlayUrl ? GooglePlayUrl : defaultGooglePlayUrl}\n                target=\"_blank\"\n                rel=\"noreferrer noopener\"\n              >\n                <GooglePlayBadge />\n              </a>\n            </li>\n          )}\n        </ul>\n      )}\n    </footer>\n  );\n};\nexport default Footer;\n"
  },
  {
    "path": "src/lv2/formBlock/DateField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport DateField from './DateField';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n});\n\nexport default {\n  component: DateField,\n};\n\nexport const DateFieldComponent = () => (\n  <DateField\n    selectedDate={text('SelectedDate', '2020-01-01', 'DateField')}\n    startDate={text('StartDate', '2019-07-01', 'DateField')}\n    endDate={text('EndDate', '2021-06-30', 'DateField')}\n    small={boolean('Small', false, 'DateField')}\n    disabled={boolean('Disabled', false, 'DateField')}\n    error={boolean('Error', false, 'DateField')}\n    required={boolean('Required', false, 'DateField')}\n    autoComplete={\n      select(\n        'AutoComplete',\n        {\n          off: 'off',\n          bday: 'bday',\n          undefined: '',\n        },\n        '',\n        'DateField'\n      ) || undefined\n    }\n    nullable={boolean('Nullable', false, 'DateField')}\n    wareki={boolean('Wareki', false, 'DateField')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n    />\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      disabled\n    />\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      error\n    />\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      wareki\n    />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      small\n    />\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      small\n      disabled\n    />\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      small\n      error\n    />\n    <DateField\n      marginBottom\n      selectedDate=\"2020-01-01\"\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      small\n      wareki\n    />\n  </>\n);\n\nexport const Nullable = () => (\n  <>\n    <DateField\n      marginBottom\n      selectedDate={null}\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      nullable\n    />\n    <DateField\n      marginBottom\n      selectedDate={null}\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      disabled\n      nullable\n    />\n    <DateField\n      marginBottom\n      selectedDate={null}\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      error\n      nullable\n    />\n    <DateField\n      marginBottom\n      selectedDate={null}\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      wareki\n      nullable\n    />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [value, setValue] = React.useState<string>('2020-01-01');\n  return (\n    <DateField\n      selectedDate={value}\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      onChange={(v) => setValue(v ?? '')}\n    />\n  );\n};\n\nexport const InteractiveSampleWithNullable = () => {\n  const [value, setValue] = React.useState<string>('2020-01-01');\n  return (\n    <DateField\n      selectedDate={value}\n      startDate=\"2019-07-01\"\n      endDate=\"2021-06-30\"\n      nullable\n      onChange={(v) => setValue(v ?? '')}\n    />\n  );\n};\n\nexport const InteractiveSampleWithWareki = () => {\n  const [value, setValue] = React.useState<string>('2020-01-01');\n  return (\n    <DateField\n      selectedDate={value}\n      startDate=\"1850-01-01\"\n      endDate=\"2050-12-31\"\n      wareki\n      onChange={(v) => setValue(v ?? '')}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/formBlock/DateField.tsx",
    "content": "import * as React from 'react';\nimport {\n  format,\n  getYear,\n  getMonth,\n  getDate,\n  getDaysInMonth,\n  isAfter,\n  endOfMonth,\n  parse,\n} from 'date-fns';\nimport warekiFormat from 'wareki';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport SelectBox from '../../lv1/forms/SelectBox';\nimport useUniqueId from '../../hooks/useUniqueId';\n\ntype DateType = 'year' | 'month' | 'day';\ntype Props = {\n  /**\n   * 選択中の日付を指定します。 `YYYY-MM-DD` 形式の日付を渡してください。\n   */\n  selectedDate: string | null;\n  /**\n   * 選択できる日付の範囲の開始地点を指定します。`YYYY-MM-DD` 形式の日付を渡してください。\n   */\n  startDate: string;\n  /**\n   * 選択できる日付の範囲の終了地点を指定します。 `YYYY-MM-DD` 形式の日付を渡してください。\n   */\n  endDate: string;\n  /**\n   * 表示サイズを小さくします\n   */\n  small?: boolean;\n  disabled?: boolean;\n  error?: boolean;\n  required?: boolean;\n  /**\n   * `autoComplete` 属性の値を指定します。生年月日フィールドの場合は `bday` を指定してください。\n   */\n  autoComplete?: 'off' | 'bday';\n  /**\n   * `true` にすると、日付を未選択状態にできるようになります\n   */\n  nullable?: boolean;\n  /**\n   * `true` にすると、「年」のセレクトボックスが和暦併記になります\n   */\n  wareki?: boolean;\n  onChange?: (date: string | null) => void;\n  onInput?: (date: string | null) => void;\n  onFocus?: (date: string | null) => void;\n  onBlur?: (date: string | null) => void;\n  onKeyDown?: (date: string | null) => void;\n} & MarginClassProps &\n  CommonProps;\n\n// year, month, dayいずれかを更新した新しい日付を year, month, day で返す\nconst adjustDateParams = (\n  type: DateType,\n  value: number | null,\n  current: { [dateType in DateType]: number | null },\n  startDate: string,\n  endDate: string\n): { year: number | null; month: number | null; day: number | null } => {\n  let { year, month, day } = current;\n  switch (type) {\n    case 'year':\n      year = value;\n      break;\n    case 'month':\n      month = value;\n      break;\n    case 'day':\n      day = value;\n      break;\n  }\n\n  // いずれかが設定されていない場合は日付の調整を行わずそのまま返却する\n  if (year === null || month === null || day === null) {\n    return { year, month, day };\n  }\n\n  let date = new Date(year, month, day);\n  // 月の日数が変わる時、範囲外ならその月の末日にする\n  // ex: 2019-03-31 -> 2月に変更 -> 2019-02-28\n  const monthEndDate = endOfMonth(format(new Date(year, month), 'YYYY-MM'));\n  if (isAfter(date, monthEndDate)) {\n    date = new Date(year, month, getDate(monthEndDate));\n  }\n  // range を超えた場合は超えないように収める\n  const minDate = parse(startDate);\n  if (date < minDate) {\n    date = minDate;\n  }\n  const maxDate = parse(endDate);\n  if (date > maxDate) {\n    date = maxDate;\n  }\n  return { year: getYear(date), month: getMonth(date), day: getDate(date) };\n};\n\nconst createOptions = (\n  type: DateType,\n  values: Array<number>,\n  nullable?: boolean,\n  wareki?: boolean\n): Array<{ name: string; value: string }> => {\n  const getYearName = (year: number) => {\n    if (!wareki) {\n      return `${year}`;\n    }\n\n    const warekiOnStart = warekiFormat(new Date(year, 0, 1).getTime());\n    const warekiOnEnd = warekiFormat(new Date(year, 11, 31).getTime());\n\n    // 明治以前の場合、年号を表示しない\n    if (Number(warekiOnEnd) === year) {\n      return `${year}`;\n    }\n\n    // 明治元年の場合\n    if (Number(warekiOnStart) === year) {\n      return `${year} (${warekiOnEnd})`;\n    }\n\n    // 1989年(昭和64・平成元)のような重なる和暦年の場合、両方とも表示\n    const warekiYear =\n      warekiOnStart === warekiOnEnd\n        ? warekiOnStart\n        : `${warekiOnStart} / ${warekiOnEnd}`;\n\n    return `${year} (${warekiYear})`;\n  };\n  const getName = (value: number) => {\n    switch (type) {\n      case 'year':\n        return getYearName(value);\n      case 'month':\n        return `${value + 1}`;\n      case 'day':\n        return `${value}`;\n    }\n  };\n  const options = values.map((value) => {\n    return {\n      name: getName(value),\n      value: `${value}`,\n    };\n  });\n  const emptyOptions = nullable ? [{ name: '', value: '' }] : [];\n  return [...emptyOptions, ...options];\n};\n\nconst getYears = (startDate: string, endDate: string) => {\n  const startYear = getYear(startDate);\n  const endYear = getYear(endDate);\n  const size = endYear - startYear + 1;\n  return [...Array(size)].map((_, i) => startYear + i);\n};\n\nconst getMonths = (\n  startDate: string,\n  endDate: string,\n  { year }: { [dateType in DateType]: number | null }\n) => {\n  if (year === null) {\n    return [];\n  }\n  const startMonth = year === getYear(startDate) ? getMonth(startDate) : 0;\n  const endMonth = year === getYear(endDate) ? getMonth(endDate) : 11;\n  const size = endMonth - startMonth + 1;\n  return [...Array(size)].map((_, i) => startMonth + i);\n};\n\nconst getDays = (\n  startDate: string,\n  endDate: string,\n  { year, month }: { [dateType in DateType]: number | null }\n) => {\n  if (year === null || month === null) {\n    return [];\n  }\n  const startDay =\n    year === getYear(startDate) && month === getMonth(startDate)\n      ? getDate(startDate)\n      : 1;\n  const endDay =\n    year === getYear(endDate) && month === getMonth(endDate)\n      ? getDate(endDate)\n      : getDaysInMonth(new Date(year, month));\n  const size = endDay - startDay + 1;\n  return [...Array(size)].map((_, i) => startDay + i);\n};\n\n/**\n *\n * セレクトボックスで年月日を選択するフォーム用のフィールドです。\n *\n * - `DateField` は生年月日など、年単位で離れた日付を入力する場合に使用してください\n *   - 近い日付を入力することが多い場合には `DateInput` を使用してください。\n *     `DateInput` はカレンダーを見ながら入力でき、曜日をヒントにすることができる一方、月単位でカレンダーを移動するため年単位で離れた日付の入力には向きません。\n * - `wareki` オプションを使用すると、「年」のセレクトボックスで和暦を併記することができます\n *   - 和暦で認識しているユーザーが多いと思われる、生年月日のフィールド等にはこちらを使用してください\n *\n */\nconst DateField: React.FC<Props> = (props: Props) => {\n  const {\n    selectedDate,\n    startDate,\n    endDate,\n    small,\n    disabled,\n    error,\n    required,\n    autoComplete,\n    nullable,\n    wareki,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const [selectedYear, setSelectedYear] = React.useState(\n    selectedDate ? getYear(selectedDate) : null\n  );\n  const [selectedMonth, setSelectedMonth] = React.useState(\n    selectedDate ? getMonth(selectedDate) : null\n  );\n  const [selectedDay, setSelectedDay] = React.useState(\n    selectedDate ? getDate(selectedDate) : null\n  );\n\n  React.useEffect(() => {\n    setSelectedYear(selectedDate ? getYear(selectedDate) : null);\n    setSelectedMonth(selectedDate ? getMonth(selectedDate) : null);\n    setSelectedDay(selectedDate ? getDate(selectedDate) : null);\n  }, [selectedDate]);\n\n  const selected = {\n    year: selectedYear,\n    month: selectedMonth,\n    day: selectedDay,\n  };\n\n  const years = getYears(startDate, endDate);\n  const months = getMonths(startDate, endDate, selected);\n  const days = getDays(startDate, endDate, selected);\n\n  const unitClassName = vbClassNames('vb-dateField__unit', {\n    modifier: { small },\n  });\n  const id = useUniqueId('vb-dateField');\n  const yearId = `${id}__year`;\n  const monthId = `${id}__month`;\n  const dayId = `${id}__day`;\n\n  const yearWidth = wareki ? 'medium' : 'small';\n\n  const createHandler =\n    (\n      handler: ((date: string | null) => void) | null | undefined,\n      type: DateType,\n      selected: { [dateType in DateType]: number | null }\n    ) =>\n    ({ target }: React.FormEvent | React.KeyboardEvent): void => {\n      if (target instanceof HTMLSelectElement) {\n        const { value } = target;\n        const { year, month, day } = adjustDateParams(\n          type,\n          value ? parseInt(value) : null,\n          selected,\n          startDate,\n          endDate\n        );\n        setSelectedYear(year);\n        setSelectedMonth(month);\n        setSelectedDay(day);\n        // 全て選択されている場合は日付を、未選択がある場合は null を返却\n        const date =\n          year === null || month === null || day === null\n            ? null\n            : format(new Date(year, month, day), 'YYYY-MM-DD');\n        handler && handler(date);\n      }\n    };\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-dateField',\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <label htmlFor={yearId}>\n        <SelectBox\n          id={yearId}\n          options={createOptions('year', years, nullable, wareki)}\n          small={small}\n          disabled={disabled}\n          error={error}\n          required={required}\n          value={String(selectedYear)}\n          width={yearWidth}\n          autoComplete={autoComplete === 'bday' ? 'bday-year' : autoComplete}\n          onChange={createHandler(onChange, 'year', selected)}\n          onInput={createHandler(onInput, 'year', selected)}\n          onFocus={createHandler(onFocus, 'year', selected)}\n          onBlur={createHandler(onBlur, 'year', selected)}\n          onKeyDown={createHandler(onKeyDown, 'year', selected)}\n        />\n        <span className={unitClassName}>年</span>\n      </label>\n      <label htmlFor={monthId}>\n        <SelectBox\n          id={monthId}\n          options={createOptions('month', months, nullable, wareki)}\n          small={small}\n          disabled={disabled}\n          error={error}\n          required={required}\n          value={String(selectedMonth)}\n          width=\"xSmall\"\n          autoComplete={autoComplete === 'bday' ? 'bday-month' : autoComplete}\n          onChange={createHandler(onChange, 'month', selected)}\n          onInput={createHandler(onInput, 'month', selected)}\n          onFocus={createHandler(onFocus, 'month', selected)}\n          onBlur={createHandler(onBlur, 'month', selected)}\n          onKeyDown={createHandler(onKeyDown, 'month', selected)}\n        />\n        <span className={unitClassName}>月</span>\n      </label>\n      <label htmlFor={dayId}>\n        <SelectBox\n          id={dayId}\n          options={createOptions('day', days, nullable, wareki)}\n          small={small}\n          disabled={disabled}\n          error={error}\n          required={required}\n          value={String(selectedDay)}\n          width=\"xSmall\"\n          autoComplete={autoComplete === 'bday' ? 'bday-day' : autoComplete}\n          onChange={createHandler(onChange, 'day', selected)}\n          onInput={createHandler(onInput, 'day', selected)}\n          onFocus={createHandler(onFocus, 'day', selected)}\n          onBlur={createHandler(onBlur, 'day', selected)}\n          onKeyDown={createHandler(onKeyDown, 'day', selected)}\n        />\n        <span className={unitClassName}>日</span>\n      </label>\n    </div>\n  );\n};\nexport default DateField;\n"
  },
  {
    "path": "src/lv2/formBlock/FormActions.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Button from '../../lv1/buttons/Button';\nimport FormActions from './FormActions';\nimport Container from '../../lv1/bases/Container';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport ContentsBase from '../../lv1/bases/ContentsBase';\nimport HeadlineArea from '../headlineArea/HeadlineArea';\n\nexport default {\n  component: FormActions,\n};\n\nexport const FormActionsComponent = () => (\n  <FormActions\n    responsive={boolean('Responsive', true, 'FormActions')}\n    position={select(\n      'Position',\n      { static: 'static', fixed: 'fixed', sticky: 'sticky', undefined },\n      undefined,\n      'FormActions'\n    )}\n    align={\n      select(\n        'Align',\n        {\n          left: 'left',\n          center: 'center',\n          undefined: '',\n        },\n        '',\n        'FormActions'\n      ) || undefined\n    }\n    width={\n      select(\n        'Width',\n        {\n          normal: 'normal',\n          narrow: 'narrow',\n          wide: 'wide',\n          undefined: '',\n        },\n        '',\n        'FormActions'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    <Button primary>保存</Button>\n    <Button>キャンセル</Button>\n  </FormActions>\n);\n\nexport const FixedFormActionsWithContainer = () => (\n  <Container>\n    <ContentsBase>\n      <HeadlineArea pageTitle=\"Fixed FormActions with Container\" />\n      <Paragraph>Fixed FormActions with Container</Paragraph>\n      <FormActions position=\"fixed\" align=\"left\">\n        <Button primary>保存</Button>\n        <Button>キャンセル</Button>\n      </FormActions>\n    </ContentsBase>\n  </Container>\n);\n\nexport const StickyFormActionsWithContainer = () => (\n  <Container>\n    <ContentsBase>\n      <HeadlineArea pageTitle=\"Sticky FormActions with Container\" />\n      <Paragraph>Sticky FormActions with Container</Paragraph>\n      {Array(100)\n        .fill(100)\n        .map((_, i) => (\n          <br key={i} />\n        ))}\n      <FormActions position=\"sticky\" align=\"left\">\n        <Button primary>保存</Button>\n        <Button>キャンセル</Button>\n      </FormActions>\n    </ContentsBase>\n  </Container>\n);\n"
  },
  {
    "path": "src/lv2/formBlock/FormActions.tsx",
    "content": "import * as React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport ButtonGroup from '../buttonGroup/ButtonGroup';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { convertRemToPixel } from '../../utilities/convertRemToPixel';\n\ntype Props = {\n  /**\n   * position を使用してください。 position 指定時は無視されます。\n   * @deprecated\n   */\n  fixed?: boolean;\n  /**\n   * 表示位置を指定します。\n   */\n  position?: 'static' | 'fixed' | 'sticky';\n  /**\n   * 指定するとブラウザ幅に応じてボタンの並び方が変わります。\n   */\n  responsive?: boolean;\n  children?: React.ReactNode;\n  /**\n   * 水平方向の配置を指定します\n   */\n  align?: 'left' | 'center';\n  /**\n   * 固定表示時にボタンを配置する範囲を指定します。position が fixed or sticky の場合にのみ利用されます。\n   */\n  width?: 'normal' | 'narrow' | 'wide';\n} & CommonProps;\n\nconst useSticky = (position: Props['position']) => {\n  const [sticked, setSticked] = React.useState(false);\n  const ref = React.useRef<HTMLDivElement>(null);\n  React.useEffect(() => {\n    const el = ref.current;\n    if (position !== 'sticky' || !el) {\n      return;\n    }\n    const handleScroll = () => {\n      const rect = el.getBoundingClientRect();\n      // 固定配置する FormActions の表示を切り替えるスクロール位置を FormActions の高さと揃えるため 1rem 減算する（PopupBase の paddingSize 分）\n      const sticked = window.innerHeight <= rect.top - convertRemToPixel(1);\n      setSticked(sticked);\n    };\n    handleScroll();\n    window.addEventListener('resize', handleScroll);\n    window.addEventListener('scroll', handleScroll);\n    return () => {\n      window.removeEventListener('resize', handleScroll);\n      window.removeEventListener('scroll', handleScroll);\n    };\n  }, [position]);\n\n  return { ref, sticked };\n};\n\nconst InnerFixedWrapper = (\n  {\n    children,\n    sticked,\n    sticky,\n  }: {\n    children: React.ReactNode;\n    sticked: boolean;\n    sticky: boolean;\n  },\n  ref?: React.Ref<HTMLElement>\n) =>\n  sticky ? (\n    <CSSTransition\n      classNames=\"vb-formActions__animation\"\n      in={sticked}\n      timeout={300}\n      mountOnEnter\n      unmountOnExit\n      nodeRef={ref}\n    >\n      {children}\n    </CSSTransition>\n  ) : (\n    <>{children}</>\n  );\nconst FixedWrapper = React.forwardRef(InnerFixedWrapper);\n\nconst FormActions: React.FC<Props> = (props: Props) => {\n  const { fixed, position: orgPosition, responsive, children, width } = props;\n\n  const position = orgPosition ? orgPosition : fixed ? 'fixed' : 'static';\n\n  const { ref: staticRef, sticked } = useSticky(position);\n  const fixedRef = React.useRef<HTMLDivElement>(null);\n\n  const hasFixedContent = position === 'fixed' || position === 'sticky';\n  const hasStaticContent = position === 'static' || position === 'sticky';\n  const hideStaticContent = position === 'sticky' && sticked;\n\n  return (\n    <>\n      {hasFixedContent && (\n        <FixedWrapper\n          ref={fixedRef}\n          sticked={sticked}\n          sticky={position === 'sticky'}\n        >\n          <div\n            {...commonProps(props, 'vb-formActions', {\n              fixed: true,\n              responsive,\n            })}\n            ref={fixedRef}\n          >\n            <PopupBase paddingSize=\"small\">\n              <div\n                className={vbClassNames('vb-formActions__inner', {\n                  modifier: {\n                    widthNarrow: width === 'narrow',\n                    widthWide: width === 'wide',\n                  },\n                })}\n              >\n                <ButtonGroup\n                  align={props.align ?? 'center'}\n                  responsive={responsive}\n                >\n                  {children}\n                </ButtonGroup>\n              </div>\n            </PopupBase>\n          </div>\n        </FixedWrapper>\n      )}\n      {hasStaticContent && (\n        <div\n          {...commonProps(props, 'vb-formActions', {\n            responsive,\n          })}\n          ref={staticRef}\n          style={hideStaticContent ? { visibility: 'hidden' } : undefined}\n        >\n          <ButtonGroup align={props.align ?? 'left'} responsive={responsive}>\n            {children}\n          </ButtonGroup>\n        </div>\n      )}\n    </>\n  );\n};\nexport default FormActions;\n"
  },
  {
    "path": "src/lv2/formBlock/NameField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport NameField from './NameField';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n});\n\nexport default {\n  component: NameField,\n};\n\nexport const NameFieldComponent = () => (\n  <NameField\n    lastName={text('LastName', '', 'NameField')}\n    firstName={text('FirstName', '', 'NameField')}\n    lastNamePlaceholder={text('LastNamePlaceholder', '', 'NameField')}\n    firstNamePlaceholder={text('FirstNamePlaceholder', '', 'NameField')}\n    small={boolean('Small', false, 'NameField')}\n    disabled={boolean('Disabled', false, 'NameField')}\n    error={boolean('Error', false, 'NameField')}\n    required={boolean('Required', false, 'NameField')}\n    autoComplete={\n      select(\n        'AutoComplete',\n        {\n          off: 'off',\n          name: 'name',\n          undefined: '',\n        },\n        '',\n        'NameField'\n      ) || undefined\n    }\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <NameField marginBottom />\n    <NameField marginBottom disabled />\n    <NameField marginBottom error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <NameField marginBottom small />\n    <NameField marginBottom small disabled />\n    <NameField marginBottom small error />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [values, setValues] = React.useState<{\n    lastName: string;\n    firstName: string;\n  }>({ lastName: '', firstName: '' });\n\n  return (\n    <NameField\n      lastName={values.lastName}\n      firstName={values.firstName}\n      onChange={(key, e) => {\n        const value = e.currentTarget.value;\n        setValues((values) => ({ ...values, [key]: value }));\n      }}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/formBlock/NameField.tsx",
    "content": "import * as React from 'react';\n\nimport TextField from '../../lv1/forms/TextField';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype NameKey = 'lastName' | 'firstName';\ntype Props = {\n  lastName?: string;\n  firstName?: string;\n  lastNamePlaceholder?: string;\n  firstNamePlaceholder?: string;\n  label?: string;\n  /**\n   * There are no way to use labelledby.\n   * aria-label and aria-labelledby cannot use at the same time,\n   *  we cannot resolve the problem in a similar way as aria-label\n   * @deprecated\n   */\n  labelledby?: string;\n  disabled?: boolean;\n  required?: boolean;\n  error?: boolean;\n  small?: boolean;\n  autoComplete?: 'off' | 'name';\n  onChange?: (key: NameKey, e: React.ChangeEvent<HTMLInputElement>) => void;\n  onInput?: (key: NameKey, e: React.FormEvent<HTMLInputElement>) => void;\n  onFocus?: (key: NameKey, e: React.FormEvent<HTMLInputElement>) => void;\n  onBlur?: (key: NameKey, e: React.FormEvent<HTMLInputElement>) => void;\n  onKeyDown?: (key: NameKey, e: React.KeyboardEvent<HTMLInputElement>) => void;\n} & MarginClassProps &\n  CommonProps;\n\nconst NameField: React.FC<Props> = (props: Props) => {\n  const {\n    lastName,\n    firstName,\n    lastNamePlaceholder,\n    firstNamePlaceholder,\n    label,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    labelledby,\n    disabled,\n    required,\n    error,\n    small,\n    autoComplete,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-nameField',\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <TextField\n        name=\"lastNameField\"\n        value={lastName}\n        label={`姓${label ? `（${label}）` : ''}`}\n        placeholder={\n          lastNamePlaceholder === undefined ? '姓' : lastNamePlaceholder\n        }\n        disabled={disabled}\n        required={required}\n        error={error}\n        small={small}\n        autoComplete={autoComplete === 'name' ? 'family-name' : autoComplete}\n        onChange={(e: React.ChangeEvent<HTMLInputElement>): void => {\n          onChange && onChange('lastName', e);\n        }}\n        onInput={(e: React.FormEvent<HTMLInputElement>): void => {\n          onInput && onInput('lastName', e);\n        }}\n        onFocus={(e: React.FormEvent<HTMLInputElement>): void => {\n          onFocus && onFocus('lastName', e);\n        }}\n        onBlur={(e: React.FormEvent<HTMLInputElement>): void => {\n          onBlur && onBlur('lastName', e);\n        }}\n        onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>): void => {\n          onKeyDown && onKeyDown('lastName', e);\n        }}\n        marginRight\n      />\n      <TextField\n        name=\"firstNameField\"\n        value={firstName}\n        label={`名${label ? `（${label}）` : ''}`}\n        placeholder={\n          firstNamePlaceholder === undefined ? '名' : firstNamePlaceholder\n        }\n        disabled={disabled}\n        required={required}\n        small={small}\n        error={error}\n        autoComplete={autoComplete === 'name' ? 'given-name' : autoComplete}\n        onChange={(e: React.ChangeEvent<HTMLInputElement>): void => {\n          onChange && onChange('firstName', e);\n        }}\n        onInput={(e: React.FormEvent<HTMLInputElement>): void => {\n          onInput && onInput('firstName', e);\n        }}\n        onFocus={(e: React.FormEvent<HTMLInputElement>): void => {\n          onFocus && onFocus('firstName', e);\n        }}\n        onBlur={(e: React.FormEvent<HTMLInputElement>): void => {\n          onBlur && onBlur('firstName', e);\n        }}\n        onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>): void => {\n          onKeyDown && onKeyDown('firstName', e);\n        }}\n      />\n    </div>\n  );\n};\nexport default NameField;\n"
  },
  {
    "path": "src/lv2/formBlock/PhoneNumberField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport PhoneNumberField from './PhoneNumberField';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n});\n\nexport default {\n  component: PhoneNumberField,\n};\n\nexport const PhoneNumberFieldComponent = () => (\n  <PhoneNumberField\n    phoneNumberA={text('PhoneNumberA', '', 'PhoneNumberField')}\n    phoneNumberB={text('PhoneNumberB', '', 'PhoneNumberField')}\n    phoneNumberC={text('PhoneNumberC', '', 'PhoneNumberField')}\n    placeholderA={text('PlaceholderA', '', 'PhoneNumberField')}\n    placeholderB={text('PlaceholderB', '', 'PhoneNumberField')}\n    placeholderC={text('PlaceholderC', '', 'PhoneNumberField')}\n    small={boolean('Small', false, 'PhoneNumberField')}\n    disabled={boolean('Disabled', false, 'PhoneNumberField')}\n    error={boolean('Error', false, 'PhoneNumberField')}\n    autoComplete={\n      select(\n        'AutoComplete',\n        {\n          off: 'off',\n          tel: 'tel',\n          undefined: '',\n        },\n        '',\n        'PhoneNumberField'\n      ) || undefined\n    }\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <PhoneNumberField marginBottom />\n    <PhoneNumberField marginBottom disabled />\n    <PhoneNumberField marginBottom error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <PhoneNumberField marginBottom small />\n    <PhoneNumberField marginBottom small disabled />\n    <PhoneNumberField marginBottom small error />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [values, setValues] = React.useState<{\n    a: string;\n    b: string;\n    c: string;\n  }>({ a: '', b: '', c: '' });\n\n  return (\n    <PhoneNumberField\n      phoneNumberA={values.a}\n      phoneNumberB={values.b}\n      phoneNumberC={values.c}\n      onChange={(key, e) => {\n        const value = e.currentTarget.value;\n        setValues((values) => ({ ...values, [key]: value }));\n      }}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/formBlock/PhoneNumberField.tsx",
    "content": "import * as React from 'react';\nimport TextField from '../../lv1/forms/TextField';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\nexport type PhoneNumberKey = 'a' | 'b' | 'c';\ntype Props = {\n  phoneNumberA?: string;\n  phoneNumberB?: string;\n  phoneNumberC?: string;\n  placeholderA?: string;\n  placeholderB?: string;\n  placeholderC?: string;\n  disabled?: boolean;\n  error?: boolean;\n  small?: boolean;\n  autoComplete?: 'off' | 'tel';\n  onChange?: (\n    key: PhoneNumberKey,\n    e: React.ChangeEvent<HTMLInputElement>\n  ) => void;\n  onInput?: (key: PhoneNumberKey, e: React.FormEvent<HTMLInputElement>) => void;\n  onFocus?: (key: PhoneNumberKey, e: React.FormEvent<HTMLInputElement>) => void;\n  onBlur?: (key: PhoneNumberKey, e: React.FormEvent<HTMLInputElement>) => void;\n  onKeyDown?: (\n    key: PhoneNumberKey,\n    e: React.KeyboardEvent<HTMLInputElement>\n  ) => void;\n} & MarginClassProps &\n  CommonProps;\n\nconst MAX_LENGTH_A = 5;\nconst MAX_LENGTH_B = 4;\nconst MAX_LENGTH_C = 4;\n\nconst PhoneNumberField: React.FC<Props> = (props: Props) => {\n  const {\n    phoneNumberA,\n    phoneNumberB,\n    phoneNumberC,\n    placeholderA,\n    placeholderB,\n    placeholderC,\n    disabled,\n    error,\n    small,\n    autoComplete,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const hyphenClassName = vbClassNames('vb-phoneNumberField__hyphen', {\n    modifier: { disabled, error, small },\n  });\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-phoneNumberField',\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginTop,\n          marginSize,\n        }\n      )}\n    >\n      <TextField\n        type=\"tel\"\n        name=\"areaCode\"\n        label=\"電話番号の市外局番\"\n        value={phoneNumberA}\n        placeholder={placeholderA}\n        maxLength={MAX_LENGTH_A}\n        width=\"xSmall\"\n        alignCenter\n        disabled={disabled}\n        error={error}\n        small={small}\n        autoComplete={autoComplete === 'tel' ? 'tel-area-code' : autoComplete}\n        onChange={(e: React.ChangeEvent<HTMLInputElement>): void => {\n          onChange && onChange('a', e);\n        }}\n        onInput={(e: React.FormEvent<HTMLInputElement>): void => {\n          onInput && onInput('a', e);\n        }}\n        onFocus={(e: React.FormEvent<HTMLInputElement>): void => {\n          onFocus && onFocus('a', e);\n        }}\n        onBlur={(e: React.FormEvent<HTMLInputElement>): void => {\n          onBlur && onBlur('a', e);\n        }}\n        onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>): void => {\n          onKeyDown && onKeyDown('a', e);\n        }}\n      />\n      <span className={hyphenClassName}>-</span>\n      <TextField\n        type=\"tel\"\n        name=\"prefix\"\n        label=\"電話番号の市内局番\"\n        value={phoneNumberB}\n        placeholder={placeholderB}\n        maxLength={MAX_LENGTH_B}\n        width=\"xSmall\"\n        alignCenter\n        disabled={disabled}\n        error={error}\n        small={small}\n        autoComplete={\n          autoComplete === 'tel' ? 'tel-local-prefix' : autoComplete\n        }\n        onChange={(e: React.ChangeEvent<HTMLInputElement>): void => {\n          onChange && onChange('b', e);\n        }}\n        onInput={(e: React.FormEvent<HTMLInputElement>): void => {\n          onInput && onInput('b', e);\n        }}\n        onFocus={(e: React.FormEvent<HTMLInputElement>): void => {\n          onFocus && onFocus('b', e);\n        }}\n        onBlur={(e: React.FormEvent<HTMLInputElement>): void => {\n          onBlur && onBlur('b', e);\n        }}\n        onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>): void => {\n          onKeyDown && onKeyDown('b', e);\n        }}\n      />\n      <span className={hyphenClassName}>-</span>\n      <TextField\n        type=\"tel\"\n        name=\"lineNumber\"\n        label=\"電話番号の加入者番号\"\n        value={phoneNumberC}\n        placeholder={placeholderC}\n        maxLength={MAX_LENGTH_C}\n        width=\"xSmall\"\n        alignCenter\n        disabled={disabled}\n        error={error}\n        small={small}\n        autoComplete={\n          autoComplete === 'tel' ? 'tel-local-suffix' : autoComplete\n        }\n        onChange={(e: React.ChangeEvent<HTMLInputElement>): void => {\n          onChange && onChange('c', e);\n        }}\n        onInput={(e: React.FormEvent<HTMLInputElement>): void => {\n          onInput && onInput('c', e);\n        }}\n        onFocus={(e: React.FormEvent<HTMLInputElement>): void => {\n          onFocus && onFocus('c', e);\n        }}\n        onBlur={(e: React.FormEvent<HTMLInputElement>): void => {\n          onBlur && onBlur('c', e);\n        }}\n        onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>): void => {\n          onKeyDown && onKeyDown('c', e);\n        }}\n      />\n    </div>\n  );\n};\nexport default PhoneNumberField;\n"
  },
  {
    "path": "src/lv2/formControl/FormControl.stories.tsx",
    "content": "import { boolean, text } from '@storybook/addon-knobs';\nimport * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport MarginBase from '../../lv1/bases/MarginBase';\nimport CheckBox from '../../lv1/forms/CheckBox';\nimport TextField from '../../lv1/forms/TextField';\nimport SectionTitle from '../../lv1/typography/SectionTitle';\nimport FormControl from './FormControl';\n\nexport default {\n  component: FormControl,\n};\n\nexport const FormControlComponent = () => {\n  return (\n    <FormControl\n      id={text('Id', 'formControl1', 'FormControl')}\n      label={text('Label', 'ラベル', 'FormControl')}\n      fieldId=\"textField-1\"\n      required={boolean('Required', true, 'FormControl')}\n      help={text('Help', '説明文を書くとヘルプアイコンがでます', 'FormControl')}\n      {...commonKnobs()}\n    >\n      <TextField\n        placeholder=\"テキストフィールド\"\n        name=\"text\"\n        id=\"textField-1\"\n      />\n    </FormControl>\n  );\n};\n\nexport const LabelWithTypography = () => (\n  <FormControl\n    label={\n      <SectionTitle headlineLevel={-1}>\n        以下の中で該当するものを選択してください。\n      </SectionTitle>\n    }\n    required\n  >\n    <MarginBase mb={0.5} mt={0.5}>\n      <CheckBox>チェックボックス1</CheckBox>\n    </MarginBase>\n    <MarginBase mb={0.5} mt={0.5}>\n      <CheckBox>チェックボックス2</CheckBox>\n    </MarginBase>\n    <MarginBase mb={0.5} mt={0.5}>\n      <CheckBox>チェックボックス3</CheckBox>\n    </MarginBase>\n    <MarginBase mb={0.5} mt={0.5}>\n      <CheckBox>チェックボックス4</CheckBox>\n    </MarginBase>\n    <MarginBase mb={0.5} mt={0.5}>\n      <CheckBox>チェックボックス5</CheckBox>\n    </MarginBase>\n  </FormControl>\n);\n"
  },
  {
    "path": "src/lv2/formControl/FormControl.tsx",
    "content": "import * as React from 'react';\nimport FormControlLabel from '../../lv1/forms/FormControlLabel';\nimport MessageIcon from '../../lv2/messageIcon/MessageIcon';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children: React.ReactNode;\n  label?: React.ReactNode;\n  required?: boolean;\n  fieldId?: string;\n  id?: string;\n  help?: React.ReactNode;\n} & CommonProps &\n  MarginClassProps;\n\n/**\n * フォームの入力欄1つずつを表現するコンポーネントです。\n *\n * * `FormControlGroup` 内に複数個配置することで、水平方向にフィールドの並んだフォームを作ることができます。\n * * `help` propによって入力方法の案内などをヘルプアイコンとして表示することができます\n *   * 案内の内容が複雑であったり、理解・記憶・学習が難しいものについてはヘルプアイコンにせず、常時表示しておくことを検討してください\n *\n * ## accessibility\n * * 中に入るフィールド (`TextField` 等) が1つの場合は、フィールドの `id` 属性を必ず設定し、 `FormControl` の `fieldId` propを必ず同じにしてください。\n *   * [フォーム・コントロールのラベル付け](https://a11y-guidelines.freee.co.jp/explanations/form-labeling.html) のために必要です\n *   * `CheckBox` や `RadioButton` コンポーネントは、内部 (`children` propの部分）に `<label>` 要素を持つため、`fieldId` の指定は必要ありません\n * * 複数のラジオボタンやテキストフィールドが入る場合には、`fieldId` を設定しないでください（`<fieldset>`と`<legend>` による表現になります）。\n *   この場合、個別のフィールドには別の方法でラベル付けを行ってください。\n *   * `CheckBox` や `RadioButton` コンポーネントは、内部 (`children` propの部分）に `<label>` 要素を持つため、何もしなくてOKです\n *   * テキストフィールドやセレクトボックス、Vibesのコンポーネントを使わずに作るラジオボタンやチェックボックス は、`<label>` 要素と並べて配置してください。\n *   * どうしても`<label>`要素が使用できない場合は、 `aria-label` 属性や `aria-labelledby` 属性を使用してください。 `TextField` `SelectBox` `TextArea` の各コンポーネントは、 `label` と `labelledby` propが `aria-label` 属性と `aria-labelledby` 属性に対応します\n */\nconst FormControl: React.FC<Props> = (props: Props) => {\n  const {\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    fieldId,\n    id,\n    label,\n    required,\n    help,\n    children,\n    marginSize,\n  } = props;\n  const labelId = useUniqueId('vb-formControl', id && `${id}__label`);\n\n  const baseClass = 'vb-formControl';\n\n  const labelInner = label ? (\n    <FormControlLabel id={labelId} htmlFor={fieldId} required={required}>\n      {label}\n    </FormControlLabel>\n  ) : null;\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        baseClass,\n        {},\n        { marginTop, marginLeft, marginRight, marginBottom, marginSize }\n      )}\n    >\n      <fieldset className=\"vb-formControl__fieldset\" id={id}>\n        <legend className=\"vb-formControl__legend\">\n          <div className=\"vb-formControl__labelArea\">\n            {labelInner}\n            {help ? (\n              <MessageIcon label=\"ヘルプ\" ml={0.25} small>\n                {help}\n              </MessageIcon>\n            ) : null}\n          </div>\n        </legend>\n        <div className=\"vb-formControl__formArea\">{children}</div>\n      </fieldset>\n    </div>\n  );\n};\n\nexport default FormControl;\n"
  },
  {
    "path": "src/lv2/formControl/FormControlGroup.stories.tsx",
    "content": "import * as React from 'react';\n\nimport FormControl from './FormControl';\nimport FormControlGroup from './FormControlGroup';\nimport TextField from '../../lv1/forms/TextField';\nimport RadioButton from '../../lv1/forms/RadioButton';\nimport CheckBox from '../../lv1/forms/CheckBox';\nimport SelectBox from '../../lv1/forms/SelectBox';\nimport TextArea from '../../lv1/forms/TextArea';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: FormControlGroup,\n};\nexport const FormControlGroupComponent = () => (\n  <FormControlGroup {...commonKnobs()}>\n    <FormControl\n      label=\"ラベル\"\n      fieldId=\"textField-1\"\n      required\n      help=\"ヘルプメッセージ\"\n      marginRight\n      marginBottom\n    >\n      <TextField\n        placeholder=\"テキストフィールド\"\n        name=\"text\"\n        id=\"textField-1\"\n      />\n    </FormControl>\n    <FormControl label=\"ラベル\" fieldId=\"selectBox-1\" marginRight marginBottom>\n      <SelectBox\n        id=\"selectBox-1\"\n        name=\"selectbox\"\n        options={[\n          { name: '2016', value: '2016' },\n          { name: '2017', value: '2017' },\n          { name: '2018', value: '2018' },\n          { name: '2019', value: '2019' },\n          { name: '2020', value: '2020' },\n        ]}\n        marginRight\n      />\n    </FormControl>\n  </FormControlGroup>\n);\n\nexport const Examples = () => (\n  <>\n    <FormControlGroup>\n      <FormControl\n        label=\"ラベル\"\n        fieldId=\"textField-1\"\n        required\n        help=\"ヘルプメッセージ\"\n        marginRight\n        marginBottom\n      >\n        <TextField\n          placeholder=\"テキストフィールド\"\n          name=\"text\"\n          id=\"textField-1\"\n        />\n      </FormControl>\n\n      <FormControl\n        label=\"ラベル\"\n        fieldId=\"textField-2\"\n        marginRight\n        marginBottom\n      >\n        <TextField\n          placeholder=\"テキストフィールド\"\n          id=\"textField-2\"\n          name=\"text\"\n          small\n        />\n      </FormControl>\n      <FormControl label=\"ラベル\" marginRight marginBottom>\n        <RadioButton name=\"radio\" value=\"ラジオボタン\" marginRight>\n          ラジオボタン\n        </RadioButton>\n        <RadioButton name=\"radio\" value=\"checked\" checked>\n          checked\n        </RadioButton>\n      </FormControl>\n\n      <FormControl label=\"ラベル\" marginRight marginBottom>\n        <CheckBox name=\"checkbox\" value=\"チェックボックス\">\n          チェックボックス\n        </CheckBox>\n      </FormControl>\n      <FormControl label=\"ラベル\" required marginRight marginBottom>\n        <SelectBox\n          name=\"year\"\n          options={[\n            { name: '2016', value: '2016' },\n            { name: '2017', value: '2017' },\n            { name: '2018', value: '2018' },\n            { name: '2019', value: '2019' },\n            { name: '2020', value: '2020' },\n          ]}\n          marginRight\n        />\n        <SelectBox\n          name=\"month\"\n          options={[\n            { name: '1', value: '1' },\n            { name: '2', value: '2' },\n            { name: '3', value: '3' },\n          ]}\n          marginRight\n        />\n        <SelectBox\n          name=\"date\"\n          options={[\n            { name: '1', value: '1' },\n            { name: '2', value: '2' },\n            { name: '3', value: '3' },\n          ]}\n        />\n      </FormControl>\n      <FormControl label=\"ラベル\" marginRight marginBottom fieldId=\"textArea-1\">\n        <TextArea\n          name=\"textarea\"\n          placeholder=\"テキストエリア\"\n          id=\"textArea-1\"\n        />\n      </FormControl>\n    </FormControlGroup>\n    <FormControlGroup>\n      <FormControl label=\"住所\">\n        <div>\n          <TextField\n            label=\"市区町村・町名・番地\"\n            placeholder=\"市区町村・町名・番地\"\n            width=\"large\"\n            marginBottom\n          />\n        </div>\n        <div>\n          <TextField\n            label=\"建物名・号室\"\n            placeholder=\"建物名・号室\"\n            width=\"large\"\n            marginBottom\n          />\n        </div>\n      </FormControl>\n    </FormControlGroup>\n    <FormControlGroup>\n      <FormControl label=\"長いフォーム\">\n        <TextField label=\"長いフォーム\" width=\"full\" />\n      </FormControl>\n    </FormControlGroup>\n  </>\n);\n"
  },
  {
    "path": "src/lv2/formControl/FormControlGroup.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  children: React.ReactNode | React.ReactNodeArray;\n} & CommonProps;\n\nconst FormControlGroup: React.FC<Props> = (props: Props) => {\n  const { children } = props;\n\n  return (\n    <div\n      {...commonProps(props, 'vb-formControlGroup', {\n        block: React.Children.count(children) <= 1,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\nexport default FormControlGroup;\n"
  },
  {
    "path": "src/lv2/formFields/AmountRangeField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { text, boolean, number } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport AmountRangeField from './AmountRangeField';\n\nexport default {\n  component: AmountRangeField,\n};\n\nconst handlers = actions({\n  onChange: 'onChange',\n  onInput: 'onInput',\n  onFocus: 'onFocus',\n  onBlur: 'onBlur',\n  onKeyDown: 'onKeyDown',\n});\n\nexport const AmountRangeFieldComponent = () => (\n  <AmountRangeField\n    minAmount={number('MinAmount', 0, undefined, 'AmountRangeField')}\n    minAmountPlaceholder={text('MinAmountPlaceholder', '', 'AmountRangeField')}\n    maxAmount={number('MaxAmount', 0, undefined, 'AmountRangeField')}\n    maxAmountPlaceholder={text('MaxAmountPlaceholder', '', 'AmountRangeField')}\n    required={boolean('Required', false)}\n    disabled={boolean('Disabled', false)}\n    error={boolean('Error', false)}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nconst InteractiveAmountRangeField = () => {\n  const [[minAmount, maxAmount], setRange] = React.useState<\n    [number | null, number | null]\n  >([null, null]);\n  return (\n    <AmountRangeField\n      minAmount={minAmount}\n      maxAmount={maxAmount}\n      onChange={(range) => setRange(range)}\n    />\n  );\n};\n\nexport const InteractiveSample = () => <InteractiveAmountRangeField />;\n"
  },
  {
    "path": "src/lv2/formFields/AmountRangeField.tsx",
    "content": "import * as React from 'react';\n\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport DigitInput from '../formFields/DigitsInput';\n\ntype Props = {\n  /**\n   * input required を指定します\n   */\n  required?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * 最小値を指定します\n   */\n  minAmount?: number | null;\n  /**\n   * 最小値の id を指定します\n   */\n  minAmountId?: string;\n  /**\n   * 最小値の name を指定します\n   */\n  minAmountName?: string;\n  /**\n   * 最小値の aria-label を指定します\n   */\n  minAmountLabel?: string;\n  /**\n   * 最小値の aria-labelledby を指定します\n   */\n  minAmountLabelledby?: string;\n  /**\n   * 最小値の input placeholder を指定します\n   */\n  minAmountPlaceholder?: string;\n  /**\n   * 最大値を指定します\n   */\n  maxAmount?: number | null;\n  /**\n   * 最大値の id を指定します\n   */\n  maxAmountId?: string;\n  /**\n   * 最大値の name を指定します\n   */\n  maxAmountName?: string;\n  /**\n   * 最大値の aria-label を指定します\n   */\n  maxAmountLabel?: string;\n  /**\n   * 最大値の aria-labelledby を指定します\n   */\n  maxAmountLabelledby?: string;\n  /**\n   * 最大値の input placeholder を指定します\n   */\n  maxAmountPlaceholder?: string;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * null を許可するか指定します\n   */\n  nullable?: boolean;\n  onChange?: (range: [number | null, number | null]) => void;\n  onFocus?: React.FormEventHandler;\n  onBlur?: React.FormEventHandler;\n  onInput?: React.FormEventHandler;\n  onKeyDown?: React.KeyboardEventHandler;\n} & CommonProps;\n\nconst AmountRangeField = ({\n  required,\n  disabled,\n  error,\n  minAmount: originalMinAmount,\n  minAmountId,\n  minAmountName,\n  minAmountLabel,\n  minAmountLabelledby,\n  minAmountPlaceholder,\n  maxAmount: originalMaxAmount,\n  maxAmountId,\n  maxAmountName,\n  maxAmountLabel,\n  maxAmountLabelledby,\n  maxAmountPlaceholder,\n  small,\n  nullable,\n  onChange,\n  onFocus,\n  onBlur,\n  onInput,\n  onKeyDown,\n  ...rest\n}: Props) => {\n  const [minAmount, setMinAmount] = React.useState<number | null>(\n    originalMinAmount || null\n  );\n  const [maxAmount, setMaxAmount] = React.useState<number | null>(\n    originalMaxAmount || null\n  );\n\n  React.useEffect(() => {\n    setMinAmount(originalMinAmount || null);\n  }, [originalMinAmount]);\n\n  React.useEffect(() => {\n    setMaxAmount(originalMaxAmount || null);\n  }, [originalMaxAmount]);\n\n  const handleBlurMinAmount = React.useCallback(\n    (e: React.FormEvent): void => {\n      if (onBlur) {\n        onBlur(e);\n      }\n\n      if (onChange) {\n        if (minAmount && maxAmount && minAmount > maxAmount) {\n          // 最小値と最大値が逆行する場合は最大値を最小値に合わせる\n          onChange([minAmount, minAmount]);\n        } else {\n          onChange([minAmount, maxAmount]);\n        }\n      }\n    },\n    [maxAmount, minAmount, onBlur, onChange]\n  );\n\n  const handleBlurMaxAmount = React.useCallback(\n    (e: React.FormEvent): void => {\n      if (onBlur) {\n        onBlur(e);\n      }\n\n      if (onChange) {\n        if (minAmount && maxAmount && minAmount > maxAmount) {\n          // 最小値と最大値が逆行する場合は最小値を最大値に合わせる\n          onChange([maxAmount, maxAmount]);\n        } else {\n          onChange([minAmount, maxAmount]);\n        }\n      }\n    },\n    [maxAmount, minAmount, onBlur, onChange]\n  );\n\n  return (\n    <div {...commonProps(rest, 'vb-amountRangeField')}>\n      <DigitInput\n        id={minAmountId}\n        label={minAmountLabel ?? '最小値'}\n        labelledby={minAmountLabelledby}\n        name={minAmountName}\n        value={minAmount}\n        required={required}\n        disabled={disabled}\n        error={error}\n        placeholder={minAmountPlaceholder}\n        onChange={setMinAmount}\n        onFocus={onFocus}\n        onBlur={handleBlurMinAmount}\n        onInput={onInput}\n        onKeyDown={onKeyDown}\n        small={small}\n        nullable={nullable}\n        width=\"small\"\n      />\n      <span>&nbsp;〜&nbsp;</span>\n      <DigitInput\n        id={maxAmountId}\n        label={maxAmountLabel ?? '最大値'}\n        labelledby={maxAmountLabelledby}\n        name={maxAmountName}\n        value={maxAmount}\n        required={required}\n        disabled={disabled}\n        error={error}\n        placeholder={maxAmountPlaceholder}\n        onChange={setMaxAmount}\n        onFocus={onFocus}\n        onBlur={handleBlurMaxAmount}\n        onInput={onInput}\n        onKeyDown={onKeyDown}\n        small={small}\n        nullable={nullable}\n        width=\"small\"\n      />\n    </div>\n  );\n};\n\nexport default AmountRangeField;\n"
  },
  {
    "path": "src/lv2/formFields/DateDurationField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions, action } from '@storybook/addon-actions';\nimport { text, boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport DateDurationField from './DateDurationField';\n\nexport default {\n  component: DateDurationField,\n};\n\nconst handlers = actions({\n  onChange: 'onChange',\n  onInput: 'onInput',\n  onFocus: 'onFocus',\n  onBlur: 'onBlur',\n  onKeyDown: 'onKeyDown',\n});\n\nexport const DateDurationFieldComponent = () => (\n  <DateDurationField\n    startDate={text('StartDate', '', 'DateDurationField')}\n    startDatePlaceholder={text('StartDatePlaceholder', '', 'DateDurationField')}\n    endDate={text('EndDate', '', 'DateDurationField')}\n    endDatePlaceholder={text('EndDatePlaceholder', '', 'DateDurationField')}\n    required={boolean('Required', false, 'DateDurationField')}\n    disabled={boolean('Disabled', false, 'DateDurationField')}\n    error={boolean('Disabled', false, 'DateDurationField')}\n    maxDate={text('MaxDate', '2020-12-15', 'DateDurationField')}\n    minDate={text('MinDate', '2017-01-15', 'DateDurationField')}\n    width={select(\n      'Width',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'DateDurationField'\n    )}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nconst InteractiveDateDurationField = () => {\n  const [[startDate, endDate], setDuration] = React.useState(['', '']);\n  return (\n    <DateDurationField\n      startDate={startDate}\n      endDate={endDate}\n      maxDate={text('MaxDate', '2020-12-15')}\n      minDate={text('MinDate', '2017-01-15')}\n      width={select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n        },\n        'medium',\n        'DateDurationField'\n      )}\n      {...{\n        ...handlers,\n        onChange: (duration) => {\n          setDuration(duration);\n          action('onChange')(duration);\n        },\n      }}\n    />\n  );\n};\n\nexport const InteractiveSample = () => <InteractiveDateDurationField />;\n"
  },
  {
    "path": "src/lv2/formFields/DateDurationField.tsx",
    "content": "import * as React from 'react';\nimport { parse, isValid, isBefore, isAfter } from 'date-fns';\n\nimport { formatDate } from '../../utilities/date';\nimport DateInput from '../formFields/DateInput';\nimport styled from 'styled-components';\nimport { CommonStyle } from '../../internal/CommonStyle';\n\ntype Props = {\n  /**\n   * input required を指定します\n   */\n  required?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * エラー状態にします\n   */\n  error?: boolean;\n  /**\n   * 開始日を指定します\n   */\n  startDate?: Date | string;\n  /**\n   * 開始日の id を指定します\n   */\n  startDateId?: string;\n  /**\n   * 開始日の name を指定します\n   */\n  startDateName?: string;\n  /**\n   * 開始日の input aria-label を指定します\n   */\n  startDateLabel?: string;\n  /**\n   * 開始日の input aria-labelledby を指定します\n   */\n  startDateLabelledby?: string;\n  /**\n   * 開始日の input placeholder を指定します\n   */\n  startDatePlaceholder?: string;\n  /**\n   * 終了日を指定します\n   */\n  endDate?: Date | string;\n  /**\n   * 終了日の id を指定します\n   */\n  endDateId?: string;\n  /**\n   * 終了日の name を指定します\n   */\n  endDateName?: string;\n  /**\n   * 終了日の input aria-label を指定します\n   */\n  endDateLabel?: string;\n  /**\n   * 終了日の input aria-labelledby を指定します\n   */\n  endDateLabelledby?: string;\n  /**\n   * 終了日の input placeholder を指定します\n   */\n  endDatePlaceholder?: string;\n  /**\n   * サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * DateInput の幅を指定します（default: `small`）\n   * 後方互換のために default を `small` にしていますが、日付が隠れてしまうため、`medium` 以上を指定するようにしてください。\n   */\n  width?: React.ComponentProps<typeof DateInput>['width'];\n  /**\n   * 入力できる最小値を指定します\n   */\n  minDate?: string;\n  /**\n   * 入力できる最大値を指定します\n   */\n  maxDate?: string;\n  onChange?: (duration: [string, string]) => void;\n  onFocus?: React.FormEventHandler;\n  onBlur?: React.FormEventHandler;\n  onInput?: React.FormEventHandler;\n  onKeyDown?: React.KeyboardEventHandler;\n};\n\nconst ComponentStyle = styled(CommonStyle)({\n  alignItems: 'center',\n  display: 'inline-flex',\n});\n\nconst DateDurationField: React.FC<Props> = ({\n  required,\n  disabled,\n  error,\n  startDate: originalStartDate,\n  startDateId,\n  startDateName,\n  startDateLabel,\n  startDateLabelledby,\n  startDatePlaceholder,\n  endDate: originalEndDate,\n  endDateId,\n  endDateName,\n  endDateLabel,\n  endDateLabelledby,\n  endDatePlaceholder,\n  small,\n  minDate,\n  maxDate,\n  width = 'small', // 後方互換のために default を small にしています。\n  onChange,\n  onFocus,\n  onBlur,\n  onInput,\n  onKeyDown,\n}: Props) => {\n  const [startDate, setStartDate] = React.useState(originalStartDate);\n  const [endDate, setEndDate] = React.useState(originalEndDate);\n\n  React.useEffect(() => setStartDate(originalStartDate), [originalStartDate]);\n  React.useEffect(() => setEndDate(originalEndDate), [originalEndDate]);\n\n  const handleChangeStartDate = React.useCallback(\n    (date: string) => setStartDate(date),\n    []\n  );\n\n  const handleChangeEndDate = React.useCallback(\n    (date: string) => setEndDate(date),\n    []\n  );\n\n  const handleBlurStartDate = React.useCallback(\n    (e) => {\n      if (onChange) {\n        const parsedStartDate = parse(startDate ?? '');\n        const parsedEndDate = parse(endDate ?? '');\n        if (\n          isValid(parsedStartDate) &&\n          isValid(parsedEndDate) &&\n          isAfter(parsedStartDate, parsedEndDate)\n        ) {\n          // 開始日と終了日が逆行する場合は変更した側ではない側のフィールドを空欄にする\n          onChange([formatDate(parsedStartDate), '']);\n        } else {\n          onChange([formatDate(parsedStartDate), formatDate(parsedEndDate)]);\n        }\n      }\n\n      onBlur && onBlur(e);\n    },\n    [endDate, onBlur, onChange, startDate]\n  );\n\n  const handleBlurEndDate = React.useCallback(\n    (e) => {\n      if (onChange) {\n        const parsedStartDate = parse(startDate ?? '');\n        const parsedEndDate = parse(endDate ?? '');\n        if (\n          isValid(parsedStartDate) &&\n          isValid(parsedEndDate) &&\n          isBefore(parsedEndDate, parsedStartDate)\n        ) {\n          // 開始日と終了日が逆行する場合は変更した側ではない側のフィールドを空欄にする\n          onChange(['', formatDate(parsedEndDate)]);\n        } else {\n          onChange([formatDate(parsedStartDate), formatDate(parsedEndDate)]);\n        }\n      }\n\n      onBlur && onBlur(e);\n    },\n    [endDate, onBlur, onChange, startDate]\n  );\n\n  return (\n    <ComponentStyle>\n      <DateInput\n        id={startDateId}\n        label={startDateLabel ?? '開始日'}\n        labelledby={startDateLabelledby}\n        name={startDateName}\n        value={startDate}\n        required={required}\n        disabled={disabled}\n        error={error}\n        placeholder={startDatePlaceholder}\n        minDate={minDate}\n        maxDate={maxDate}\n        onChange={handleChangeStartDate}\n        onFocus={onFocus}\n        onBlur={handleBlurStartDate}\n        onInput={onInput}\n        onKeyDown={onKeyDown}\n        small={small}\n        width={width}\n      />\n      <span>&nbsp;～&nbsp;</span>\n      <DateInput\n        id={endDateId}\n        label={endDateLabel ?? '終了日'}\n        labelledby={endDateLabelledby}\n        name={endDateName}\n        value={endDate}\n        required={required}\n        disabled={disabled}\n        error={error}\n        placeholder={endDatePlaceholder}\n        minDate={minDate}\n        maxDate={maxDate}\n        onChange={handleChangeEndDate}\n        onFocus={onFocus}\n        onBlur={handleBlurEndDate}\n        onInput={onInput}\n        onKeyDown={onKeyDown}\n        small={small}\n        width={width}\n      />\n    </ComponentStyle>\n  );\n};\n\nexport default DateDurationField;\n"
  },
  {
    "path": "src/lv2/formFields/DateInput.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { text, boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport DateInput from './DateInput';\nimport ScrollableBase from '../../lv1/bases/ScrollableBase';\nimport { Note, Stack, WithDescriptionContent } from '../../lv1';\nimport FormControl from '../formControl/FormControl';\nimport Button from '../../lv1/buttons/Button';\n\nexport default {\n  component: DateInput,\n};\n\nconst handlers = actions({\n  onChange: 'onChange',\n  onInput: 'onInput',\n  onFocus: 'onFocus',\n  onBlur: 'onBlur',\n  onKeyDown: 'onKeyDown',\n});\n\nexport const DateInputComponent = () => {\n  const [val, setVal] = React.useState('');\n  return (\n    <DateInput\n      value={val}\n      label={text('label', 'DateInputのサンプル', 'DateInput')}\n      placeholder={text('Placeholder', '', 'DateInput')}\n      required={boolean('Required', false, 'DateInput')}\n      autofocus={boolean('Autofocus', false, 'DateInput')}\n      disabled={boolean('Disabled', false, 'DateInput')}\n      error={boolean('Error', false, 'DateInput')}\n      small={boolean('Small', false, 'DateInput')}\n      minDate={text('MinDate', '2020-12-01', 'DateInput')}\n      maxDate={text('MaxDate', '2024-05-15', 'DateInput')}\n      width={select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n        },\n        'medium',\n        'DateInput'\n      )}\n      {...{ ...handlers, onChange: (v) => setVal(v) }}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const Disabled = () => {\n  const [val, setVal] = React.useState('');\n  return (\n    <DateInput\n      disabled\n      value={val}\n      label={text('label', 'DateInputのサンプル', 'DateInput')}\n      placeholder={text('Placeholder', '', 'DateInput')}\n      required={boolean('Required', false, 'DateInput')}\n      autofocus={boolean('Autofocus', false, 'DateInput')}\n      error={boolean('Error', false, 'DateInput')}\n      small={boolean('Small', false, 'DateInput')}\n      minDate={text('MinDate', '2022-12-04', 'DateInput')}\n      maxDate={text('MaxDate', '2023-05-15', 'DateInput')}\n      width={select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n        },\n        'medium',\n        'DateInput'\n      )}\n      {...{ ...handlers, onChange: (v) => setVal(v) }}\n    />\n  );\n};\n\nexport const Width = () => (\n  <Stack alignItems=\"stretch\">\n    <Stack direction=\"horizontal\">\n      <FormControl label=\"medium\" fieldId=\"dateinput-sizes-medium\">\n        <DateInput\n          value=\"2022-12-01\"\n          width=\"medium\"\n          id=\"dateinput-sizes-medium\"\n        />\n      </FormControl>\n      <FormControl label=\"large\" fieldId=\"dateinput-sizes-large\">\n        <DateInput\n          value=\"2022-12-01\"\n          width=\"large\"\n          id=\"dateinput-sizes-large\"\n        />\n      </FormControl>\n    </Stack>\n    <FormControl label=\"full\" fieldId=\"dateinput-sizes-full\">\n      <DateInput value=\"2022-12-01\" width=\"full\" id=\"dateinput-sizes-full\" />\n    </FormControl>\n    <WithDescriptionContent\n      renderContent={() => (\n        <Stack direction=\"horizontal\">\n          <FormControl label=\"xSmall\" fieldId=\"dateinput-sizes-xSmall\">\n            <DateInput\n              value=\"2022-12-01\"\n              width=\"xSmall\"\n              id=\"dateinput-sizes-xSmall\"\n            />\n          </FormControl>\n          <FormControl label=\"small\" fieldId=\"dateinput-sizes-small\">\n            <DateInput\n              value=\"2022-12-01\"\n              width=\"small\"\n              id=\"dateinput-sizes-small\"\n            />\n          </FormControl>\n        </Stack>\n      )}\n      renderDescriptionContent={() => (\n        <Note mt={0.5}>\n          <code>xSmall</code>, <code>small</code>{' '}\n          は日付が隠れてしまうため、使用しないでください\n        </Note>\n      )}\n    />\n  </Stack>\n);\nfunction InteractiveExample() {\n  const [val, setVal] = React.useState('');\n  return (\n    <DateInput\n      value={val}\n      label={text('label', 'DateInputのサンプル', 'DateInput')}\n      maxDate={text('MaxDate', '2020-12-15', 'DateInput')}\n      minDate={text('MinDate', '2017-01-15', 'DateInput')}\n      {...{ ...handlers, onChange: (v) => setVal(v) }}\n    />\n  );\n}\n\nexport const InsideScroll = () => (\n  <div style={{ width: '30rem', height: '30rem', display: 'flex' }}>\n    <ScrollableBase scrollableX scrollableY>\n      <div style={{ position: 'relative', width: '80rem', height: '80rem' }}>\n        <div style={{ position: 'absolute', left: '35rem', top: '10rem' }}>\n          <InteractiveExample />\n        </div>\n      </div>\n    </ScrollableBase>\n  </div>\n);\n\nexport const InBigBlock = () => (\n  <div style={{ padding: '20rem 80rem' }}>\n    <InteractiveExample />\n  </div>\n);\n\nexport const ManualFocus = () => {\n  const ref = React.useRef<HTMLInputElement>(null);\n  const onClick = () => {\n    ref.current?.focus();\n  };\n\n  return (\n    <div style={{ display: 'flex' }}>\n      <Button mr={1} onClick={onClick}>\n        フォーカスを当てる\n      </Button>\n      <DateInput value=\"2023-07-31\" ref={ref} marginRight />\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/DateInput.tsx",
    "content": "import * as React from 'react';\nimport { MdDateRange } from 'react-icons/md';\nimport TextField from '../../lv1/forms/TextField';\nimport {\n  MarginClassProps,\n  pickMarginClassProps,\n} from '../../utilities/marginClasses';\nimport commonProps, {\n  CommonProps,\n  pickCommonDataProps,\n} from '../../utilities/commonProps';\nimport Datepicker from '../../lv2/calendar/DatePicker';\nimport { parse, addDays, isValid, format } from 'date-fns';\nimport { Keys } from '../../utilities/keyboard';\nimport {\n  isValidDateInRange,\n  formatDate,\n  getValidDateNearestTarget,\n  formatDayOfWeek,\n} from '../../utilities/date';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport { FocusTrap } from '../../lv1';\nimport { pickFunctionalMarginProps } from '../../utilities/functionalMarginClasses';\n\nconst DATE_FORMAT = /^\\d{4}[-/\\s]?\\d{2}[-/\\s]?\\d{2}$/;\n\n/** @deprecated\n `xSmall` と `small` を使うと日付が隠れてしまうので原則使わないでください\n*/\ntype DeprecatedWidth = 'xSmall' | 'small';\ntype FieldWidth = 'medium' | 'large' | 'full' | DeprecatedWidth;\n\ntype Props = {\n  value?: Date | string;\n  id?: string;\n  label?: string;\n  labelledby?: string;\n  placeholder?: string;\n  name?: string;\n  required?: boolean;\n  autofocus?: boolean;\n  disabled?: boolean;\n  error?: boolean;\n  small?: boolean;\n  minDate?: string;\n  maxDate?: string;\n  /**\n   * `medium` `large` `full` を使用してください。\n   * `xSmall` `small` は日付が隠れてしまうため、使用しないでください\n   */\n  width?: FieldWidth;\n  onChange?: (date: string) => void;\n  onFocus?: React.FormEventHandler;\n  onBlur?: React.FormEventHandler;\n  onInput?: React.FormEventHandler;\n  onKeyDown?: React.KeyboardEventHandler;\n} & MarginClassProps &\n  CommonProps;\n\nconst DateInputInner = (\n  props: Props,\n  ref?: React.Ref<HTMLInputElement> | React.MutableRefObject<HTMLInputElement>\n): React.ReactElement => {\n  const {\n    value,\n    minDate,\n    maxDate,\n    id,\n    label,\n    labelledby,\n    placeholder,\n    name,\n    required,\n    autofocus,\n    disabled,\n    error,\n    small,\n    width,\n    onChange,\n    onFocus,\n    onBlur,\n    onInput,\n    onKeyDown,\n  } = props;\n\n  const [showingValue, setShowingValue] = React.useState(\n    value && isValidDateInRange(value, minDate, maxDate)\n      ? formatDate(value)\n      : ''\n  );\n\n  const [showPicker, setShowPicker] = React.useState(false);\n\n  const [horizontalPosition, setHorizontalPosition] = React.useState<\n    'left' | 'right'\n  >('left');\n\n  const wrapperRef = React.useRef<HTMLDivElement>(null);\n  const datePickerRef = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    if (!showPicker) {\n      return;\n    }\n    const handleClickOutside = (e: MouseEvent) => {\n      // Shadow DOM 内部で発火した場合、e.target は ShadowRoot になるので、composedPath() で最初の要素を取得する\n      const target =\n        !!window.ShadowRoot &&\n        e.target instanceof Element &&\n        e.target.shadowRoot instanceof ShadowRoot\n          ? e.composedPath()[0]\n          : e.target;\n\n      // 外側を押した時、DatePicker を閉じる\n      if (\n        wrapperRef.current &&\n        !wrapperRef.current.contains(target as Node) &&\n        datePickerRef.current &&\n        !datePickerRef.current.contains(target as Node)\n      ) {\n        setShowPicker(false);\n      }\n    };\n    window.addEventListener('mousedown', handleClickOutside);\n    return () => {\n      window.removeEventListener('mousedown', handleClickOutside);\n    };\n  }, [showPicker]);\n\n  const onFieldFocus: React.FocusEventHandler = (e) => {\n    setShowPicker(true);\n    onFocus && onFocus(e);\n  };\n\n  const onDateChange = (date: string | Date): void => {\n    setShowingValue(formatDate(date));\n    if (onChange) {\n      if (isValidDateInRange(date, minDate, maxDate)) {\n        onChange(formatDate(date));\n      } else {\n        onChange('');\n      }\n    }\n  };\n\n  const onFieldChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n    setShowingValue(e.target.value);\n    if (e.target.value.length === 0) {\n      onDateChange('');\n    } else if (e.target.value.match(DATE_FORMAT)) {\n      onDateChange(e.target.value);\n    }\n  };\n\n  const onFieldBlur: React.FocusEventHandler = (e) => {\n    if (value && isValidDateInRange(value)) {\n      setShowingValue(formatDate(value));\n    } else {\n      setShowingValue('');\n    }\n    setShowPicker(false);\n    onBlur && onBlur(e);\n  };\n\n  const moveDays = (days: number) => {\n    // ユーザーの現在の入力値または現在日付\n    const parsedDate = showingValue ? parse(showingValue) : new Date();\n    // parsedDateにdaysを足して、rangeの範囲内であればそこに移動する\n    if (isValidDateInRange(addDays(parsedDate, days), minDate, maxDate)) {\n      onDateChange(formatDate(addDays(parsedDate, days)));\n    } else {\n      // 範囲の外になりそうな場合は、範囲内の最も現在日付に近い日付に移動する\n      const tempDate = getValidDateNearestTarget(parsedDate, minDate, maxDate);\n      tempDate && onDateChange(tempDate);\n    }\n  };\n\n  const onFieldKeyDown: React.KeyboardEventHandler = (e) => {\n    setShowPicker(true);\n    switch (e.key) {\n      case Keys.UP:\n      case 'h':\n        moveDays(-1);\n        e.preventDefault();\n        break;\n      case Keys.DOWN:\n      case 'l':\n        moveDays(1);\n        e.preventDefault();\n        break;\n      case 'k':\n        moveDays(-7);\n        e.preventDefault();\n        break;\n      case 'j':\n        moveDays(7);\n        e.preventDefault();\n        break;\n    }\n    onKeyDown && onKeyDown(e);\n  };\n\n  const fieldRef = React.useRef<HTMLInputElement>();\n  const createFieldRef = React.useCallback(\n    (node: HTMLInputElement) => {\n      fieldRef.current = node;\n      if (typeof ref === 'function') {\n        ref(node);\n      } else if (ref) {\n        (ref as React.MutableRefObject<HTMLInputElement>).current = node;\n      }\n    },\n    [ref]\n  );\n\n  const popupRef = React.useRef<HTMLDivElement>(null);\n\n  const adjustPosition = () => {\n    if (!(fieldRef.current && popupRef.current)) {\n      return;\n    }\n    const fieldRect = fieldRef.current.getBoundingClientRect();\n    const popupRect = popupRef.current.getBoundingClientRect();\n\n    setHorizontalPosition(\n      fieldRect.left + popupRect.width > window.innerWidth ? 'right' : 'left'\n    );\n  };\n\n  React.useLayoutEffect(() => {\n    adjustPosition();\n  }, [showPicker]);\n\n  React.useEffect(() => {\n    // 非Focus時のみ値の更新をする\n    if (!showPicker) {\n      if (value && isValidDateInRange(value)) {\n        setShowingValue(formatDate(value));\n      } else {\n        setShowingValue('');\n      }\n    }\n  }, [value, showPicker]);\n\n  const uniqueId = useUniqueId('vb-dateInput');\n  const parsedShowingValue =\n    showingValue && showingValue.match(DATE_FORMAT) && parse(showingValue);\n  return (\n    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n    <div\n      id={uniqueId}\n      ref={wrapperRef}\n      {...commonProps(pickCommonDataProps(props), 'vb-dateInput')}\n      onClick={(e) => {\n        !disabled && setShowPicker(true); // テキストフィールドがクリックされたっぽい時に、DatePickerを再度表示する\n        e.stopPropagation();\n      }}\n    >\n      <TextField\n        id={id} // テキストボックスはpropsで渡されたidをもつ（<label>等のため）\n        label={label}\n        labelledby={labelledby}\n        placeholder={placeholder}\n        name={name}\n        required={required}\n        autofocus={autofocus}\n        disabled={disabled}\n        error={error}\n        small={small}\n        width={width}\n        value={showingValue}\n        onChange={onFieldChange}\n        onFocus={onFieldFocus}\n        onBlur={onFieldBlur}\n        onInput={onInput}\n        onKeyDown={onFieldKeyDown}\n        role=\"combobox\"\n        aria-expanded={showPicker}\n        aria-autocomplete=\"list\"\n        aria-controls={`${uniqueId}__listbox`}\n        aria-haspopup=\"listbox\"\n        aria-describedby={`${uniqueId}__description`}\n        aria-atomic={true}\n        ref={createFieldRef}\n        autoComplete=\"off\"\n        IconComponent={MdDateRange}\n        iconLabel={showPicker ? 'カレンダーを非表示' : 'カレンダーを表示'}\n        onIconClick={(e) => {\n          e.stopPropagation();\n          if (showPicker) {\n            setShowPicker(false);\n          } else {\n            setShowPicker(true);\n            setTimeout(() => popupRef.current?.focus());\n          }\n        }}\n        iconAriaProps={{\n          'aria-haspopup': true,\n          'aria-expanded': showPicker,\n          'aria-controls': `${uniqueId}__listbox`,\n        }}\n        {...pickFunctionalMarginProps(props)}\n        {...pickMarginClassProps(props)}\n      />\n      <VisuallyHidden>\n        <span id={`${uniqueId}__description`}>\n          上下キーで前の日、後の日を選択できます\n        </span>\n      </VisuallyHidden>\n      <ScrollPortal\n        positionalBaseElement={fieldRef.current || undefined}\n        isActive={showPicker}\n        onOverflow={() => {\n          setShowPicker(false);\n          fieldRef.current?.blur();\n        }}\n        horizontalPosition={horizontalPosition}\n        data-masking={props['data-masking']}\n      >\n        <FocusTrap\n          onFocusOutsideTop={() => true}\n          onFocusOutsideBottom={() => true}\n          onFocusInsideBottom={() => {\n            showPicker && fieldRef.current?.focus();\n            return true;\n          }}\n          onFocusInsideTop={() => {\n            showPicker && fieldRef.current?.focus();\n            return true;\n          }}\n        >\n          <div // eslint-disable-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n            // blur抑止のため、やむをえずonMouseDownを書いてる\n            className={`vb-dateInput__listbox${\n              horizontalPosition === 'right'\n                ? ' vb-dateInput__listbox--rightAligned'\n                : ''\n            }`}\n            onMouseDown={(e): void => e.preventDefault()}\n            onClick={(e) => e.stopPropagation()}\n            tabIndex={-1}\n            aria-hidden={!showPicker}\n            id={`${uniqueId}__listbox`}\n            role=\"region\"\n            aria-label=\"カレンダーで日付を選択\"\n            aria-describedby={`${uniqueId}__popupDescription`}\n            ref={popupRef}\n            onKeyDown={(e) => {\n              switch (e.key) {\n                case Keys.ESC:\n                case Keys.ENTER:\n                  fieldRef.current?.focus();\n                  setTimeout(() => {\n                    setShowPicker(false);\n                  });\n                  break;\n                case Keys.DOWN:\n                case 'j':\n                  moveDays(7);\n                  e.preventDefault();\n                  break;\n                case Keys.UP:\n                case 'k':\n                  moveDays(-7);\n                  e.preventDefault();\n                  break;\n                case Keys.RIGHT:\n                case 'l':\n                  moveDays(1);\n                  e.preventDefault();\n                  break;\n                case Keys.LEFT:\n                case 'h':\n                  moveDays(-1);\n                  e.preventDefault();\n                  break;\n              }\n            }}\n          >\n            {showPicker && (\n              <PopupBase paddingSize=\"zero\">\n                <VisuallyHidden id={`${uniqueId}__popupDescription`}>\n                  上下左右キーでカレンダー内の日付を選択できます。左右キーで1日単位で移動、上下キーで7日単位で移動します。\n                </VisuallyHidden>\n                <VisuallyHidden autoRead>\n                  {parsedShowingValue\n                    ? isValid(parsedShowingValue)\n                      ? `${format(\n                          parsedShowingValue,\n                          'YYYY年M月D日'\n                        )} ${formatDayOfWeek(\n                          parsedShowingValue\n                        )} が入力されています`\n                      : ''\n                    : '日付が選択されていません'}\n                </VisuallyHidden>\n                {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n                <div\n                  onKeyDown={(e) => {\n                    // 前の月/次の月ボタンの押下時にポップアップが閉じないよう、ここでガードする\n                    if (e.key === Keys.ENTER) {\n                      e.stopPropagation();\n                    }\n                  }}\n                >\n                  <Datepicker\n                    date={value}\n                    minDate={minDate}\n                    maxDate={maxDate}\n                    ref={datePickerRef}\n                    onDateClick={(d): void => {\n                      fieldRef.current?.focus();\n                      onDateChange(d);\n                      setTimeout(() => {\n                        setShowPicker(false);\n                      });\n                    }}\n                  />\n                </div>\n              </PopupBase>\n            )}\n          </div>\n        </FocusTrap>\n      </ScrollPortal>\n    </div>\n  );\n};\n\n/**\n * テキストフィールドになっている日付入力フィールドです。フォーカスまたはアイコンのクリックによりカレンダーを表示し、ユーザーはカレンダーから日付を選んだり、テキストとして編集したりすることができます。\n *\n * - `DateInput`は「現在の日付から前後1年以内」などの近い日付を入力することが多い場合に使用してください\n *   - 生年月日など、年単位で離れた日付を入力する場合には、`DateField` を使用してください。\n *     `DateField` はセレクトボックスで年を選べるため、年単位で離れた年月日を入力するのに最適です。\n */\nconst DateInput = React.forwardRef(DateInputInner);\nexport default DateInput;\n"
  },
  {
    "path": "src/lv2/formFields/DecimalInput.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { CheckBox, ReadOnlyField } from '../..';\nimport DecimalInput from './DecimalInput';\n\nexport default {\n  component: DecimalInput,\n};\n\nconst handlers = actions({\n  onBlur: 'onBlur',\n  onChange: 'onChange',\n  onFocus: 'onFocus',\n  onInput: 'onInput',\n  onKeyDown: 'onKeyDown',\n});\n\nexport const DecimalInputComponent = () => (\n  <DecimalInput\n    value={number('Value', 0, undefined, 'DecimalInput')}\n    places={number('Places', 2, undefined, 'DecimalInput')}\n    nullable={boolean('Nullable', false, 'DecimalInput')}\n    hideSpinner={boolean('hideSpinner', false, 'DecimalInput')}\n    alignRight={boolean('AlignRight', false, 'DecimalInput')}\n    placeholder={text('Placeholder', '', 'DecimalInput')}\n    required={boolean('Required', false, 'DecimalInput')}\n    disabled={boolean('Disabled', false, 'DecimalInput')}\n    error={boolean('Error', false, 'DecimalInput')}\n    small={boolean('Small', false, 'DecimalInput')}\n    large={boolean('Large', false, 'DecimalInput')}\n    width={\n      select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n          undefined: '',\n        },\n        '',\n        'DecimalInput'\n      ) || undefined\n    }\n    suffix={text('Suffix', '', 'DecimalInput')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <DecimalInput mr={1} />\n    <DecimalInput mr={1} disabled />\n    <DecimalInput mr={1} error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <DecimalInput mr={1} small />\n    <DecimalInput mr={1} small disabled />\n    <DecimalInput mr={1} small error />\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <DecimalInput mr={1} large />\n    <DecimalInput mr={1} large disabled />\n    <DecimalInput mr={1} large error />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [value, setValue] = React.useState<number | null>(0);\n  const [isNullable, setIsNullable] = React.useState<boolean>(false);\n\n  return (\n    <>\n      <DecimalInput\n        mr={1.5}\n        nullable={isNullable}\n        onChange={(value) => {\n          setValue(value);\n        }}\n        value={value}\n      />\n      <CheckBox\n        checked={isNullable}\n        mr={1.5}\n        onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n          setIsNullable(e.target.checked)\n        }\n      >\n        nullable\n      </CheckBox>\n      <ReadOnlyField\n        value={`current value: ${value === null ? 'null' : value}`}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/DecimalInput.tsx",
    "content": "import * as React from 'react';\nimport TextField from '../../lv1/forms/TextField';\nimport { Ascii, Digits } from '../../utilities';\nimport { CommonProps } from '../../utilities/commonProps';\n\ntype Props = Pick<\n  React.ComponentProps<typeof TextField>,\n  | 'id'\n  | 'label'\n  | 'labelledby'\n  | 'placeholder'\n  | 'name'\n  | 'required'\n  | 'autofocus'\n  | 'disabled'\n  | 'error'\n  | 'small'\n  | 'large'\n  | 'alignCenter'\n  | 'alignRight'\n  | 'width'\n  | 'suffix'\n  | 'onInput'\n  | 'onFocus'\n  | 'onBlur'\n  | 'onKeyDown'\n  | 'onKeyUp'\n  | 'min'\n  | 'max'\n  | 'hideSpinner'\n  | keyof CommonProps\n> & {\n  /**\n   * 空値の入力を許可します\n   * @default false\n   */\n  nullable?: boolean;\n  onChange?: (value: number | null) => void;\n  /**\n   * spinnerの増減値\n   * @default 1 / Math.pow(10, places)\n   */\n  step?: number;\n  /**\n   * 小数点以下の表示桁数を指定します\n   * @default 2\n   */\n  places?: number;\n  value?: number | null;\n};\n\nconst useHandleValue = ({\n  nullable,\n  onBlur,\n  onChange,\n  onFocus,\n  places,\n  value,\n}: Pick<\n  Props,\n  'nullable' | 'onBlur' | 'onChange' | 'onFocus' | 'places' | 'value'\n>) => {\n  // 数値から小数点を含めた文字列に変換する、その際小数点以下の桁数を指定された桁数で丸める\n  const numberToString = React.useCallback(\n    (value?: number | null) => {\n      return nullable && value == null ? '' : (value ?? 0).toFixed(places);\n    },\n    [nullable, places]\n  );\n  // 小数点が含まれた文字列を数値に変換する、その際小数点以下の桁数を指定された桁数で丸める\n  const stringToNumber = (value: string) => {\n    return nullable && !value\n      ? null\n      : Number(Digits.numberize(Ascii.zenkakuToHankaku(value)).toFixed(places));\n  };\n\n  const [isFocused, setFocused] = React.useState(false);\n  const [showingValue, setShowingValue] = React.useState(numberToString(value));\n\n  React.useEffect(() => {\n    // 非フォーカス時のみ value の値が変わった場合に表示値を更新する\n    !isFocused && setShowingValue(numberToString(value));\n  }, [isFocused, numberToString, setShowingValue, value]);\n\n  const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n    setFocused(false);\n    const value = e.target.value;\n    setShowingValue(String(stringToNumber(value) ?? ''));\n    onBlur && onBlur(e);\n  };\n\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const value = e.target.value;\n    setShowingValue(value);\n    onChange && onChange(stringToNumber(value));\n  };\n\n  const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n    setFocused(true);\n    onFocus && onFocus(e);\n  };\n\n  return {\n    handleBlur,\n    handleChange,\n    handleFocus,\n    showingValue,\n  };\n};\n\n/**\n * 入力値が1〜2桁のことが大半の場合や、小数点を含む可能性が高い数値入力用のコンポーネントです。\n *\n * - 仕様の多くは `TextField` と共通しています。\n * - `<input type=\"number\">` としてレンダリングされ、 `max` `min` `step` が使用できます。\n *   - ブラウザによってスピナーが表示され、`step` で指定した数値を加算・減産できるようになります。\n * - 金額や、小数点以下の無い大きな数値を扱う場合は DigitsInput を使用してください。\n *   - どちらを使うかは、「整数部分の桁数が3〜4桁以上になる頻度」「`step` 単位で加算・除算して調整する頻度」「小数点が含まれる頻度」などから判断してください\n * - places オプションで小数点以下の表示桁数を指定します。それ以上の精度の小数点以下の数値はフォーカスが離れたときに指定の精度まで `toFixed()` で丸められます。\n */\nconst DecimalInput: React.FC<Props> = (props: Props) => {\n  const {\n    nullable,\n    onBlur,\n    onChange,\n    onFocus,\n    places = 2,\n    step = 1 / Math.pow(10, places),\n    value,\n    ...others\n  } = props;\n\n  const { handleBlur, handleChange, handleFocus, showingValue } =\n    useHandleValue({\n      nullable,\n      onBlur,\n      onChange,\n      onFocus,\n      places,\n      value,\n    });\n\n  return (\n    <TextField\n      {...others}\n      autoComplete=\"off\"\n      onBlur={handleBlur}\n      onChange={handleChange}\n      onFocus={handleFocus}\n      step={step}\n      type=\"number\"\n      value={showingValue}\n    />\n  );\n};\n\nexport default DecimalInput;\n"
  },
  {
    "path": "src/lv2/formFields/DigitsInput.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport DigitsInput from './DigitsInput';\nimport Button from '../../lv1/buttons/Button';\nimport { Text } from '../../lv1';\nimport DecimalInput from './DecimalInput';\nimport FormControlGroup from '../formControl/FormControlGroup';\nimport FormControl from '../formControl/FormControl';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n});\n\nexport default {\n  component: DigitsInput,\n};\n\nexport const DigitsInputComponent = () => (\n  <DigitsInput\n    value={number('Value', 1000000, undefined, 'DigitsInput')}\n    nullable={boolean('Nullable', true, 'DigitsInput')}\n    placeholder={text('Placeholder', '', 'DigitsInput')}\n    required={boolean('Required', false, 'DigitsInput')}\n    disabled={boolean('Disabled', false, 'DigitsInput')}\n    error={boolean('Error', false, 'DigitsInput')}\n    small={boolean('Small', false, 'DigitsInput')}\n    borderless={boolean('Borderless', false, 'DigitsInput')}\n    width={\n      select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n          undefined: '',\n        },\n        '',\n        'DigitsInput'\n      ) || undefined\n    }\n    suffix={text('Suffix', '', 'DigitsInput')}\n    decimalLimit={number('decimalLimit', 3, undefined, 'DigitsInput')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <DigitsInput mr={1} />\n    <DigitsInput mr={1} disabled />\n    <DigitsInput mr={1} error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <DigitsInput mr={1} small />\n    <DigitsInput mr={1} small disabled />\n    <DigitsInput mr={1} small error />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [value, setValue] = React.useState<number>(0);\n  return <DigitsInput value={value} onChange={(v) => setValue(v ?? 0)} />;\n};\n\nexport const InteractiveSampleWithNullable = () => {\n  const [value, setValue] = React.useState<number | null>(0);\n  return <DigitsInput nullable value={value} onChange={(v) => setValue(v)} />;\n};\n\nexport const InteractiveSampleWithDecimal = () => {\n  const [value, setValue] = React.useState<number | null>(0);\n  const [decimalLimit, setDecimalLimit] = React.useState<number | undefined>(3);\n\n  return (\n    <>\n      <FormControlGroup>\n        <FormControl label=\"decimalLimit\">\n          <DecimalInput\n            value={decimalLimit}\n            onChange={(v) => setDecimalLimit(v ?? undefined)}\n            places={0}\n          />\n        </FormControl>\n      </FormControlGroup>\n      <FormControlGroup mt={1}>\n        <FormControl label=\"DigitsInput\">\n          <DigitsInput\n            decimalLimit={decimalLimit}\n            value={value}\n            onChange={(v) => setValue(v)}\n          />\n          <Text ml={1}>value: {value}</Text>\n        </FormControl>\n      </FormControlGroup>\n    </>\n  );\n};\n\nexport const ManualFocus = () => {\n  const ref = React.useRef<HTMLInputElement>(null);\n  const onClick = () => {\n    ref.current?.focus();\n  };\n  const [value, setValue] = React.useState<number | null>(0);\n\n  return (\n    <>\n      <Button mr={1} onClick={onClick}>\n        フォーカスを当てる\n      </Button>\n      <DigitsInput\n        ref={ref}\n        nullable\n        value={value}\n        onChange={(v) => setValue(v)}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/DigitsInput.tsx",
    "content": "import * as React from 'react';\nimport TextField from '../../lv1/forms/TextField';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { CommonProps, pickCommonProps } from '../../utilities/commonProps';\n\nimport { Ascii, Digits } from '../../utilities';\nimport {\n  TextBoxAriaProps,\n  filterTextBoxAriaProps,\n} from '../../utilities/AriaProps';\n\ntype PropsFromTextField = Pick<\n  Parameters<typeof TextField>[0],\n  | 'id'\n  | 'label'\n  | 'labelledby'\n  | 'placeholder'\n  | 'name'\n  | 'required'\n  | 'disabled'\n  | 'error'\n  | 'small'\n  | 'width'\n  | 'suffix'\n  | 'onFocus'\n  | 'onBlur'\n  | 'onInput'\n  | 'onKeyDown'\n  | 'borderless'\n>;\n\ntype Props = {\n  value?: number | null;\n  nullable?: boolean;\n  onChange?: (value: number | null) => void;\n  /**\n   * 小数点の桁数上限\n   */\n  decimalLimit?: number;\n} & PropsFromTextField &\n  TextBoxAriaProps &\n  MarginClassProps &\n  CommonProps;\n\nconst useHandlers = ({\n  value,\n  setShowingValue,\n  onFocus,\n  onBlur,\n  onChange,\n  nullable,\n  decimalLimit,\n}: {\n  value: number | null | undefined;\n  setShowingValue: React.Dispatch<React.SetStateAction<string>>;\n  onFocus: React.FormEventHandler | undefined;\n  onBlur?: React.FormEventHandler | undefined;\n  onChange: ((value: number | null) => void) | undefined;\n  nullable: boolean | undefined;\n} & Pick<Props, 'decimalLimit'>): {\n  onFieldFocus: React.FormEventHandler;\n  onFieldBlur: React.FormEventHandler;\n  onFieldChange: React.FormEventHandler;\n} => {\n  const [isFocused, setFocused] = React.useState(false);\n\n  const onFieldFocus = React.useCallback(\n    (e) => {\n      setFocused(true);\n\n      // フォーカス時、valueがnullまたはnullableではない状態で0なら空欄化\n      if (!value && (!nullable || value !== 0)) {\n        setShowingValue('');\n      }\n      if (onFocus) {\n        onFocus(e);\n      }\n    },\n    [value, setShowingValue, setFocused, nullable, onFocus]\n  );\n\n  const onFieldBlur = React.useCallback(\n    (e) => {\n      setFocused(false);\n      if (value) {\n        setShowingValue(Digits.formalize(value));\n      } else if (nullable && value !== 0) {\n        setShowingValue('');\n      } else {\n        setShowingValue('0');\n      }\n      if (onBlur) {\n        onBlur(e);\n      }\n    },\n    [value, nullable, onBlur, setShowingValue]\n  );\n\n  // decimalLimit が指定されていた場合その桁数以上の小数点を削除する\n  const sliceDecimal = React.useCallback(\n    (numValue: number) => {\n      if (numValue == null || decimalLimit == null) {\n        return numValue;\n      }\n\n      const [int, decimal] = `${numValue}`.split('.');\n\n      return Number(\n        [int, (decimal || '').slice(0, Math.max(decimalLimit, 0)) || undefined]\n          .filter((v) => v != null)\n          .join('.')\n      );\n    },\n    [decimalLimit]\n  );\n\n  const onFieldChange = React.useCallback(\n    (e) => {\n      const origValue = e.target.value\n        .replace('/', '000')\n        .replace(/,,$/, ',000');\n      setShowingValue(origValue);\n\n      if (onChange) {\n        const numValue =\n          nullable && !origValue\n            ? null\n            : sliceDecimal(Digits.numberize(Ascii.zenkakuToHankaku(origValue)));\n\n        onChange(numValue);\n      }\n    },\n    [nullable, onChange, setShowingValue, sliceDecimal]\n  );\n  React.useEffect(() => {\n    // 非Focus時のみ値の更新をする\n    if (!isFocused) {\n      if (value) {\n        setShowingValue(Digits.formalize(value));\n      } else if (nullable && value !== 0) {\n        setShowingValue('');\n      } else {\n        setShowingValue('0');\n      }\n    }\n  }, [value, nullable, setShowingValue, isFocused]);\n  return { onFieldFocus, onFieldBlur, onFieldChange };\n};\n\nconst DigitsInputInner = function (\n  props: Props,\n  ref?: React.Ref<HTMLInputElement> | React.MutableRefObject<HTMLInputElement>\n) {\n  const {\n    id,\n    label,\n    labelledby,\n    placeholder,\n    name,\n    required,\n    disabled,\n    error,\n    small,\n    width,\n    suffix,\n    onChange,\n    onFocus,\n    onBlur,\n    onInput,\n    onKeyDown,\n    value,\n    nullable,\n    borderless,\n    decimalLimit,\n  } = props;\n  const { marginTop, marginBottom, marginLeft, marginRight, marginSize } =\n    props;\n  const [showingValue, setShowingValue] = React.useState(\n    value || nullable ? '' : '0'\n  );\n\n  const { onFieldFocus, onFieldBlur, onFieldChange } = useHandlers({\n    value,\n    setShowingValue,\n    onFocus,\n    onBlur,\n    onChange,\n    nullable,\n    decimalLimit,\n  });\n\n  return (\n    <TextField\n      ref={ref}\n      alignRight\n      id={id}\n      label={label}\n      labelledby={labelledby}\n      placeholder={placeholder}\n      name={name}\n      required={required}\n      disabled={disabled}\n      error={error}\n      small={small}\n      width={width}\n      autoComplete=\"off\"\n      suffix={suffix}\n      value={showingValue}\n      borderless={borderless}\n      onChange={onFieldChange}\n      onFocus={onFieldFocus}\n      onBlur={onFieldBlur}\n      onInput={onInput}\n      onKeyDown={onKeyDown}\n      {...{ marginTop, marginBottom, marginLeft, marginRight, marginSize }}\n      {...pickCommonProps(props)}\n      {...filterTextBoxAriaProps(props)}\n    />\n  );\n};\n\n/**\n * 入力された数値を3桁ごとに区切って表示する機能をもつテキストフィールドです。\n * 金額や、大きな数値を扱う場合（目安としては 1,000 以上になるのが通常の場合）に使用してください。\n *\n * - 仕様の多くは `TextField` と共通しています\n * - ユーザーの入力値は、表示上はフィールドからフォーカスを外した時点で数値以外の文字は除去され3桁ごとにカンマが挿入されます\n *   - ユーザーの入力を妨げないよう、入力中（フォーカス中）は表示される値を変化させないようになっています\n *   - `onChange` の発火は、ユーザーのキー入力ごとに行われます\n * - 入力値が1〜2桁のことが大半の場合や、小数点を含む可能性が高い場合には、このコンポーネントではなく、 `DecimalInput` を使用することも検討してください\n *   - `DecimalInput` は、 `<input type=\"number\">` としてレンダリングされ、 `max` `min` `step` が使用できるようになります\n *     （`DigitsInput` はカンマを挿入する関係で  `<input type=\"text\">` としています）\n *     - このとき、ブラウザによってスピナーが表示され、`step` で指定した数値を加算・除算できるようになります\n *   - どちらを使うかは、「整数部分の桁数が3〜4桁以上になる頻度」「`step` 単位で加算・除算して調整する頻度」「小数点が含まれる頻度」などから判断してください\n * - デフォルトの挙動では、空欄にしてフォーカスを外すと入力値は `0` となります。 `nullable={true}` にすることで、空欄にすることができるようになります\n * - ユーザーの入力値は `number | null` として `onChange` で取得できます\n *   - 全角文字を半角文字に変換し、不要な文字を消した上で数値として評価します\n *   - 正の数や整数に限定したり、最大・最小値を指定するような処理はDigitsInputでは行っていません。入力値をそれらに限定したい場合は、使用する側でエラーメッセージを出すなどのハンドリングをしてください\n * - `,`を連続で入力するか`/`を入力すると、`000` が挿入されます\n */\nconst DigitsInput = React.forwardRef(DigitsInputInner);\nexport default DigitsInput;\n"
  },
  {
    "path": "src/lv2/formFields/FormattedTextField.stories.tsx",
    "content": "import React, { useState } from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { ReadOnlyField, SelectBox } from '../../lv1';\nimport { FormControl, FormControlGroup, FormattedTextField } from '../../lv2';\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\n\nexport default {\n  component: FormattedTextField,\n};\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport const FormattedTextFieldComponent = () => {\n  return (\n    <FormattedTextField\n      value={text('Value', '', 'FormattedTextField')}\n      placeholder={text('Placeholder', '', 'FormattedTextField')}\n      required={boolean('Required', false, 'FormattedTextField')}\n      disabled={boolean('Disabled', false, 'FormattedTextField')}\n      error={boolean('Error', false, 'FormattedTextField')}\n      small={boolean('Small', false, 'FormattedTextField')}\n      borderless={boolean('Borderless', false, 'FormattedTextField')}\n      width={\n        select(\n          'Width',\n          {\n            XSmall: 'xSmall',\n            Small: 'small',\n            Medium: 'medium',\n            Large: 'large',\n            Full: 'full',\n            undefined: '',\n          },\n          '',\n          'FormattedTextField'\n        ) || undefined\n      }\n      preset={select(\n        'Preset',\n        {\n          PostalCode: 'postalCode',\n          CorporateNumber: 'corporateNumber',\n          InvoiceRegistrationCompanyNumber: 'invoiceRegistrationCompanyNumber',\n        },\n        'postalCode',\n        'FormattedTextField'\n      )}\n      {...handlers}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const WithPreset = () => {\n  type Preset = 'postalCode' | 'corporateNumber';\n  const [preset, setPreset] = useState<Preset>('postalCode');\n  const [preprocessedValue, setPreprocessedValue] = useState<string>('');\n  const [formattedValue, setFormattedValue] = useState<string>('');\n\n  return (\n    <FormControlGroup>\n      <FormControl label=\"preset\" mr={1}>\n        <SelectBox\n          options={[\n            'postalCode',\n            'corporateNumber',\n            'invoiceRegistrationCompanyNumber',\n          ].map((name) => ({ name }))}\n          onChange={(e) => setPreset(e.target.value as Preset)}\n        />\n      </FormControl>\n      <FormControl label=\"FormattedTextField\" mr={1}>\n        <FormattedTextField\n          preset={preset}\n          onChangePreprocessedValue={setPreprocessedValue}\n          onChangeFormattedValue={setFormattedValue}\n        />\n      </FormControl>\n      <FormControl label=\"onChangePreprocessedValue\" mr={1}>\n        <ReadOnlyField value={preprocessedValue} />\n      </FormControl>\n      <FormControl label=\"onChangeFormattedValue\">\n        <ReadOnlyField value={formattedValue} />\n      </FormControl>\n    </FormControlGroup>\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/FormattedTextField.tsx",
    "content": "import React, { ReactElement, useCallback, useEffect, useState } from 'react';\nimport TextField from '../../lv1/forms/TextField';\n\ntype Formatter = {\n  /**\n   * Preprocess returns an essential unformatted values by removing delimiters and pre/suffixes. /\n   * 下処理用の関数です。桁区切りや接頭・接尾辞を除去した純粋な値を返します。\n   */\n  preprocess?: (inputValue: string) => string;\n  /**\n   * Format returns a formatted values by adding delimiters and pre/suffixes. /\n   * 整形用の関数です。桁区切りや接頭・接尾辞を加えた整形済みの値を返します。\n   */\n  format: (preprocessedValue: string) => string;\n};\n\ntype Preset =\n  | 'postalCode'\n  | 'corporateNumber'\n  | 'invoiceRegistrationCompanyNumber';\n\ntype Props = (\n  | {\n      /**\n       * Specify a preset formatter. /\n       * プリセットのフォーマッターを指定します。\n       */\n      preset: Preset;\n      formatter?: undefined;\n    }\n  | {\n      /**\n       * Specify a custom formatter. /\n       * 任意のフォーマッターを指定します。\n       */\n      formatter: Formatter;\n      preset?: undefined;\n    }\n) & {\n  /**\n   * A callback which receives a preprocessed value without formatting, including no delimiters nor pre/suffixes. /\n   * 書式反映前の下処理段階の値が渡されるコールバックです。桁区切り文字や接頭辞・接尾辞などを含まない値を取得できます。\n   */\n  onChangePreprocessedValue?: (preprocessedValue: string) => any;\n  /**\n   * A callback which receives a formatted value. /\n   * 整形済みの値が渡されるコールバックです。\n   */\n  onChangeFormattedValue?: (formattedValue: string) => any;\n} & Omit<\n    React.ComponentPropsWithRef<typeof TextField>,\n    'hideSpinner' | 'maxLength' | 'max' | 'min' | 'step' | 'type'\n  >;\n\nconst presetFormatters: Record<Preset, Formatter> = {\n  postalCode: {\n    preprocess: (v) => v.normalize('NFKC').replace(/[-\\s]/g, ''),\n    format: (v) => v.replace(/^(.{3})(.+)/, '$1-$2'),\n  },\n  corporateNumber: {\n    preprocess: (v) => v.normalize('NFKC').replace(/[-\\s]/g, ''),\n    format: (v) =>\n      v.replace(/^(.{1})(.{4})?(.{4})?(.+)/, (_, p1, p2, p3, p4) =>\n        [p1, p2, p3, p4].filter((p) => p != null).join(' ')\n      ),\n  },\n  invoiceRegistrationCompanyNumber: {\n    preprocess: (v) => v.normalize('NFKC').replace(/^[tT]|[-\\s]/g, ''),\n    format: (v) => `T${presetFormatters.corporateNumber.format(v)}`,\n  },\n};\n\n/**\n * 入力された文字を自動的に整形する入力欄です。\n *\n * ## 書式の指定\n *\n *  `preset` で書式を指定できます。\n *\n * | preset | 書式 | 用途 |\n * |:--|:--|:--|\n * | `postalCode` | `###-####` | 郵便番号 |\n * | `corporateNumber` | `# #### #### ####` | 法人番号 |\n * | `invoiceRegistrationCompanyNumber` | `T# #### #### ####` | 適格請求書発行事業者登録番号 |\n *\n *  また `formatter` を指定することで任意の書式に整形することも可能です。\n *\n * ## 値の参照\n *\n * 値を参照する際は `onChangePreprocessedValue` または `onChangeFormattedValue` をご利用ください。\n *\n * `onChange` は処理前の値が参照されるため、表示内容と異なる値が参照されることがあります。\n *\n * なおいずれの値も、桁あふれや不正な文字の除去等は行われません。\n *\n */\nexport default function FormattedTextField({ ...props }: Props): ReactElement {\n  const { onChange, onChangePreprocessedValue, onChangeFormattedValue } = props;\n  const [value, setValue] = useState<string>(props.value ?? '');\n  const [preprocessedValue, setPreprocessedValue] = useState<string>('');\n  const [formattedValue, setFormattedValue] = useState<string>('');\n\n  const onChangeInternal = useCallback(\n    (e) => {\n      setValue(e.target.value ?? '');\n      onChange?.(e);\n    },\n    [onChange]\n  );\n\n  const { format, preprocess } =\n    props.formatter ?? presetFormatters[props.preset];\n\n  useEffect(() => {\n    setPreprocessedValue(preprocess ? preprocess(value) : value);\n  }, [value, preprocess]);\n\n  useEffect(() => {\n    setFormattedValue(format(preprocessedValue));\n  }, [preprocessedValue, format]);\n\n  useEffect(() => {\n    onChangePreprocessedValue?.(preprocessedValue);\n  }, [onChangePreprocessedValue, preprocessedValue]);\n\n  useEffect(() => {\n    onChangeFormattedValue?.(formattedValue);\n  }, [onChangeFormattedValue, formattedValue]);\n\n  return (\n    <TextField\n      {...{\n        ...props,\n        onChange: onChangeInternal,\n        value: formattedValue,\n      }}\n    />\n  );\n}\n"
  },
  {
    "path": "src/lv2/formFields/NumeralCodeInput.stories.tsx",
    "content": "import * as React from 'react';\nimport { commonKnobs } from '../../../stories';\nimport NumeralCodeInput from './NumeralCodeInput';\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\n\nexport default {\n  component: NumeralCodeInput,\n};\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport const TextFieldComponent = () => {\n  const ref = React.createRef<HTMLInputElement>();\n  return (\n    <NumeralCodeInput\n      type={\n        select(\n          'Type',\n          {\n            Text: 'text',\n            Tel: 'tel',\n            None: '',\n          },\n          '',\n          'TextField'\n        ) || undefined\n      }\n      value={text('Value', '0120', 'NumeralCodeInput')}\n      label={text(\n        'Label',\n        'ここの文字列はaria-labelとして使用されます',\n        'NumeralCodeInput'\n      )}\n      placeholder={text('Placeholder', '', 'NumeralCodeInput')}\n      required={boolean('Required', false, 'NumeralCodeInput')}\n      disabled={boolean('Disabled', false, 'NumeralCodeInput')}\n      error={boolean('Error', false, 'NumeralCodeInput')}\n      small={boolean('Small', false, 'NumeralCodeInput')}\n      large={boolean('Large', false, 'NumeralCodeInput')}\n      width={select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n        },\n        'medium',\n        'NumeralCodeInput'\n      )}\n      autoComplete={select(\n        'AutoComplete',\n        {\n          off: 'off',\n          on: 'on',\n          name: 'name',\n          'honorific-prefix': 'honorific-prefix',\n          'given-name': 'given-name',\n          'additional-name': 'additional-name',\n          'family-name': 'family-name',\n          'honorific-suffix': 'honorific-suffix',\n          nickname: 'nickname',\n          email: 'email',\n          username: 'username',\n          'new-password': 'new-password',\n          'current-password': 'current-password',\n          'one-time-code': 'one-time-code',\n          'organization-title': 'organization-title',\n          organization: 'organization',\n          'street-address': 'street-address',\n          'address-line1': 'address-line1',\n          'address-line2': 'address-line2',\n          'address-line3': 'address-line3',\n          'address-level4': 'address-level4',\n          'address-level3': 'address-level3',\n          'address-level2': 'address-level2',\n          'address-level1': 'address-level1',\n          country: 'country',\n          'country-name': 'country-name',\n          'postal-code': 'postal-code',\n          'cc-name': 'cc-name',\n          'cc-given-name': 'cc-given-name',\n          'cc-additional-name': 'cc-additional-name',\n          'cc-family-name': 'cc-family-name',\n          'cc-number': 'cc-number',\n          'cc-exp': 'cc-exp',\n          'cc-exp-month': 'cc-exp-month',\n          'cc-exp-year': 'cc-exp-year',\n          'cc-csc': 'cc-csc',\n          'cc-type': 'cc-type',\n          'transaction-currency': 'transaction-currency',\n          'transaction-amount': 'transaction-amount',\n          language: 'language',\n          bday: 'bday',\n          'bday-day': 'bday-day',\n          'bday-month': 'bday-month',\n          'bday-year': 'bday-year',\n          sex: 'sex',\n          tel: 'tel',\n          'tel-country-code': 'tel-country-code',\n          'tel-national': 'tel-national',\n          'tel-area-code': 'tel-area-code',\n          'tel-local': 'tel-local',\n          'tel-extension': 'tel-extension',\n          impp: 'impp',\n          url: 'url',\n          photo: 'photo',\n        },\n        'off',\n        'NumeralCodeInput'\n      )}\n      ref={ref}\n      {...handlers}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const InteractiveSample = () => {\n  const ref = React.createRef<HTMLInputElement>();\n\n  const [value, setValue] = React.useState<string>('');\n  return (\n    <NumeralCodeInput\n      value={value}\n      onChange={(v) => setValue(v)}\n      type={\n        select(\n          'Type',\n          {\n            Text: 'text',\n            Tel: 'tel',\n            None: '',\n          },\n          '',\n          'TextField'\n        ) || undefined\n      }\n      label={text(\n        'Label',\n        'ここの文字列はaria-labelとして使用されます',\n        'NumeralCodeInput'\n      )}\n      placeholder={text('Placeholder', '', 'NumeralCodeInput')}\n      required={boolean('Required', false, 'NumeralCodeInput')}\n      disabled={boolean('Disabled', false, 'NumeralCodeInput')}\n      error={boolean('Error', false, 'NumeralCodeInput')}\n      small={boolean('Small', false, 'NumeralCodeInput')}\n      large={boolean('Large', false, 'NumeralCodeInput')}\n      width={select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n        },\n        'medium',\n        'NumeralCodeInput'\n      )}\n      autoComplete={select(\n        'AutoComplete',\n        {\n          off: 'off',\n          on: 'on',\n          name: 'name',\n          'honorific-prefix': 'honorific-prefix',\n          'given-name': 'given-name',\n          'additional-name': 'additional-name',\n          'family-name': 'family-name',\n          'honorific-suffix': 'honorific-suffix',\n          nickname: 'nickname',\n          email: 'email',\n          username: 'username',\n          'new-password': 'new-password',\n          'current-password': 'current-password',\n          'one-time-code': 'one-time-code',\n          'organization-title': 'organization-title',\n          organization: 'organization',\n          'street-address': 'street-address',\n          'address-line1': 'address-line1',\n          'address-line2': 'address-line2',\n          'address-line3': 'address-line3',\n          'address-level4': 'address-level4',\n          'address-level3': 'address-level3',\n          'address-level2': 'address-level2',\n          'address-level1': 'address-level1',\n          country: 'country',\n          'country-name': 'country-name',\n          'postal-code': 'postal-code',\n          'cc-name': 'cc-name',\n          'cc-given-name': 'cc-given-name',\n          'cc-additional-name': 'cc-additional-name',\n          'cc-family-name': 'cc-family-name',\n          'cc-number': 'cc-number',\n          'cc-exp': 'cc-exp',\n          'cc-exp-month': 'cc-exp-month',\n          'cc-exp-year': 'cc-exp-year',\n          'cc-csc': 'cc-csc',\n          'cc-type': 'cc-type',\n          'transaction-currency': 'transaction-currency',\n          'transaction-amount': 'transaction-amount',\n          language: 'language',\n          bday: 'bday',\n          'bday-day': 'bday-day',\n          'bday-month': 'bday-month',\n          'bday-year': 'bday-year',\n          sex: 'sex',\n          tel: 'tel',\n          'tel-country-code': 'tel-country-code',\n          'tel-national': 'tel-national',\n          'tel-area-code': 'tel-area-code',\n          'tel-local': 'tel-local',\n          'tel-extension': 'tel-extension',\n          impp: 'impp',\n          url: 'url',\n          photo: 'photo',\n        },\n        'off',\n        'NumeralCodeInput'\n      )}\n      ref={ref}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const AcceptHyphen = () => {\n  const [value, setValue] = React.useState<string>('');\n  return (\n    <NumeralCodeInput\n      value={value}\n      onChange={(v) => setValue(v)}\n      acceptSymbols={['-', '_']}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/NumeralCodeInput.tsx",
    "content": "import * as React from 'react';\nimport TextField from '../../lv1/forms/TextField';\nimport { Ascii } from '../../utilities';\n\ntype Props = Omit<\n  React.ComponentProps<typeof TextField>,\n  'onChange' | 'type' | 'min' | 'max' | 'step'\n> & {\n  /**\n   * `input` 要素の `type` 属性に使用します。\n   *\n   * 電話番号の入力に使用する場合のみ、`tel` を使用してください（IMEをオフにするために `tel` を使用しないでください）\n   */\n  type?: 'text' | 'tel';\n  onChange?: (value: string) => void;\n  acceptSymbols?: string[];\n};\n\nconst NumeralCodeInputInternal: React.ForwardRefRenderFunction<\n  HTMLInputElement,\n  Props\n> = (props: Props, ref?: React.Ref<HTMLInputElement>) => {\n  const { acceptSymbols, value } = props;\n  const [showingValue, setShowingValue] = React.useState(value || '');\n  const [isFocused, setFocused] = React.useState(false);\n\n  React.useEffect(() => {\n    if (!isFocused) {\n      setShowingValue(value || '');\n    }\n  }, [isFocused, value]);\n\n  const pattern = new RegExp(\n    `[^0-9${acceptSymbols ? acceptSymbols.join('').replace('-', '\\\\-') : ''}]`,\n    'g'\n  );\n\n  return (\n    <TextField\n      {...props}\n      value={showingValue}\n      onChange={(e) => {\n        const currentValue = e.target.value;\n        const formatedValue = Ascii.zenkakuToHankaku(currentValue).replace(\n          pattern,\n          ''\n        );\n        setShowingValue(currentValue);\n        props.onChange && props.onChange(formatedValue);\n      }}\n      onBlur={(e) => {\n        setFocused(false);\n        setShowingValue(props.value || '');\n        props.onBlur && props.onBlur(e);\n      }}\n      onFocus={(e) => {\n        setFocused(true);\n        props.onFocus && props.onFocus(e);\n      }}\n      ref={ref}\n    />\n  );\n};\n\n/**\n * 電話番号・郵便番号・口座番号のように、数値ではないが数字によって入力する項目に使用できるテキストフィールドです。\n *\n * - 仕様の多くは `TextField` と共通しています\n * - ユーザーの入力値は、表示上はフィールドからフォーカスを外した時点で数字以外の文字は除去されます\n *   - ユーザーの入力を妨げないよう、入力中（フォーカス中）は表示される値を変化させないようになっています\n *   - `onChange` の発火は、ユーザーのキー入力ごとに行われます\n * - 全角文字は半角文字に自動で変換されます\n * - 数字ではなく、数値を扱う場合には `DigitsInput` や `type=\"number\"` にした `TextField` を使用してください\n *   - 入力値として 0 で始まる文字列を期待する場合にはこのコンポーネントを使用してください\n * - `acceptSymbols` に文字の配列を渡すことで、数字以外の文字を許容することができます\n *   -  たとえば `acceptSymbols={['-']}` とすることで、ハイフンの入力を許容することができます\n */\nconst NumeralCodeInput = React.forwardRef<HTMLInputElement, Props>(\n  NumeralCodeInputInternal\n);\nexport default NumeralCodeInput;\n"
  },
  {
    "path": "src/lv2/formFields/PasswordField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { PasswordField } from './PasswordField';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: PasswordField,\n};\n\nexport const PasswordFieldComponent = () => (\n  <PasswordField\n    label={text('Label', 'パスワードフィールドのサンプル', 'PasswordField')}\n    required={boolean('Required', false, 'PasswordField')}\n    disabled={boolean('Disabled', false, 'PasswordField')}\n    error={boolean('Error', false, 'PasswordField')}\n    small={boolean('Small', false, 'PasswordField')}\n    large={boolean('Large', false, 'PasswordField')}\n    width={select(\n      'Width',\n      {\n        XSmall: 'xSmall',\n        Small: 'small',\n        Medium: 'medium',\n        Large: 'large',\n        Full: 'full',\n      },\n      'medium',\n      'PasswordField'\n    )}\n    autoComplete={select(\n      'AutoComplete',\n      {\n        off: 'off',\n        'new-password': 'new-password',\n        'current-password': 'current-password',\n      },\n      'off',\n      'PasswordField'\n    )}\n    suffix={text('Suffix', '', 'PasswordField')}\n    loading={boolean('Loading', false, 'PasswordField')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/formFields/PasswordField.tsx",
    "content": "import * as React from 'react';\nimport { MdVisibility, MdVisibilityOff } from 'react-icons/md';\nimport { TextField } from '../../lv1';\nimport { isEdge } from '../../utilities/browsers';\n\ntype Props = {\n  autoComplete?: 'current-password' | 'new-password' | 'off';\n} & Omit<\n  React.ComponentPropsWithRef<typeof TextField>,\n  | 'type'\n  | 'autoComplete'\n  | 'IconComponent'\n  | 'iconLabel'\n  | 'onIconClick'\n  | 'onIconFocus'\n  | 'onIconBlur'\n  | 'min'\n  | 'max'\n  | 'step'\n  | 'maxLength'\n>;\n\n/**\n * パスワード表示ボタンのついたパスワード入力フィールドを表示します。\n * It provides password input field with revealing password button.\n *\n * - Microsoft Edgeの場合は、ブラウザがパスワード表示ボタンを提供するため、ただ `type=\"password\"` が指定されただけのフィールドをrenderします\n */\nexport const PasswordField: React.FC<Props> = ({ ...props }) => {\n  const [isPasswordVisible, setPasswordVisible] = React.useState(false);\n  const timeoutRef = React.useRef<number | null>(null);\n\n  const setBlurTimeout = () => {\n    timeoutRef.current = window.setTimeout(() => {\n      setPasswordVisible(false);\n    }, 300);\n  };\n  const clearBlurTimeout = () => {\n    if (timeoutRef.current) {\n      window.clearTimeout(timeoutRef.current);\n      timeoutRef.current = null;\n    }\n  };\n  React.useEffect(() => () => clearBlurTimeout());\n\n  return isEdge() ? (\n    // Edgeだと ::ms-reveal でパスワード表示ボタンが出てくるので、ただの type=\"password\" なTextFieldを返す\n    <TextField type=\"password\" {...props} />\n  ) : (\n    <TextField\n      type={isPasswordVisible ? 'text' : 'password'}\n      IconComponent={isPasswordVisible ? MdVisibilityOff : MdVisibility}\n      iconLabel={isPasswordVisible ? 'パスワードを隠す' : 'パスワードを表示'}\n      onIconClick={() => setPasswordVisible(!isPasswordVisible)}\n      {...{\n        ...props,\n        onBlur: (e) => {\n          setBlurTimeout();\n          props.onBlur && props.onBlur(e);\n        },\n        onFocus: (e) => {\n          clearBlurTimeout();\n          props.onFocus && props.onFocus(e);\n        },\n        onIconBlur: setBlurTimeout,\n        onIconFocus: clearBlurTimeout,\n      }}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/TimeInput.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { CheckBox, FormControlLabel, ReadOnlyField } from '../..';\nimport TimeInput from './TimeInput';\n\nexport default {\n  component: TimeInput,\n};\n\nconst handlers = actions({\n  onBlur: 'onBlur',\n  onChange: 'onChange',\n  onFocus: 'onFocus',\n  onInput: 'onInput',\n  onKeyDown: 'onKeyDown',\n});\n\nexport const TimeInputComponent = () => (\n  <TimeInput\n    value={text('Value', '', 'TimeInput')}\n    nullable={boolean('Nullable', false, 'TimeInput')}\n    maxTime={text('maxTime', '', 'TimeInput')}\n    minTime={text('minTime', '', 'TimeInput')}\n    placeholder={text('Placeholder', '', 'TimeInput')}\n    required={boolean('Required', false, 'TimeInput')}\n    disabled={boolean('Disabled', false, 'TimeInput')}\n    error={boolean('Error', false, 'TimeInput')}\n    small={boolean('Small', false, 'TimeInput')}\n    large={boolean('Large', false, 'TimeInput')}\n    width={\n      select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n          undefined: '',\n        },\n        '',\n        'TimeInput'\n      ) || undefined\n    }\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <TimeInput mr={1} />\n    <TimeInput mr={1} disabled />\n    <TimeInput mr={1} error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <TimeInput mr={1} small />\n    <TimeInput mr={1} small disabled />\n    <TimeInput mr={1} small error />\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <TimeInput mr={1} large />\n    <TimeInput mr={1} large disabled />\n    <TimeInput mr={1} large error />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [value, setValue] = React.useState<string | null>('00:00');\n  const [isNullable, setIsNullable] = React.useState<boolean>(false);\n  const [maxTime, setMaxTime] = React.useState<string | undefined>(undefined);\n  const [minTime, setMinTime] = React.useState<string | undefined>(undefined);\n\n  return (\n    <>\n      <TimeInput\n        maxTime={maxTime}\n        minTime={minTime}\n        mr={1.5}\n        nullable={isNullable}\n        onChange={(value: string | null) => {\n          setValue(value);\n        }}\n        value={value}\n      />\n      <CheckBox\n        checked={isNullable}\n        mr={1.5}\n        onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n          setIsNullable(e.target.checked)\n        }\n      >\n        nullable\n      </CheckBox>\n      <FormControlLabel htmlFor=\"minTime\">minTime</FormControlLabel>\n      <TimeInput\n        id=\"minTime\"\n        mr={1.5}\n        nullable\n        onChange={(v) => {\n          setMinTime(v ?? undefined);\n        }}\n        value={minTime}\n      />\n      <FormControlLabel htmlFor=\"maxTime\">maxTime</FormControlLabel>\n      <TimeInput\n        id=\"maxTime\"\n        mr={1.5}\n        nullable\n        onChange={(v) => {\n          setMaxTime(v ?? undefined);\n        }}\n        value={maxTime}\n      />\n      <ReadOnlyField\n        value={`current value: ${value === null ? 'null' : value}`}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/TimeInput.tsx",
    "content": "import * as React from 'react';\nimport TextField from '../../lv1/forms/TextField';\nimport { Ascii, TimeString } from '../../utilities';\nimport { CommonProps } from '../../utilities/commonProps';\n\ntype Props = Pick<\n  React.ComponentProps<typeof TextField>,\n  | 'id'\n  | 'label'\n  | 'labelledby'\n  | 'placeholder'\n  | 'name'\n  | 'required'\n  | 'autofocus'\n  | 'disabled'\n  | 'error'\n  | 'small'\n  | 'large'\n  | 'alignCenter'\n  | 'alignRight'\n  | 'width'\n  | 'onInput'\n  | 'onFocus'\n  | 'onBlur'\n  | 'onKeyDown'\n  | 'onKeyUp'\n  | keyof CommonProps\n> & {\n  /**\n   * 最小値を指定します\n   */\n  minTime?: string;\n  /**\n   * 最大値を指定します\n   */\n  maxTime?: string;\n  /**\n   * 空値の入力を許可します\n   */\n  nullable?: boolean;\n  onChange?: (value: string | null) => void;\n  value?: string | null;\n};\n\nconst useHandleValue = ({\n  minTime,\n  maxTime,\n  nullable,\n  onBlur,\n  onChange,\n  onFocus,\n  onKeyDown,\n  value,\n}: Pick<\n  Props,\n  | 'minTime'\n  | 'maxTime'\n  | 'nullable'\n  | 'onBlur'\n  | 'onChange'\n  | 'onFocus'\n  | 'onKeyDown'\n  | 'value'\n>) => {\n  // hh:mm に変換する\n  const convert = React.useCallback(\n    (value?: string | null) => {\n      return !value && nullable\n        ? null\n        : TimeString.convert(\n            Ascii.zenkakuToHankaku(value ?? ''),\n            minTime,\n            maxTime\n          );\n    },\n    [nullable, minTime, maxTime]\n  );\n  const [isFocused, setFocused] = React.useState(false);\n  const [showingValue, setShowingValue] = React.useState(convert(value) ?? '');\n  const [selectionRange, setSelectionRange] = React.useState<number[] | null>(\n    null\n  );\n  const ref = React.useRef<HTMLInputElement>(null);\n  React.useEffect(() => {\n    // 非フォーカス時のみ value の値が変わった場合に表示値を更新する\n    !isFocused && setShowingValue(convert(value) ?? '');\n  }, [convert, isFocused, setShowingValue, value]);\n  React.useEffect(() => {\n    // 値が変わった場合に選択範囲を再設定する\n    if (selectionRange) {\n      const [start, end] = selectionRange;\n      ref.current?.setSelectionRange(start, end);\n    }\n  }, [showingValue, selectionRange]);\n\n  const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n    setFocused(false);\n    const value = e.target.value;\n    setShowingValue(convert(value) ?? '');\n    setSelectionRange(null);\n    onBlur && onBlur(e);\n  };\n  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const value = e.target.value;\n    setShowingValue(value);\n    onChange && onChange(convert(value));\n  };\n  const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n    setFocused(true);\n    onFocus && onFocus(e);\n  };\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    // 上下矢印キー押下時に時間を増減する\n    if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n      e.preventDefault();\n      // キャレット位置を取得して、:より前なら時間、後なら分を対象にする\n      const position = e.currentTarget.selectionEnd ?? 0;\n      const regexp = /[:：]/g;\n      const forward =\n        regexp.test(e.currentTarget.value) && regexp.lastIndex > position;\n      const offset = e.key === 'ArrowUp' ? 1 : -1;\n\n      // 時間 or 分を増減\n      let hours = TimeString.getHour(showingValue);\n      let minutes = TimeString.getMin(showingValue);\n      if (forward) {\n        hours += offset;\n      } else {\n        minutes += offset * 10;\n      }\n      // 操作の結果 0min 以下だった場合は 00:00 に修正する\n      if (hours * 60 + minutes < 0) {\n        hours = 0;\n        minutes = 0;\n      }\n\n      const timeString = TimeString.createTimeString(hours, minutes);\n      const newValue = TimeString.convert(timeString, minTime, maxTime);\n\n      // caret の選択範囲を操作中の項目に設定するために range を計算する\n      let range: number[];\n      if (forward) {\n        range = [0, newValue.indexOf(':')];\n      } else {\n        range = [newValue.indexOf(':') + 1, newValue.length];\n      }\n\n      setShowingValue(newValue);\n      setSelectionRange(range);\n\n      onChange && onChange(newValue);\n    } else {\n      setSelectionRange(null);\n    }\n    onKeyDown && onKeyDown(e);\n  };\n\n  return {\n    handleBlur,\n    handleChange,\n    handleFocus,\n    handleKeyDown,\n    ref,\n    showingValue,\n  };\n};\n\nconst TimeInput: React.FC<Props> = (props: Props) => {\n  const {\n    large,\n    minTime,\n    maxTime,\n    nullable,\n    onBlur,\n    onChange,\n    onFocus,\n    onKeyDown,\n    value,\n    // large の場合は幅が収まらないので一回り大きくする\n    width = large ? 'small' : 'xSmall',\n    ...others\n  } = props;\n\n  const {\n    handleBlur,\n    handleChange,\n    handleFocus,\n    handleKeyDown,\n    ref,\n    showingValue,\n  } = useHandleValue({\n    minTime,\n    maxTime,\n    nullable,\n    onBlur,\n    onChange,\n    onFocus,\n    onKeyDown,\n    value,\n  });\n\n  return (\n    <TextField\n      {...others}\n      autoComplete=\"off\"\n      large={large}\n      onBlur={handleBlur}\n      onChange={handleChange}\n      onFocus={handleFocus}\n      onKeyDown={handleKeyDown}\n      ref={ref}\n      value={showingValue}\n      width={width}\n    />\n  );\n};\n\nexport default TimeInput;\n"
  },
  {
    "path": "src/lv2/formFields/TimeLengthInput.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { CheckBox, ReadOnlyField } from '../..';\nimport TimeLengthInput from './TimeLengthInput';\n\nexport default {\n  component: TimeLengthInput,\n};\n\nconst handlers = actions({\n  onBlur: 'onBlur',\n  onChange: 'onChange',\n  onFocus: 'onFocus',\n  onInput: 'onInput',\n  onKeyDown: 'onKeyDown',\n});\n\nexport const TimeLengthInputComponent = () => (\n  <TimeLengthInput\n    value={number('Value', 0, undefined, 'TimeLengthInput')}\n    nullable={boolean('Nullable', false, 'TimeLengthInput')}\n    placeholder={text('Placeholder', '', 'TimeLengthInput')}\n    required={boolean('Required', false, 'TimeLengthInput')}\n    disabled={boolean('Disabled', false, 'TimeLengthInput')}\n    error={boolean('Error', false, 'TimeLengthInput')}\n    small={boolean('Small', false, 'TimeLengthInput')}\n    large={boolean('Large', false, 'TimeLengthInput')}\n    width={\n      select(\n        'Width',\n        {\n          XSmall: 'xSmall',\n          Small: 'small',\n          Medium: 'medium',\n          Large: 'large',\n          Full: 'full',\n          undefined: '',\n        },\n        '',\n        'TimeLengthInput'\n      ) || undefined\n    }\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const Default = () => (\n  <>\n    <TimeLengthInput mr={1} />\n    <TimeLengthInput mr={1} disabled />\n    <TimeLengthInput mr={1} error />\n  </>\n);\n\nexport const Small = () => (\n  <>\n    <TimeLengthInput mr={1} small />\n    <TimeLengthInput mr={1} small disabled />\n    <TimeLengthInput mr={1} small error />\n  </>\n);\n\nexport const Large = () => (\n  <>\n    <TimeLengthInput mr={1} large />\n    <TimeLengthInput mr={1} large disabled />\n    <TimeLengthInput mr={1} large error />\n  </>\n);\n\nexport const InteractiveSample = () => {\n  const [value, setValue] = React.useState<number | null>(0);\n  const [isNullable, setIsNullable] = React.useState<boolean>(false);\n\n  return (\n    <>\n      <TimeLengthInput\n        mr={1.5}\n        nullable={isNullable}\n        onChange={(value: number | null) => {\n          setValue(value);\n        }}\n        value={value}\n      />\n      <CheckBox\n        checked={isNullable}\n        mr={1.5}\n        onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n          setIsNullable(e.target.checked)\n        }\n      >\n        nullable\n      </CheckBox>\n      <ReadOnlyField\n        value={`current value: ${value === null ? 'null' : value}`}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/formFields/TimeLengthInput.tsx",
    "content": "import * as React from 'react';\nimport TimeInput from './TimeInput';\nimport { Mins } from '../../utilities';\nimport { CommonProps } from '../../utilities/commonProps';\n\ntype Props = Pick<\n  React.ComponentProps<typeof TimeInput>,\n  | 'id'\n  | 'label'\n  | 'labelledby'\n  | 'placeholder'\n  | 'name'\n  | 'required'\n  | 'autofocus'\n  | 'disabled'\n  | 'error'\n  | 'small'\n  | 'large'\n  | 'alignCenter'\n  | 'alignRight'\n  | 'width'\n  | 'onInput'\n  | 'onFocus'\n  | 'onBlur'\n  | 'onKeyDown'\n  | 'onKeyUp'\n  | 'nullable'\n  | keyof CommonProps\n> & {\n  onChange?: (value: number | null) => void;\n  value?: number | null;\n};\n\nconst useHandleValue = ({\n  nullable,\n  onBlur,\n  onChange,\n  onFocus,\n  value,\n}: Pick<Props, 'nullable' | 'onBlur' | 'onChange' | 'onFocus' | 'value'>) => {\n  // mins を hh:mm に変換する\n  const numberToString = React.useCallback(\n    (value?: number | null) => {\n      return value === null && nullable ? null : Mins.minToStr(value ?? 0);\n    },\n    [nullable]\n  );\n  // hh:mm を mins に変換する\n  const stringToNumber = React.useCallback(\n    (value?: string | null) => {\n      return value === null && nullable ? null : Mins.strToMin(value ?? '');\n    },\n    [nullable]\n  );\n  const [isFocused, setFocused] = React.useState(false);\n  const [showingValue, setShowingValue] = React.useState(numberToString(value));\n  React.useEffect(() => {\n    // 非フォーカス時のみ value の値が変わった場合に表示値を更新する\n    !isFocused && setShowingValue(numberToString(value));\n  }, [isFocused, numberToString, setShowingValue, value]);\n\n  const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n    setFocused(false);\n    onBlur && onBlur(e);\n  };\n  const handleChange = (value: string | null) => {\n    setShowingValue(value);\n    onChange && onChange(stringToNumber(value));\n  };\n  const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n    setFocused(true);\n    onFocus && onFocus(e);\n  };\n\n  return {\n    handleBlur,\n    handleChange,\n    handleFocus,\n    showingValue,\n  };\n};\n\nconst TimeLengthInput: React.FC<Props> = (props: Props) => {\n  const { nullable, onBlur, onChange, onFocus, value, ...others } = props;\n\n  const { handleBlur, handleChange, handleFocus, showingValue } =\n    useHandleValue({\n      nullable,\n      onBlur,\n      onChange,\n      onFocus,\n      value,\n    });\n\n  return (\n    <TimeInput\n      {...others}\n      nullable={nullable}\n      onBlur={handleBlur}\n      onChange={handleChange}\n      onFocus={handleFocus}\n      value={showingValue}\n    />\n  );\n};\n\nexport default TimeLengthInput;\n"
  },
  {
    "path": "src/lv2/globalNavi/GlobalNavi.stories.tsx",
    "content": "import * as React from 'react';\nimport {\n  MdHome,\n  MdInbox,\n  MdAssessment,\n  MdLibraryBooks,\n  MdCreditCard,\n  MdSettings,\n  MdPerson,\n  MdEventNote,\n  MdReceipt,\n  MdDescription,\n  MdRouter,\n  MdHelp,\n} from 'react-icons/md';\n\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\nimport GlobalNavi from './GlobalNavi';\nimport { boolean } from '@storybook/addon-knobs';\nimport { Button } from '../../lv1';\n\nexport default {\n  component: GlobalNavi,\n};\n\nexport const GlobalNaviComponent = () => (\n  <GlobalNavi\n    disableGutters={boolean('disableGutters', false, 'GlobalNavi')}\n    links={[\n      {\n        title: 'ホーム',\n        url: '#',\n        IconComponent: MdHome,\n        current: true,\n        'data-guide': 'home',\n        'data-test': 'ホーム',\n        'data-tracking': 'home',\n      },\n      {\n        title: '取引',\n        url: '#',\n        IconComponent: MdInbox,\n        'data-guide': 'transaction',\n        'data-test': '取引',\n        'data-tracking': 'transaction',\n      },\n      {\n        title: 'レポート',\n        url: '#',\n        IconComponent: MdAssessment,\n        'data-guide': 'report',\n        'data-test': 'レポート',\n        'data-tracking': 'report',\n      },\n      {\n        title: '決算',\n        url: '#',\n        IconComponent: MdLibraryBooks,\n        'data-guide': 'settlement',\n        'data-test': '決算',\n        'data-tracking': 'settlement',\n      },\n      {\n        title: '口座',\n        url: '#',\n        IconComponent: MdCreditCard,\n        'data-guide': 'account',\n        'data-test': '口座',\n        'data-tracking': 'account',\n      },\n      {\n        title: '設定',\n        url: '#',\n        IconComponent: MdSettings,\n        'data-guide': 'configuration',\n        'data-test': '設定',\n        'data-tracking': 'configuration',\n      },\n      {\n        title: 'リンク（with react-router）',\n        url: '#',\n        IconComponent: MdRouter,\n        onSelfWindowNavigation: action('onSelfWindowNavigation'),\n      },\n    ]}\n    hideHelpForm={boolean('hideHelpForm', false, 'GlobalNavi')}\n    {...commonKnobs()}\n  />\n);\n\nexport const SampleForHR = () => (\n  <GlobalNavi\n    label=\"メニュー\"\n    links={[\n      {\n        title: 'ホーム',\n        url: '#',\n        IconComponent: MdHome,\n        current: true,\n      },\n      {\n        title: '従業員',\n        url: '#',\n        IconComponent: MdPerson,\n      },\n      {\n        title: '勤怠',\n        url: '#',\n        IconComponent: MdEventNote,\n      },\n      {\n        title: '給与・賞与',\n        url: '#',\n        IconComponent: MdReceipt,\n      },\n      {\n        title: '書類',\n        url: '#',\n        IconComponent: MdDescription,\n      },\n      {\n        title: '設定',\n        url: '#',\n        IconComponent: MdSettings,\n      },\n    ]}\n    searchQueryParams={{\n      type: 'category',\n      id: '200193760',\n      empty_param: '',\n    }}\n    {...commonKnobs()}\n  />\n);\n\nexport const DisableGutters = () => (\n  <GlobalNavi\n    disableGutters\n    links={[\n      {\n        title: 'ホーム',\n        url: '#',\n        IconComponent: MdHome,\n        current: true,\n      },\n    ]}\n  />\n);\n\nexport const WithoutHelpForm = () => (\n  <GlobalNavi\n    links={[\n      {\n        title: 'ホーム',\n        url: '#',\n        IconComponent: MdHome,\n        current: true,\n      },\n    ]}\n    hideHelpForm\n  />\n);\n\nexport const WithSectionNode = () => (\n  <GlobalNavi\n    links={[\n      {\n        title: 'ホーム',\n        url: '#',\n        IconComponent: MdHome,\n        current: true,\n      },\n    ]}\n    sectionNode={\n      <Button IconComponent={MdHelp} appearance=\"tertiary\">\n        ヘルプ\n      </Button>\n    }\n  />\n);\n"
  },
  {
    "path": "src/lv2/globalNavi/GlobalNavi.tsx",
    "content": "import * as React from 'react';\nimport SearchField from '../../lv1/forms/SearchField';\nimport { MdHome } from 'react-icons/md';\nimport GlobalNaviButton from '../../lv1/buttons/GlobalNaviButton';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\n\nexport type LinkContent = {\n  title: string;\n  url: string;\n  IconComponent?: React.ElementType;\n  current?: boolean;\n  'data-guide'?: string;\n  'data-test'?: string;\n  'data-tracking'?: string;\n  'data-masking'?: boolean;\n} & SelfWindowNavigationProp;\ntype Props = {\n  /**\n   * min-width から Container の左右 margin 分の値を取り除きます。\n   */\n  disableGutters?: boolean;\n  /**\n   * nav要素の aria-label を指定します。\n   */\n  label?: string;\n  links?: LinkContent[];\n  searchUrl?: string;\n  /**\n   * 検索フォームを非表示にします。\n   */\n  hideHelpForm?: boolean;\n  /**\n   * 検索時に追加でクエリパラメータを付与します。\n   */\n  searchQueryParams?: { [key: string]: string };\n  /**\n   * グロナビの右側に表示する要素を指定します。（この値を指定すると強制的に検索フォームは非表示になります。）\n   */\n  sectionNode?: React.ReactNode;\n} & CommonProps;\n\nconst baseClass = 'vb-globalNavi';\nconst listClass = baseClass + 'List';\nconst defaultLinks: LinkContent[] = [\n  {\n    title: 'ホーム',\n    url: '/',\n    IconComponent: MdHome,\n    current: true,\n  },\n];\n\nfunction createLinks(links?: LinkContent[]): React.ReactNode[] {\n  const linkData = links ? links : defaultLinks;\n  return linkData.map(\n    (linkCont: LinkContent, index: number): React.ReactNode => (\n      <li className={listClass + '__item'} key={index}>\n        <GlobalNaviButton\n          IconComponent={linkCont.IconComponent}\n          current={linkCont.current}\n          href={linkCont.url}\n          onSelfWindowNavigation={linkCont.onSelfWindowNavigation}\n          data-guide={linkCont['data-guide']}\n          data-test={linkCont['data-test']}\n          data-tracking={linkCont['data-tracking']}\n          data-masking={linkCont['data-masking']}\n        >\n          {linkCont.title}\n        </GlobalNaviButton>\n      </li>\n    )\n  );\n}\n\nconst AdditionalQueryParams = ({\n  queryParams,\n}: {\n  queryParams: Props['searchQueryParams'] | undefined;\n}) => {\n  if (!queryParams) {\n    return null;\n  }\n\n  return (\n    <>\n      {Object.keys(queryParams).map((key) =>\n        queryParams[key] ? (\n          <input key={key} type=\"hidden\" name={key} value={queryParams[key]} />\n        ) : null\n      )}\n    </>\n  );\n};\n\nexport default function GlobalNavi(props: Props) {\n  const {\n    disableGutters = false,\n    label,\n    links,\n    searchUrl,\n    hideHelpForm,\n    searchQueryParams,\n    sectionNode,\n  } = props;\n  const actionUrl = searchUrl\n    ? searchUrl\n    : 'https://support.freee.co.jp/hc/ja/search';\n  return (\n    <nav\n      aria-label={label}\n      role=\"navigation\"\n      {...commonProps(props, baseClass, { disableGutters })}\n    >\n      <ul className={baseClass + 'List'}>{createLinks(links)}</ul>\n\n      {sectionNode && <div>{sectionNode}</div>}\n\n      {!sectionNode && !hideHelpForm && (\n        <form\n          action={actionUrl}\n          method=\"get\"\n          target=\"_blank\"\n          acceptCharset=\"UTF-8\"\n          autoComplete=\"off\"\n        >\n          <input name=\"utf8\" type=\"hidden\" value=\"✓\" />\n          <AdditionalQueryParams queryParams={searchQueryParams} />\n          <SearchField\n            label=\"ヘルプを検索\"\n            placeholder=\"ヘルプを検索\"\n            name=\"query\"\n            small\n          />\n        </form>\n      )}\n    </nav>\n  );\n}\n"
  },
  {
    "path": "src/lv2/guidanceMessage/GuidanceMessage.stories.tsx",
    "content": "import * as React from 'react';\n\nimport GuidanceMessage from './GuidanceMessage';\nimport ContentsBase from '../../lv1/bases/ContentsBase';\nimport WithSideContent from '../../lv1/layout/WithSideContent';\nimport BulletedList from '../bulletedList/BulletedList';\nimport Button from '../../lv1/buttons/Button';\nimport { MdLightbulb, MdCardGiftcard } from 'react-icons/md';\nimport { commonKnobs } from '../../../stories';\nimport { boolean, text, select } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport InlineLink from '../../lv1/buttons/InlineLink';\n\nexport default {\n  component: GuidanceMessage,\n};\n\nexport const GuidanceMessageComponent = () => (\n  <ContentsBase>\n    <GuidanceMessage\n      IconComponent={MdLightbulb}\n      verticalAlign={\n        select(\n          'verticalAlign',\n          { top: 'top', middle: 'middle' },\n          'middle',\n          'GuidanceMessage'\n        ) || undefined\n      }\n      width={\n        select(\n          'width',\n          { 'fit-content': 'fit-content', full: 'full' },\n          '',\n          'GuidanceMessage'\n        ) || undefined\n      }\n      inline={boolean('Inline', true, 'GuidanceMessage')}\n      small={boolean('Small', true, 'GuidanceMessage')}\n      renderCloseButton={(CloseButton) => (\n        <>{CloseButton && <CloseButton onClick={action('Closed')} />}</>\n      )}\n      {...commonKnobs()}\n    >\n      テキストのみ。またはテキストと\n      <InlineLink onClick={action('InlineLink: clicked')}>\n        InlineLink\n      </InlineLink>\n      を合わせる形を推奨しています\n    </GuidanceMessage>\n  </ContentsBase>\n);\n\nexport const WithoutCloseButton = () => (\n  <ContentsBase>\n    <GuidanceMessage\n      IconComponent={MdLightbulb}\n      verticalAlign={\n        select(\n          'verticalAlign',\n          { top: 'top', middle: 'middle' },\n          '',\n          'GuidanceMessage'\n        ) || undefined\n      }\n      width={\n        select(\n          'width',\n          { 'fit-content': 'fit-content', full: 'full' },\n          '',\n          'GuidanceMessage'\n        ) || undefined\n      }\n      inline={boolean('Inline', true, 'GuidanceMessage')}\n      small={boolean('Small', false, 'GuidanceMessage')}\n      url={text('URL', '', 'GuidanceMessage')}\n      target={text('Target', '', 'GuidanceMessage')}\n      rel={text('Rel', '', 'GuidanceMessage')}\n      onClick={action('click')}\n      onSelfWindowNavigation={action('selfWindowNavigation')}\n      {...commonKnobs()}\n    >\n      ここは自由領域です。文字だけでも良いですし、ボタンを置いたりもできます。\n    </GuidanceMessage>\n  </ContentsBase>\n);\n\nexport const WithButtonExample = () => (\n  <ContentsBase>\n    <GuidanceMessage\n      IconComponent={MdLightbulb}\n      verticalAlign={\n        select(\n          'verticalAlign',\n          { top: 'top', middle: 'middle' },\n          '',\n          'GuidanceMessage'\n        ) || undefined\n      }\n      width={\n        select(\n          'width',\n          { 'fit-content': 'fit-content', full: 'full' },\n          '',\n          'GuidanceMessage'\n        ) || undefined\n      }\n      {...commonKnobs()}\n      renderCloseButton={(CloseButton) => (\n        <WithSideContent\n          mt={0.5}\n          sideContent={\n            CloseButton && <CloseButton onClick={action('Closed')} />\n          }\n        >\n          <Button\n            onClick={(e) => {\n              e.stopPropagation();\n            }}\n          >\n            アクション\n          </Button>\n        </WithSideContent>\n      )}\n    >\n      <div>\n        ここは自由領域です。文字だけでも良いですし、ボタンを置いたりもできます。\n      </div>\n    </GuidanceMessage>\n  </ContentsBase>\n);\n\nexport const ClickableExample = () => (\n  <ContentsBase>\n    <GuidanceMessage\n      IconComponent={MdCardGiftcard}\n      inline\n      small={false}\n      verticalAlign=\"middle\"\n      onClick={action('Clicked')}\n      renderCloseButton={(CloseButton) => (\n        <>{CloseButton && <CloseButton onClick={action('Closed')} />}</>\n      )}\n      {...commonKnobs()}\n    >\n      <span>リリースメッセージ</span>\n    </GuidanceMessage>\n    inlineのときは横に要素をおけます\n  </ContentsBase>\n);\n\nexport const InteractiveSample = () => {\n  const [isClosed, setClosed] = React.useState(false);\n  return (\n    !isClosed && (\n      <ContentsBase>\n        <GuidanceMessage\n          IconComponent={MdLightbulb}\n          verticalAlign={\n            select(\n              'verticalAlign',\n              { top: 'top', middle: 'middle' },\n              '',\n              'GuidanceMessage'\n            ) || undefined\n          }\n          width={\n            select(\n              'width',\n              { 'fit-content': 'fit-content', full: 'full' },\n              '',\n              'GuidanceMessage'\n            ) || undefined\n          }\n          inline={boolean('Inline', false, 'GuidanceMessage')}\n          small={boolean('Small', false, 'GuidanceMessage')}\n          url={text('URL', '', 'GuidanceMessage')}\n          target={text('Target', '', 'GuidanceMessage')}\n          rel={text('Rel', '', 'GuidanceMessage')}\n          onClick={action('click')}\n          onSelfWindowNavigation={action('selfWindowNavigation')}\n          renderCloseButton={(CloseButton) => (\n            <>\n              {CloseButton && <CloseButton onClick={() => setClosed(true)} />}\n            </>\n          )}\n          {...commonKnobs()}\n        >\n          閉じるボタンを押すと、表示が消えるサンプルです。\n        </GuidanceMessage>\n      </ContentsBase>\n    )\n  );\n};\n\nexport const SmallSample = () => {\n  const [isClosed, setClosed] = React.useState(false);\n  return (\n    !isClosed && (\n      <ContentsBase>\n        <GuidanceMessage\n          IconComponent={MdCardGiftcard}\n          verticalAlign={\n            select(\n              'verticalAlign',\n              { top: 'top', middle: 'middle' },\n              '',\n              'GuidanceMessage'\n            ) || undefined\n          }\n          width={\n            select(\n              'width',\n              { 'fit-content': 'fit-content', full: 'full' },\n              '',\n              'GuidanceMessage'\n            ) || undefined\n          }\n          inline={true}\n          small={true}\n          url={text('URL', '', 'GuidanceMessage')}\n          target={text('Target', '', 'GuidanceMessage')}\n          rel={text('Rel', '', 'GuidanceMessage')}\n          onClick={action('click')}\n          onSelfWindowNavigation={action('selfWindowNavigation')}\n          renderCloseButton={(CloseButton) => (\n            <>\n              {CloseButton && <CloseButton onClick={() => setClosed(true)} />}\n            </>\n          )}\n          {...commonKnobs()}\n        >\n          inlineが指定されている場合にsmallを有効にできます。\n        </GuidanceMessage>\n      </ContentsBase>\n    )\n  );\n};\n\nexport const MultiLine = () => {\n  const [isClosed, setClosed] = React.useState(false);\n\n  return (\n    !isClosed && (\n      <ContentsBase>\n        <GuidanceMessage\n          IconComponent={MdCardGiftcard}\n          verticalAlign={'middle'}\n          width={\n            select(\n              'width',\n              { 'fit-content': 'fit-content', full: 'full' },\n              '',\n              'GuidanceMessage'\n            ) || undefined\n          }\n          inline={true}\n          url={text('URL', '', 'GuidanceMessage')}\n          target={text('Target', '', 'GuidanceMessage')}\n          rel={text('Rel', '', 'GuidanceMessage')}\n          onClick={action('click')}\n          onSelfWindowNavigation={action('selfWindowNavigation')}\n          renderCloseButton={(CloseButton) => (\n            <>\n              {CloseButton && <CloseButton onClick={() => setClosed(true)} />}\n            </>\n          )}\n          {...commonKnobs()}\n        >\n          ○○機能のアップデートがされました\n          <BulletedList\n            listContents={[\n              {\n                value:\n                  'お知らせしたい内容が複数行に渡る場合はこのように分けて書くことができます。',\n              },\n              { value: 'こんなことができるようになりました。' },\n            ]}\n          />\n        </GuidanceMessage>\n      </ContentsBase>\n    )\n  );\n};\n"
  },
  {
    "path": "src/lv2/guidanceMessage/GuidanceMessage.tsx",
    "content": "import * as React from 'react';\nimport commonProps, {\n  CommonProps,\n  pickCommonProps,\n} from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\nimport IconOnlyButton from '../../lv1/buttons/IconOnlyButton';\nimport { MdClose } from 'react-icons/md';\nimport { useResponsive } from '../../utilities/VibesProvider';\n\ntype CloseButtonProps = Pick<\n  Parameters<typeof IconOnlyButton>[0],\n  'onClick' | 'small'\n> &\n  CommonProps;\n\nconst CloseButton: React.FC<CloseButtonProps> = (props: CloseButtonProps) => {\n  const { onClick, small } = props;\n\n  return (\n    <IconOnlyButton\n      IconComponent={MdClose}\n      label=\"閉じる\"\n      small={small}\n      appearance={'tertiary'}\n      onClick={(e) => {\n        onClick && onClick(e);\n        e.stopPropagation();\n      }}\n      {...pickCommonProps(props)}\n    ></IconOnlyButton>\n  );\n};\n\nconst CloseSmallButton: React.FC<CloseButtonProps> = (\n  props: CloseButtonProps\n) => {\n  const { onClick } = props;\n\n  return <CloseButton onClick={onClick} small />;\n};\n\ntype Props = {\n  /**\n   * アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n   */\n  IconComponent?: React.ElementType;\n  /**\n   * アイコンを除くコンテンツが入ります。\n   * 内容には文字以外も含められ、配置も自由にできます。\n   */\n  children: React.ReactNode;\n  /**\n   * 閉じられる表示の場合に、CloseButtonを含む要素を入れます。\n   * 内容に対してinlineに置くことも、改行して置くこともできます。\n   */\n  renderCloseButton?: (\n    CloseButton?: React.FC<CloseButtonProps>\n  ) => React.ReactNode;\n  /**\n   * inline-blockとして配置したい場合に指定します\n   * デフォルトはblock要素です。\n   */\n  inline?: boolean;\n  /**\n   * 小さいサイズにしたい場合に指定します。\n   * ユースケースとしてinlineが指定された場合を想定しているため、inlineを指定しないとsmallを有効にできません。\n   * CloseButtonも合わせて小さくなります。\n   */\n  small?: boolean;\n  /**\n   * アイコンを含めたコンテンツの縦方向の揃えを指定できます。\n   * 指定がない場合は'top'になります。\n   */\n  verticalAlign?: 'top' | 'middle';\n  /**\n   * GuidanceMessageの横幅を、中身に応じて可変にするか、親要素の幅まで広げるかを指定できます。\n   * 指定がない場合は'fit-content'で、中身に応じて可変になります。\n   */\n  width?: 'fit-content' | 'full';\n  /**\n   * 表示全体をクリック可能にし、かつlinkとなる場合はurlで遷移先を指定できます。\n   *\n   * @deprecated\n   * 全体をclickableとさせる使用は廃止となるため、指定しないようにしてください。\n   */\n  url?: string;\n  /**\n   * linkになる場合に、targetを指定します。\n   *  @deprecated\n   * 全体をclickableとさせる使用は廃止となるため、指定しないようにしてください。\n   */\n  target?: string;\n  /**\n   * rel を指定します\n   *  @deprecated\n   * 全体をclickableとさせる使用は廃止となるため、指定しないようにしてください。\n   */\n  rel?: string;\n  /**\n   * @deprecated\n   * 全体をclickableとさせる使用は廃止となるため、指定しないようにしてください。\n   */\n  onClick?: React.MouseEventHandler;\n} & SelfWindowNavigationProp &\n  CommonProps;\n\n/**\n * ## 注意点\n * ＊現状のGuidanceMessageを廃止予定です。clickできる場合とできない場合を見た目から判別することが難しいため、全体クリックの使用は廃止し、inlineでの配置に絞る形で新しく用意する見込みです。\n *\n * block要素として利用したい場合は、MessageBlockのリリース情報(discovery)/アシスタンス（assistance）で対応ください。\n *\n * 暫定対応として、以下のように利用ください。\n * - 全体をclickableとさせないよう、url / onClickは指定しないでください。\n * - inlineかつsmallを指定し、クリックさせたい要素はchildrenに含めてください。（文中にInlineLinkを渡す形を推奨しています）\n * - verticalAlignのdefaultは'top'ですが、inlineかつsmallで改行がない形では'middle'を指定してください。\n *\n */\nconst GuidanceMessage: React.FC<Props> = (props: Props) => {\n  const {\n    IconComponent,\n    children,\n    renderCloseButton,\n    inline,\n    small,\n    verticalAlign = 'top',\n    width = 'fit-content',\n    url,\n    target,\n    rel,\n    onClick,\n    onSelfWindowNavigation,\n  } = props;\n\n  const className = 'vb-guidanceMessage';\n  const responsive = useResponsive();\n  const clickable = !!url || !!onClick;\n  const isSmall = inline && small;\n\n  const containerClassName = vbClassNames(`${className}__container`, {\n    modifier: {\n      responsive,\n      small: isSmall,\n      alignTop: verticalAlign === 'top',\n      alignMiddle: verticalAlign === 'middle',\n    },\n  });\n\n  const renderButton = (small?: boolean) =>\n    renderCloseButton &&\n    renderCloseButton(small ? CloseSmallButton : CloseButton);\n\n  const renderIconComponent = (IconComponent?: React.ElementType) =>\n    IconComponent && (\n      <IconComponent\n        className={vbClassNames(`${className}__icon`, {\n          modifier: {\n            small: isSmall,\n          },\n        })}\n        focusable={false}\n      />\n    );\n\n  return (\n    <div\n      {...commonProps(props, className, {\n        inline,\n        clickable,\n        widthFitContent: width === 'fit-content',\n        widthFull: width === 'full',\n      })}\n    >\n      {clickable ? (\n        url ? (\n          <div className={containerClassName}>\n            {renderIconComponent(IconComponent)}\n            <span\n              className={vbClassNames(`${className}__content`, {\n                modifier: {\n                  alignMiddle: verticalAlign === 'middle',\n                },\n              })}\n            >\n              <a\n                className={`${className}__link`}\n                href={url}\n                target={target}\n                rel={\n                  rel\n                    ? rel\n                    : target === '_blank'\n                    ? 'noopener noreferrer'\n                    : undefined\n                }\n                onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n                  if (onClick) {\n                    onClick(e);\n                  }\n                  const navigator = selfWindowNavigator(onSelfWindowNavigation);\n                  if (navigator) {\n                    navigator(e, url);\n                  }\n                }}\n              >\n                {children}\n              </a>\n              {renderButton(isSmall)}\n            </span>\n          </div>\n        ) : (\n          <div className={containerClassName}>\n            {renderIconComponent(IconComponent)}\n            <span\n              className={vbClassNames(`${className}__content`, {\n                modifier: {\n                  alignMiddle: verticalAlign === 'middle',\n                },\n              })}\n            >\n              <button className={`${className}__button`} onClick={onClick}>\n                {children}\n              </button>\n              {renderButton(isSmall)}\n            </span>\n          </div>\n        )\n      ) : (\n        <div className={containerClassName}>\n          {renderIconComponent(IconComponent)}\n          <span\n            className={vbClassNames(`${className}__content`, {\n              modifier: {\n                alignMiddle: verticalAlign === 'middle',\n              },\n            })}\n          >\n            {children}\n            {renderButton(isSmall)}\n          </span>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default GuidanceMessage;\n"
  },
  {
    "path": "src/lv2/guidedContent/GuidedContent.stories.tsx",
    "content": "import * as React from 'react';\n\nimport GuidedContent from './GuidedContent';\nimport SectionTitle from '../../lv1/typography/SectionTitle';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport ColumnBase from '../../lv1/bases/ColumnBase';\nimport TextField from '../../lv1/forms/TextField';\nimport DescriptionListCell from '../../lv1/lists/DescriptionListCell';\nimport BorderTableListCell from '../../lv1/lists/BorderTableListCell';\nimport Button from '../../lv1/buttons/Button';\nimport AccordionPanel from '../../lv2/accordionPanel/AccordionPanel';\nimport ButtonGroup from '../../lv2/buttonGroup/ButtonGroup';\nimport { VibesProvider } from '../../utilities';\n\nexport default {\n  component: GuidedContent,\n};\n\nexport const GuidedContentComponent = () => (\n  <GuidedContent\n    title={<SectionTitle>title content</SectionTitle>}\n    guide={<SectionTitle>guide content</SectionTitle>}\n    content={<SectionTitle>content</SectionTitle>}\n  />\n);\n\nexport const InteractiveSample = () => {\n  const [isOpen, setOpen] = React.useState(false);\n  return (\n    <GuidedContent\n      title={\n        <>\n          <SectionTitle>事業の目的を設定しましょう</SectionTitle>\n          <Paragraph>\n            事業目的とは、会社を設立するにあたり具体的に会社で何を事業とするのかを目的として設定するものです。事業目的の記載方法のポイントも参考にしましょう。\n          </Paragraph>\n        </>\n      }\n      guide={\n        <ColumnBase>\n          事業目的の設定の仕方\n          <AccordionPanel\n            title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n            onClick={() => setOpen(!isOpen)}\n          ></AccordionPanel>\n          <AccordionPanel\n            title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n            onClick={() => setOpen(!isOpen)}\n          ></AccordionPanel>\n          <AccordionPanel\n            title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n            onClick={() => setOpen(!isOpen)}\n          ></AccordionPanel>\n          <AccordionPanel\n            title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n            onClick={() => setOpen(!isOpen)}\n          ></AccordionPanel>\n          <AccordionPanel\n            title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n            onClick={() => setOpen(!isOpen)}\n          ></AccordionPanel>\n        </ColumnBase>\n      }\n      content={\n        <>\n          <table>\n            <tbody>\n              <tr>\n                <DescriptionListCell>\n                  <span>1.</span>\n                  <TextField label=\"テキストフィールド\" ml={0.5}></TextField>\n                  <Button appearance=\"secondary\" small ml={0.5}>\n                    削除\n                  </Button>\n                </DescriptionListCell>\n              </tr>\n              <tr>\n                <DescriptionListCell>\n                  <span>2.</span>\n                  <TextField label=\"テキストフィールド\" ml={0.5}></TextField>\n                  <Button appearance=\"secondary\" small ml={0.5}>\n                    削除\n                  </Button>\n                </DescriptionListCell>\n              </tr>\n              <tr>\n                <BorderTableListCell>\n                  <span>3.</span>\n                  <TextField label=\"テキストフィールド\" ml={0.5}></TextField>\n                  <Button appearance=\"secondary\" small ml={0.5}>\n                    削除\n                  </Button>\n                </BorderTableListCell>\n              </tr>\n            </tbody>\n          </table>\n          <ButtonGroup align=\"left\" mt={1}>\n            <Button primary>保存</Button>\n            <Button>キャンセル</Button>\n          </ButtonGroup>\n        </>\n      }\n    />\n  );\n};\n\nexport const ResponsiveGuidedContent = () => {\n  const [isOpen, setOpen] = React.useState(false);\n  return (\n    <VibesProvider fixedLayout={false}>\n      <GuidedContent\n        responsive\n        title={\n          <>\n            <SectionTitle>事業の目的を設定しましょう</SectionTitle>\n            <Paragraph>\n              事業目的とは、会社を設立するにあたり具体的に会社で何を事業とするのかを目的として設定するものです。事業目的の記載方法のポイントも参考にしましょう。\n            </Paragraph>\n          </>\n        }\n        guide={\n          <ColumnBase>\n            事業目的の設定の仕方\n            <AccordionPanel\n              title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n              onClick={() => setOpen(!isOpen)}\n            ></AccordionPanel>\n            <AccordionPanel\n              title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n              onClick={() => setOpen(!isOpen)}\n            ></AccordionPanel>\n            <AccordionPanel\n              title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n              onClick={() => setOpen(!isOpen)}\n            ></AccordionPanel>\n            <AccordionPanel\n              title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n              onClick={() => setOpen(!isOpen)}\n            ></AccordionPanel>\n            <AccordionPanel\n              title=\"Q. 許認可を取得するよっていがあるのですが・・・\"\n              onClick={() => setOpen(!isOpen)}\n            ></AccordionPanel>\n          </ColumnBase>\n        }\n        content={\n          <>\n            <table>\n              <tbody>\n                <tr>\n                  <DescriptionListCell>\n                    <span>1.</span>\n                    <TextField label=\"テキストフィールド\" ml={0.5}></TextField>\n                    <Button appearance=\"secondary\" small ml={0.5}>\n                      削除\n                    </Button>\n                  </DescriptionListCell>\n                </tr>\n                <tr>\n                  <DescriptionListCell>\n                    <span>2.</span>\n                    <TextField label=\"テキストフィールド\" ml={0.5}></TextField>\n                    <Button appearance=\"secondary\" small ml={0.5}>\n                      削除\n                    </Button>\n                  </DescriptionListCell>\n                </tr>\n                <tr>\n                  <BorderTableListCell>\n                    <span>3.</span>\n                    <TextField label=\"テキストフィールド\" ml={0.5}></TextField>\n                    <Button appearance=\"secondary\" small ml={0.5}>\n                      削除\n                    </Button>\n                  </BorderTableListCell>\n                </tr>\n              </tbody>\n            </table>\n            <ButtonGroup align=\"left\" mt={1}>\n              <Button primary>保存</Button>\n              <Button>キャンセル</Button>\n            </ButtonGroup>\n          </>\n        }\n      />\n    </VibesProvider>\n  );\n};\n"
  },
  {
    "path": "src/lv2/guidedContent/GuidedContent.tsx",
    "content": "import * as React from 'react';\nimport { useResponsive } from '../../utilities/VibesProvider';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * タイトル部分に表示されるコンテンツです。初めに読み上げられます。\n   */\n  title: React.ReactNode;\n  /**\n   * 補助部分に表示されるコンテンツです。title の次に読み上げられます。\n   */\n  guide: React.ReactNode;\n  /**\n   * メイン部分に表示されるコンテンツです。最後に読み上げられます。\n   */\n  content: React.ReactNode;\n  /**\n   * ブラウザ幅が狭いときに guided content が title content と content の間に縦積みされるようになります。\n   */\n  responsive?: boolean;\n} & CommonProps;\n\n/**\n * メインコンテンツの横に補助コンテンツを表示するためのレイアウト用のコンポーネントです。\n * Interactive Sample のように、メインコンテンツにフォームなどを置き、補助部分にその説明コンテンツなどを置くときなどに使えます。\n *\n * - 読み上げは title, guide, content の順番で行われます。\n */\nconst GuidedContent: React.FC<Props> = (props: Props) => {\n  const { title, guide, content, responsive } = props;\n  const baseClass = 'vb-guidedContent';\n  const classModifiers = { responsive: useResponsive(responsive) };\n\n  return (\n    <div {...commonProps(props, baseClass, classModifiers)}>\n      <div className={`${baseClass}__title`}>{title}</div>\n      <div className={`${baseClass}__guide`}>{guide}</div>\n      <div className={`${baseClass}__content`}>{content}</div>\n    </div>\n  );\n};\n\nexport default GuidedContent;\n"
  },
  {
    "path": "src/lv2/header/Header.stories.tsx",
    "content": "import * as React from 'react';\nimport { MdDomain, MdPerson, MdExitToApp } from 'react-icons/md';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Header from './Header';\nimport { Button } from '../../lv1';\nimport ButtonGroup from '../buttonGroup/ButtonGroup';\n\nconst sectionDataList = [\n  {\n    type: 'plan' as const,\n    text: 'ビジネスプラン',\n    url: '/plan',\n  },\n  {\n    type: 'link' as const,\n    IconComponent: MdDomain,\n    iconLabel: '事業所',\n    text: 'freee株式会社',\n    url: '/company',\n  },\n  {\n    type: 'link' as const,\n    IconComponent: MdPerson,\n    iconLabel: 'アカウント',\n    text: 'freee@freee.co.jp',\n    url: '/user',\n  },\n  {\n    type: 'button' as const,\n    IconComponent: MdExitToApp,\n    text: 'ログアウト',\n    onClick: action('logout'),\n  },\n];\n\nexport default {\n  component: Header,\n};\n\nexport const HeaderComponent = () => (\n  <Header\n    disableGutters={boolean('disableGutters', false, 'Header')}\n    logo={<p>Logo Component</p>}\n    sectionDataList={sectionDataList}\n    logoUrl={text('LogoUrl', '#', 'Header')}\n    {...commonKnobs()}\n  />\n);\n\nexport const DisableGutters = () => (\n  <Header\n    disableGutters\n    sectionDataList={sectionDataList}\n    logoUrl=\"#\"\n    logo={<p>Logo Component</p>}\n  />\n);\n\nexport const WithSectionComponent = () => (\n  <Header\n    logo={<p>Logo Component</p>}\n    sectionNode={\n      <ButtonGroup>\n        <Button\n          appearance=\"tertiary\"\n          onClick={() => {\n            // eslint-disable-next-line no-console\n            console.log('ログイン');\n          }}\n        >\n          ログイン\n        </Button>\n        <Button\n          primary\n          onClick={() => {\n            // eslint-disable-next-line no-console\n            console.log('新規登録');\n          }}\n        >\n          新規登録\n        </Button>\n      </ButtonGroup>\n    }\n  />\n);\n"
  },
  {
    "path": "src/lv2/header/Header.tsx",
    "content": "import * as React from 'react';\nimport HeaderSectionContent from './HeaderSectionContent';\nimport { SectionData } from './types';\n\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * min-width から Container の左右 margin 分の値を取り除きます。\n   */\n  disableGutters?: boolean;\n  /**\n   * ロゴを指定します。\n   */\n  logo: React.ReactNode;\n} & ( // sectionDataList または sectionNode を必須にするべく、{} | {} の指定にしている\n  | {\n      sectionDataList: Array<SectionData>;\n      sectionNode?: React.ReactNode;\n    }\n  | {\n      sectionDataList?: Array<SectionData>;\n      sectionNode: React.ReactNode;\n    }\n) & {\n    logoUrl?: string;\n    children?: React.ReactNode;\n  } & CommonProps;\n\nconst Header: React.FC<Props> = (props: Props) => {\n  const {\n    disableGutters = false,\n    logo,\n    sectionDataList,\n    sectionNode,\n    logoUrl,\n    children,\n  } = props;\n\n  const logoNode = logo;\n\n  const infoNode = sectionDataList\n    ? sectionDataList.map((data, i) => (\n        <span key={i} className=\"vb-header__section\">\n          <HeaderSectionContent data={data} />\n        </span>\n      ))\n    : sectionNode;\n\n  return (\n    <header\n      role=\"banner\"\n      {...commonProps(props, 'vb-header', { disableGutters })}\n    >\n      <div className=\"vb-header__logo\">\n        {logoUrl ? <a href={logoUrl}>{logoNode}</a> : logoNode}\n      </div>\n\n      {children && <div className=\"vb-header__children\">{children}</div>}\n\n      <div className=\"vb-header__info\">{infoNode}</div>\n    </header>\n  );\n};\nexport default Header;\n"
  },
  {
    "path": "src/lv2/header/HeaderSectionContent.tsx",
    "content": "import * as React from 'react';\nimport { VisuallyHidden } from '../../lv1';\nimport WithDropdown from './../withDropdown/WithDropdown';\nimport { SectionData } from './types';\n\ntype Props = {\n  data: SectionData;\n};\n\nconst HeaderSectionContents: React.FC<Props> = ({\n  data: {\n    dropdownContents,\n    IconComponent,\n    iconType,\n    iconLabel,\n    text,\n    type,\n    url,\n    onClick,\n    hasBadge,\n  },\n}: Props) => {\n  const icon = IconComponent ? (\n    <IconComponent\n      className={`vb-header__icon ${\n        iconType ? `vb-header__icon--${iconType}` : ''\n      }`}\n      role=\"img\"\n      aria-label={iconLabel || undefined}\n      // iconLabelがあるときだけスクリーンリーダーからは画像として見え、そうでない場合はスクリーンリーダーからは見えなくする\n      aria-hidden={!iconLabel}\n      focusable={false}\n    />\n  ) : null;\n\n  switch (type) {\n    case 'plan':\n      return (\n        <a href={url} className=\"vb-header__plan\">\n          {text}\n        </a>\n      );\n    case 'link':\n      return (\n        <a className=\"vb-header__link\" href={url}>\n          {icon}\n          <span className=\"vb-header__text\">{text}</span>\n          {hasBadge && (\n            <span className=\"vb-header__badge\">\n              <VisuallyHidden>新着情報あり</VisuallyHidden>\n            </span>\n          )}\n        </a>\n      );\n    case 'button':\n      return (\n        <button\n          className=\"vb-header__button\"\n          type=\"button\"\n          onClick={(): void => {\n            onClick && onClick();\n          }}\n        >\n          {icon}\n          <span className=\"vb-header__text\">{text}</span>\n          {hasBadge && (\n            <span className=\"vb-header__badge\">\n              <VisuallyHidden>新着情報あり</VisuallyHidden>\n            </span>\n          )}\n        </button>\n      );\n\n    case 'dropdown': {\n      if (!dropdownContents) {\n        return null;\n      }\n\n      return (\n        <WithDropdown\n          dropdownContents={dropdownContents}\n          renderButton={(dropdownId, isOpen, ref) => (\n            <button\n              className={`vb-header__button ${\n                isOpen ? 'vb-header__button--active' : ''\n              }`}\n              type=\"button\"\n              aria-expanded={isOpen}\n              aria-haspopup={true}\n              aria-controls={dropdownId}\n              ref={ref as React.Ref<HTMLButtonElement>}\n            >\n              {icon}\n              <span className=\"vb-header__text\">{text}</span>\n              {hasBadge && (\n                <span className=\"vb-header__badge\">\n                  <VisuallyHidden>新着情報あり</VisuallyHidden>\n                </span>\n              )}\n            </button>\n          )}\n        />\n      );\n    }\n\n    case 'text':\n    default:\n      return (\n        <span>\n          {icon}\n          <span className=\"vb-header__text\">{text}</span>\n          {hasBadge && (\n            <span className=\"vb-header__badge\">\n              <VisuallyHidden>新着情報あり</VisuallyHidden>\n            </span>\n          )}\n        </span>\n      );\n  }\n};\nexport default HeaderSectionContents;\n"
  },
  {
    "path": "src/lv2/header/types.ts",
    "content": "import { DropdownContent } from '../dropdown/types';\n\nexport type SectionData = {\n  type?: 'plan' | 'link' | 'button' | 'text' | 'dropdown';\n  text: string;\n  url?: string;\n  IconComponent?: React.ElementType;\n  iconType?: 'default' | 'alert' | 'notice';\n  iconLabel?: string;\n  dropdownContents?: Array<DropdownContent>;\n  hasBadge?: boolean;\n  onClick?: () => void;\n};\n"
  },
  {
    "path": "src/lv2/headlineArea/HeadlineArea.stories.tsx",
    "content": "import * as React from 'react';\n\nimport HeadlineArea from './HeadlineArea';\nimport Button from '../../lv1/buttons/Button';\nimport { text, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: HeadlineArea,\n};\n\nexport const HeadlineAreaComponent = () => (\n  <HeadlineArea\n    pageTitle={text('pageTitle', '画面見出しエリア', 'HeadlineArea')}\n    statusIconText={text('statusIconText', 'ステータス', 'HeadlineArea')}\n    statusIconType={select(\n      'statusIconType',\n      {\n        progress: 'progress',\n        done: 'done',\n        success: 'success',\n        required: 'required',\n        disabled: 'disabled',\n        emphasis: 'emphasis',\n        warning: 'warning',\n        error: 'error',\n      },\n      'success',\n      'HeadlineArea'\n    )}\n    {...commonKnobs()}\n    ref={React.createRef<HTMLHeadingElement>()}\n  >\n    {text(\n      'children',\n      'ヘッドラインエリアコンポーネントは画面の見出しと説明文をラップしたコンポーネントです。オプションでステータスアイコンをつけることもできます。 ',\n      'HeadlineArea'\n    )}\n  </HeadlineArea>\n);\n\nexport const WithRelatedMenu = () => (\n  <HeadlineArea\n    pageTitle={text('pageTitle', '画面見出しエリア', 'HeadlineArea')}\n    statusIconText={text('statusIconText', 'ステータス', 'HeadlineArea')}\n    statusIconType={select(\n      'statusIconType',\n      {\n        progress: 'progress',\n        done: 'done',\n        success: 'success',\n        required: 'required',\n        disabled: 'disabled',\n        emphasis: 'emphasis',\n        warning: 'warning',\n        error: 'error',\n      },\n      'success',\n      'HeadlineArea'\n    )}\n    relatedMenus={\n      <>\n        <Button small mr={1}>\n          menu1\n        </Button>\n        <Button small>menu2</Button>\n      </>\n    }\n    {...commonKnobs()}\n  >\n    {text(\n      'children',\n      'ヘッドラインエリアコンポーネントは画面の見出しと説明文をラップしたコンポーネントです。オプションでステータスアイコンをつけることもできます。 ',\n      'HeadlineArea'\n    )}\n  </HeadlineArea>\n);\n\nexport const WithRef = () => {\n  const headlineRef = React.createRef<HTMLHeadingElement>();\n  return (\n    <>\n      <HeadlineArea pageTitle=\"Refありのサンプル\" ref={headlineRef}>\n        ボタンを押すとタイトルにフォーカスするよ\n      </HeadlineArea>\n      <Button onClick={() => headlineRef.current?.focus()}>\n        タイトルにフォーカス\n      </Button>\n    </>\n  );\n};\n\nexport const WithSkeleton = () => (\n  <HeadlineArea\n    pageTitle={text('pageTitle', '画面見出しエリア', 'HeadlineArea')}\n    loading\n    statusIconText={text('statusIconText', 'ステータス', 'HeadlineArea')}\n    statusIconType={select(\n      'statusIconType',\n      {\n        progress: 'progress',\n        done: 'done',\n        success: 'success',\n        required: 'required',\n        disabled: 'disabled',\n        emphasis: 'emphasis',\n        warning: 'warning',\n        error: 'error',\n      },\n      'success',\n      'HeadlineArea'\n    )}\n    {...commonKnobs()}\n    ref={React.createRef<HTMLHeadingElement>()}\n  >\n    {text(\n      'children',\n      'ヘッドラインエリアコンポーネントは画面の見出しと説明文をラップしたコンポーネントです。オプションでステータスアイコンをつけることもできます。 ',\n      'HeadlineArea'\n    )}\n  </HeadlineArea>\n);\n"
  },
  {
    "path": "src/lv2/headlineArea/HeadlineArea.tsx",
    "content": "import * as React from 'react';\nimport PageTitle from '../../lv1/typography/PageTitle';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport WithSideContent from '../../lv1/layout/WithSideContent';\nimport StatusIcon, { StatusType } from '../../lv1/icons/StatusIcon';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SkeletonPageTitle } from '../skeleton/SkeletonPageTitle';\nimport { SkeletonParagraph } from '../skeleton/SkeletonParagraph';\n\ntype Props = {\n  pageTitle: string;\n  children?: React.ReactNode;\n  loading?: boolean;\n  relatedMenus?: React.ReactNode;\n  statusIconType?: StatusType;\n  statusIconText?: string;\n} & CommonProps;\n\nconst HeadlineAreaInternal: React.ForwardRefRenderFunction<\n  HTMLHeadingElement,\n  Props\n> = (props: Props, ref) => {\n  const {\n    pageTitle,\n    children,\n    statusIconType,\n    statusIconText,\n    loading,\n    relatedMenus,\n  } = props;\n\n  return (\n    <div {...commonProps(props, 'vb-headlineArea', {})}>\n      <WithSideContent sideContent={relatedMenus} mb={children ? 1 : undefined}>\n        {loading ? (\n          <SkeletonPageTitle />\n        ) : (\n          <PageTitle ref={ref}>\n            {pageTitle}\n            {statusIconText && (\n              <StatusIcon type={statusIconType} marginLeft marginSize=\"small\">\n                {statusIconText}\n              </StatusIcon>\n            )}\n          </PageTitle>\n        )}\n      </WithSideContent>\n      {children && loading ? (\n        <SkeletonParagraph />\n      ) : (\n        <Paragraph>{children}</Paragraph>\n      )}\n    </div>\n  );\n};\n\n/**\n * 画面上部に配置する、見出し、関連メニュー、画面の説明が一体となったコンポーネントです\n */\nconst HeadlineArea = React.forwardRef(HeadlineAreaInternal);\nexport default HeadlineArea;\n"
  },
  {
    "path": "src/lv2/hierarchicalTable/HierarchicalTable.stories.tsx",
    "content": "import * as React from 'react';\n\nimport HierarchicalTable, {\n  HierarchicalTableHeader,\n  HierarchicalTableRow,\n} from './HierarchicalTable';\nimport ScrollableBase from '../../lv1/bases/ScrollableBase';\nimport { commonKnobs } from '../../../stories';\nimport { Order } from '../../lv1/lists/TableListHeadCell';\n\nconst sampleHeaders: Array<HierarchicalTableHeader> = [\n  { value: '部門(階層表示)', width: 20, minWidth: 20 },\n  { value: '見出し1', minWidth: 10, alignRight: true },\n  { value: '見出し2', minWidth: 10, alignRight: true },\n  { value: '見出し3', minWidth: 10, alignRight: true },\n  { value: '見出し4', minWidth: 10, alignRight: true },\n];\n\nconst sampleRows: Array<HierarchicalTableRow> = [\n  {\n    cells: [\n      { value: '部門1' },\n      { value: '1,000', alignRight: true },\n      { value: '2,000', alignRight: true },\n      { value: '3,000', alignRight: true },\n      { value: '4,000', alignRight: true },\n    ],\n    childRows: [\n      {\n        cells: [\n          { value: '部門1-1' },\n          { value: '500', alignRight: true },\n          { value: '1,000', alignRight: true },\n          { value: '1,500', alignRight: true },\n          { value: '2,000', alignRight: true },\n        ],\n        childRows: [\n          {\n            cells: [\n              { value: '部門1-1-1' },\n              { value: '250', alignRight: true },\n              { value: '500', alignRight: true },\n              { value: '750', alignRight: true },\n              { value: '1,000', alignRight: true },\n            ],\n            childRows: [],\n          },\n          {\n            cells: [\n              { value: '部門1-1-2' },\n              { value: '250', alignRight: true },\n              { value: '500', alignRight: true },\n              { value: '750', alignRight: true },\n              { value: '1,000', alignRight: true },\n            ],\n            childRows: [],\n          },\n        ],\n      },\n      {\n        cells: [\n          { value: '部門1-2' },\n          { value: '500', alignRight: true },\n          { value: '1,000', alignRight: true },\n          { value: '1,500', alignRight: true },\n          { value: '2,000', alignRight: true },\n        ],\n        childRows: [],\n      },\n    ],\n  },\n  {\n    cells: [\n      { value: '部門2' },\n      { value: '1,000', alignRight: true },\n      { value: '2,000', alignRight: true },\n      { value: '3,000', alignRight: true },\n      { value: '4,000', alignRight: true },\n    ],\n    childRows: [],\n  },\n  {\n    cells: [\n      { value: '部門3' },\n      { value: '3,000', alignRight: true },\n      { value: '4,000', alignRight: true },\n      { value: '5,000', alignRight: true },\n      { value: '6,000', alignRight: true },\n    ],\n    childRows: [\n      {\n        cells: [\n          { value: '部門3-1' },\n          { value: '3,000', alignRight: true },\n          { value: '4,000', alignRight: true },\n          { value: '5,000', alignRight: true },\n          { value: '6,000', alignRight: true },\n        ],\n        childRows: [\n          {\n            cells: [\n              { value: '部門3-1-1' },\n              { value: '1,000', alignRight: true },\n              { value: '2,000', alignRight: true },\n              { value: '3,000', alignRight: true },\n              { value: '4,000', alignRight: true },\n            ],\n            childRows: [\n              {\n                cells: [\n                  { value: '部門3-1-1-1' },\n                  { value: '1,000', alignRight: true },\n                  { value: '2,000', alignRight: true },\n                  { value: '3,000', alignRight: true },\n                  { value: '4,000', alignRight: true },\n                ],\n                childRows: [\n                  {\n                    cells: [\n                      { value: '部門3-1-1-1-1' },\n                      { value: '1,000', alignRight: true },\n                      { value: '2,000', alignRight: true },\n                      { value: '3,000', alignRight: true },\n                      { value: '4,000', alignRight: true },\n                    ],\n                    childRows: [],\n                  },\n                  {\n                    cells: [\n                      { value: '部門3-1-1-1-2' },\n                      { value: '0', alignRight: true },\n                      { value: '0', alignRight: true },\n                      { value: '0', alignRight: true },\n                      { value: '0', alignRight: true },\n                    ],\n                    childRows: [],\n                  },\n                ],\n              },\n            ],\n          },\n          {\n            cells: [\n              { value: '部門3-1-2' },\n              { value: '2,000', alignRight: true },\n              { value: '2,000', alignRight: true },\n              { value: '2,000', alignRight: true },\n              { value: '2,000', alignRight: true },\n            ],\n            childRows: [],\n          },\n        ],\n      },\n    ],\n  },\n];\n\nexport default {\n  component: HierarchicalTable,\n};\n\nconst Component = (props: React.ComponentProps<typeof HierarchicalTable>) => (\n  <HierarchicalTable {...props} {...commonKnobs()} />\n);\n\nexport const HierarchicalTableComponent = () => (\n  <Component headers={sampleHeaders} rows={sampleRows} />\n);\n\nexport const FixedHeaderAndFixedRowHeader = () => (\n  <ScrollableBase scrollableX scrollableY>\n    <div style={{ height: '50vh' }}>\n      <Component\n        headers={sampleHeaders}\n        rows={sampleRows}\n        fixedHeader={true}\n        fixedRowHeader={true}\n      />\n    </div>\n  </ScrollableBase>\n);\n\nexport const SortableHeader = () => {\n  const [ordering, setOrdering] = React.useState<Order>('init');\n\n  const hierarchilcalSort = (rows: Array<HierarchicalTableRow>) => {\n    rows.reverse();\n    rows.map((row) => hierarchilcalSort(row.childRows));\n    return rows;\n  };\n\n  const nextOrder: {\n    [key in Order]: Order;\n  } = {\n    asc: 'desc',\n    desc: 'init',\n    init: 'asc',\n  };\n\n  const headers = [\n    {\n      ...sampleHeaders[0],\n      ordering,\n      onClick: () => setOrdering((prev) => nextOrder[prev]),\n    } as HierarchicalTableHeader,\n  ].concat(sampleHeaders.slice(1));\n\n  const rows = [...sampleRows];\n  if (ordering === 'desc') {\n    hierarchilcalSort(rows);\n  }\n\n  return (\n    <ScrollableBase scrollableX scrollableY>\n      <Component headers={headers} rows={rows} />\n    </ScrollableBase>\n  );\n};\n"
  },
  {
    "path": "src/lv2/hierarchicalTable/HierarchicalTable.tsx",
    "content": "import * as React from 'react';\nimport TableListHead from '../../lv1/lists/TableListHead';\nimport TableListHeadCell, { Order } from '../../lv1/lists/TableListHeadCell';\nimport TableListRow from '../../lv1/lists/TableListRow';\nimport BorderTableListCell from '../../lv1/lists/BorderTableListCell';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport HierarchicalTableRowHeaderCell from './HierarchicalTableRowHeaderCell';\nimport {\n  useHierarchicalTable,\n  FlatRowWithStatus,\n} from './hooks/useHierarchicalTable';\n\n/**\n * 行見出しを階層構造にできるテーブルです\n *\n * - 現状の仕様では、階層は5段階までしか持つことができません\n * - それ以上指定したい場合は、stylesheets/lv2/hierarchicalTable.scss を修正してください\n */\nexport type HierarchicalTableHeader = {\n  value: React.ReactNode;\n  alignCenter?: boolean;\n  alignRight?: boolean;\n  ordering?: Order;\n  /**\n   * 固定幅を設定します\n   */\n  width?: number;\n  /**\n   * 最小の幅を設定します\n   */\n  minWidth?: number;\n  /**\n   * 最大の幅を設定します\n   */\n  maxWidth?: number;\n  /**\n   * 折り返さない(`white-space: nowrap`)\n   */\n  noWrap?: boolean;\n  onClick?: () => unknown;\n} & CommonProps;\n\nexport type HierarchicalTableRow = {\n  cells: Array<HierarchicalTableCell>;\n  childRows: Array<HierarchicalTableRow>;\n} & CommonProps;\n\nexport type HierarchicalTableCell = {\n  value: React.ReactNode;\n  alignCenter?: boolean;\n  alignRight?: boolean;\n  small?: boolean;\n  /**\n   * なるべく単語の切れ目で改行するようにします(`word-break: break-word`)。メールアドレスや金額のカラムで指定してください。\n   */\n  breakWord?: boolean;\n  /**\n   * 折り返さない(`white-space: nowrap`)\n   */\n  noWrap?: boolean;\n  onClick?: () => unknown;\n};\n\ntype Props = {\n  headers: Array<HierarchicalTableHeader>;\n  rows: Array<HierarchicalTableRow>;\n  /**\n   * 列見出しを表の上に固定して表示します\n   */\n  fixedHeader?: boolean;\n  /**\n   * 行見出しを表の左に固定して表示します\n   */\n  fixedRowHeader?: boolean;\n} & CommonProps;\n\nfunction createHeader(\n  headers: HierarchicalTableHeader[],\n  fixedRowHeader?: boolean\n): React.ReactNode {\n  const headerContents = headers.map(\n    (header: HierarchicalTableHeader, index: number) => (\n      <TableListHeadCell\n        key={index}\n        alignCenter={header.alignCenter}\n        alignRight={header.alignRight}\n        ordering={header.ordering}\n        width={header.width}\n        minWidth={header.minWidth}\n        maxWidth={header.maxWidth}\n        noWrap={header.noWrap}\n        rowHeader={index === 0}\n        fixedRowHeader={index === 0 && fixedRowHeader}\n        onClick={header.onClick}\n        data-test={header['data-test']}\n      >\n        {header.value}\n      </TableListHeadCell>\n    )\n  );\n\n  return headerContents;\n}\n\nfunction createCells(\n  cells: HierarchicalTableCell[],\n  level: number,\n  foldable: boolean,\n  folded: boolean,\n  onToggleFolded: () => void,\n  fixedRowHeader?: boolean\n): React.ReactNode {\n  return cells.map((cell, index) =>\n    index === 0 ? (\n      <HierarchicalTableRowHeaderCell\n        key={0}\n        small={cell.small}\n        alignCenter={cell.alignCenter}\n        alignRight={cell.alignRight}\n        breakWord={cell.breakWord}\n        noWrap={cell.noWrap}\n        rowHeader={true}\n        fixedRowHeader={fixedRowHeader}\n        onClick={cell.onClick}\n        onToggleFolded={onToggleFolded}\n        level={level}\n        foldable={foldable}\n        folded={folded}\n      >\n        {cell.value}\n      </HierarchicalTableRowHeaderCell>\n    ) : (\n      <BorderTableListCell\n        key={index}\n        small={cell.small}\n        alignCenter={cell.alignCenter}\n        alignRight={cell.alignRight}\n        breakWord={cell.breakWord}\n        noWrap={cell.noWrap}\n        onClick={cell.onClick}\n      >\n        {cell.value}\n      </BorderTableListCell>\n    )\n  );\n}\n\nfunction createRows(\n  rows: Array<FlatRowWithStatus<HierarchicalTableRow>>,\n  updateRowFoldedStatus: (rowIndex: number) => void,\n  fixedRowHeader?: boolean\n): React.ReactNode {\n  return rows.map((row, rowIndex) => {\n    if (row.visible) {\n      const foldable = row.childCount > 0;\n      return (\n        <TableListRow\n          key={rowIndex}\n          aria-level={row.level}\n          aria-setsize={row.setSize}\n          aria-posinset={row.posInset}\n          aria-expanded={foldable ? !row.folded : undefined}\n          data-test={row['data-test']}\n        >\n          {createCells(\n            row.cells,\n            row.level,\n            foldable,\n            row.folded,\n            () => updateRowFoldedStatus(rowIndex),\n            fixedRowHeader\n          )}\n        </TableListRow>\n      );\n    }\n  });\n}\n\nconst HierarchicalTable: React.FC<Props> = (props: Props) => {\n  const { headers, rows, fixedHeader, fixedRowHeader } = props;\n\n  const [hierarchicalRows, updateRowFoldedStatus] = useHierarchicalTable(rows);\n\n  return (\n    <div {...commonProps(props, 'vb-hierarchicalTable')}>\n      <table className=\"vb-hierarchicalTable__table\">\n        <thead>\n          <TableListHead fixedHeader={fixedHeader}>\n            {createHeader(headers, fixedRowHeader)}\n          </TableListHead>\n        </thead>\n        <tbody>\n          {createRows(hierarchicalRows, updateRowFoldedStatus, fixedRowHeader)}\n        </tbody>\n      </table>\n    </div>\n  );\n};\n\nexport default HierarchicalTable;\n"
  },
  {
    "path": "src/lv2/hierarchicalTable/HierarchicalTableRowHeaderCell.tsx",
    "content": "import * as React from 'react';\nimport BorderTableListCell from '../../lv1/lists/BorderTableListCell';\nimport { MdChevronRight, MdExpandMore } from 'react-icons/md';\n\ntype Props = React.ComponentProps<typeof BorderTableListCell> & {\n  onToggleFolded: () => void;\n  level: number;\n  foldable: boolean;\n  folded: boolean;\n};\n\nconst HierarchicalTableRowHeaderCell: React.FC<Props> = ({\n  onToggleFolded,\n  level,\n  foldable,\n  folded,\n  children,\n  ...rest\n}: Props) => {\n  const baseClassName = 'vb-hierarchicalTableRowHeaderCell';\n  const className = [\n    baseClassName,\n    `${baseClassName}--level${level}`,\n    foldable ? '' : `${baseClassName}--foldable--level${level}`,\n  ].join(' ');\n\n  return (\n    <BorderTableListCell {...rest}>\n      <span className={className}>\n        {foldable && (\n          <button\n            className={`${baseClassName}__button`}\n            aria-label={folded ? '展開する' : '折り畳む'}\n            aria-expanded={!folded}\n            onClick={(e) => {\n              onToggleFolded();\n              e.stopPropagation();\n            }}\n          >\n            {folded ? (\n              <MdChevronRight className={`${baseClassName}__icon`} />\n            ) : (\n              <MdExpandMore className={`${baseClassName}__icon`} />\n            )}\n          </button>\n        )}\n        {children}\n      </span>\n    </BorderTableListCell>\n  );\n};\n\nexport default HierarchicalTableRowHeaderCell;\n"
  },
  {
    "path": "src/lv2/hierarchicalTable/hooks/useHierarchicalTable.ts",
    "content": "import { useCallback, useMemo, useState } from 'react';\n\ntype HierarchicalRow<Row> = unknown & { childRows: Array<Row> };\n\ntype FlatRow<Row> = Row & {\n  /**\n   * 階層レベル\n   */\n  level: number;\n  /**\n   * 直下の子行の数\n   */\n  childCount: number;\n  /**\n   * すべての子孫行の数\n   */\n  totalChildCount: number;\n  setSize: number;\n  posInset: number;\n};\n\nexport type FlatRowWithStatus<Row> = FlatRow<Row> & {\n  folded: boolean;\n  visible: boolean;\n};\n\nconst toFlatRow = <Row extends HierarchicalRow<Row>>({\n  row,\n  rowIndex,\n  level,\n  setSize,\n}: {\n  row: Row;\n  rowIndex: number;\n  level: number;\n  setSize: number;\n}): Array<FlatRow<Row>> => {\n  const parentRow = {\n    ...row,\n    level,\n    childCount: row.childRows.length,\n    totalChildCount: 0,\n    setSize,\n    posInset: rowIndex + 1,\n  };\n  if (parentRow.childCount === 0) {\n    return [parentRow];\n  }\n  const childRows = row.childRows.flatMap(\n    (childRow, childRowIndex, childRowArr) =>\n      toFlatRow({\n        row: childRow,\n        rowIndex: childRowIndex,\n        level: level + 1,\n        setSize: childRowArr.length,\n      })\n  );\n  return [{ ...parentRow, totalChildCount: childRows.length }].concat(\n    childRows\n  );\n};\n\nexport const useHierarchicalTable = <Row extends HierarchicalRow<Row>>(\n  rows: Array<Row>\n): [Array<FlatRowWithStatus<Row>>, (rowIndex: number) => void] => {\n  const flatRows = useMemo(\n    () =>\n      rows.flatMap((row, rowIndex, arr) =>\n        toFlatRow({ row, rowIndex, level: 1, setSize: arr.length })\n      ),\n    [rows]\n  );\n\n  // flatRowの各行が内部的に折りたたまれているかどうかを保持する（true のとき閉じている）\n  const [rowFoldedStatus, setRowFoldedStatus] = useState(\n    new Array<boolean>(flatRows.length).fill(false)\n  );\n\n  // rows が変更されたら、開閉状態を初期化する\n  const [prevRows, setPrevRows] = useState(rows);\n  if (rows !== prevRows) {\n    setPrevRows(rows);\n    setRowFoldedStatus(new Array<boolean>(flatRows.length).fill(false));\n  }\n\n  // flatRowの各行が画面上で見える状態になっているかどうかを保持する\n  // 折りたたまれている行の子孫すべてが画面上で見えない状態になる（その行自体は見える）\n  const rowVisibility = useMemo(() => {\n    const ret = new Array<boolean>(flatRows.length).fill(true);\n    let rowIndex = 0;\n    while (rowIndex < flatRows.length) {\n      const folded = rowFoldedStatus[rowIndex];\n      const totalChildCount = flatRows[rowIndex].totalChildCount;\n      if (folded && totalChildCount > 0) {\n        for (let i = 1; i <= totalChildCount; i++) {\n          ret[rowIndex + i] = false;\n        }\n        // 同階層の次の行まで飛ばす\n        rowIndex += totalChildCount + 1;\n      } else {\n        rowIndex++;\n      }\n    }\n    return ret;\n  }, [flatRows, rowFoldedStatus]);\n\n  const updateRowFoldedStatus = useCallback(\n    (rowIndex: number) =>\n      setRowFoldedStatus((prev) =>\n        prev\n          .slice(0, rowIndex)\n          .concat([!prev[rowIndex]])\n          .concat(prev.slice(rowIndex + 1))\n      ),\n    []\n  );\n\n  return [\n    flatRows.map((flatRow, rowIndex) => ({\n      ...flatRow,\n      folded: rowFoldedStatus[rowIndex],\n      visible: rowVisibility[rowIndex],\n    })),\n    updateRowFoldedStatus,\n  ];\n};\n"
  },
  {
    "path": "src/lv2/index.ts",
    "content": "export { default as AccordionPanel } from './accordionPanel/AccordionPanel';\nexport { default as BasicTable } from './basicTable/BasicTable';\nexport { default as Breadcrumbs } from './breadcrumbs/Breadcrumbs';\nexport { default as BulletedList } from './bulletedList/BulletedList';\nexport type { BulletedListContent } from './bulletedList/BulletedList';\nexport { default as ButtonGroup } from './buttonGroup/ButtonGroup';\nexport { default as Calendar } from './calendar/Calendar';\nexport { default as DatePicker } from './calendar/DatePicker';\nexport { default as SingleComboBox } from './combobox/SingleComboBox';\nexport type {\n  ComboBoxOption,\n  SingleComboBoxOption,\n} from './combobox/SingleComboBox';\nexport * from './combobox/MultiComboBox';\nexport { default as ApiComboBox } from './combobox/ApiComboBox';\nexport { useApiComboBox } from './combobox/ApiComboBox';\nexport { default as ApiMultiComboBox } from './combobox/ApiMultiComboBox';\nexport { useApiMultiComboBox } from './combobox/ApiMultiComboBox';\nexport { default as CardNavigation } from './cardNavigation/CardNavigation';\nexport { default as DescriptionList } from './descriptionList/DescriptionList';\nexport { default as MessageDialog } from './dialogs/MessageDialog';\nexport { default as MessageDialogConfirm } from './dialogs/MessageDialogConfirm';\nexport { default as TaskDialog } from './dialogs/TaskDialog';\nexport { default as GuideDialog } from './dialogs/GuideDialog';\nexport { default as FullScreenModal } from './modals/FullScreenModal';\nexport type { DropdownContent } from './dropdown/types';\nexport { default as Dropdown } from './dropdown/Dropdown';\nexport { default as DropdownMenuContent } from './dropdown/DropdownMenuContent';\nexport { default as DropdownButton } from './dropdownButton/DropdownButton';\nexport { default as NoSearchResults } from './emptyStates/NoSearchResults';\nexport { default as NoDataCreated } from './emptyStates/NoDataCreated';\nexport { default as FileUploader } from './fileUploader/FileUploader';\nexport { default as FileDropArea } from './fileUploader/FileDropArea';\nexport { FileTypes } from './fileUploader/types';\nexport type { FileStatus, FileUploaderStatus } from './fileUploader/types';\nexport { default as FilterableDropdownButton } from './filterableDropdownButton/FilterableDropdownButton';\nexport { default as FilterTag } from './filterTag/FilterTag';\nexport { default as Footer } from './footer/Footer';\nexport { default as DateField } from './formBlock/DateField';\nexport { default as FormActions } from './formBlock/FormActions';\nexport { default as FormControl } from './formControl/FormControl';\nexport { default as FormControlGroup } from './formControl/FormControlGroup';\nexport { default as NameField } from './formBlock/NameField';\nexport { default as PhoneNumberField } from './formBlock/PhoneNumberField';\nexport { default as DateDurationField } from './formFields/DateDurationField';\nexport { default as AmountRangeField } from './formFields/AmountRangeField';\nexport type { PhoneNumberKey } from './formBlock/PhoneNumberField';\nexport { default as DateInput } from './formFields/DateInput';\nexport { default as DecimalInput } from './formFields/DecimalInput';\nexport { default as DigitsInput } from './formFields/DigitsInput';\nexport { default as NumeralCodeInput } from './formFields/NumeralCodeInput';\nexport * from './formFields/PasswordField';\nexport { default as TimeLengthInput } from './formFields/TimeLengthInput';\nexport { default as TimeInput } from './formFields/TimeInput';\nexport { default as FormattedTextField } from './formFields/FormattedTextField';\nexport { default as GlobalNavi } from './globalNavi/GlobalNavi';\nexport type { LinkContent } from './globalNavi/GlobalNavi';\nexport { default as GuidanceMessage } from './guidanceMessage/GuidanceMessage';\nexport { default as GuidedContent } from './guidedContent/GuidedContent';\nexport { default as Header } from './header/Header';\nexport type { SectionData } from './header/types';\nexport { default as HeadlineArea } from './headlineArea/HeadlineArea';\nexport { default as LineSeparatedList } from './lineSeparatedList/LineSeparatedList';\nexport type { LineSeparatedListContent } from './lineSeparatedList/LineSeparatedList';\nexport { default as ListButtons } from './listButtons/ListButtons';\nexport type { ButtonProps } from './listButtons/ListButtons';\nexport { default as ListButtonSelector } from './listButtonSelector/ListButtonSelector';\nexport { default as ListCard } from './listCard/ListCard';\nexport { default as GroupedListTable } from './listTable/GroupedListTable';\nexport type { TableRowGroup } from './listTable/GroupedListTable';\nexport { default as ListTable } from './listTable/ListTable';\nexport type { TableCell, TableHeader, TableRow } from './listTable/ListTable';\nexport { default as MessageBlock } from './messageBlock/MessageBlock';\nexport { default as FloatingMessageBlock } from './messageBlock/FloatingMessageBlock';\nexport { default as MessageIcon } from './messageIcon/MessageIcon';\nexport { default as NumericTable } from './numericTable/NumericTable';\nexport type {\n  NumericTableCell,\n  NumericTableHeader,\n  NumericTableRow,\n} from './numericTable/NumericTable';\nexport { default as Pagination } from './pager/Pagination';\nexport { default as Pager } from './pager/Pager';\nexport { default as PageSelector } from './pageSelector/PageSelector';\nexport { default as PopupProgressBar } from './popupProgressBar/PopupProgressBar';\nexport { default as PopupProgressBarPortal } from './popupProgressBarPortal/PopupProgressBarPortal';\nexport { default as PropsListForm } from './propsListForm/PropsListForm';\nexport * from './stackedBarChart/StackedBarChart';\nexport { default as StatusSelector } from './statusSelector/StatusSelector';\nexport { default as Stepper } from './stepper/Stepper';\nexport * from './stepper/VerticalSteps';\nexport { default as TabBar } from './tabBar/TabBar';\nexport type { TabElement } from './tabBar/TabBar';\nexport { default as TagBox } from './tagBox/TagBox';\nexport * from './tagBox/MiniTag';\nexport { default as PersonTag } from './personTag/PersonTag';\nexport { default as WithAccordionContent } from './withAccordionContent/WithAccordionContent';\nexport { default as WithBalloon } from './withBalloon/WithBalloon';\nexport { default as WithDropdown } from './withDropdown/WithDropdown';\nexport { default as WithFilterableDropdown } from './withFilterableDropdown/WithFilterableDropdown';\nexport type { FilterableDropdownContent } from './withFilterableDropdown/WithFilterableDropdown';\nexport { default as WithPopup } from './withPopup/WithPopup';\nexport * from './skeleton/SkeletonPageTitle';\nexport * from './skeleton/SkeletonSectionTitle';\nexport * from './skeleton/SkeletonParagraph';\nexport * from './skeleton/SkeletonRectangle';\nexport * from './skeleton/SkeletonCircle';\nexport * from './skeleton/SkeletonIcon';\nexport * from './skeleton/SkeletonBlock';\nexport * from './skeleton/SkeletonInput';\nexport * from './skeleton/SkeletonListTable';\nexport * from './skeleton/SkeletonDescriptionList';\nexport * from './skeleton/SkeletonStackedBarChart';\nexport { default as SelectableButton } from './selectableButton/SelectableButton';\nexport { default as WithTOC } from './withTOC/WithTOC';\nexport { default as HierarchicalTable } from './hierarchicalTable/HierarchicalTable';\nexport { default as ScrimCoveredContent } from './scrimCoveredContent/ScrimCoveredContent';\n"
  },
  {
    "path": "src/lv2/indexSearchField/IndexSearchField.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { boolean, number, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport IndexSearchField from './IndexSearchField';\nimport ColumnBase from '../../lv1/bases/ColumnBase';\nimport MarginBase from '../../lv1/bases/MarginBase';\nimport { Text } from '../../lv1/typography/Text';\n\nconst handlers = actions({\n  onChange: 'change',\n  onInput: 'input',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport default {\n  component: IndexSearchField,\n};\n\nexport const SearchFieldComponent = () => {\n  const [searchWord, setSearchWord] = React.useState<string | undefined>(\n    undefined\n  );\n\n  return (\n    <>\n      <MarginBase mb={1}>\n        <Text>検索語句：{searchWord}</Text>\n      </MarginBase>\n      <MarginBase mb={3}>\n        <IndexSearchField\n          id={text('Id', 'id', 'SearchField')}\n          label={text('Label', '検索フォーム', 'SearchField')}\n          placeholder={text('Placeholder', '検索', 'SearchField')}\n          name={text('Name', 'search', 'SearchField')}\n          width={select(\n            'Width',\n            {\n              xSmall: 'xSmall',\n              Small: 'small',\n              Medium: 'medium',\n              Large: 'large',\n              Full: 'full',\n            },\n            'medium',\n            'SearchField'\n          )}\n          required={boolean('Required', true, 'SearchField')}\n          disabled={boolean('Disabled', false, 'SearchField')}\n          maxLength={number('MaxLength', 100, undefined, 'SearchField')}\n          forceOpen={boolean('forceOpen', false, 'SearchField')}\n          onUpdate={setSearchWord}\n          {...handlers}\n          {...commonKnobs()}\n        />\n      </MarginBase>\n    </>\n  );\n};\n\nexport const Default = () => (\n  <>\n    <IndexSearchField marginRight />\n    <IndexSearchField marginRight disabled />\n  </>\n);\n\nexport const MaxWidth = () => (\n  <div style={{ width: `${number('parent element width (rem)', 15)}rem` }}>\n    <ColumnBase>\n      <IndexSearchField\n        value=\"親要素よりも幅が大きいとき、SearchFieldの幅は小さくなります。\"\n        width={select(\n          'Width',\n          {\n            XSmall: 'xSmall',\n            Small: 'small',\n            Medium: 'medium',\n            Large: 'large',\n            Full: 'full',\n          },\n          'large',\n          'TextField'\n        )}\n      />\n    </ColumnBase>\n  </div>\n);\n\nexport const SearchTarget = () => (\n  <>\n    <div>\n      <IndexSearchField\n        marginRight\n        width={'full'}\n        searchTarget={['取引先名', '備考', 'email', '従業員名']}\n        mb={1}\n      />\n    </div>\n  </>\n);\n\nexport const ForceOpen = () => (\n  <>\n    <div>\n      <IndexSearchField\n        marginRight\n        width={'full'}\n        value={\n          'forceOpen を指定すると、入力欄を常に開いた状態にします。モバイルサイズなど限定的な状況で常に開きたい場合に使用してください'\n        }\n        forceOpen={true}\n        mb={1}\n      />\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv2/indexSearchField/IndexSearchField.tsx",
    "content": "import * as React from 'react';\nimport { MdSearch } from 'react-icons/md';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { FormHandlers } from '../../lv1/forms/types';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport { Text } from '../../lv1/typography/Text';\n\ntype Props = {\n  /**\n   * label id を指定します\n   */\n  id?: string;\n  /**\n   * input aria-label を指定します\n   */\n  label?: string;\n  /**\n   * input aria-labelledby を指定します\n   */\n  labelledby?: string;\n  /**\n   * input placeholder を指定します\n   */\n  placeholder?: string;\n  /**\n   * input name を指定します\n   */\n  name?: string;\n  /**\n   * input value を指定します\n   */\n  value?: string;\n  /**\n   * input required を指定します\n   */\n  required?: boolean;\n  /**\n   * input autofocus を指定します\n   */\n  autofocus?: boolean;\n  /**\n   * disabled 状態にします\n   */\n  disabled?: boolean;\n  /**\n   * 幅を指定します\n   */\n  width?: 'xSmall' | 'small' | 'medium' | 'large' | 'full';\n  /**\n   * input maxlength を指定します\n   */\n  maxLength?: number;\n  /**\n   * 検索文字列を更新し、確定したときに発火します\n   * 検索文字列の確定は、入力欄のフォーカスを外したときと、入力中にEnterキーを押下したとき、対象表示ポップアップを選択したときです\n   */\n  onUpdate?: (searchWord?: string | undefined) => void;\n  /**\n   * 検索対象の項目名一覧を文字列配列で渡す\n   * 例: ['取引先名', '備考', 'email', '従業員名']\n   */\n  searchTarget?: string[];\n  /**\n   * 入力欄を常に開いた状態にします\n   * モバイルサイズなど限定的な状況で常に開きたい場合に使用してください\n   */\n  forceOpen?: boolean;\n} & FormHandlers<HTMLInputElement> &\n  MarginClassProps &\n  CommonProps;\n\nconst IndexSearchFieldInner = (\n  props: Props,\n  ref: React.Ref<HTMLInputElement>\n): React.ReactElement => {\n  const {\n    id,\n    label,\n    labelledby,\n    placeholder,\n    name,\n    value,\n    required,\n    autofocus,\n    disabled,\n    width,\n    maxLength,\n    onUpdate,\n    searchTarget,\n    forceOpen,\n    onChange,\n    onInput,\n    onFocus,\n    onBlur,\n    onKeyDown,\n    onKeyUp,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const [searchWord, setSearchWord] = React.useState<string>(value || '');\n  // 検索入力欄が開いている（縮小表示されずに文字入力できる）\n  const [isSearchAreaOpen, setIsSearchAreaOpen] = React.useState(\n    searchWord !== ''\n  );\n  // SearchField か ポップアップにフォーカスが当たっている\n  const [isSearchAreaFocused, setIsSearchAreaFocused] = React.useState(false);\n  // 日本語入力中かどうか\n  const [isComposing, setIsComposing] = React.useState(false);\n\n  const popupRef = React.useRef<HTMLDivElement>(null);\n\n  // valueの変更をstateに反映\n  // 検索文字がある場合に入力欄を開く（フォーカスは当てない）\n  React.useEffect(() => {\n    setSearchWord(value || '');\n    setIsSearchAreaOpen((value || '') !== '');\n  }, [value]);\n\n  // 検索文字列が空の状態で検索フィールド外にフォーカスを移動した場合、検索を終了し閉じる\n  const cancelSearch = React.useCallback(() => {\n    setSearchWord('');\n    onUpdate?.(undefined);\n    setIsSearchAreaOpen(false);\n    setIsSearchAreaFocused(false);\n  }, [onUpdate, setSearchWord]);\n\n  // 検索文字列を更新する\n  const updateSearchWord = React.useCallback(() => {\n    // 日本語入力中はスルー\n    if (isComposing) return;\n    // 文字列に変化がない場合は検索しない\n    if (searchWord === value) return;\n\n    onUpdate?.(searchWord);\n  }, [searchWord, isComposing, onUpdate, value]);\n\n  const fieldClass = 'vb-indexSearchField';\n  const inputClass = fieldClass + '__input';\n  const iconClass = fieldClass + '__icon';\n  const dropdownClass = fieldClass + '__dropdown';\n  const dropdownItemClass = fieldClass + '__dropdownItem';\n\n  const inputClassName = vbClassNames(inputClass, {\n    modifier: {\n      widthXSmall: width === 'xSmall',\n      widthSmall: width === 'small',\n      widthMedium: width === 'medium' || !width,\n      widthLarge: width === 'large',\n      widthFull: width === 'full',\n      disabled,\n      searchAreaClosed: !isSearchAreaOpen && !forceOpen,\n    },\n  });\n\n  const iconClassName = vbClassNames(iconClass, {\n    modifier: {\n      searchAreaClosed: !isSearchAreaOpen && !forceOpen,\n    },\n  });\n\n  const dropdownClaassName = vbClassNames(dropdownClass, {\n    modifier: {\n      searchAreaOpen: (isSearchAreaOpen || forceOpen) && isSearchAreaFocused,\n    },\n  });\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        fieldClass,\n        { widthFull: width === 'full' },\n        { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n      )}\n    >\n      <input\n        id={id}\n        type=\"search\"\n        name={name && name}\n        value={value && value}\n        className={inputClassName}\n        placeholder={placeholder && placeholder}\n        disabled={disabled && true}\n        required={required && true}\n        autoFocus={autofocus && true}\n        maxLength={maxLength}\n        onChange={(e) => {\n          setSearchWord(e.target.value);\n          onChange?.(e);\n        }}\n        onInput={onInput}\n        onFocus={(e) => {\n          setIsSearchAreaFocused(true);\n          onFocus?.(e);\n        }}\n        onBlur={(e) => {\n          if (e.relatedTarget === popupRef.current) return;\n          if (searchWord === '') {\n            cancelSearch();\n            return;\n          }\n          updateSearchWord();\n          setIsSearchAreaFocused(false);\n          onBlur?.(e);\n        }}\n        onKeyDown={(e) => {\n          if (e.key === 'Enter') {\n            if (!isSearchAreaOpen && !forceOpen) {\n              setIsSearchAreaOpen(true);\n            }\n            updateSearchWord();\n          }\n          if (e.key === ' ') {\n            if (!isSearchAreaOpen && !forceOpen) {\n              setIsSearchAreaOpen(true);\n              e.preventDefault();\n            }\n          }\n          onKeyDown?.(e);\n        }}\n        onKeyUp={onKeyUp}\n        aria-label={\n          label ? label : `${searchTarget?.join('、') || '対象'}の文字検索`\n        }\n        aria-labelledby={labelledby}\n        aria-required={required && true}\n        ref={ref}\n        onClick={() => {\n          if (!isSearchAreaOpen && !forceOpen) {\n            setIsSearchAreaOpen(true);\n            setIsSearchAreaFocused(true);\n          }\n        }}\n        // 日本語入力中にEnterキーを押下したときに、入力確定(検索開始)をしないようにする\n        onCompositionStart={() => setIsComposing(true)}\n        onCompositionEnd={() => setIsComposing(false)}\n      />\n      <MdSearch className={iconClassName} />\n      {/*\n       * 入力欄を開いている間、tabキーでフォーカスを移動できる\n       */}\n      <div className={dropdownClaassName}>\n        <PopupBase paddingSize=\"zero\">\n          <div\n            role=\"button\"\n            className={dropdownItemClass}\n            ref={popupRef}\n            onClick={() => {\n              updateSearchWord();\n              setIsSearchAreaFocused(false);\n            }}\n            tabIndex={\n              (isSearchAreaOpen || forceOpen) && isSearchAreaFocused ? 0 : -1\n            }\n            onKeyDown={(e) => {\n              if (e.code === 'Enter') {\n                updateSearchWord();\n                setIsSearchAreaFocused(false);\n              }\n            }}\n            onBlur={(e) => {\n              if (e.relatedTarget === ref) return;\n              if (searchWord === '') {\n                cancelSearch();\n                return;\n              }\n              updateSearchWord();\n              setIsSearchAreaFocused(false);\n            }}\n          >\n            <Text size={0.875}>\n              {searchWord === '' ? '' : `「${searchWord}」を含む`}\n              {searchTarget?.join('、') || '対象'}を検索\n            </Text>\n          </div>\n        </PopupBase>\n      </div>\n    </div>\n  );\n};\nconst IndexSearchField = React.forwardRef(IndexSearchFieldInner);\nexport default IndexSearchField;\n"
  },
  {
    "path": "src/lv2/lineSeparatedList/LineSeparatedList.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport InlineLink from '../../lv1/buttons/InlineLink';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport LineSeparatedList from './LineSeparatedList';\n\nexport default {\n  component: LineSeparatedList,\n};\n\nconst listSamples = [\n  { value: <Paragraph>リストコンテンツ</Paragraph> },\n  {\n    value: (\n      <Paragraph>\n        長いリストコンテンツ長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い\n      </Paragraph>\n    ),\n  },\n  {\n    value: (\n      <Paragraph>\n        <InlineLink\n          href=\"https://www.freee.co.jp/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          リンク付きリストコンテンツ\n        </InlineLink>\n      </Paragraph>\n    ),\n  },\n  {\n    value: (\n      <Paragraph>\n        <InlineLink\n          href=\"https://www.freee.co.jp/\"\n          rel=\"noopener noreferrer\"\n          target=\"_blank\"\n        >\n          長いリンク付きリストコンテンツ長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い\n        </InlineLink>\n      </Paragraph>\n    ),\n  },\n];\n\nexport const LineSeparatedListComponent = () => (\n  <LineSeparatedList listContents={listSamples} {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv2/lineSeparatedList/LineSeparatedList.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\n\nexport type LineSeparatedListContent = {\n  value: React.ReactNode;\n};\n\ntype Props = {\n  /**\n   * リスト項目要素を設定します\n   */\n  listContents?: LineSeparatedListContent[];\n} & CommonProps;\n\n/**\n * Block上の見た目をした箇条書きのためのコンポーネントです\n */\nconst LineSeparatedList: React.FC<Props> = (props: Props) => {\n  const { listContents = [] } = props;\n\n  const baseClass = 'vb-lineSeparatedList';\n\n  const listItems = listContents.map((listContent, index) => (\n    <li key={index} className={`${baseClass}__list__listItem`}>\n      {listContent.value}\n    </li>\n  ));\n\n  return (\n    <div {...commonProps(props, baseClass)}>\n      <ul className={vbClassNames(`${baseClass}__list`, {})}>{listItems}</ul>\n    </div>\n  );\n};\n\nexport default LineSeparatedList;\n"
  },
  {
    "path": "src/lv2/listButtonSelector/ListButtonSelector.stories.tsx",
    "content": "import * as React from 'react';\nimport { MdAdd } from 'react-icons/md';\n\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\nimport ListButtonSelector from './ListButtonSelector';\n\nexport default {\n  title: 'deprecated/listButtonSelector/ListButtonSelector',\n  component: ListButtonSelector,\n};\n\nexport const ListButtonSelectorComponent = () => (\n  <div style={{ height: '18rem' }}>\n    <ListButtonSelector\n      selectedLabel=\"フリー株式会社にログイン中\"\n      selectorLabel=\"ログインする事業所を選択\"\n      buttons={[\n        {\n          label: 'Hoge株式会社',\n          onClick: action('click'),\n        },\n        {\n          label: 'フリー株式会社',\n          selected: true,\n          statusIconText: 'ログイン中',\n          statusIconType: 'success',\n        },\n        {\n          label: 'foo株式会社',\n          onClick: action('click'),\n        },\n        {\n          label: 'bar株式会社',\n          onClick: action('click'),\n        },\n        {\n          label: 'アンカー別タブ',\n          href: 'https://www.freee.co.jp/',\n          target: '_blank',\n          rel: 'noopener noreferrer',\n        },\n      ]}\n      {...commonKnobs()}\n    />\n  </div>\n);\n\nexport const Disabled = () => (\n  <ListButtonSelector\n    selectedLabel=\"フリー株式会社にログイン中\"\n    selectorLabel=\"ログインする事業所を選択\"\n    buttons={[]}\n    disabled\n  />\n);\n\nexport const WithActionButton = () => (\n  <div style={{ height: '10rem' }}>\n    <ListButtonSelector\n      selectedLabel=\"フリー株式会社にログイン中\"\n      selectorLabel=\"ログインする事業所を選択\"\n      buttons={[]}\n      actionLabel=\"新しい事業所をつくる\"\n      action={action('click')}\n      ActionIconComponent={MdAdd}\n    />\n  </div>\n);\n"
  },
  {
    "path": "src/lv2/listButtonSelector/ListButtonSelector.tsx",
    "content": "import * as React from 'react';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { StatusType } from '../../lv1/icons/StatusIcon';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport NegativeMarginBase from '../../lv1/bases/NegativeMarginBase';\nimport TextButton from '../../lv1/buttons/TextButton';\nimport ListButtons from '../listButtons/ListButtons';\nimport Note from '../../lv1/typography/Note';\nimport { MdArrowDropDown } from 'react-icons/md';\nimport { KeyCodes } from '../../utilities/keyboard';\n\ntype ButtonProps = {\n  label: React.ReactNode;\n  selected?: boolean;\n  href?: string;\n  target?: string;\n  rel?: string;\n  statusIconText?: string;\n  statusIconType?: StatusType;\n  bgTransparent?: boolean;\n  onClick?: React.MouseEventHandler;\n};\n\ntype Props = {\n  selectedLabel: string;\n  selectorLabel: string;\n  withActionButton?: boolean;\n  actionLabel?: string;\n  action?: () => any; // ゆるして\n  ActionIconComponent?: React.ElementType;\n  buttons: Array<ButtonProps>;\n  disabled?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\ntype State = {\n  isOpen: boolean;\n};\n\n/**\n * コンポーネントの位置付けについて議論の余地がある状態なので、新規に使用しないでください。\n *\n * どうしても使用したい場合は必ず相談してください\n */\nexport default class ListButtonSelector extends React.Component<Props, State> {\n  ref: React.RefObject<HTMLDivElement>;\n  selectableItemRefs: Array<HTMLAnchorElement | HTMLButtonElement> = [];\n\n  constructor(props: Props) {\n    super(props);\n    this.ref = React.createRef();\n    this.state = { isOpen: false };\n  }\n\n  componentDidMount(): void {\n    // setTimeOutを0で置くことで、キューの最後に持ってくる\n    setTimeout(() => {\n      window.addEventListener('click', this.handleClose);\n    }, 0);\n  }\n\n  componentWillUnmount(): void {\n    window.removeEventListener('click', this.handleClose);\n  }\n\n  toggleOpen = (): void => {\n    this.setState({ isOpen: !this.state.isOpen });\n  };\n\n  // これはwindowに対するlistenerなので、eventの型は組込みのMouseEventとなる\n  handleClose = (e: MouseEvent): void => {\n    if (\n      this.ref.current &&\n      e.target instanceof HTMLElement &&\n      !this.ref.current.contains(e.target)\n    ) {\n      this.setState({ isOpen: false });\n    }\n  };\n\n  handleKeyDownSelectableItem(e: React.KeyboardEvent, itemIndex: number): void {\n    const prevItem = this.selectableItemRefs[itemIndex - 1];\n    const nextItem = this.selectableItemRefs[itemIndex + 1];\n    switch (e.keyCode) {\n      case KeyCodes.UP:\n        e.preventDefault();\n        prevItem && prevItem.focus();\n        break;\n      case KeyCodes.DOWN:\n        e.preventDefault();\n        nextItem && nextItem.focus();\n        break;\n    }\n  }\n\n  render(): React.ReactNode {\n    const {\n      selectedLabel,\n      selectorLabel,\n      actionLabel,\n      action,\n      ActionIconComponent,\n      buttons,\n      disabled,\n      marginTop,\n      marginLeft,\n      marginRight,\n      marginBottom,\n      marginSize,\n    } = this.props;\n\n    const buttonClassName = vbClassNames('vb-listButtonSelector__button', {\n      modifier: { disabled, isOpen: this.state.isOpen },\n    });\n\n    this.selectableItemRefs = [];\n    const withAction = actionLabel && ActionIconComponent && action;\n\n    return (\n      <div\n        ref={this.ref}\n        {...commonProps(\n          this.props,\n          'vb-listButtonSelector',\n          {},\n          {\n            marginTop,\n            marginLeft,\n            marginRight,\n            marginBottom,\n            marginSize,\n          }\n        )}\n      >\n        <button\n          aria-expanded={this.state.isOpen ? 'true' : 'false'}\n          onClick={(): void => {\n            !disabled && this.toggleOpen();\n          }}\n          className={buttonClassName}\n          disabled={disabled && true}\n          type=\"button\"\n        >\n          {selectedLabel}\n          <MdArrowDropDown\n            className=\"vb-listButtonSelector__icon\"\n            focusable={false}\n          />\n        </button>\n        {this.state.isOpen && (\n          <div className=\"vb-listButtonSelector__popupWrapper\">\n            <PopupBase small={true}>\n              <React.Fragment>\n                <Note marginBottom={true} marginSize=\"small\">\n                  {selectorLabel}\n                </Note>\n                <NegativeMarginBase\n                  marginSize=\"small\"\n                  left\n                  right\n                  bottom={!withAction}\n                >\n                  <ListButtons\n                    buttons={buttons}\n                    selectableItemRef={(el): void => {\n                      el && this.selectableItemRefs.push(el);\n                    }}\n                    onKeyDown={this.handleKeyDownSelectableItem.bind(this)}\n                  />\n                </NegativeMarginBase>\n                {withAction ? (\n                  <TextButton\n                    onClick={(): void => {\n                      action && action();\n                    }}\n                    IconComponent={\n                      ActionIconComponent ? ActionIconComponent : undefined\n                    }\n                    marginTop={true}\n                    small={true}\n                    noBorder={true}\n                  >\n                    {actionLabel}\n                  </TextButton>\n                ) : null}\n              </React.Fragment>\n            </PopupBase>\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n"
  },
  {
    "path": "src/lv2/listButtons/ListButtons.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\nimport ListButtons from './ListButtons';\n\nexport default {\n  title: 'deprecated/listButtons/ListButtons',\n  component: ListButtons,\n};\n\nexport const ListButtonsComponent = () => (\n  <ListButtons\n    buttons={[\n      {\n        label: 'ボタン1',\n      },\n      {\n        label: 'ボタン2（選択中）',\n        selected: true,\n      },\n      {\n        label: 'ボタン3（アンカー）',\n        href: 'https://www.freee.co.jp/',\n      },\n      {\n        label: 'ボタン4（アンカー別タブ）',\n        href: 'https://www.freee.co.jp/',\n        target: '_blank',\n        rel: 'noopener noreferrer',\n      },\n      {\n        label: 'ボタン5（アイコンつき）',\n        statusIconText: 'ステータス',\n      },\n      {\n        label: 'ボタン6（クリックイベント）',\n        onClick: action('click'),\n      },\n    ]}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/listButtons/ListButtons.tsx",
    "content": "import * as React from 'react';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { StatusType } from '../../lv1/icons/StatusIcon';\nimport ListButton from '../../lv1/buttons/ListButton';\n\nexport type ButtonProps = {\n  label: React.ReactNode;\n  selected?: boolean;\n  href?: string;\n  target?: string;\n  rel?: string;\n  statusIconText?: string;\n  statusIconType?: StatusType;\n  bgTransparent?: boolean;\n  onClick?: React.MouseEventHandler;\n};\n\ntype Props = {\n  buttons: Array<ButtonProps>;\n  selectableItemRef?: React.Ref<HTMLAnchorElement | HTMLButtonElement>;\n  onKeyDown?: (\n    e: React.KeyboardEvent<HTMLAnchorElement | HTMLButtonElement>,\n    itemIndex: number\n  ) => void;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * `lv2/ListButtonSelector` で使用される想定のボタンです。単独で使用しないでください\n */\nconst ListButtons: React.FC<Props> = (props: Props) => {\n  const {\n    buttons,\n    selectableItemRef,\n    onKeyDown,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  let selectableItemIdxCounter = 0;\n\n  return (\n    <div\n      role=\"listbox\"\n      {...commonProps(\n        props,\n        'vb-listButtons',\n        {},\n        {\n          marginTop,\n          marginLeft,\n          marginRight,\n          marginBottom,\n          marginSize,\n        }\n      )}\n    >\n      {buttons.map((contents, i) => {\n        // 選択済み以外のもので何番めか\n        const selectableItemIndex = contents.selected\n          ? -1\n          : selectableItemIdxCounter++;\n        return (\n          <ListButton\n            key={i}\n            selectableItemIndex={selectableItemIndex}\n            href={contents.href}\n            target={contents.target}\n            rel={contents.rel}\n            selected={contents.selected}\n            statusIconText={contents.statusIconText}\n            statusIconType={contents.statusIconType}\n            onClick={contents.onClick}\n            bgTransparent={i % 2 != 0}\n            selectableItemRef={selectableItemRef}\n            onKeyDown={onKeyDown}\n          >\n            {contents.label}\n          </ListButton>\n        );\n      })}\n    </div>\n  );\n};\nexport default ListButtons;\n"
  },
  {
    "path": "src/lv2/listCard/ListCard.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { MdOutlineDownload } from 'react-icons/md';\nimport { action } from '@storybook/addon-actions';\nimport { text, boolean } from '@storybook/addon-knobs';\nimport Button from '../../lv1/buttons/Button';\nimport ListCard from './ListCard';\n\nconst image =\n  'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAm0lEQVQ4T6WSoQ4DIRAF2T8/iUQikUgkDovD4pBI5IK6hiYkHG3vaFYQCAmPmc0DRDxrrWys1hpDRLa7QynlEjCH9fMI+vUB5JxpBCklGkGM8fzHuSsNnf4OQghfFXaHCt57GoFzjkZgrX0kmJ3nGfR7MMa8A3ad14KB1ppGoJSiEUgpPwjunNeqgxDiUWEt2qVInHMawXEcJIIX64rsuyC/Fa0AAAAASUVORK5CYII=';\n\nexport default {\n  component: ListCard,\n};\n\nexport const ListCardComponent = () => (\n  <ListCard\n    title={text('Title', 'リストカード', 'ListCard')}\n    url={text('Url', '#', 'ListCard')}\n    onClick={action('click')}\n    target={text('Target', '', 'ListCard')}\n    rel={text('Rel', '', 'ListCard')}\n    disabled={boolean('Disabled', false, 'ListCard')}\n    current={boolean('Current', false, 'ListCard')}\n    onSelfWindowNavigation={action('self window navigation')}\n    actions={\n      <>\n        <Button small marginRight>\n          ボタン1\n        </Button>\n        <Button small>ボタン2</Button>\n      </>\n    }\n  >\n    {text(\n      'Children',\n      'コンテンツコンテンツコンテンツコンテンツコンテンツ',\n      'ListCard'\n    )}\n  </ListCard>\n);\n\nexport const WithOnlyTitle = () => (\n  <>\n    <ListCard mb={1} title=\"リストカード\" />\n    <ListCard mb={1} title=\"リストカード urlあり\" url=\"#\" />\n    <ListCard\n      mb={1}\n      title=\"リストカード urlあり(_blank)\"\n      url=\"#\"\n      target=\"_blank\"\n    />\n  </>\n);\n\nexport const WithoutAction = () => (\n  <ListCard title=\"リストカード\">\n    コンテンツコンテンツコンテンツコンテンツコンテンツ\n  </ListCard>\n);\n\nexport const WithoutChildren = () => (\n  <ListCard\n    title=\"リストカード\"\n    actions={\n      <>\n        <Button small marginRight>\n          ボタン1\n        </Button>\n        <Button small>ボタン2</Button>\n      </>\n    }\n  />\n);\n\nexport const WithThumbnail = () => (\n  <ListCard\n    title=\"リストカード\"\n    thumbnail={<img src={image} alt=\"\" width=\"160\" height=\"160\" />}\n    actions={\n      <>\n        <Button small marginRight>\n          ボタン1\n        </Button>\n        <Button small>ボタン2</Button>\n      </>\n    }\n  >\n    コンテンツコンテンツコンテンツコンテンツコンテンツ\n  </ListCard>\n);\n\nexport const WithLargeThumbnail = () => (\n  <ListCard\n    title=\"リストカード\"\n    thumbnail={<img src={image} alt=\"\" width=\"192\" height=\"108\" />}\n    thumbnailSize={'large'}\n    actions={\n      <>\n        <Button small marginRight>\n          ボタン1\n        </Button>\n        <Button small>ボタン2</Button>\n      </>\n    }\n  >\n    コンテンツコンテンツコンテンツコンテンツコンテンツ\n  </ListCard>\n);\n\nexport const WithDisabled = () => (\n  <ListCard\n    title=\"リストカード\"\n    thumbnail={<img src={image} alt=\"\" width=\"192\" height=\"108\" />}\n    actions={\n      <>\n        <Button small marginRight disabled>\n          ボタン1\n        </Button>\n        <Button small disabled>\n          ボタン2\n        </Button>\n      </>\n    }\n    disabled\n  />\n);\n\nexport const WithIconComponent = () => (\n  <>\n    <ListCard title=\"リストカード\" IconComponent={MdOutlineDownload}>\n      IconComponentに任意のiconを指定\n    </ListCard>\n  </>\n);\n"
  },
  {
    "path": "src/lv2/listCard/ListCard.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport selfWindowNavigator, {\n  SelfWindowNavigationProp,\n} from '../../utilities/selfWindowNavigator';\nimport Note from '../../lv1/typography/Note';\nimport { MdChevronRight, MdOpenInNew } from 'react-icons/md';\n\ntype Props = {\n  title: React.ReactNode;\n  url?: string;\n  onClick?: React.MouseEventHandler;\n  children?: React.ReactNode;\n  actions?: React.ReactNode;\n  thumbnail?: React.ReactNode;\n  thumbnailSize?: 'default' | 'large';\n  target?: string;\n  rel?: string;\n  disabled?: boolean;\n  current?: boolean;\n  IconComponent?: React.ElementType;\n} & SelfWindowNavigationProp &\n  CommonProps;\n\n/**\n * コレクションのひとつひとつのオブジェクトの表現に使用する、クリッカブルな要素です。\n *\n * - このコンポーネントは全体がクリッカブルです。全体をクリッカブルにしない場合は `CardBase` を使用してください\n * - モバイル向け画面では積極的に使用してください\n * - オブジェクトの属性を並べたリストを作るには `ListTable` (`BasicTable`) を使用してください。\n * - `title` は必須です\n * - `actions` として、オブジェクトの操作へのショートカットのボタン等を並べることができます\n * - `thumbnail` として、画像などを表示することができます\n * - `thumbnailSize` として画像サイズの指定を行うことができます default = 80px / large = 192px\n * - `title` `children` にはクリック可能な要素を渡さないでください\n * - `disabled` をtrueにしたときは、actionsのボタン等もdisabledにしてください\n * - `IconComponent` アイコンとして表示するコンポーネントを渡します。react-iconsのコンポーネントが想定されています。\n */\nconst ListCard: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    url,\n    onClick,\n    onSelfWindowNavigation,\n    title,\n    actions,\n    target,\n    rel,\n    disabled,\n    current,\n    thumbnail,\n    IconComponent = url && target === '_blank' ? MdOpenInNew : MdChevronRight,\n    thumbnailSize = 'default',\n  } = props;\n  const className = 'vb-listCard';\n  const content = (\n    <div className={`${className}__content`}>\n      {thumbnail && (\n        <div\n          className={`${className}__thumbnail${\n            !!thumbnailSize && thumbnailSize === 'large'\n              ? ` ${className}__thumbnail--large`\n              : ''\n          }`}\n        >\n          {thumbnail}\n        </div>\n      )}\n      <div className={`${className}__main`}>\n        <div className={`${className}__title`}>{title}</div>\n        {children && (\n          <Note marginTop marginSize=\"small\">\n            {children}\n          </Note>\n        )}\n      </div>\n    </div>\n  );\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  const _listCardProps = commonProps(props, className);\n  const listCardProps = {\n    ..._listCardProps,\n    ...{\n      className: `${_listCardProps.className}${\n        disabled ? ` ${className}--disabled` : ''\n      }${current ? ` ${className}--current` : ''}`,\n    },\n  };\n  return (\n    <div {...listCardProps}>\n      {url ? (\n        <a\n          className={`${className}__link${\n            disabled ? ` ${className}__link--disabled` : ''\n          }${current ? ` ${className}__link--current` : ''}`}\n          href={url}\n          target={target}\n          rel={\n            rel ? rel : target === '_blank' ? 'noopener noreferrer' : undefined\n          }\n          aria-disabled={disabled && true}\n          onClick={(e: React.MouseEvent): void => {\n            disabled ? e.preventDefault() : onClick && onClick(e);\n            if (url) {\n              const navigator = selfWindowNavigator(onSelfWindowNavigation);\n              navigator && navigator(e, url);\n            }\n          }}\n        >\n          {content}\n          <IconComponent className={`${className}__icon`} />\n        </a>\n      ) : (\n        <button\n          className={`${className}__button${\n            disabled ? ` ${className}__button--disabled` : ''\n          }${current ? ` ${className}__button--current` : ''}`}\n          disabled={disabled && true}\n          onClick={onClick}\n        >\n          {content}\n          <IconComponent className={`${className}__icon`} />\n        </button>\n      )}\n      {actions && <div className={`${className}__actions`}>{actions}</div>}\n    </div>\n  );\n};\nexport default ListCard;\n"
  },
  {
    "path": "src/lv2/listTable/GroupedListTable.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\n\nimport GroupedListTable from './GroupedListTable';\nimport { Digits } from '../../utilities';\nimport { Order } from '../../lv1/lists/TableListHeadCell';\n\nexport default {\n  component: GroupedListTable,\n};\n\nexport const GroupedListTableComponent = () => {\n  return (\n    <GroupedListTable\n      headers={[\n        {\n          value: 'タイトル',\n          onClick: action('header onClick'),\n          'data-test': 'タイトル',\n        },\n        { value: '日付', onClick: action('header onClick'), ordering: 'desc' },\n        { value: '金額', alignRight: true, onClick: action('header onClick') },\n        {\n          value: '消費税',\n          alignRight: true,\n          onClick: action('header onClick'),\n        },\n      ]}\n      rowGroups={[\n        {\n          summaryCells: [\n            {\n              value: '2020-10-27 の合計',\n              colSpan: 2,\n              'data-test': '2020-10-27 の合計',\n            },\n            { value: '4,234', alignRight: true, 'data-test': '金額' },\n            { value: '423', alignRight: true, 'data-test': '消費税' },\n          ],\n          url: 'https://www.freee.co.jp',\n          onSelfWindowNavigation: action('rowGroup onSelfWindowNavigation'),\n          onToggleFolded: action('rowGroup onToggleFolded'),\n          onChangeCheckBox: action('rowGroup onChangeCheckBox'),\n          'data-test': 'サマリー行',\n          rows: [\n            {\n              url: 'https://www.freee.co.jp',\n              onSelfWindowNavigation: action('row onSelfWindowNavigation'),\n              onChangeCheckBox: action('row onChangeCheckBox'),\n              cells: [\n                {\n                  value: '文房具',\n                  'data-test': '1つめのセル',\n                },\n                { value: '2020-10-27', 'data-test': '2つめのセル' },\n                {\n                  value: '1,234',\n                  alignRight: true,\n                  'data-test': '3つめのセル',\n                },\n                { value: '123', alignRight: true, 'data-test': '4つめのセル' },\n              ],\n            },\n            {\n              onClick: action('row onClick'),\n              onChangeCheckBox: action('row onChangeCheckBox'),\n              cells: [\n                { value: '交通費' },\n                { value: '2020-10-27' },\n                { value: '3,000', alignRight: true },\n                { value: '300', alignRight: true },\n              ],\n            },\n          ],\n        },\n        {\n          summaryCells: [\n            { value: '2020-10-26 の合計', colSpan: 2 },\n            { value: '2,200', alignRight: true },\n            { value: '220', alignRight: true },\n          ],\n          onClick: action('rowGroup onClick'),\n          onToggleFolded: action('rowGroup onToggleFolded'),\n          onChangeCheckBox: action('rowGroup onChangeCheckBox'),\n          folded: true,\n          rows: [\n            {\n              onChangeCheckBox: action('row onChangeCheckBox'),\n              cells: [\n                { value: '昼食' },\n                { value: '2020-10-26' },\n                { value: '1,200', alignRight: true },\n                { value: '120', alignRight: true },\n              ],\n            },\n            {\n              onChangeCheckBox: action('row onChangeCheckBox'),\n              cells: [\n                { value: '交通費' },\n                { value: '2020-10-26' },\n                { value: '1,000', alignRight: true },\n                { value: '100', alignRight: true },\n              ],\n            },\n          ],\n        },\n      ]}\n      onChangeHeaderCheckBox={action('onChangeHeaderCheckBox')}\n      withCheckBox={boolean('withCheckBox', true, 'GroupedListTable')}\n      foldable={boolean('foldable', false, 'GroupedListTable')}\n      fitContent={boolean('fitContent', false, 'GroupedListTable')}\n      {...commonKnobs()}\n    />\n  );\n};\n\nconst sample: {\n  date: string;\n  details: { title: string; date: string; amount: number; tax: number }[];\n}[] = [\n  {\n    date: '2020-10-27',\n    details: [\n      {\n        title: '文房具',\n        date: '2020-10-27',\n        amount: 1234,\n        tax: 123,\n      },\n      {\n        title: '交通費',\n        date: '2020-10-27',\n        amount: 3000,\n        tax: 300,\n      },\n    ],\n  },\n  {\n    date: '2020-10-26',\n    details: [\n      {\n        title: '昼食',\n        date: '2020-10-26',\n        amount: 1200,\n        tax: 120,\n      },\n      {\n        title: '交通費',\n        date: '2020-10-26',\n        amount: 1000,\n        tax: 100,\n      },\n    ],\n  },\n];\n\nexport const InteractiveSample = () => {\n  const [checkBoxStatuses, setCheckBoxStatuses] = React.useState<boolean[][]>(\n    Array(sample.length)\n      .fill(null)\n      .map((_e, i) => Array(sample[i].details.length || 0).fill(false))\n  );\n  const [foldingStatuses, setFoldingStatuses] = React.useState<boolean[]>(\n    Array(sample.length).fill(false)\n  );\n  type SortKeyT = 'date' | 'amount' | 'tax';\n  const [sortKey, setSortKey] = React.useState<SortKeyT>('date');\n  const [sortOrder, setSortOrder] = React.useState<Order>('desc');\n  const nextOrder: { [key in Order]: Order } = {\n    asc: 'desc',\n    desc: 'init',\n    init: 'asc',\n  };\n  const changeSort = (key: SortKeyT) => {\n    setSortKey(key);\n    setSortOrder((prev) => (key === sortKey ? nextOrder[prev] : 'desc'));\n  };\n\n  React.useEffect(() => {\n    setCheckBoxStatuses(\n      Array(sample.length)\n        .fill(null)\n        .map((_e, i) => Array(sample[i].details.length || 0).fill(false))\n    );\n    setFoldingStatuses(Array(sample.length).fill(false));\n  }, [sortKey, sortOrder]);\n\n  return (\n    <GroupedListTable\n      headers={[\n        {\n          value: 'タイトル',\n        },\n        {\n          value: '日付',\n          ordering: sortKey === 'date' ? sortOrder : 'init',\n          onClick: () => changeSort('date'),\n        },\n        {\n          value: '金額',\n          alignRight: true,\n          ordering: sortKey === 'amount' ? sortOrder : 'init',\n          onClick: () => changeSort('amount'),\n        },\n        {\n          value: '消費税',\n          alignRight: true,\n          ordering: sortKey === 'tax' ? sortOrder : 'init',\n          onClick: () => changeSort('tax'),\n        },\n      ]}\n      rowGroups={(sortOrder === 'init'\n        ? sample\n        : sample\n            .concat()\n            .sort(\n              (a, b) =>\n                (sortKey === 'date'\n                  ? a.date.localeCompare(b.date)\n                  : a.details.reduce((acc, e) => acc + e[sortKey], 0) -\n                    b.details.reduce((acc, e) => acc + e[sortKey], 0)) *\n                (sortOrder === 'desc' ? -1 : 1)\n            )\n      ).map((group, groupIndex) => {\n        return {\n          summaryCells: [\n            { value: `${group.date}の合計`, colSpan: 2 },\n            {\n              value: Digits.formalize(\n                group.details.reduce((acc, current) => acc + current.amount, 0)\n              ),\n              alignRight: true,\n            },\n            {\n              value: Digits.formalize(\n                group.details.reduce((acc, current) => acc + current.tax, 0)\n              ),\n              alignRight: true,\n            },\n          ],\n          folded: foldingStatuses[groupIndex],\n          onToggleFolded: (toggle) => {\n            const groupStatuses = [...foldingStatuses];\n            groupStatuses[groupIndex] = toggle;\n            setFoldingStatuses(groupStatuses);\n          },\n          onChangeCheckBox: (e) => {\n            const groupStatuses = [...checkBoxStatuses];\n            groupStatuses[groupIndex] = Array(group.details.length).fill(\n              e.target.checked\n            );\n            setCheckBoxStatuses(groupStatuses);\n          },\n          rows: group.details.map((row, rowIndex) => ({\n            cells: [\n              { value: row.title },\n              { value: row.date },\n              { value: Digits.formalize(row.amount), alignRight: true },\n              { value: Digits.formalize(row.tax), alignRight: true },\n            ],\n            checked: checkBoxStatuses[groupIndex][rowIndex],\n            onChangeCheckBox: (e) => {\n              const groupStatuses = [...checkBoxStatuses];\n              const rowStatuses = [...checkBoxStatuses[groupIndex]];\n              rowStatuses[rowIndex] = e.target.checked;\n              groupStatuses[groupIndex] = rowStatuses;\n              setCheckBoxStatuses(groupStatuses);\n            },\n          })),\n        };\n      })}\n      onChangeHeaderCheckBox={(e) => {\n        setCheckBoxStatuses(\n          Array(sample.length)\n            .fill(null)\n            .map((_e, i) =>\n              Array(sample[i].details.length || 0).fill(e.target.checked)\n            )\n        );\n      }}\n      withCheckBox={boolean('withCheckBox', true, 'GroupedListTable')}\n      foldable={boolean('foldable', true, 'GroupedListTable')}\n      {...commonKnobs()}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/listTable/GroupedListTable.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\n\nimport TableListHead from '../../lv1/lists/TableListHead';\nimport TableListHeadCell from '../../lv1/lists/TableListHeadCell';\nimport TableListRow from '../../lv1/lists/TableListRow';\nimport TableListCell from '../../lv1/lists/TableListCell';\nimport CheckBoxCell from '../../lv1/lists/CheckBoxCell';\nimport TreeFoldingButtonCell from '../../lv1/lists/TreeFoldingButtonCell';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport { FitContentProps } from '../../lv1/bases/types';\n\nimport { TableHeader, TableRow, TableCell } from './ListTable';\n\nexport type TableRowGroup = {\n  rows: TableRow[];\n  summaryCells: TableCell[];\n  /**\n   * 行クリック時の処理を渡せます。遷移先のURLが存在する場合にはonClick内で遷移させるのではなく、URLを渡してください。\n   * react-routerの遷移処理を入れたい場合は onSelfWindowNavigationを使用してください\n   */\n  onClick?: () => void;\n  url?: string;\n  onChangeCheckBox?: React.ChangeEventHandler<HTMLInputElement>;\n  checkBoxName?: string;\n  checkBoxValue?: string;\n  folded?: boolean;\n  onToggleFolded?: (fold: boolean) => void;\n  'data-test'?: string;\n} & SelfWindowNavigationProp;\n\ntype Props = {\n  headers: TableHeader[];\n  rowGroups: TableRowGroup[];\n  withCheckBox?: boolean;\n  onChangeHeaderCheckBox?: React.ChangeEventHandler<HTMLInputElement>;\n  foldable?: boolean;\n} & CommonProps &\n  FitContentProps;\n\nconst GroupedListTable: React.FC<Props> = (props: Props) => {\n  const {\n    headers,\n    withCheckBox,\n    rowGroups,\n    onChangeHeaderCheckBox,\n    foldable,\n    fitContent,\n  } = props;\n\n  return (\n    <div {...commonProps(props, 'vb-groupedListTable', { fitContent })}>\n      <table\n        className=\"vb-groupedListTable__table\"\n        // role=\"treegrid\" にしたいが、するとNVDAで表の中身を読めなくなってしまう\n      >\n        <thead>\n          <TableListHead>\n            {withCheckBox && (\n              <CheckBoxCell\n                header={true}\n                aria-label=\"すべて選択\"\n                onChange={onChangeHeaderCheckBox}\n                checked={rowGroups.every((rowGroup) =>\n                  rowGroup.rows.every((row) => row.checked)\n                )}\n              />\n            )}\n            {foldable && (\n              <TableListHeadCell>\n                <VisuallyHidden>行の開閉</VisuallyHidden>\n              </TableListHeadCell>\n            )}\n            {headers.map((header, i) => (\n              <TableListHeadCell\n                key={i}\n                alignCenter={header.alignCenter}\n                alignRight={header.alignRight}\n                ordering={header.ordering}\n                onClick={\n                  header.onClick &&\n                  ((): void => {\n                    header.onClick && header.onClick(i);\n                  })\n                }\n                minWidth={header.minWidth}\n                maxWidth={header.maxWidth}\n                data-test={header['data-test']}\n              >\n                {header.value}\n              </TableListHeadCell>\n            ))}\n          </TableListHead>\n        </thead>\n        <tbody>\n          {rowGroups.map((rowGroup, rowGroupIndex) => {\n            return (\n              <React.Fragment key={rowGroupIndex}>\n                <TableListRow\n                  key={rowGroupIndex}\n                  aria-level={1}\n                  aria-setsize={rowGroups.length}\n                  aria-posinset={rowGroupIndex + 1}\n                  aria-expanded={foldable ? !rowGroup.folded : undefined}\n                  url={rowGroup.url}\n                  onSelfWindowNavigation={rowGroup.onSelfWindowNavigation}\n                  onClick={rowGroup.onClick}\n                  data-test={rowGroup['data-test']}\n                >\n                  {withCheckBox && (\n                    <CheckBoxCell\n                      header={false}\n                      checked={rowGroup.rows.every((row) => row.checked)}\n                      onChange={rowGroup.onChangeCheckBox}\n                      name={rowGroup.checkBoxName}\n                      value={rowGroup.checkBoxValue}\n                    />\n                  )}\n                  {foldable && (\n                    <TreeFoldingButtonCell\n                      folded={!!rowGroup.folded}\n                      onToggleFolded={(fold: boolean) => {\n                        rowGroup.onToggleFolded &&\n                          rowGroup.onToggleFolded(fold);\n                      }}\n                    />\n                  )}\n                  {rowGroup.summaryCells.map((cell, cellIndex) => (\n                    <TableListCell\n                      key={cellIndex}\n                      alignCenter={cell.alignCenter}\n                      alignRight={cell.alignRight}\n                      small={cell.small}\n                      url={rowGroup.url}\n                      onSelfWindowNavigation={rowGroup.onSelfWindowNavigation}\n                      breakWord={cell.breakWord}\n                      colSpan={cell.colSpan}\n                      data-test={cell['data-test']}\n                    >\n                      {cell.value}\n                    </TableListCell>\n                  ))}\n                </TableListRow>\n                {(!foldable || !rowGroup.folded) &&\n                  rowGroup.rows.map((row, rowIndex) => (\n                    <TableListRow\n                      key={`${rowGroupIndex}-${rowIndex}`}\n                      url={row.url}\n                      onSelfWindowNavigation={row.onSelfWindowNavigation}\n                      onClick={\n                        row.onClick &&\n                        ((): void => {\n                          row.onClick ? row.onClick(rowIndex) : null;\n                        })\n                      }\n                      aria-level={2}\n                      aria-setsize={rowGroup.rows.length}\n                      aria-posinset={rowIndex + 1}\n                      data-test={row['data-test']}\n                    >\n                      {withCheckBox && (\n                        <CheckBoxCell\n                          header={false}\n                          checked={row.checked}\n                          onChange={row.onChangeCheckBox}\n                          name={row.checkBoxName}\n                          value={row.checkBoxValue}\n                        />\n                      )}\n                      {foldable && <TableListCell />}\n                      {row.cells.map((cell, cellIndex) => (\n                        <TableListCell\n                          key={cellIndex}\n                          alignCenter={cell.alignCenter}\n                          alignRight={cell.alignRight}\n                          small={cell.small}\n                          url={row.url}\n                          onSelfWindowNavigation={row.onSelfWindowNavigation}\n                          breakWord={cell.breakWord}\n                          indentLevel={cellIndex === 0 ? 1 : 0}\n                          data-test={cell['data-test']}\n                        >\n                          {cell.value}\n                        </TableListCell>\n                      ))}\n                    </TableListRow>\n                  ))}\n              </React.Fragment>\n            );\n          })}\n        </tbody>\n      </table>\n    </div>\n  );\n};\nexport default GroupedListTable;\n"
  },
  {
    "path": "src/lv2/listTable/ListTable.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\n\nimport JumpButton from '../../lv1/buttons/JumpButton';\nimport Checkbox from '../../lv1/forms/CheckBox';\nimport Button from '../../lv1/buttons/Button';\nimport FullScreenModal from '../../lv2/modals/FullScreenModal';\n\nimport ListTable, { TableHeader } from './ListTable';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport MessageIcon from '../messageIcon/MessageIcon';\nimport ScrollableBase from '../../lv1/bases/ScrollableBase';\nimport { boolean, number } from '@storybook/addon-knobs';\nimport { Order } from '../../lv1/lists/TableListHeadCell';\n\nconst headers: TableHeader[] = [\n  {\n    value: '左寄せ',\n    ordering: 'asc',\n    onClick: action('header cell click'),\n  },\n  {\n    value: (\n      <>\n        左寄せソート不可\n        <MessageIcon label=\"ヘルプ\" small>\n          hoge\n        </MessageIcon>\n      </>\n    ),\n    'data-test': '左寄せソート不可',\n  },\n  {\n    value: (\n      <>\n        中央寄せ\n        {/* クリック可能なヘッダーセルにクリック可能なものを置く場合、クリックが伝播しないようにする必要がある */}\n        {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n        <span\n          onClick={(e) => e.stopPropagation()}\n          onKeyDown={(e) => e.stopPropagation()}\n        >\n          <MessageIcon label=\"ヘルプ\" small>\n            hoge\n          </MessageIcon>\n        </span>\n      </>\n    ),\n    alignCenter: true,\n    onClick: action('header cell click'),\n  },\n  {\n    value: '右寄せ、文字小さめ',\n    alignRight: true,\n    onClick: action('header cell click'),\n  },\n];\n\nconst rows = [\n  {\n    cells: [\n      { value: 'テーブルリスト', 'data-test': '1つめのセル' },\n      {\n        value: (\n          <>\n            テーブルリスト\n            <MessageIcon label=\"ヘルプ\">hoge</MessageIcon>\n          </>\n        ),\n        'data-test': '2つめのセル',\n      },\n      {\n        value: 'テーブルリスト',\n        alignCenter: true,\n        'data-test': '3つめのセル',\n      },\n      {\n        value: 10000000,\n        alignRight: true,\n        small: true,\n        'data-test': '4つめのセル',\n      },\n    ],\n    'data-test': '行',\n  },\n  {\n    url: 'https://www.freee.co.jp/',\n    cells: [\n      {\n        value: <Checkbox></Checkbox>,\n      },\n      {\n        value: (\n          <JumpButton url=\"https://corp.freee.co.jp/\" target=\"_blank\" small>\n            ボタン\n          </JumpButton>\n        ),\n      },\n      { value: '行リンク', alignCenter: true },\n      { value: 10000000, alignRight: true, small: true },\n    ],\n  },\n  {\n    cells: [\n      { value: 'テーブルリスト' },\n      { value: 'テーブルリスト' },\n      { value: 'テーブルリスト', alignCenter: true },\n      {\n        value: (\n          <JumpButton small url=\"https://www.freee.co.jp/\">\n            ボタン\n          </JumpButton>\n        ),\n      },\n    ],\n  },\n  {\n    onClick: action('row2-clicked'),\n    cells: [\n      {\n        value: (\n          // Checkboxにclickイベントを持たせられないのでspanに持たせている\n          // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n          <span\n            onKeyDown={(e) => e.stopPropagation()}\n            onClick={(e) => e.stopPropagation()}\n          >\n            <Checkbox></Checkbox>\n          </span>\n        ),\n      },\n      { value: 'テーブルリスト、文字小さめ', small: true },\n      { value: 'テーブルリスト、文字小さめ', alignCenter: true, small: true },\n      { value: 10000000, alignRight: true },\n    ],\n  },\n  {\n    cells: [\n      { value: 'テーブルリスト' },\n      { value: 'テーブルリスト、上寄せ', alignTop: true },\n      {\n        value: (\n          <div>\n            あああ\n            <br /> いいい <br /> ううう\n            <br />\n            えええ\n          </div>\n        ),\n        alignCenter: true,\n      },\n      {\n        value: (\n          <JumpButton small url=\"https://www.freee.co.jp/\">\n            ボタン\n          </JumpButton>\n        ),\n        alignRight: true,\n      },\n    ],\n  },\n  {\n    cells: [\n      { value: 'テーブルリスト' },\n      { value: 'テーブルリスト' },\n      {\n        value: '結合セル',\n        colSpan: 2,\n        alignCenter: true,\n      },\n    ],\n  },\n];\n\nexport default {\n  component: ListTable,\n};\n\nexport const ListTableComponent = () => (\n  <ListTable\n    withCheckBox={boolean('withCheckBox', false, 'ListTable')}\n    fixedHeader={boolean('fixedHeader', false, 'ListTable')}\n    fixedHeaderOffset={number('fixedHeaderOffset', 0, {}, 'ListTable')}\n    fitContent={boolean('fitContent', false, 'ListTable')}\n    {...commonKnobs()}\n    headers={headers}\n    rows={rows}\n  />\n);\n\nconst CheckBoxSample = () => {\n  const [statuses, setStatuses] = React.useState<boolean[]>(\n    Array(2).fill(false)\n  );\n  const updateStatus = (value: boolean, index: number) => {\n    const newStatuses = [...statuses];\n    newStatuses[index] = value;\n    setStatuses(newStatuses);\n  };\n\n  return (\n    <ListTable\n      withCheckBox\n      onChangeHeaderCheckBox={(e) => {\n        setStatuses(statuses.map(() => e.target.checked));\n      }}\n      fixedHeader={boolean('fixedHeader', false, 'ListTable')}\n      fixedHeaderOffset={number('fixedHeaderOffset', 0, {}, 'ListTable')}\n      headers={[\n        { value: '氏名' },\n        { value: 'メールアドレス' },\n        { value: 'ステータス' },\n      ]}\n      rows={[\n        {\n          checked: statuses[0],\n          onChangeCheckBox: (e) => updateStatus(e.target.checked, 0),\n          checkBoxName: 'row0',\n          checkBoxValue: 'row0',\n          onClick: action('rowClick'),\n          cells: [\n            { value: '伊藤 美穂' },\n            { value: 'ito-miho@example.com' },\n            { value: '完了' },\n          ],\n        },\n        {\n          checked: statuses[1],\n          onChangeCheckBox: (e) => updateStatus(e.target.checked, 1),\n          url: 'https://www.freee.co.jp',\n          checkBoxName: 'row1',\n          checkBoxValue: 'row1',\n          cells: [\n            { value: '佐藤 雄太' },\n            { value: 'sato-yuta@example.com' },\n            { value: '未登録' },\n          ],\n        },\n      ]}\n    />\n  );\n};\nexport const WithCheckBox = () => <CheckBoxSample />;\n\nexport const WithSomeDisabledCheckBox = () => {\n  const [statuses, setStatuses] = React.useState<boolean[]>(\n    Array(3).fill(false)\n  );\n\n  const onChangeHeaderCheckBox = (e: any) => {\n    const newStatuses = Array(rows.length).fill(e.target.checked);\n    rows.forEach((row, i) => {\n      if (row.checkBoxDisabled) {\n        newStatuses[i] = false;\n      }\n    });\n    setStatuses(newStatuses);\n  };\n\n  const onChangeRowCheckBox = (value: boolean, index: number) => {\n    const newStatuses = [...statuses];\n    newStatuses[index] = value;\n    setStatuses(newStatuses);\n  };\n\n  const headers = [\n    { value: '氏名' },\n    { value: 'メールアドレス' },\n    { value: 'ステータス' },\n  ];\n\n  const rows = [\n    {\n      checked: statuses[0],\n      onChangeCheckBox: (e: any) => onChangeRowCheckBox(e.target.checked, 0),\n      checkBoxDisabled: false,\n      checkBoxName: 'row0',\n      checkBoxValue: 'row0',\n      onClick: action('rowClick'),\n      cells: [\n        { value: '伊藤 美穂' },\n        { value: 'ito-miho@example.com' },\n        { value: '完了' },\n      ],\n    },\n    {\n      checked: statuses[1],\n      onChangeCheckBox: (e: any) => onChangeRowCheckBox(e.target.checked, 1),\n      url: 'https://www.freee.co.jp',\n      checkBoxDisabled: true,\n      checkBoxName: 'row1',\n      checkBoxValue: 'row1',\n      cells: [\n        { value: '佐藤 雄太' },\n        { value: 'sato-yuta@example.com' },\n        { value: '未登録' },\n      ],\n    },\n    {\n      checked: statuses[2],\n      onChangeCheckBox: (e: any) => onChangeRowCheckBox(e.target.checked, 2),\n      url: 'https://www.freee.co.jp',\n      checkBoxDisabled: false,\n      checkBoxName: 'row2',\n      checkBoxValue: 'row2',\n      cells: [\n        { value: '山田 太郎' },\n        { value: 'yamada-taro@example.com' },\n        { value: '保留' },\n      ],\n    },\n  ];\n\n  return (\n    <ListTable\n      withCheckBox\n      onChangeHeaderCheckBox={onChangeHeaderCheckBox}\n      fixedHeader={boolean('fixedHeader', false, 'ListTable')}\n      fixedHeaderOffset={number('fixedHeaderOffset', 0, {}, 'ListTable')}\n      headers={headers}\n      rows={rows}\n    />\n  );\n};\n\nexport const WithCheckBoxAndNoRows = () => {\n  return (\n    <ListTable\n      headers={[\n        { value: '氏名' },\n        { value: 'メールアドレス' },\n        { value: 'ステータス' },\n      ]}\n      onChangeHeaderCheckBox={() => undefined}\n      rows={[]}\n      withCheckBox\n    />\n  );\n};\n\nexport const HeaderCellWithNoWrap = () => {\n  return (\n    <ListTable\n      headers={[\n        {\n          noWrap: true,\n          value:\n            '折り返さないヘッダ折り返さないヘッダ折り返さないヘッダ折り返さないヘッダ折り返さないヘッダ',\n        },\n        {\n          value:\n            '折り返すヘッダ折り返すヘッダ折り返すヘッダ折り返すヘッダ折り返すヘッダ折り返すヘッダ',\n        },\n      ]}\n      rows={[{ cells: [{ value: 'column' }, { value: 'column' }] }]}\n    />\n  );\n};\n\nexport const FixedHeader = () => (\n  <ScrollableBase scrollableX scrollableY>\n    <div style={{ height: '50vh' }}>\n      <ListTable\n        fixedHeader={true}\n        fixedHeaderOffset={0}\n        {...commonKnobs()}\n        headers={[\n          { value: 'column-01', minWidth: 20 },\n          { value: 'column-02', minWidth: 20 },\n          { value: 'column-03', minWidth: 20 },\n          { value: 'column-04', minWidth: 20 },\n          { value: 'column-05', minWidth: 20 },\n          { value: 'column-06', minWidth: 20 },\n          { value: 'column-07', minWidth: 20 },\n          { value: 'column-08', minWidth: 20 },\n          { value: 'column-09', minWidth: 20 },\n          { value: 'column-10', minWidth: 20 },\n        ]}\n        rows={[...new Array(50)].map((_, i) => ({\n          cells: [\n            { value: `value-${String(i + 1).padStart(2, '0')}-01` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-02` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-03` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-04` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-05` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-06` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-07` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-08` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-09` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-10` },\n          ],\n        }))}\n      />\n    </div>\n  </ScrollableBase>\n);\n\nexport const RowClickForReactRouter = () => (\n  <>\n    <Paragraph marginBottom>\n      react-router等で、クリック時にデフォルトとは違う挙動（pushStateなど）をさせたい場合には\n      <code>onSelfWindowNavigation</code> を使用します\n    </Paragraph>\n    <ListTable\n      headers={[{ value: 'col1' }, { value: 'col2' }, { value: 'col3' }]}\n      rows={[\n        {\n          url: 'https://www.freee.co.jp/',\n          onSelfWindowNavigation: action('selfWindowNavigation'),\n          cells: [{ value: 'col1' }, { value: 'col2' }, { value: 'col3' }],\n        },\n        {\n          url: 'https://www.freee.co.jp/',\n          onSelfWindowNavigation: action('selfWindowNavigation'),\n          cells: [{ value: 'col1' }, { value: 'col2' }, { value: 'col3' }],\n        },\n        {\n          url: 'https://www.freee.co.jp/',\n          onSelfWindowNavigation: action('selfWindowNavigation'),\n          cells: [{ value: 'col1' }, { value: 'col2' }, { value: 'col3' }],\n        },\n        {\n          url: 'https://www.freee.co.jp/',\n          onSelfWindowNavigation: action('selfWindowNavigation'),\n          cells: [\n            {\n              value: (\n                <>\n                  col1\n                  <br />\n                  col1\n                  <br />\n                  col1\n                  <br />\n                </>\n              ),\n            },\n            { value: 'col2' },\n            { value: 'col3' },\n          ],\n        },\n      ]}\n      fixedHeader={boolean('fixedHeader', false, 'ListTable')}\n      fixedHeaderOffset={number('fixedHeaderOffset', 0, {}, 'ListTable')}\n    ></ListTable>\n  </>\n);\n\nexport const ApplyDataMaskingToCell = () => (\n  <>\n    <Paragraph marginBottom>\n      行動追跡ツールで要素にマスキングを設定する一つの方法として、TableCellに個別でマスキングをかけたい場合、cellに\n      <code>&#39;data-masking&#39;&#58; true</code>を指定して使用します\n    </Paragraph>\n    <ListTable\n      headers={[{ value: 'col1' }, { value: 'col2' }, { value: 'col3' }]}\n      rows={[\n        {\n          cells: [\n            { value: 'cell1' },\n            { value: 'cell2' },\n            { value: 'マスキング適用cell', 'data-masking': true },\n          ],\n        },\n      ]}\n    ></ListTable>\n  </>\n);\n\nexport const ApplFitContent = () => (\n  <>\n    <Paragraph marginBottom>\n      横幅を画面いっぱいまで広げたくない場合は\n      <code>&#39;fitContent&#39;&#58; true</code>を指定して使用します\n    </Paragraph>\n    <ListTable\n      fitContent\n      headers={[{ value: 'col1' }, { value: 'col2' }, { value: 'col3' }]}\n      rows={[\n        {\n          cells: [{ value: 'cell1' }, { value: 'cell2' }, { value: 'cell3' }],\n        },\n      ]}\n    ></ListTable>\n  </>\n);\n\nexport const OnModalWithButton = () => {\n  const [isOpen, setIsOpen] = React.useState<boolean>(false);\n\n  const handleClick = () => {\n    action('click row and close the modal');\n    setIsOpen(false);\n  };\n\n  return (\n    <>\n      <Paragraph mb={1}>\n        行を Enter\n        で選択しモーダルが閉じた直後、ボタンにフォーカスがあたるが、そのまま再度モーダルが開いてしまうことはない。\n      </Paragraph>\n      <Button\n        onClick={() => {\n          action('click button to open the modal');\n          setIsOpen(true);\n        }}\n      >\n        open\n      </Button>\n      <FullScreenModal\n        title=\"モーダル\"\n        isOpen={isOpen}\n        onRequestClose={() => {\n          action('close modal');\n          setIsOpen(false);\n        }}\n      >\n        <ListTable\n          headers={[{ value: '漢字' }, { value: 'よみ' }]}\n          rows={[\n            {\n              cells: [{ value: '蟀谷' }, { value: 'こめかみ' }],\n              onClick: handleClick,\n            },\n            {\n              cells: [{ value: '膕' }, { value: 'ひがかみ' }],\n              onClick: handleClick,\n            },\n            {\n              cells: [{ value: '踝' }, { value: 'くるぶし' }],\n              onClick: handleClick,\n            },\n            {\n              cells: [{ value: '自由' }, { value: 'ふりー' }],\n              url: 'https://www.freee.co.jp/',\n            },\n          ]}\n        />\n      </FullScreenModal>\n    </>\n  );\n};\n\nexport const WithSortIconAndNoRows = () => {\n  const data = [\n    { id: 1, value: '砂糖' },\n    { id: 2, value: '塩' },\n    { id: 3, value: '酢' },\n    { id: 4, value: '醤油' },\n    { id: 5, value: '味噌' },\n  ];\n\n  const [rows, setRows] = React.useState(data);\n  const [sortKey, setSortKey] = React.useState<'id' | 'value'>('id');\n  const [sortOrder, setSortOrder] = React.useState<Order>('init');\n\n  const nextOrder: { [key in Order]: Order } = {\n    init: 'asc',\n    asc: 'desc',\n    desc: 'init',\n  };\n\n  type SortKeyT = 'id' | 'value';\n  const changeSort = (key: SortKeyT) => {\n    setSortKey(key);\n    setSortOrder((prev) => (key === sortKey ? nextOrder[prev] : 'asc'));\n  };\n\n  React.useEffect(() => {\n    if (sortOrder === 'init') {\n      setRows(data);\n    } else {\n      const sorted = data;\n      sorted.sort(\n        (a, b) =>\n          (typeof a[sortKey] === 'number' && typeof b[sortKey] === 'number'\n            ? Number(a[sortKey]) - Number(b[sortKey])\n            : String(a[sortKey]).localeCompare(String(b[sortKey]))) *\n          (sortOrder === 'desc' ? -1 : 1)\n      );\n      setRows(sorted);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [sortKey, sortOrder]);\n\n  return (\n    <>\n      <Paragraph mb={1}>\n        TableHeaderのorderingに応じて、矢印アイコンが表示されます。\n      </Paragraph>\n      <ListTable\n        headers={[\n          {\n            value: 'id',\n            ordering: sortKey === 'id' ? sortOrder : 'init',\n            onClick: () => changeSort('id'),\n          },\n          {\n            value: 'value',\n            ordering: sortKey === 'value' ? sortOrder : 'init',\n            onClick: () => changeSort('value'),\n          },\n        ]}\n        rows={rows.map((data) => ({\n          cells: [{ value: data.id }, { value: data.value }],\n        }))}\n        fitContent\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/listTable/ListTable.tsx",
    "content": "import * as React from 'react';\n\nimport TableListHead from '../../lv1/lists/TableListHead';\nimport TableListHeadCell, { Order } from '../../lv1/lists/TableListHeadCell';\nimport TableListRow from '../../lv1/lists/TableListRow';\nimport TableListCell from '../../lv1/lists/TableListCell';\nimport CheckBoxCell from '../../lv1/lists/CheckBoxCell';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\nimport { FitContentProps } from '../../lv1/bases/types';\n\nexport type TableHeader = {\n  value: React.ReactNode;\n  alignCenter?: boolean;\n  alignRight?: boolean;\n  ordering?: Order;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onClick?: (rowIndex: number) => any;\n  width?: number;\n  minWidth?: number;\n  maxWidth?: number;\n  /**\n   * 折り返さない(`white-space: nowrap`)\n   */\n  noWrap?: boolean;\n  'data-test'?: string;\n};\n\nexport type TableRow = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  /**\n   * 行クリック時の処理を渡せます。遷移先のURLが存在する場合にはonClick内で遷移させるのではなく、URLを渡してください。\n   * react-routerの遷移処理を入れたい場合は onSelfWindowNavigationを使用してください\n   */\n  onClick?: (rowIndex: number) => any;\n  url?: string;\n  cells: Array<TableCell>;\n  checkBoxDisabled?: boolean;\n  checked?: boolean;\n  onChangeCheckBox?: React.ChangeEventHandler<HTMLInputElement>;\n  checkBoxName?: string;\n  checkBoxValue?: string;\n  'data-test'?: string;\n  ref?: React.Ref<HTMLTableRowElement>;\n} & SelfWindowNavigationProp;\n\nexport type TableCell = {\n  value: React.ReactNode;\n  alignCenter?: boolean;\n  alignRight?: boolean;\n  alignTop?: boolean;\n  small?: boolean;\n  /**\n   * なるべく単語の切れ目で改行するようにします(`word-break: break-word`)。メールアドレスや金額のカラムで指定してください。\n   */\n  breakWord?: boolean;\n  colSpan?: number;\n  'data-masking'?: boolean;\n  'data-test'?: string;\n};\n\ntype Props = {\n  headers: Array<TableHeader>;\n  rows: Array<TableRow>;\n  withCheckBox?: boolean;\n  onChangeHeaderCheckBox?: React.ChangeEventHandler<HTMLInputElement>;\n  /**\n   * Deprecated 使用しないでください\n   */\n  margins?: MarginClassProps;\n} & Pick<\n  React.ComponentPropsWithoutRef<typeof TableListHead>,\n  'fixedHeader' | 'fixedHeaderOffset'\n> &\n  CommonProps &\n  FitContentProps;\n\n/**\n * リストを表現するテーブルです\n *\n * * 歴史的な理由で `BasicTable` と呼ばれていることがあります\n * * オブジェクトのリストを、1行につき1つ表現するときに使用してください。\n * * 行全体のクリックでその行の詳細または編集画面へ遷移（画面全体の遷移には限らず、「モーダルを開く」でも良い）するようにしてください\n *   * 詳細または編集画面でのアクションを、セル内にボタンとして配置することも可能です\n * * 行クリックでURLに遷移するときは、必ず `url` を渡してください（Ctrl+クリックの操作やリンクURLのコピーをできるようにするため）\n */\nconst ListTable: React.FC<Props> = (props: Props) => {\n  const {\n    margins,\n    headers,\n    rows,\n    withCheckBox,\n    onChangeHeaderCheckBox,\n    fixedHeaderOffset,\n    fixedHeader,\n    fitContent,\n  } = props;\n\n  const allEnabledCheckBoxesSelected = React.useMemo(() => {\n    const filteredRows = rows.filter((row) => !row.checkBoxDisabled);\n\n    return (\n      filteredRows.length > 0 &&\n      filteredRows\n        .filter((row) => !row.checkBoxDisabled)\n        .every((row) => row.checked)\n    );\n  }, [rows]);\n\n  return (\n    <div {...commonProps(props, 'vb-listTable', { fitContent }, margins)}>\n      <table className=\"vb-listTable__table\">\n        <thead>\n          <TableListHead\n            fixedHeader={fixedHeader}\n            fixedHeaderOffset={fixedHeaderOffset}\n          >\n            {withCheckBox && (\n              <CheckBoxCell\n                header={true}\n                aria-label=\"すべて選択\"\n                onChange={onChangeHeaderCheckBox}\n                checked={allEnabledCheckBoxesSelected}\n              />\n            )}\n            {headers.map((header, i) => {\n              return (\n                <TableListHeadCell\n                  key={i}\n                  alignCenter={header.alignCenter}\n                  alignRight={header.alignRight}\n                  ordering={header.ordering}\n                  onClick={\n                    header.onClick &&\n                    ((): void => {\n                      header.onClick && header.onClick(i);\n                    })\n                  }\n                  width={header.width}\n                  minWidth={header.minWidth}\n                  maxWidth={header.maxWidth}\n                  noWrap={header.noWrap}\n                  data-test={header['data-test']}\n                >\n                  {header.value}\n                </TableListHeadCell>\n              );\n            })}\n          </TableListHead>\n        </thead>\n        <tbody>\n          {rows.map((row, i) => {\n            return (\n              <TableListRow\n                key={i}\n                url={row.url}\n                onSelfWindowNavigation={row.onSelfWindowNavigation}\n                onClick={\n                  row.onClick &&\n                  ((): void => {\n                    row.onClick ? row.onClick(i) : null;\n                  })\n                }\n                data-test={row['data-test']}\n                ref={row.ref}\n              >\n                {withCheckBox && (\n                  <CheckBoxCell\n                    header={false}\n                    checked={row.checked}\n                    disabled={row.checkBoxDisabled}\n                    onChange={row.onChangeCheckBox}\n                    name={row.checkBoxName}\n                    value={row.checkBoxValue}\n                  />\n                )}\n                {row.cells.map((cell, j) => {\n                  return (\n                    <TableListCell\n                      key={j}\n                      alignCenter={cell.alignCenter}\n                      alignRight={cell.alignRight}\n                      alignTop={cell.alignTop}\n                      small={cell.small}\n                      url={row.url}\n                      onSelfWindowNavigation={row.onSelfWindowNavigation}\n                      breakWord={cell.breakWord}\n                      colSpan={cell.colSpan}\n                      data-masking={cell['data-masking']}\n                      data-test={cell['data-test']}\n                    >\n                      {cell.value}\n                    </TableListCell>\n                  );\n                })}\n              </TableListRow>\n            );\n          })}\n        </tbody>\n      </table>\n    </div>\n  );\n};\n\nexport default ListTable;\n"
  },
  {
    "path": "src/lv2/messageBlock/FloatingMessageBlock.stories.tsx",
    "content": "import * as React from 'react';\n\nimport FloatingMessageBlock from './FloatingMessageBlock';\nimport { commonKnobs } from '../../../stories';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport Button from '../../lv1/buttons/Button';\n\nexport default {\n  component: FloatingMessageBlock,\n};\n\nexport const FloatingMessageBlockComponent = () => (\n  <>\n    <FloatingMessageBlock\n      info={boolean('Info', false, 'FloatingMessageBlock')}\n      error={boolean('Error', false, 'FloatingMessageBlock')}\n      success={boolean('Success', false, 'FloatingMessageBlock')}\n      notice={boolean('Notice', false, 'FloatingMessageBlock')}\n      linkTarget={text('LinkTarget', '_blank', 'FloatingMessageBlock')}\n      linkTitle={text('LinkTitle', '詳細', 'FloatingMessageBlock')}\n      linkUrl={text('LinkURL', '#', 'FloatingMessageBlock')}\n      linkRel={text('LinkRel', '', 'FloatingMessageBlock')}\n      onLinkClick={action('onLinkClick')}\n      onClose={action('close')}\n      onSelfWindowNavigation={action('onSelfWindowNavigation')}\n      {...commonKnobs()}\n    >\n      {text('children', '情報メッセージ', 'FloatingMessageBlock')}\n    </FloatingMessageBlock>\n  </>\n);\n\nconst CounterInternal = () => {\n  const [count, setCount] = React.useState(0);\n  const [visible, setVisible] = React.useState(false);\n  return (\n    <>\n      <Button\n        mt={3}\n        onClick={() => {\n          setCount(count + 1);\n          setVisible(true);\n        }}\n      >\n        push me\n      </Button>\n      {visible && (\n        <FloatingMessageBlock\n          info={boolean('Info', false, 'FloatingMessageBlock')}\n          error={boolean('Error', false, 'FloatingMessageBlock')}\n          success={boolean('Success', false, 'FloatingMessageBlock')}\n          notice={boolean('Notice', false, 'FloatingMessageBlock')}\n          linkTarget={text('LinkTarget', '_blank', 'FloatingMessageBlock')}\n          linkTitle={text('LinkTitle', '詳細', 'FloatingMessageBlock')}\n          linkUrl={text('LinkURL', '#', 'FloatingMessageBlock')}\n          linkRel={text('LinkRel', '', 'FloatingMessageBlock')}\n          onLinkClick={action('onLinkClick')}\n          onClose={() => setVisible(false)}\n          {...commonKnobs()}\n        >\n          {`カウンターは ${count} です`}\n        </FloatingMessageBlock>\n      )}\n    </>\n  );\n};\n\nexport const CounterExample = () => <CounterInternal />;\n"
  },
  {
    "path": "src/lv2/messageBlock/FloatingMessageBlock.tsx",
    "content": "import * as React from 'react';\nimport MessageBlock from './MessageBlock';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\nimport { MessageTypes } from '../../lv1/messages/Message';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport { usePortalParentContext } from '../../utilities/VibesProvider';\n\nconst HIDE_TIMEOUT_SEC = 6;\n\nexport type FloatingMessageBlockProps = (\n  | {\n      /**\n       * メッセージ本文\n       */\n      children: React.ReactNode;\n      message?: undefined;\n    }\n  | {\n      children?: undefined;\n      /**\n       * @deprecated children を使用してください\n       */\n      message: React.ReactNode;\n    }\n) & {\n  linkRel?: string;\n  linkTarget?: string;\n  linkTitle?: string;\n  linkUrl?: string;\n  wrapperRef?: React.RefObject<HTMLDivElement>;\n  /**\n   * メッセージを閉じる際に呼ばれるコールバック。ただしマウスホバーやフォーカスにより表示が延長されている間に呼ばれる可能性がある。\n   */\n  onClose?: (autoClose: boolean) => void;\n  onLinkClick?: () => any;\n} & MessageTypes &\n  SelfWindowNavigationProp &\n  CommonProps;\n\nlet portalEl: HTMLDivElement;\nconst getPortalEl = (portalParent: HTMLElement) => {\n  if (!portalEl) {\n    portalEl = document.createElement('div');\n    portalEl.setAttribute('class', 'vb-floatingMessageBlockPortal');\n    portalParent.appendChild(portalEl);\n  }\n  return portalEl;\n};\n\n/**\n * 画面上部にフロート表示するメッセージ。スクリーンメッセージとして、ユーザーが見ている画面全体に関わるメッセージを表示するために使用してください。\n *\n * - 「エラーが起きた」「送信に成功した」など、短くて画面全体に関わるメッセージを伝えるのに使用してください。\n * - あくまで「ユーザーがフィードバックを見落とさないようにする」のを目的として使用してください。\n *   - 「○○は半角で入力してください」のようなエラーの詳細は、このコンポーネントとは別に、画面レイアウト内で表示してください。\n * - `success` のメッセージは、ユーザーが行った操作の結果が永続化される（そのまま離脱しても結果が残る）場合に使用してください。\n *   - 登録フォームを送信してその結果が保存されたときなどに使うことを想定しています。\n *   - たとえば「登録フォーム内にある `入力欄を追加する` ボタンを押して入力欄を追加した」といった操作に対しては、まだそのフォームを送信しておらず内容が永続化されていないので、`FloatingMessageBlock` を使わないでください。\n *     - `FloatingMessageBlock` が表示されることで「入力内容が送信されて確定した」とユーザーが誤解するのを防ぐためです。\n *     - そういった「操作結果が永続化されない」操作に対しては、明示的に完了メッセージを出すというよりも、トランジションなどによってフィードバックを返すことを検討してください。\n *   - 「操作結果が永続化されない」操作が失敗し、それを何らかの方法で伝えなければならない場合は `error` の `FloatingMessageBlock` を使用できます。\n * - `success` `info` タイプのメッセージは一定時間経過後に非表示となります。 `error` `notice` に関しては自動的には消えません。\n * - **基本的には同時に複数のメッセージを出す使い方は想定していませんが** 、連続した操作のフィードバックなどの際には配列に入れて表示するようにしたほうが、 `aria-live` での読み上げが正しくなる可能性が高まります。\n * - 表示されるメッセージはPortalで `<body>` 要素の最後部に挿入されます。React上の挿入箇所には、`VisuallyHidden` による非表示メッセージが配置されます。\n *\n * ## accessibility\n * **FloatingMessageBlockが表示された際、スクリーンリーダーは`aria-live`により`message`の内容を読み上げますが、MessageTypeによって読み上げられる挙動は異なります。**\n *\n * errorの場合は必ず読み上げられ、他のタイプでは読み上げを妨げるものがない場合に読み上げられます。\n * (errorではaria-live=\"assertive\"、それ以外はaria-live=\"polite\"となるため上記の挙動の違いが起こります）\n * a11yチェックで読み上げを確認する際は、上記の仕様を考慮して判定ください。\n * 例えば、成功のときは aria-live=\"polite\" なので読み上げられない場合がありますが、dialogを閉じたことによるフォーカス移動などで何が起きているのかを把握できるときは自動的に読み上げられなくても構いません。\n *\n * **FloatingMessageBlockにキーボードによるフォーカスやスクリーンリーダーのカーソルを移動させるのは困難です**\n *\n * そのため、置いているメッセージやリンクが見逃されたり、スクリーンリーダーのカーソルで到達できなかったとしても問題のない状況であることが望ましいです。\n * 言い換えると、FloatingMessageBlockのメッセージやリンクが唯一の動線とならないようにユーザーの操作しやすい場所にも配置をしたり、操作対象（フォームやオブジェクト等）のUIの状態変化からユーザーが理解可能である必要があります。\n */\nconst FloatingMessageBlock: React.FC<FloatingMessageBlockProps> = (\n  props: FloatingMessageBlockProps\n) => {\n  const {\n    children,\n    message,\n    linkTitle,\n    linkUrl,\n    linkTarget,\n    linkRel,\n    info,\n    notice,\n    error,\n    success,\n    onClose,\n    onLinkClick,\n    onSelfWindowNavigation,\n  } = props;\n  const [showing, setShowing] = React.useState(false);\n  const [hovered, setHovered] = React.useState(false);\n  const [hoverTimeoutId, setHoverTimeoutId] = React.useState<number | null>();\n  const tmpWrapperRef = React.useRef<HTMLDivElement>(null);\n  const wrapperRef = props.wrapperRef || tmpWrapperRef;\n  const [focused, setFocused] = React.useState(false);\n  const [focusTimeoutId, setFocusTimeoutId] = React.useState<number | null>();\n  const portalParent = usePortalParentContext();\n\n  // errorかnoitice以外は一定時間経過後に非表示\n  const autoHide = !error && !notice;\n\n  React.useEffect(() => {\n    // メッセージが変わったら表示する\n    // アニメーションさせるためにmount時にfalseにしておき、mountedでtrueにしたいのだが、\n    // storyshotsがエラーになる関係でsetTimeoutを噛ませている\n    setTimeout(() => setShowing(true));\n    if (autoHide) {\n      const timeoutId = window.setTimeout(() => {\n        setShowing(false);\n        if (onClose) {\n          onClose(true);\n        }\n      }, HIDE_TIMEOUT_SEC * 1000);\n      return () => clearTimeout(timeoutId);\n    }\n  }, [autoHide, info, error, notice, success, message, onClose]);\n\n  // mouseEnterしたら一定時間表示しつづける\n  const onMouseEnter = () => {\n    setHovered(true);\n    if (hoverTimeoutId) {\n      window.clearTimeout(hoverTimeoutId);\n      setHoverTimeoutId(null);\n    }\n  };\n  const onMouseLeave = () => {\n    if (!hoverTimeoutId) {\n      setHoverTimeoutId(\n        window.setTimeout(() => {\n          setHovered(false);\n        }, HIDE_TIMEOUT_SEC * 1000)\n      );\n    }\n  };\n\n  // focusしたら一定時間表示しつづける\n  const onFocusEvent = () => {\n    const acticveElement = document.activeElement;\n    if (\n      wrapperRef.current &&\n      acticveElement &&\n      wrapperRef.current.contains(acticveElement)\n    ) {\n      setFocused(true);\n      if (focusTimeoutId) {\n        clearTimeout(focusTimeoutId);\n        setFocusTimeoutId(null);\n      }\n    } else if (!focusTimeoutId) {\n      setFocusTimeoutId(\n        window.setTimeout(() => {\n          setFocused(false);\n        }, HIDE_TIMEOUT_SEC * 1000)\n      );\n    }\n  };\n\n  // 閉じるをクリックしたら全てのフラグを折る\n  const onRequestClose = () => {\n    setShowing(false);\n    setHovered(false);\n    setFocused(false);\n    if (onClose) {\n      onClose(false);\n    }\n  };\n\n  // 自動的に消えるタイプの場合はマウスホバーしている・フォーカスしている場合は消えないようにする\n  const visible = showing || (autoHide && (hovered || focused));\n\n  return (\n    <>\n      <VisuallyHidden autoRead assertive={error}>\n        {children || message}\n      </VisuallyHidden>\n      {ReactDOM.createPortal(\n        <CSSTransition\n          in={visible}\n          classNames=\"vb-floatingMessageBlock__animation\"\n          timeout={{ enter: 500, exit: 500 }}\n          unmountOnExit={true}\n          // StrictModeで、\"Warning: findDOMNode is deprecated in StrictMode.\"が出ないように\n          // [FYI] https://github.com/reactjs/react-transition-group/issues/668#issuecomment-695162879\n          nodeRef={wrapperRef}\n        >\n          <div\n            {...commonProps(props, 'vb-floatingMessageBlock')}\n            ref={wrapperRef}\n            onMouseEnter={onMouseEnter}\n            onMouseLeave={onMouseLeave}\n            onFocus={onFocusEvent}\n            onBlur={onFocusEvent}\n          >\n            <MessageBlock\n              linkTitle={linkTitle}\n              linkUrl={linkUrl}\n              linkTarget={linkTarget}\n              linkRel={linkRel}\n              onLinkClick={onLinkClick}\n              onRequestClose={onRequestClose}\n              onSelfWindowNavigation={onSelfWindowNavigation}\n              info={info}\n              notice={notice}\n              error={error}\n              success={success}\n              mb={1.5}\n            >\n              {children || message}\n            </MessageBlock>\n          </div>\n        </CSSTransition>,\n        getPortalEl(portalParent)\n      )}\n    </>\n  );\n};\nexport default FloatingMessageBlock;\n"
  },
  {
    "path": "src/lv2/messageBlock/MessageBlock.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport MessageBlock from './MessageBlock';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { VStack } from '../../lv1';\n\nexport default {\n  component: MessageBlock,\n};\n\nexport const MessageBlockComponent = () => (\n  <MessageBlock\n    info={boolean('Info', false, 'MessageBlock')}\n    error={boolean('Error', false, 'MessageBlock')}\n    success={boolean('Success', false, 'MessageBlock')}\n    notice={boolean('Notice', false, 'MessageBlock')}\n    assistance={boolean('Assistance', false, 'MessageBlock')}\n    discovery={boolean('Discovery', false, 'MessageBlock')}\n    linkTarget={text('LinkTarget', '_blank', 'MessageBlock')}\n    linkTitle={text('LinkTitle', '詳細', 'MessageBlock')}\n    linkUrl={text('LinkURL', '#', 'MessageBlock')}\n    linkRel={text('LinkRel', '', 'MessageBlock')}\n    onLinkClick={action('onLinkClick')}\n    onRequestClose={action('onRequestClose')}\n    hover={boolean('hover', false, 'MessageBlock')}\n    onSelfWindowNavigation={action('onSelfWindowNavigation')}\n    {...commonKnobs()}\n  >\n    {text('children', '情報メッセージ', 'MessageBlock')}\n  </MessageBlock>\n);\n\nconst MessageBlockExamples = () => (\n  <>\n    <MessageBlock assistance mb={1}>\n      アシスタンスメッセージ\n    </MessageBlock>\n    <MessageBlock discovery mb={1}>\n      リリースメッセージ\n    </MessageBlock>\n    <MessageBlock info mb={1}>\n      説明・補足メッセージ\n    </MessageBlock>\n    <MessageBlock error onRequestClose={action('clickClose')} mb={1}>\n      エラーメッセージ\n    </MessageBlock>\n    <MessageBlock\n      notice\n      linkTitle=\"詳しく見る\"\n      linkUrl=\"https://www.freee.co.jp/\"\n      mb={1}\n    >\n      <span>\n        <strong>メンテナンスのお知らせ</strong>\n        <br />\n        2019年1月1日 0:00 から 2019年12月31日 23:59\n        のあいだ、メンテナンスのため会計フリーをお使いいただけませんのでご注意ください。\n      </span>\n    </MessageBlock>\n    <MessageBlock success onRequestClose={action('clickClose')} mb={1}>\n      完了メッセージ\n    </MessageBlock>\n  </>\n);\nexport const Examples = () => (\n  <>\n    <MessageBlockExamples />\n    <div style={{ width: '50%' }}>\n      <MessageBlockExamples />\n    </div>\n  </>\n);\n\nexport const InVStack = () => (\n  <VStack>\n    <MessageBlock>\n      <code>container-type: inline-size</code> を指定していると{' '}\n      <code>display: flex</code>{' '}\n      内で表示が崩れることがあったので、それが解消されているか確認するためのストーリーです。\n    </MessageBlock>\n    <MessageBlock>表示が崩れたりしてないですよね？</MessageBlock>\n  </VStack>\n);\n"
  },
  {
    "path": "src/lv2/messageBlock/MessageBlock.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { MessageTypes } from '../../lv1/messages/Message';\nimport Button from '../../lv1/buttons/Button';\nimport {\n  MdOpenInNew,\n  MdError,\n  MdWarning,\n  MdCheckCircle,\n  MdInfo,\n  MdLightbulb,\n  MdCardGiftcard,\n} from 'react-icons/md';\nimport { useResponsive } from '../../utilities/VibesProvider';\nimport vbClassNames from '../../utilities/vbClassNames';\nimport { SelfWindowNavigationProp } from '../../utilities/selfWindowNavigator';\n\ntype InternalMessageProps = {\n  children?: React.ReactNode;\n  assistance?: boolean;\n  discovery?: boolean;\n  explanatory?: boolean;\n} & MessageTypes;\n\nconst InternalMessage: React.FC<InternalMessageProps> = (\n  props: InternalMessageProps\n) => {\n  const {\n    children,\n    error,\n    notice,\n    success,\n    assistance,\n    discovery,\n    explanatory,\n  } = props;\n  return (\n    <div className=\"vb-messageBlockInternalMessage\">\n      <div className=\"vb-messageBlockInternalMessage__inner\">\n        {error ? (\n          <MdError className=\"vb-messageBlockInternalMessage__icon vb-messageBlockInternalMessage__icon--alert\" />\n        ) : notice ? (\n          <MdWarning className=\"vb-messageBlockInternalMessage__icon vb-messageBlockInternalMessage__icon--notice\" />\n        ) : success ? (\n          <MdCheckCircle className=\"vb-messageBlockInternalMessage__icon vb-messageBlockInternalMessage__icon--success\" />\n        ) : assistance ? (\n          <MdLightbulb className=\"vb-messageBlockInternalMessage__icon vb-messageBlockInternalMessage__icon--assistance\" />\n        ) : discovery ? (\n          <MdCardGiftcard className=\"vb-messageBlockInternalMessage__icon vb-messageBlockInternalMessage__icon--discovery\" />\n        ) : explanatory ? (\n          <MdInfo className=\"vb-messageBlockInternalMessage__icon vb-messageBlockInternalMessage__icon--explanatory\" />\n        ) : (\n          <MdInfo className=\"vb-messageBlockInternalMessage__icon vb-messageBlockInternalMessage__icon--info\" />\n        )}\n        <span className=\"vb-messageBlockInternalMessage__content\">\n          {children}\n        </span>\n      </div>\n    </div>\n  );\n};\n\ntype Props = (\n  | {\n      /**\n       * メッセージ本文\n       */\n      children: React.ReactNode;\n      message?: undefined;\n    }\n  | {\n      children?: undefined;\n      /**\n       * @deprecated children を使用してください\n       */\n      message: React.ReactNode;\n    }\n) & {\n  assistance?: boolean;\n  discovery?: boolean;\n  explanatory?: boolean;\n  linkTitle?: string;\n  linkUrl?: string;\n  linkTarget?: string;\n  linkRel?: string;\n  onLinkClick?: () => any;\n  onRequestClose?: () => any;\n  /**\n   * @deprecated shadowが入る表示はFloatingMessageBlockを使用してください。FloatingMessageBlock側でスタイルが付くので指定は不要です。\n   */\n  hover?: boolean;\n} & MessageTypes &\n  MarginClassProps &\n  SelfWindowNavigationProp &\n  CommonProps;\n\n/**\n * セクションメッセージまたはスクリーンメッセージとして使用するコンポーネントです。\n * ただしスクリーンメッセージに関しては `FloatingMessageBlock` を使用してください（このコンポーネントを内包しています）\n *\n * - 画面の大きな部分（セクション）に関するメッセージを表示します\n *   - エラーメッセージに使用する場合には、このコンポーネントではエラーの概要を表示するに留め、\n *     エラーの発生箇所の近くにインラインメッセージとして `Message` コンポーネントを配置して、詳細を伝えてください\n * - 右側にはメッセージの詳細リンクを配置できます。`linkTarget` を `\"_blank\"` にした場合には OpenInNew アイコンが表示されます。\n * - メッセージを非表示にできるようにする場合は、 `onRequestClose` を渡して「閉じる」ボタンを表示してください\n *\n */\nconst MessageBlock: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    message,\n    assistance,\n    discovery,\n    explanatory,\n    linkTitle,\n    linkUrl,\n    linkTarget,\n    linkRel,\n    onLinkClick,\n    onRequestClose,\n    hover,\n    onSelfWindowNavigation,\n  } = props;\n  const { error, notice, success } = props;\n  const { marginTop, marginBottom, marginLeft, marginRight, marginSize } =\n    props;\n  const responsive = useResponsive();\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-messageBlock',\n        { responsive, hover },\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginSize,\n          marginTop,\n        }\n      )}\n    >\n      <div\n        className={vbClassNames('vb-messageBlock__inner', {\n          modifier: {\n            responsive,\n            success: success,\n            alert: error,\n            notice: notice,\n            assistance: assistance,\n            discovery: discovery,\n          },\n        })}\n      >\n        <div className=\"vb-messageBlock__message\">\n          <InternalMessage\n            error={error}\n            notice={notice}\n            success={success}\n            assistance={assistance}\n            discovery={discovery}\n            explanatory={explanatory}\n          >\n            {children || message}\n          </InternalMessage>\n        </div>\n        {((linkTitle && (linkUrl || onLinkClick || onSelfWindowNavigation)) ||\n          onRequestClose) && (\n          <div\n            className={vbClassNames('vb-messageBlock__buttons', {\n              modifier: { responsive },\n            })}\n          >\n            {linkTitle && (linkUrl || onLinkClick || onSelfWindowNavigation) && (\n              <Button\n                appearance=\"tertiary\"\n                href={linkUrl}\n                onClick={onLinkClick}\n                target={linkTarget}\n                rel={linkRel}\n                IconComponent={\n                  linkTarget === '_blank' ? MdOpenInNew : undefined\n                }\n                iconPosition=\"right\"\n                ml={0.5}\n                onSelfWindowNavigation={onSelfWindowNavigation}\n              >\n                {linkTitle}\n              </Button>\n            )}\n            {onRequestClose && (\n              <Button onClick={onRequestClose} appearance=\"tertiary\" ml={0.5}>\n                閉じる\n              </Button>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\nexport default MessageBlock;\n"
  },
  {
    "path": "src/lv2/messageIcon/MessageIcon.stories.tsx",
    "content": "import * as React from 'react';\n\nimport MessageIcon from './MessageIcon';\nimport ScrollableBase from '../../lv1/bases/ScrollableBase';\nimport InlineLink from '../../lv1/buttons/InlineLink';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport { text, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { Stack } from '../../lv1';\n\nexport default {\n  component: MessageIcon,\n  parameters: { layout: 'fullscreen' },\n};\nexport const MessageIconComponent = () => (\n  <MessageIcon\n    label={text('Label', 'ヘルプ', 'MessageIcon')}\n    error={boolean('Error', false, 'MessageIcon')}\n    notice={boolean('Notice', false, 'MessageIcon')}\n    success={boolean('Success', false, 'MessageIcon')}\n    small={boolean('Small', false, 'MessageIcon')}\n    {...commonKnobs()}\n  >\n    {text(\n      'Content',\n      'アイコンをマウスオーバーしたりクリックすると吹き出しがでます',\n      'MessageIcon'\n    )}\n  </MessageIcon>\n);\nexport const IncludesLinks = () => (\n  <>\n    <MessageIcon\n      label={text('Label', 'ヘルプ', 'MessageIcon')}\n      error={boolean('Error', false, 'MessageIcon')}\n      notice={boolean('Notice', false, 'MessageIcon')}\n      success={boolean('Success', false, 'MessageIcon')}\n      small={boolean('Small', false, 'MessageIcon')}\n      {...commonKnobs()}\n    >\n      こんなふうに\n      <InlineLink href=\"https://www.freee.co.jp\" target=\"_blank\">\n        リンク\n      </InlineLink>\n      を中に置くのもOKです。\n      <br />\n      <InlineLink href=\"https://corp.freee.co.jp\" target=\"_blank\">\n        もうひとつリンク\n      </InlineLink>\n    </MessageIcon>\n\n    <Paragraph>\n      <InlineLink href=\"https://corp.freee.co.jp\">\n        バルーンのフォーカストラップを試す用のバルーン外のリンク\n      </InlineLink>\n    </Paragraph>\n  </>\n);\n\nexport const InsideBigScroll = () => (\n  <div style={{ width: '100vw', height: '20rem', display: 'flex' }}>\n    <ScrollableBase scrollableX scrollableY>\n      <div style={{ position: 'relative', width: '80rem', height: '40rem' }}>\n        <div style={{ position: 'absolute', top: '15rem', left: '40rem' }}>\n          <MessageIcon\n            label={text('Label', 'ヘルプ', 'MessageIcon')}\n            error={boolean('Error', false, 'MessageIcon')}\n            notice={boolean('Notice', false, 'MessageIcon')}\n            success={boolean('Success', false, 'MessageIcon')}\n            {...commonKnobs()}\n          >\n            {text(\n              'Content',\n              'アイコンをマウスオーバーしたりクリックすると吹き出しがでます',\n              'MessageIcon'\n            )}\n          </MessageIcon>\n        </div>\n      </div>\n    </ScrollableBase>\n  </div>\n);\n\nexport const Positions = () => (\n  <Stack\n    justifyContent=\"space-between\"\n    direction=\"horizontal\"\n    ml={0.5}\n    mr={0.5}\n    mt={3}\n    mb={3}\n  >\n    <MessageIcon label=\"ヘルプ\">\n      ウインドウの左端に近いときは右側に出ます\n    </MessageIcon>\n    <MessageIcon label=\"ヘルプ\">左右に余裕があるときは中央に出ます</MessageIcon>\n    <MessageIcon label=\"ヘルプ\">\n      ウインドウの右端に近いときは左側に出ます\n    </MessageIcon>\n  </Stack>\n);\n"
  },
  {
    "path": "src/lv2/messageIcon/MessageIcon.tsx",
    "content": "import * as React from 'react';\nimport { MdError, MdWarning, MdCheckCircle, MdHelp } from 'react-icons/md';\nimport Balloon from '../../lv1/bases/Balloon';\nimport { Keys } from '../../utilities/keyboard';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { useBalloon } from '../withBalloon/useBalloon';\nimport MessageDialog from '../dialogs/MessageDialog';\nimport { MobileBoundaryWidth } from '../../constants';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * アイコンの代替テキストとして、「(label)を表示」「(label)を非表示」のように使用されます。必ず指定してください。\n   */\n  label: string;\n  error?: boolean;\n  notice?: boolean;\n  success?: boolean;\n  small?: boolean;\n};\n\ntype ComponentProps = Props & MarginClassProps & CommonProps;\n\n/**\n * アイコンからバルーンとしてメッセージを表示するコンポーネントです。\n *\n * アイコンと色は `label` `error` `notice` `success` から選べます（カスタマイズはできません）\n *\n * MobileBoundaryWidth以下の画面幅では、アイコンをクリックするとダイアログでメッセージを表示します。\n */\nconst MessageIcon: React.FC<ComponentProps> = (props: ComponentProps) => {\n  const {\n    error,\n    notice,\n    success,\n    children,\n    label,\n    small,\n    marginTop,\n    marginBottom,\n    marginLeft,\n    marginRight,\n    marginSize,\n  } = props;\n\n  const {\n    balloonIsVisibleByHover,\n    clearHoverFlags,\n    handleTargetMouseEnter,\n    handleTargetMouseLeave,\n    handleBalloonMouseEnter,\n    handleBalloonMouseLeave,\n    position,\n    verticalPosition,\n    adjustPosition,\n    baseRef,\n    balloonRef,\n  } = useBalloon();\n\n  const [clicked, setClicked] = React.useState<boolean>(false);\n  const balloonWrapperRef = React.useRef<HTMLDivElement>(null);\n  const [isOpenDialog, setIsOpenDialog] = React.useState<boolean>(false);\n  const isNarrowerThanMobileBoundery = () =>\n    window.matchMedia(`(max-width: ${MobileBoundaryWidth})`).matches;\n\n  React.useEffect(() => {\n    if (clicked) {\n      const closeMenu = () => {\n        setClicked(false);\n      };\n      // 開いた瞬間にwindowにイベントが伝播して閉じてしまうのを防ぐため、setTimeoutしてaddEventListenerを遅らせている\n      window.setTimeout(() => window.addEventListener('click', closeMenu));\n      return () => window.removeEventListener('click', closeMenu);\n    }\n  }, [clicked, setClicked]);\n\n  React.useLayoutEffect(() => {\n    if (clicked) {\n      adjustPosition();\n    }\n  }, [adjustPosition, clicked]);\n\n  const showBalloon = clicked || balloonIsVisibleByHover;\n  const showMessage = isNarrowerThanMobileBoundery()\n    ? isOpenDialog\n    : showBalloon;\n  return (\n    <span\n      {...commonProps(\n        props,\n        'vb-messageIcon',\n        { small },\n        { marginBottom, marginLeft, marginRight, marginSize, marginTop }\n      )}\n    >\n      &nbsp;\n      <span\n        className=\"vb-messageIcon__control\"\n        tabIndex={0}\n        role=\"button\"\n        aria-label={`${label || 'メッセージ'}を${\n          showMessage ? '隠す' : '表示'\n        }`}\n        onClick={() => {\n          if (isNarrowerThanMobileBoundery()) {\n            setIsOpenDialog(!isOpenDialog);\n          } else {\n            /* バルーンが見えてる時にクリックした場合はすぐにバルーンが消えるようhoveredフラグを折る */\n            setClicked(!clicked);\n            clearHoverFlags();\n          }\n        }}\n        onKeyDown={(e: React.KeyboardEvent): void => {\n          /* バルーンが見えてる時にクリックした場合はすぐにバルーンが消えるようhoveredフラグを折る */\n          if (e.key === Keys.ENTER || e.key === Keys.SPACE) {\n            e.preventDefault();\n            setClicked(!clicked);\n            clearHoverFlags();\n          } else if (clicked && e.key === Keys.ESC) {\n            setClicked(false);\n            clearHoverFlags();\n          } else if (clicked && e.key === Keys.TAB && balloonRef.current) {\n            e.preventDefault();\n            balloonRef.current.focus();\n          }\n        }}\n        onMouseLeave={() => {\n          isNarrowerThanMobileBoundery() ? undefined : handleTargetMouseLeave();\n        }}\n        onMouseEnter={() => {\n          isNarrowerThanMobileBoundery() ? undefined : handleTargetMouseEnter();\n        }}\n        ref={baseRef}\n      >\n        {error ? (\n          <MdError className=\"vb-messageIcon__icon vb-messageIcon__icon--error\" />\n        ) : notice ? (\n          <MdWarning className=\"vb-messageIcon__icon vb-messageIcon__icon--notice\" />\n        ) : success ? (\n          <MdCheckCircle className=\"vb-messageIcon__icon vb-messageIcon__icon--success\" />\n        ) : (\n          <MdHelp className=\"vb-messageIcon__icon vb-messageIcon__icon--info\" />\n        )}\n      </span>\n      {isNarrowerThanMobileBoundery() ? (\n        <MessageDialog\n          isOpen={isOpenDialog}\n          title={label}\n          closeButtonLabel={'閉じる'}\n          onRequestClose={() => setIsOpenDialog(false)}\n          closeButtonAppearance={'secondary'}\n          responsive\n        >\n          {children}\n        </MessageDialog>\n      ) : (\n        <>\n          {showBalloon && (\n            <VisuallyHidden>\n              <span className=\"vb-messageIcon__hiddenMessage\">{children}</span>\n            </VisuallyHidden>\n          )}\n          <ScrollPortal\n            positionalBaseElement={baseRef.current || undefined}\n            isActive={showBalloon}\n            onOverflow={() => {\n              setClicked(false);\n              clearHoverFlags();\n            }}\n            onScroll={adjustPosition}\n            verticalPosition={verticalPosition}\n            data-masking={props['data-masking']}\n          >\n            <div\n              className={`vb-messageIconMessageWrapper ${\n                showBalloon ? '' : 'vb-messageIconMessageWrapper--hidden'\n              }`}\n            >\n              <VisuallyHidden>\n                <button\n                  tabIndex={0}\n                  onFocus={() => baseRef.current?.focus()}\n                  onClick={() => baseRef.current?.focus()}\n                >\n                  {label || 'メッセージ'}を隠すボタンにジャンプ\n                </button>\n              </VisuallyHidden>\n              {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n              <div\n                className=\"vb-messageIconMessage\"\n                onMouseEnter={handleBalloonMouseEnter}\n                onMouseLeave={handleBalloonMouseLeave}\n                onClick={(e) => e.stopPropagation()}\n                onKeyDown={(e) => {\n                  if (e.key === Keys.ESC) {\n                    setClicked(false);\n                    clearHoverFlags();\n                    baseRef.current?.focus();\n                  }\n                }}\n                tabIndex={-1}\n                ref={balloonWrapperRef}\n                role=\"tooltip\"\n              >\n                <Balloon\n                  small\n                  border={\n                    error\n                      ? 'alert'\n                      : notice\n                      ? 'notice'\n                      : success\n                      ? 'success'\n                      : 'default'\n                  }\n                  position={position}\n                  verticalPosition={verticalPosition}\n                  ref={balloonRef}\n                >\n                  {children}\n                </Balloon>\n              </div>\n              <VisuallyHidden>\n                <button\n                  tabIndex={0}\n                  onFocus={() => baseRef.current?.focus()}\n                  onClick={() => baseRef.current?.focus()}\n                >\n                  {label || 'メッセージ'}を隠すボタンにジャンプ\n                </button>\n              </VisuallyHidden>\n            </div>\n          </ScrollPortal>\n        </>\n      )}\n    </span>\n  );\n};\n\nexport default MessageIcon;\n"
  },
  {
    "path": "src/lv2/modals/FullScreenModal.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { text, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { Button, ListTable, Paragraph } from '../..';\nimport FullScreenModal from './FullScreenModal';\n\nexport default {\n  component: FullScreenModal,\n};\n\nexport const FullScreenModalComponent = () => {\n  const [isOpen, setOpen] = React.useState<boolean>(false);\n  const toggle = () => setOpen(!isOpen);\n  return (\n    <>\n      <Button onClick={toggle}>open</Button>\n      <FullScreenModal\n        id={text('Id', '', 'FullScreenModal')}\n        isOpen={isOpen}\n        title={text('Title', 'フルスクリーンモーダル', 'FullScreenModal')}\n        contentLabel={text(\n          'ContentLabel',\n          'フルスクリーンモーダル',\n          'FullScreenModal'\n        )}\n        onRequestClose={toggle}\n        disabled={boolean('Disabled', false, 'FullScreenModal')}\n        shouldCloseOnEsc={boolean('ShouldCloseOnEsc', false, 'FullScreenModal')}\n        {...commonKnobs()}\n      >\n        {[...Array.from(Array(20).keys())].map((value) => (\n          <Paragraph key={value}>\n            画面いっぱいに広がるモーダルです。TaskDialogに収まりきらない複雑なコンテンツを配置できます。\n          </Paragraph>\n        ))}\n      </FullScreenModal>\n    </>\n  );\n};\n\nexport const HeaderSideContentSample = () => {\n  const [isOpen, setOpen] = React.useState<boolean>(false);\n  const toggle = () => setOpen(!isOpen);\n  return (\n    <>\n      <Button onClick={toggle}>open</Button>\n      <FullScreenModal\n        id={text('Id', '', 'FullScreenModal')}\n        isOpen={isOpen}\n        title={text('Title', 'フルスクリーンモーダル', 'FullScreenModal')}\n        contentLabel={text(\n          'ContentLabel',\n          'フルスクリーンモーダル',\n          'FullScreenModal'\n        )}\n        onRequestClose={toggle}\n        disabled={boolean('Disabled', false, 'FullScreenModal')}\n        shouldCloseOnEsc={boolean('ShouldCloseOnEsc', false, 'FullScreenModal')}\n        headerSideContent={<Button>ボタン</Button>}\n        {...commonKnobs()}\n      >\n        {[...Array.from(Array(20).keys())].map((value) => (\n          <Paragraph key={value}>\n            画面いっぱいに広がるモーダルです。TaskDialogに収まりきらない複雑なコンテンツを配置できます。\n          </Paragraph>\n        ))}\n      </FullScreenModal>\n    </>\n  );\n};\n\nexport const FullScreenModalWithListTable = () => {\n  const [isOpen, setOpen] = React.useState<boolean>(false);\n  const toggle = () => setOpen(!isOpen);\n  return (\n    <>\n      <Button onClick={toggle}>open</Button>\n      <FullScreenModal\n        isOpen={isOpen}\n        title={'ListTableを持つFullScreenModal'}\n        onRequestClose={toggle}\n        {...commonKnobs()}\n      >\n        <Paragraph>ListTableの上にいろいろ置いたりするよね</Paragraph>\n        <ListTable\n          headers={[{ value: 'ヘッダー1' }, { value: 'ヘッダー2' }]}\n          rows={Array.from(Array(200).keys()).map(() => ({\n            cells: [{ value: 'セル1' }, { value: 'セル2' }],\n          }))}\n          fixedHeader={true}\n          fixedHeaderOffset={'-1.5rem'}\n        />\n      </FullScreenModal>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/modals/FullScreenModal.tsx",
    "content": "import * as React from 'react';\nimport Modal from 'react-modal';\nimport { MdClose } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport { IconOnlyButton, PageTitle, WithSideContent } from '../../';\nimport { usePortalParentContext } from '../../utilities/VibesProvider';\n\nconst contentStyle: React.CSSProperties = {\n  alignSelf: 'center',\n  position: 'static',\n  background: 'transparent',\n  borderRadius: 0,\n  border: 0,\n  top: 'auto',\n  left: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  padding: 0,\n  margin: 'auto',\n};\n\ntype Props = {\n  /**\n   * モーダルのid属性を指定します。\n   */\n  id?: string;\n  /**\n   * モーダルの見出しのid属性を指定します\n   */\n  titleId?: string;\n  /**\n   * モーダルのaria-labelを指定できます。\n   * 指定しなかった場合はaria-labelledbyによってタイトルの文言が参照されます。\n   */\n  contentLabel?: string;\n  /**\n   * モーダルの見出しとなります。\n   * 基本は文字列のみの想定ですが、用途に応じて他の要素を合わせて表示もできます。\n   */\n  title: React.ReactNode;\n  /**\n   * モーダルの本文となる要素を指定します。\n   */\n  children: React.ReactNode;\n  /**\n   * プライマリボタン、 Close ボタンともに disalbed に設定します。データの読み込み中やプライマリボタンを押した後のレスポンス待ちの間など、ユーザーに何も操作させず待たせたいときに指定します。\n   */\n  disabled?: boolean;\n  /**\n   * Esc キーの押下でモーダルを閉じられるようになります。\n   *\n   *  - 無指定の場合は `false` の状態になっています\n   *  - モーダル内にフォーム等がある状態で `true` にする場合は、変更がある場合に確認ダイアログを出すなどして、Esc キーの押下によって作業内容が不意に消えてしまうようなことが起きないようにしてください\n   *  - モーダル内にフォーム等がない場合や、フォーム等の値に変更がない場合は、 `true` にして問題ありません\n   */\n  shouldCloseOnEsc?: boolean;\n  /**\n   * Close ボタンの click ハンドラを設定します。\n   */\n  onRequestClose: React.MouseEventHandler;\n  /**\n   * ヘッダーに右寄せでコンテンツを配置したい場合に使います。\n   */\n  headerSideContent?: React.ReactNode;\n  /**\n   * react-modal の contentRef に渡す値です。\n   */\n  contentRef?: React.ComponentProps<typeof Modal>['contentRef'];\n} & CommonProps;\n\nconst FullScreenModalContent: React.FC<Props> = (props: Props) => {\n  const {\n    id,\n    titleId,\n    title,\n    children,\n    onRequestClose,\n    disabled,\n    headerSideContent,\n  } = props;\n  const baseClassName = 'vb-fullScreenModal';\n\n  const headerRef = React.useRef<HTMLDivElement>(null);\n  const [headerHeight, setHeaderHeight] = React.useState<string>('85px');\n\n  const adjustBodyHeight = () => {\n    if (headerRef.current) {\n      setHeaderHeight(`${headerRef.current.offsetHeight}px`);\n    }\n  };\n\n  React.useLayoutEffect(() => {\n    adjustBodyHeight();\n  }, []);\n\n  return (\n    <div {...commonProps(props, baseClassName)} id={id}>\n      <div className={`${baseClassName}__inner`}>\n        <div className={`${baseClassName}__header`} ref={headerRef}>\n          <IconOnlyButton\n            IconComponent={MdClose}\n            label={'閉じる'}\n            appearance=\"tertiary\"\n            onClick={onRequestClose}\n            disabled={!!disabled}\n            mr={1}\n          />\n          <div className={`${baseClassName}__headerInnerContent`}>\n            {headerSideContent ? (\n              <WithSideContent sideContent={headerSideContent}>\n                <PageTitle id={titleId}>{title}</PageTitle>\n              </WithSideContent>\n            ) : (\n              <PageTitle id={titleId}>{title}</PageTitle>\n            )}\n          </div>\n        </div>\n        {/* 表示領域が足りないときにスクロールするので、tabIndexをつける（キーボードでスクロールできるようになる） */}\n        <div\n          className={`${baseClassName}__body`}\n          // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n          tabIndex={0}\n          style={{\n            // header の高さと、body に設定された上下の padding の合計を除いた値を minHeight に設定する\n            minHeight: `calc(100vh - ${headerHeight} - 3rem)`,\n          }}\n        >\n          {children}\n        </div>\n      </div>\n    </div>\n  );\n};\n\n/**\n * TaskDialogに収まりきらないような大きくて複雑なコンテンツをモーダル上に配置したい時に使用します。\n * コンテンツ部分は大きくなるとスクロールします。\n *\n * - `isOpen` propで開閉します\n */\nconst FullScreenModal = (\n  props: Omit<Props, 'titleId'> & { isOpen: boolean }\n) => {\n  const uniqueId = useUniqueId('vb-Modal', props.id);\n  const portalParent = usePortalParentContext();\n  const titleId = `${uniqueId}__title`;\n\n  return (\n    <Modal\n      {...props}\n      style={{\n        overlay: {\n          display: 'flex',\n          // $vbModalZIndex\n          zIndex: 1000 - 1,\n        },\n        content: contentStyle,\n      }}\n      ariaHideApp={false}\n      aria={{\n        modal: true,\n        labelledby: !props.contentLabel ? titleId : undefined,\n      }}\n      shouldCloseOnEsc={!!props.shouldCloseOnEsc}\n      id={`${uniqueId}__screen`}\n      bodyOpenClassName=\"vb-ReactModal__Body--open\"\n      parentSelector={() => portalParent}\n      closeTimeoutMS={300}\n    >\n      <FullScreenModalContent {...props} {...{ id: uniqueId, titleId }} />\n    </Modal>\n  );\n};\n\nexport default FullScreenModal;\n"
  },
  {
    "path": "src/lv2/numericTable/NumericTable.stories.tsx",
    "content": "import * as React from 'react';\n\nimport NumericTable, {\n  NumericTableHeader,\n  NumericTableRow,\n} from './NumericTable';\nimport { commonKnobs } from '../../../stories';\nimport { action } from '@storybook/addon-actions';\nimport ScrollableBase from '../../lv1/bases/ScrollableBase';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\n\nconst sampleHeaders: Array<NumericTableHeader> = [\n  {\n    value: 'テーブル見出し',\n    ordering: 'asc',\n    onClick: action('header cell click'),\n  },\n  { value: 'テーブル見出しソート不可' },\n  {\n    value: 'テーブル見出しちょっと長い',\n    alignCenter: true,\n    onClick: action('header cell click'),\n  },\n  {\n    value: 'テーブル見出し',\n    alignRight: true,\n    onClick: action('header cell click'),\n  },\n];\n\nconst sampleRows: Array<NumericTableRow> = [\n  {\n    cells: [\n      { value: 'テーブル内容' },\n      { value: 'クリック可能', onClick: action('cell click') },\n      { value: 'テーブル内容', alignCenter: true },\n      { value: '¥10,000', alignRight: true },\n    ],\n  },\n  {\n    cells: [\n      { value: 'テーブル内容' },\n      { value: 'テーブル内容' },\n      { value: 'テーブル内容', alignCenter: true },\n      { value: '¥10,000', alignRight: true },\n    ],\n  },\n  {\n    cells: [\n      { value: 'クリック可能', onClick: action('cell click') },\n      { value: 'クリック可能', onClick: action('cell click') },\n      {\n        value: 'クリック可能',\n        onClick: action('cell click'),\n        alignCenter: true,\n      },\n      {\n        value: '¥10,000',\n        alignRight: true,\n        onClick: action('cell click'),\n      },\n    ],\n  },\n  {\n    cells: [\n      { value: 'テーブル内容' },\n      { value: 'テーブル内容' },\n      { value: 'テーブル内容', alignCenter: true },\n      { value: '¥10,000', alignRight: true },\n    ],\n  },\n  {\n    cells: [\n      {\n        value: 'exampleexampleexampleexampleexampleexample@example.com',\n        breakWord: true,\n      },\n      { value: 'テーブル内容' },\n      { value: 'テーブル内容', alignCenter: true },\n      { value: '¥10,000', alignRight: true },\n    ],\n  },\n  {\n    cells: [\n      { value: 'ステータスつけれれるよ' },\n      { value: 'alert', status: 'alert' },\n      { value: 'notice', status: 'notice' },\n      { value: 'success', status: 'success' },\n    ],\n  },\n];\n\nexport default {\n  component: NumericTable,\n};\n\nexport const NumericTableComponent = () => (\n  <NumericTable headers={sampleHeaders} rows={sampleRows} {...commonKnobs()} />\n);\n\nexport const HeaderCellWithNoWrap = () => (\n  <NumericTable\n    headers={[\n      {\n        noWrap: true,\n        value:\n          '折り返さないヘッダ折り返さないヘッダ折り返さないヘッダ折り返さないヘッダ折り返さないヘッダ',\n      },\n      {\n        value:\n          '折り返すヘッダ折り返すヘッダ折り返すヘッダ折り返すヘッダ折り返すヘッダ折り返すヘッダ',\n      },\n    ]}\n    rows={[{ cells: [{ value: 'column' }, { value: 'column' }] }]}\n  />\n);\n\nexport const CellWithNoWrap = () => (\n  <NumericTable\n    headers={[\n      { value: 'column(minWidth: 12rem)', minWidth: 12 },\n      { value: 'column' },\n      { value: 'column' },\n      { value: 'column' },\n      { value: 'column' },\n    ]}\n    rows={Array(50).fill({\n      //50くらいあれば1画面埋まるくらいになるやろ\n      cells: [\n        { value: 'column' },\n        { value: 'example@example.com', noWrap: true },\n        { value: 'example@example.com', noWrap: true },\n        {\n          value:\n            'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',\n          noWrap: true,\n        },\n        { value: 'column', noWrap: true },\n      ],\n    })}\n  />\n);\n\nexport const FixedHeaderAndFixedRowHeader = () => (\n  <ScrollableBase scrollableX scrollableY>\n    <div style={{ height: '50vh' }}>\n      <NumericTable\n        fixedHeader={true}\n        fixedHeaderOffset={0}\n        rowHeaderCount={1}\n        fixedRowHeader={true}\n        {...commonKnobs()}\n        headers={[\n          { value: '', minWidth: 20 },\n          { value: 'column-01', minWidth: 20 },\n          { value: 'column-02', minWidth: 20 },\n          { value: 'column-03', minWidth: 20 },\n          { value: 'column-04', minWidth: 20 },\n          { value: 'column-05', minWidth: 20 },\n          { value: 'column-06', minWidth: 20 },\n          { value: 'column-07', minWidth: 20 },\n          { value: 'column-08', minWidth: 20 },\n          { value: 'column-09', minWidth: 20 },\n        ]}\n        rows={[...new Array(50)].map((_, i) => ({\n          cells: [\n            { value: `rowHeader-${String(i + 1).padStart(2, '0')}` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-01` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-02` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-03` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-04` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-05` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-06` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-07` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-08` },\n            { value: `value-${String(i + 1).padStart(2, '0')}-09` },\n          ],\n        }))}\n      />\n    </div>\n  </ScrollableBase>\n);\n\nexport const FixedTwoRowHeaderAndFixedRowHeader = () => {\n  const headers = [\n    { value: '取引先', width: 10, minWidth: 10 },\n    { value: '品目', width: 10, minWidth: 10 },\n    { value: '2022-01', minWidth: 6, alignRight: true },\n    { value: '2022-02', minWidth: 6, alignRight: true },\n    { value: '2022-03', minWidth: 6, alignRight: true },\n    { value: '2022-04', minWidth: 6, alignRight: true },\n    { value: '2022-05', minWidth: 6, alignRight: true },\n    { value: '2022-06', minWidth: 6, alignRight: true },\n    { value: '2022-07', minWidth: 6, alignRight: true },\n    { value: '2022-08', minWidth: 6, alignRight: true },\n    { value: '2022-09', minWidth: 6, alignRight: true },\n  ];\n\n  const parentData = [...Array(10)].map((_, i) => ({\n    id: i + 1,\n    name: '取引先' + String(i + 1).padStart(2, '0'),\n  }));\n  const parentChildMap = parentData.map((parent) => ({\n    parentId: parent.id,\n    childData: [...Array(3)].map((_, i) => ({\n      id: i + 1,\n      name: '品目' + String(i + 1).padStart(2, '0'),\n    })),\n  }));\n\n  const rows: Array<NumericTableRow> = parentData.flatMap(\n    ({ id, name: parentName }) => {\n      const parentRow: NumericTableRow = {\n        cells: [\n          { value: parentName },\n          { value: '' },\n          ...[...Array(headers.length - 2)].map(() => ({\n            value: '300',\n            alignRight: true,\n          })),\n        ],\n      };\n\n      const childRows: Array<NumericTableRow> = (\n        parentChildMap.find((m) => m.parentId === id)?.childData || []\n      ).map(({ name: childName }) => ({\n        cells: [\n          { value: <VisuallyHidden>{parentName}</VisuallyHidden> },\n          { value: childName },\n          ...[...Array(headers.length - 2)].map(() => ({\n            value: '100',\n            alignRight: true,\n          })),\n        ],\n      }));\n\n      return [parentRow].concat(childRows);\n    }\n  );\n\n  return (\n    <ScrollableBase scrollableX scrollableY>\n      <div style={{ height: '50vh' }}>\n        <NumericTable\n          fixedHeader={true}\n          rowHeaderCount={2}\n          fixedRowHeader={true}\n          {...commonKnobs()}\n          headers={headers}\n          rows={rows}\n        />\n      </div>\n    </ScrollableBase>\n  );\n};\n\nexport const WithCheckBox = () => {\n  const [checkedStatus, setCheckedStatus] = React.useState<boolean[]>(\n    Array(2).fill(false)\n  );\n  const handleChangeHeaderCheckBox = React.useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      setCheckedStatus(() => Array(2).fill(e.target.checked));\n    },\n    []\n  );\n  const handleChangeCheckBox = React.useCallback(\n    (index: number) => (e: React.ChangeEvent<HTMLInputElement>) => {\n      setCheckedStatus((prev) =>\n        prev\n          .slice(0, index)\n          .concat(e.target.checked)\n          .concat(prev.slice(index + 1))\n      );\n    },\n    []\n  );\n\n  return (\n    <NumericTable\n      withCheckBox\n      onChangeHeaderCheckBox={handleChangeHeaderCheckBox}\n      headers={[\n        { value: '氏名' },\n        { value: 'メールアドレス' },\n        { value: 'ステータス' },\n      ]}\n      rows={[\n        {\n          checked: checkedStatus[0],\n          onChangeCheckBox: handleChangeCheckBox(0),\n          checkBoxName: 'row0',\n          checkBoxValue: 'row0',\n          cells: [\n            { value: '伊藤 美穂' },\n            { value: 'ito-miho@example.com' },\n            { value: '完了' },\n          ],\n        },\n        {\n          checked: checkedStatus[1],\n          onChangeCheckBox: handleChangeCheckBox(1),\n          checkBoxName: 'row1',\n          checkBoxValue: 'row1',\n          cells: [\n            { value: '佐藤 雄太' },\n            { value: 'sato-yuta@example.com' },\n            { value: '未登録' },\n          ],\n        },\n      ]}\n    />\n  );\n};\n\nexport const WithCheckBoxWithoutHeaderCheckBox = () => {\n  const [checkedStatus, setCheckedStatus] = React.useState<boolean[]>(\n    Array(2).fill(false)\n  );\n  const handleChangeCheckBox = React.useCallback(\n    (index: number) => (e: React.ChangeEvent<HTMLInputElement>) => {\n      setCheckedStatus((prev) =>\n        prev\n          .slice(0, index)\n          .concat(e.target.checked)\n          .concat(prev.slice(index + 1))\n      );\n    },\n    []\n  );\n\n  return (\n    <NumericTable\n      withCheckBox\n      headers={[\n        { value: '不要行', width: 5 },\n        { value: '氏名' },\n        { value: 'メールアドレス' },\n        { value: 'ステータス' },\n      ]}\n      rows={[\n        {\n          checked: checkedStatus[0],\n          onChangeCheckBox: handleChangeCheckBox(0),\n          checkBoxName: 'row0',\n          checkBoxValue: 'row0',\n          cells: [\n            { value: '伊藤 美穂' },\n            { value: 'ito-miho@example.com' },\n            { value: '完了' },\n          ],\n        },\n        {\n          checked: checkedStatus[1],\n          onChangeCheckBox: handleChangeCheckBox(1),\n          checkBoxName: 'row1',\n          checkBoxValue: 'row1',\n          cells: [\n            { value: '佐藤 雄太' },\n            { value: 'sato-yuta@example.com' },\n            { value: '未登録' },\n          ],\n        },\n      ]}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/numericTable/NumericTable.tsx",
    "content": "import * as React from 'react';\nimport TableListHead from '../../lv1/lists/TableListHead';\nimport TableListHeadCell, { Order } from '../../lv1/lists/TableListHeadCell';\nimport TableListRow from '../../lv1/lists/TableListRow';\nimport BorderTableListCell from '../../lv1/lists/BorderTableListCell';\nimport CheckBoxCell from '../../lv1/lists/CheckBoxCell';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\nexport type NumericTableHeader = {\n  value?: React.ReactNode;\n  alignCenter?: boolean;\n  alignRight?: boolean;\n  ordering?: Order;\n  /**\n   * 固定幅を設定します\n   */\n  width?: number;\n  /**\n   * 最小の幅を設定します\n   */\n  minWidth?: number;\n  /**\n   * 最大の幅を設定します\n   */\n  maxWidth?: number;\n  /**\n   * 折り返さない(`white-space: nowrap`)\n   */\n  noWrap?: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onClick?: (rowIndex: number) => any;\n  'data-test'?: string;\n};\n\nexport type NumericTableRow = {\n  cells: Array<NumericTableCell>;\n  checkBoxDisabled?: boolean;\n  checked?: boolean;\n  onChangeCheckBox?: React.ChangeEventHandler<HTMLInputElement>;\n  checkBoxName?: string;\n  checkBoxValue?: string;\n  'data-test'?: string;\n};\n\nexport type NumericTableCell = {\n  value: React.ReactNode;\n  alignCenter?: boolean;\n  alignRight?: boolean;\n  small?: boolean;\n  /**\n   * なるべく単語の切れ目で改行するようにします(`word-break: break-word`)。メールアドレスや金額のカラムで指定してください。\n   */\n  breakWord?: boolean;\n  /**\n   * 折り返さない(`white-space: nowrap`)\n   */\n  noWrap?: boolean;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onClick?: (rowIndex: number) => any;\n  status?: 'alert' | 'notice' | 'success';\n  'data-masking'?: boolean;\n  'data-test'?: string;\n};\n\ntype Props = {\n  headers: Array<NumericTableHeader>;\n  rows: Array<NumericTableRow>;\n  withCheckBox?: boolean;\n  onChangeHeaderCheckBox?: React.ChangeEventHandler<HTMLInputElement>;\n  /**\n   * @deprecated 代わりに rowHeaderCount を利用してください\n   * 各行の最初のセルを行の見出しとして表示します\n   */\n  hasRowHeader?: boolean;\n  /**\n   * この数だけ、各行の左側の列を行の見出しとして表示します\n   */\n  rowHeaderCount?: number;\n  /**\n   * 各行の最初のセルを表の左に固定して表示します（rowHeaderCount と同時に利用する想定）\n   * rowHeaderCount が 2 以上の場合、fixed で指定する left の値を計算するために、対応する headers の width 指定が必要になります\n   */\n  fixedRowHeader?: boolean;\n} & Pick<\n  React.ComponentPropsWithoutRef<typeof TableListHead>,\n  'fixedHeader' | 'fixedHeaderOffset'\n> &\n  MarginClassProps &\n  CommonProps;\n\nfunction createHeader(\n  headers: NumericTableHeader[],\n  rowHeaderCount: number,\n  fixedRowHeader: boolean,\n  fixedRowHeaderLeftList: number[],\n  checkboxProps?: {\n    checked: boolean;\n    onChange?: React.ChangeEventHandler<HTMLInputElement>;\n  }\n): React.ReactNode {\n  const headerCheckBox = checkboxProps && (\n    <CheckBoxCell\n      header={true}\n      aria-label=\"すべて選択\"\n      onChange={checkboxProps.onChange}\n      checked={checkboxProps.checked}\n    />\n  );\n\n  const headerContents = headers.map(\n    (header: NumericTableHeader, index: number) => (\n      <TableListHeadCell\n        key={index}\n        alignCenter={header.alignCenter}\n        alignRight={header.alignRight}\n        ordering={header.ordering}\n        width={header.width}\n        minWidth={header.minWidth}\n        maxWidth={header.maxWidth}\n        noWrap={header.noWrap}\n        rowHeader={index < rowHeaderCount}\n        fixedRowHeader={index < rowHeaderCount && fixedRowHeader}\n        fixedRowHeaderLeft={fixedRowHeaderLeftList?.[index]}\n        onClick={header.onClick && (() => header.onClick?.(index))}\n        data-test={header['data-test']}\n      >\n        {header.value}\n      </TableListHeadCell>\n    )\n  );\n\n  return (headerCheckBox ? [headerCheckBox] : []).concat(headerContents);\n}\n\nfunction createCells(\n  row: NumericTableRow,\n  rowHeaderCount: number,\n  fixedRowHeader: boolean,\n  fixedRowHeaderLeftList: number[],\n  withCheckBox?: boolean\n): React.ReactNode {\n  const checkBoxCell = withCheckBox && (\n    <CheckBoxCell\n      header={false}\n      checked={row.checked}\n      disabled={row.checkBoxDisabled}\n      onChange={row.onChangeCheckBox}\n      name={row.checkBoxName}\n      value={row.checkBoxValue}\n    />\n  );\n\n  const cellContents = row.cells.map(\n    (cell: NumericTableCell, index: number) => (\n      <BorderTableListCell\n        key={index}\n        small={cell.small}\n        alignCenter={cell.alignCenter}\n        alignRight={cell.alignRight}\n        breakWord={cell.breakWord}\n        noWrap={cell.noWrap}\n        status={cell.status}\n        rowHeader={index < rowHeaderCount}\n        fixedRowHeader={index < rowHeaderCount && fixedRowHeader}\n        fixedRowHeaderLeft={fixedRowHeaderLeftList?.[index]}\n        onClick={cell.onClick && (() => cell.onClick?.(index))}\n        data-masking={cell['data-masking']}\n        data-test={row['data-test']}\n      >\n        {cell.value}\n      </BorderTableListCell>\n    )\n  );\n\n  return (checkBoxCell ? [checkBoxCell] : []).concat(cellContents);\n}\n\nfunction createRows(\n  rows: NumericTableRow[],\n  rowHeaderCount: number,\n  fixedRowHeader: boolean,\n  fixedRowHeaderLeftList: number[],\n  withCheckBox?: boolean\n): React.ReactNode {\n  const rowContents = rows.map((row: NumericTableRow, index: number) => (\n    <TableListRow key={index} data-test={row['data-test']}>\n      {createCells(\n        row,\n        rowHeaderCount,\n        fixedRowHeader,\n        fixedRowHeaderLeftList,\n        withCheckBox\n      )}\n    </TableListRow>\n  ));\n\n  return rowContents;\n}\n\nconst NumericTable: React.FC<Props> = (props: Props) => {\n  const {\n    headers,\n    rows,\n    withCheckBox,\n    onChangeHeaderCheckBox,\n    fixedHeaderOffset,\n    fixedHeader,\n    hasRowHeader,\n    rowHeaderCount: rawRowHeaderCount,\n    fixedRowHeader,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const rowHeaderCount = rawRowHeaderCount || (hasRowHeader ? 1 : 0);\n  // 今のところ header で colspan を指定できないので、最小単位での width の計算を headers から行う\n  // もし指定できるようになった場合は、width の list を受け取るなどして対処する必要がある\n  const fixedRowHeaderLeftList = headers\n    .slice(0, rowHeaderCount)\n    .reduce((acc, _, index, arr) => {\n      acc[index] = (acc[index - 1] || 0) + (arr[index - 1]?.width || 0);\n      return acc;\n    }, Array(rowHeaderCount).fill(0));\n\n  const allEnabledCheckBoxesSelected = React.useMemo(() => {\n    const filteredRows = rows.filter((row) => !row.checkBoxDisabled);\n\n    return (\n      filteredRows.length > 0 &&\n      filteredRows\n        .filter((row) => !row.checkBoxDisabled)\n        .every((row) => row.checked)\n    );\n  }, [rows]);\n\n  return (\n    <div\n      {...commonProps(\n        props,\n        'vb-numericTable',\n        {},\n        {\n          marginBottom,\n          marginLeft,\n          marginRight,\n          marginSize,\n          marginTop,\n        }\n      )}\n    >\n      <table className=\"vb-numericTable__table\">\n        <thead>\n          <TableListHead\n            fixedHeader={fixedHeader}\n            fixedHeaderOffset={fixedHeaderOffset}\n          >\n            {createHeader(\n              headers,\n              rowHeaderCount,\n              !!fixedRowHeader,\n              fixedRowHeaderLeftList,\n              withCheckBox && !!onChangeHeaderCheckBox\n                ? {\n                    checked: allEnabledCheckBoxesSelected,\n                    onChange: onChangeHeaderCheckBox,\n                  }\n                : undefined\n            )}\n          </TableListHead>\n        </thead>\n        <tbody>\n          {createRows(\n            rows,\n            rowHeaderCount,\n            !!fixedRowHeader,\n            fixedRowHeaderLeftList,\n            withCheckBox\n          )}\n        </tbody>\n      </table>\n    </div>\n  );\n};\n\nexport default NumericTable;\n"
  },
  {
    "path": "src/lv2/pageSelector/PageSelector.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport PageSelector from './PageSelector';\nimport { PopupBase } from '../../lv1';\n\nexport default {\n  component: PageSelector,\n};\n\nexport const PageSelectorComponent = () => (\n  <PageSelector\n    prevDisabled={boolean('PrevDisabled', false, 'PageSelector')}\n    nextDisabled={boolean('NextDisabled', false, 'PageSelector')}\n    hasDropdown={boolean('HasDropdown', false, 'PageSelector')}\n    isExpanded={boolean('IsExpanded', false, 'PageSelector')}\n    onClickNext={action('click next')}\n    onClickPrev={action('click prev')}\n    onClickTitle={action('click title')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'タイトル', 'PageSelector')}\n  </PageSelector>\n);\n\nexport const WithPopup = () => (\n  <PageSelector\n    renderPopup={() => (\n      <PopupBase paddingSize=\"small\">\n        <div style={{ minWidth: '11rem' }}>ポップアップ</div>\n      </PopupBase>\n    )}\n    onClickNext={action('click next')}\n    onClickPrev={action('click prev')}\n    onClickTitle={action('click title')}\n  >\n    2022年9月\n  </PageSelector>\n);\n\nexport const Samples = () => (\n  <>\n    <div style={{ marginBottom: '1rem' }}>\n      <PageSelector\n        onClickNext={action('clickNext')}\n        onClickPrev={action('clickPrev')}\n      >\n        2018年6月\n      </PageSelector>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <PageSelector\n        onClickNext={action('clickNext')}\n        onClickPrev={action('clickPrev')}\n        onClickTitle={action('onclickTitle')}\n        hasDropdown\n      >\n        2018年6月\n      </PageSelector>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <PageSelector\n        nextDisabled\n        prevDisabled\n        onClickNext={action('clickNext')}\n        onClickPrev={action('clickPrev')}\n        onClickTitle={action('onclickTitle')}\n        hasDropdown\n        isExpanded\n      >\n        2018年6月\n      </PageSelector>\n    </div>\n  </>\n);\n"
  },
  {
    "path": "src/lv2/pageSelector/PageSelector.tsx",
    "content": "import * as React from 'react';\nimport IconOnlyButton from '../../lv1/buttons/IconOnlyButton';\nimport {\n  MdKeyboardArrowLeft,\n  MdKeyboardArrowRight,\n  MdArrowDropDown,\n} from 'react-icons/md';\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport { WithPopup } from '..';\nimport { Button } from '../../lv1';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype RenderPopupT = Parameters<typeof WithPopup>[0]['renderPopup'];\ntype Props = {\n  prevDisabled?: boolean;\n  nextDisabled?: boolean;\n  onClickPrev: () => void;\n  onClickNext: () => void;\n  /**\n   * ポップアップを描画するrender functionです。詳細は `WithPopup` の `renderPopup` propを参照してください。\n   * Render function for popup. See `renderPopup` prop of `WithPopup for details.\n   */\n  renderPopup?: RenderPopupT;\n  /**\n   * タイトル部分 (`children`) をクリックしたときの処理を指定します。 `renderPopup` を使う場合は通常は指定は不要です。\n   * 指定すると、タイトル部分はボタンになります。\n   * Click-handler for the title (`children`). It is not necessary when using `renderPopup`.\n   * If it is defined, title will be rendered as a button.\n   */\n  onClickTitle?: () => void;\n  /**\n   * タイトル部分を指定します。 `renderPopup` `onClickTitle` `hasDropdown` のどれかを使う場合、ボタンになります。\n   * The title of the page. If `renderPopup` `onClickTitle` or `hasDropdown` is used, it will be rendered as a button.\n   */\n  children: React.ReactNode;\n  /**\n   * `renderPopup` を使用してください。`renderPopup` を使う場合は `hasDropdown` の指定は不要です（機能しません）。\n   * Use `renderPopup`. If you do, you don't need to set `hasDropdown` (that doesn't make any effect)\n   * @deprecated\n   */\n  hasDropdown?: boolean;\n  /**\n   * `renderPopup` を使用してください。`renderPopup` を使う場合は `isExpanded` の指定は不要です（機能しません）。\n   * Use `renderPopup`. If you do, you don't need to set `isExpanded` (that doesn't make any effect)\n   *  @deprecated */\n  isExpanded?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * 月ごとに作られるページなどの切り替えに使用します。\n *\n * - 左右に「前へ」「次へ」ボタンがあります\n * - 中央にタイトル部分があります。クリックすることでポップアップを開くことができます。\n */\nconst PageSelector: React.FC<Props> = (props: Props) => {\n  const {\n    prevDisabled,\n    nextDisabled,\n    onClickNext,\n    onClickTitle,\n    onClickPrev,\n    children,\n    renderPopup,\n    hasDropdown,\n    isExpanded,\n    marginTop,\n    marginRight,\n    marginLeft,\n    marginBottom,\n    marginSize,\n  } = props;\n  return (\n    <span\n      {...commonProps(\n        props,\n        'vb-pageSelector',\n        {},\n        {\n          marginTop,\n          marginRight,\n          marginLeft,\n          marginBottom,\n          marginSize,\n        }\n      )}\n    >\n      <IconOnlyButton\n        IconComponent={MdKeyboardArrowLeft}\n        onClick={onClickPrev}\n        disabled={prevDisabled}\n        label=\"前へ\"\n        mr={0.25}\n        small\n      />\n      {renderPopup ? (\n        <WithPopup\n          render={(popupId, isOpen, controlRef) => (\n            <Button\n              aria-haspopup={true}\n              aria-expanded={isOpen}\n              onClick={onClickTitle}\n              aria-controls={popupId}\n              ref={\n                controlRef as React.RefObject<\n                  HTMLButtonElement | HTMLAnchorElement\n                >\n              }\n              iconPosition=\"right\"\n              IconComponent={MdArrowDropDown}\n              appearance=\"tertiary\"\n            >\n              {children}\n            </Button>\n          )}\n          renderPopup={renderPopup}\n        />\n      ) : hasDropdown ? (\n        <Button\n          aria-haspopup={true}\n          aria-expanded={isExpanded}\n          onClick={onClickTitle}\n          iconPosition=\"right\"\n          IconComponent={MdArrowDropDown}\n          appearance=\"tertiary\"\n        >\n          {children}\n        </Button>\n      ) : onClickTitle ? (\n        <Button onClick={onClickTitle} appearance=\"tertiary\">\n          {children}\n        </Button>\n      ) : (\n        <span className=\"vb-pageSelector__currentPage\">{children}</span>\n      )}\n      <IconOnlyButton\n        IconComponent={MdKeyboardArrowRight}\n        onClick={onClickNext}\n        disabled={nextDisabled}\n        label=\"次へ\"\n        ml={0.25}\n        small\n      />\n    </span>\n  );\n};\nexport default PageSelector;\n"
  },
  {
    "path": "src/lv2/pager/Pager.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { number, boolean } from '@storybook/addon-knobs';\nimport Pager from './Pager';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: Pager,\n};\n\nexport const PagerComponent = () => (\n  <Pager\n    currentPage={number('currentPage', 10, undefined, 'Pager')}\n    disabled={boolean('disabled', false, 'Pager')}\n    pageCount={number('pageCount', 20, undefined, 'Pager')}\n    pageRange={number('pageRange', 5, undefined, 'Pager')}\n    sidePageRange={number('sidePageRange', 1, undefined, 'Pager')}\n    onPageChange={action('page changed')}\n    small={boolean('small', false, 'Pager')}\n    {...commonKnobs()}\n  />\n);\nexport const Small = () => (\n  <Pager\n    currentPage={number('currentPage', 500, undefined, 'Pager')}\n    pageCount={number('pageCount', 1000, undefined, 'Pager')}\n    pageRange={number('pageRange', 7, undefined, 'Pager')}\n    sidePageRange={number('sidePageRange', 3, undefined, 'Pager')}\n    onPageChange={action('page changed')}\n    small\n    {...commonKnobs()}\n  />\n);\n\nclass PagerWithHandler extends React.Component<\n  Record<string, never>,\n  { page: number }\n> {\n  state = {\n    page: 1,\n  };\n\n  render() {\n    return (\n      <Pager\n        currentPage={this.state.page}\n        pageCount={number('pageCount', 20, undefined, 'Pager')}\n        pageRange={number('pageRange', 5, undefined, 'Pager')}\n        sidePageRange={number('sidePageRange', 1, undefined, 'Pager')}\n        onPageChange={(page: number) => this.setState({ page })}\n        {...commonKnobs()}\n      />\n    );\n  }\n}\nexport const WithHandler = () => <PagerWithHandler />;\n"
  },
  {
    "path": "src/lv2/pager/Pager.tsx",
    "content": "import * as React from 'react';\nimport PagerButton from '../../lv1/buttons/PagerButton';\nimport PagerBreak from './PagerBreak';\nimport IconOnlyButton from '../../lv1/buttons/IconOnlyButton';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\nimport { MdKeyboardArrowLeft, MdKeyboardArrowRight } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * 現在何ページ目にいるか\n   */\n  currentPage: number;\n  /**\n   * 全部で何ページあるか\n   */\n  pageCount: number;\n  /**\n   * 現在のページを含め、何ページ分のボタンを表示するか（デフォルトは5）\n   */\n  pageRange?: number;\n\n  /**\n   * 最初と最後のページを何ページ分表示するか（デフォルトは1）\n   */\n  sidePageRange?: number;\n\n  /**\n   * Deactivates the page buttons / ページ遷移ボタンを無効化します\n   */\n  disabled?: boolean;\n\n  onPageChange: (page: number) => void;\n  small?: boolean;\n} & CommonProps;\n\nconst DEFAULT_PAGE_RANGE = 5;\nconst DEFAULT_SIDE_PAGE_RANGE = 1;\nconst LEFT_BREAK = 'LEFT_BREAK';\nconst RIGHT_BREAK = 'RIGHT_BREAK';\n\n// pageの重複を排除\nfunction uniquePages(\n  pages: Array<number | string | null>\n): Array<number | string | null> {\n  const result: Array<number | string | null> = [];\n  pages.forEach((page) => {\n    if (result.indexOf(page) < 0) {\n      result.push(page);\n    }\n  });\n  return result;\n}\n\n// buttonとbreakの並びを\n// [1,2,LEFT_BREAK,5,6,7,8,9,RIGHT_BREAK,19,20] のように配列で取得\nfunction createPages({\n  currentPage,\n  pageCount,\n  pageRange,\n  sidePageRange,\n}: {\n  currentPage: number;\n  pageCount: number;\n  pageRange: number;\n  sidePageRange: number;\n}): Array<number | string | null> {\n  // 左端から...までのページ\n  const leftSidePages = Array.from(\n    { length: sidePageRange },\n    (_, i) => i + 1\n  ).filter((i) => i > 0 && i <= pageCount);\n\n  // ...から...までのページ\n  const centerPages = Array.from(\n    { length: pageRange },\n    (_, i) => i + currentPage - Math.floor(pageRange / 2)\n  )\n    .map((_, i) => i + currentPage - Math.floor(pageRange / 2))\n    .map((i) => {\n      // [-1,0,1,2,3] のようなケースは [1,2,3,4,5] に補正\n      if (i < 1) {\n        return i + pageRange;\n      } else if (i > pageCount) {\n        return i - pageRange;\n      }\n      return i;\n    })\n    .filter((i) => i > 0 && i <= pageCount)\n    .sort((a, b) => a - b);\n\n  // ...から右端までのページ\n  const rightSidePages = Array.from(\n    { length: sidePageRange },\n    (_, i) => pageCount - i\n  )\n    .filter((i) => i > 0 && i <= pageCount)\n    .reverse();\n\n  const pages = [\n    ...leftSidePages,\n    leftSidePages[leftSidePages.length - 1] < centerPages[0] - 1\n      ? LEFT_BREAK\n      : null,\n    ...centerPages,\n    rightSidePages[0] > centerPages[centerPages.length - 1] + 1\n      ? RIGHT_BREAK\n      : null,\n    ...rightSidePages,\n  ].filter((i) => i);\n\n  return uniquePages(pages);\n}\n\n/**\n * ページャー\n */\nconst Pager: React.FC<Props> = (props: Props) => {\n  const {\n    currentPage,\n    disabled,\n    onPageChange,\n    pageCount,\n    pageRange = DEFAULT_PAGE_RANGE,\n    sidePageRange = DEFAULT_SIDE_PAGE_RANGE,\n    small,\n  } = props;\n  return (\n    <nav\n      {...commonProps(props, 'vb-pager')}\n      role=\"navigation\"\n      aria-label=\"ページ送り\"\n    >\n      <div className=\"vb-pager__list\">\n        <IconOnlyButton\n          label=\"前のページへ\"\n          onClick={(): void => {\n            onPageChange(currentPage - 1);\n          }}\n          disabled={disabled || currentPage === 1}\n          mr={1}\n          small={small}\n          IconComponent={MdKeyboardArrowLeft}\n        />\n\n        {createPages({ currentPage, pageCount, pageRange, sidePageRange }).map(\n          (page) => {\n            if (typeof page === 'number') {\n              return (\n                <PagerButton\n                  key={page}\n                  current={page === currentPage}\n                  disabled={disabled}\n                  onClick={(): void => {\n                    page !== currentPage && onPageChange(page);\n                  }}\n                  marginLeft={page === 1}\n                  marginRight\n                  small={small}\n                  label={`ページ ${page}`}\n                >\n                  <span>{page}</span>\n                </PagerButton>\n              );\n            }\n\n            return <PagerBreak key={`${page}`} />;\n          }\n        )}\n        <IconOnlyButton\n          label=\"次のページへ\"\n          onClick={(): void => {\n            onPageChange(currentPage + 1);\n          }}\n          disabled={disabled || currentPage === pageCount}\n          ml={1}\n          small={small}\n          IconComponent={MdKeyboardArrowRight}\n        />\n      </div>\n      <VisuallyHidden autoRead>\n        {`${pageCount}ページ中、${currentPage}ページ目を表示中`}\n      </VisuallyHidden>\n    </nav>\n  );\n};\nexport default Pager;\n"
  },
  {
    "path": "src/lv2/pager/PagerBreak.tsx",
    "content": "import * as React from 'react';\nimport { MdMoreHoriz } from 'react-icons/md';\n\nconst PagerBreak: React.FC = () => {\n  return (\n    <div className=\"vb-pager__break\">\n      <MdMoreHoriz aria-label=\"中略\" />\n    </div>\n  );\n};\n\nexport default PagerBreak;\n"
  },
  {
    "path": "src/lv2/pager/Pagination.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { actions } from '@storybook/addon-actions';\nimport { text, number, select, boolean } from '@storybook/addon-knobs';\nimport Pagination from './Pagination';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: Pagination,\n};\n\nconst handlers = actions({\n  onChange: 'change',\n  onFocus: 'focus',\n  onBlur: 'blur',\n  onKeyDown: 'keydown',\n  onKeyUp: 'keyup',\n});\n\nexport const PaginationComponent = () => (\n  <Pagination\n    rowsPerPageOptions={[\n      { value: '10' },\n      { value: '20' },\n      { value: '50' },\n      { value: '100' },\n      { value: '200' },\n    ]}\n    currentPage={number('currentPage', 1, {}, 'Pagination')}\n    rowCount={number('rowCount', 999, {}, 'Pagination')}\n    displayRowCount={text('displayRowCount', '', 'Pagination')}\n    selectBoxWidth={\n      select(\n        'selectBoxWidth',\n        {\n          xSmall: 'xSmall',\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n        },\n        'small',\n        'Pagination'\n      ) || undefined\n    }\n    disabled={boolean('disabled', false, 'Pagination')}\n    rowsPerPageValue={number('value', 20, {}, 'Pagination')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const InteractiveSample = () => {\n  const [rowsPerPageValue, setRowsPerPageValue] = React.useState<string>('20');\n  return (\n    <Pagination\n      rowsPerPageOptions={[\n        { value: '10' },\n        { value: '20' },\n        { value: '50' },\n        { value: '100' },\n        { value: '200' },\n      ]}\n      currentPage={number('currentPage', 1, {}, 'Pagination')}\n      rowCount={number('rowCount', 999, {}, 'Pagination')}\n      displayRowCount={text('displayRowCount', '', 'Pagination')}\n      selectBoxWidth={\n        select(\n          'selectBoxWidth',\n          {\n            xSmall: 'xSmall',\n            small: 'small',\n            medium: 'medium',\n            large: 'large',\n          },\n          'small',\n          'Pagination'\n        ) || undefined\n      }\n      disabled={boolean('disabled', false, 'Pagination')}\n      rowsPerPageValue={Number(rowsPerPageValue)}\n      onChange={(e) => setRowsPerPageValue(e.target.value)}\n      {...commonKnobs()}\n    />\n  );\n};\n\nexport const RowsPerPageOptionName = () => (\n  <Pagination\n    rowsPerPageOptions={[\n      { value: '10', name: 'ten' },\n      { value: '20', name: 'twenty' },\n      { value: '50', name: 'fifty' },\n      { value: '100', name: 'one hundred' },\n      { value: '200', name: 'two hundreds' },\n    ]}\n    currentPage={number('currentPage', 1, {}, 'Pagination')}\n    rowCount={number('rowCount', 999, {}, 'Pagination')}\n    displayRowCount={text('displayRowCount', '', 'Pagination')}\n    selectBoxWidth={\n      select(\n        'selectBoxWidth',\n        {\n          xSmall: 'xSmall',\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n        },\n        'small',\n        'Pagination'\n      ) || undefined\n    }\n    disabled={boolean('disabled', false, 'Pagination')}\n    rowsPerPageValue={number('value', 20, {}, 'Pagination')}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithThousandsSeparator = () => (\n  <Pagination\n    rowsPerPageOptions={[\n      { value: '1000' },\n      { value: '2000' },\n      { value: '3000' },\n    ]}\n    currentPage={1}\n    rowCount={1500}\n    selectBoxWidth=\"small\"\n    rowsPerPageValue={1000}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithSuffixedRowCount = () => (\n  <Pagination\n    rowsPerPageOptions={[\n      { value: '1000' },\n      { value: '2000' },\n      { value: '3000' },\n    ]}\n    currentPage={1}\n    rowCount={1500}\n    displayRowCount={'1000件以上'}\n    selectBoxWidth=\"small\"\n    rowsPerPageValue={1000}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithCurrentPageRowCount = () => (\n  <Pagination\n    rowsPerPageOptions={[{ value: '20' }, { value: '50' }, { value: '100' }]}\n    currentPage={3}\n    currentPageRowCount={15}\n    selectBoxWidth=\"small\"\n    rowsPerPageValue={20}\n    {...handlers}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/pager/Pagination.tsx",
    "content": "import * as React from 'react';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport SelectBox from '../../lv1/forms/SelectBox';\nimport { CommonProps, pickCommonProps } from '../../utilities/commonProps';\nimport { HStack } from '../../lv1';\nimport { Digits } from '../../utilities/Digits';\n\ntype Props = {\n  /**\n   * 1ページあたりの表示件数の選択肢。nameの指定がなければ「value件」にする\n   */\n  rowsPerPageOptions: {\n    value: string;\n    name?: string;\n  }[];\n\n  /**\n   * 「1ページあたりの表示件数」 select 要素の value。rowsPerPageValueかdefaultRowsPerPageValueのどちらかを必ず指定してください。（ページ表示の計算のため）\n   */\n  rowsPerPageValue?: number;\n\n  /**\n   * 「1ページあたりの表示件数」 select 要素が非制御の場合の初期値。rowsPerPageValueかdefaultRowsPerPageValueのどちらかを必ず指定してください。（ページ表示の計算のため）\n   */\n  defaultRowsPerPageValue?: number;\n\n  /**\n   * 現在何ページ目にいるか（Pagerと併用するならそれの currentPage と合わせる）\n   */\n  currentPage: number;\n\n  /**\n   * 全部で何レコードあるか\n   * rowCountもdisplayRowCountも未指定の場合、レコード総数は表示されません\n   */\n  rowCount?: number;\n\n  /**\n   * 「全部で何レコードあるか」の表示（「XX件以上」といった表示をするときにstringで指定します。指定がなければrowCountの値が表示されます）\n   */\n  displayRowCount?: string;\n\n  /**\n   * 現在のページに何レコードあるか\n   * 全件数を持たないなどの理由でrowCountを指定しない場合に渡します\n   * 未指定の場合はrowsPerPageValueが参照されます\n   * 例） rowsPerPageValueが20、currentPageが3、currentPageRowCountが15の場合、「41 - 55」と表示\n   */\n  currentPageRowCount?: number;\n\n  /**\n   * 表示件数 select 要素の幅です。デフォルトはsmall\n   */\n  selectBoxWidth?: 'xSmall' | 'small' | 'medium' | 'large';\n\n  /**\n   * trueにすると表示件数 select 要素がdisabledになります\n   */\n  disabled?: boolean;\n\n  /**\n   * 表示件数の値が変わったときに発火します。e.target.value で表示件数を取得できます。\n   */\n  onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n\n  /**\n   * 表示件数のinputにフォーカスが当たったときに発火します。e.target.value で表示件数を取得できます。\n   */\n  onFocus?: (e: React.FocusEvent<HTMLSelectElement>) => void;\n\n  /**\n   * 表示件数のinputからフォーカスがはずれたときに発火します。e.target.value で表示件数を取得できます。\n   */\n  onBlur?: (e: React.FocusEvent<HTMLSelectElement>) => void;\n} & CommonProps;\n\n/**\n * ページネーションがあるコレクション画面で、「1ページの表示件数」と「いま表示されているページ（何件目から何件目が表示されてるのか）」を表示するコンポーネント\n *\n * - 使用例は Examples の Collection を参照してください\n *   - ListTable等の右上に配置することを想定しています\n * - 表示件数の選択肢、表示件数の初期値、いま何ページ目なのか、レコード総数表示は外からpropsで渡します\n *   - Pager コンポーネントと併用する場合、currentPage は Pager と同じ値を渡してください\n *   - レコード総数は実際のレコード数をわたすだけでなく、「1000件以上」といった文字列で渡すことも可能です\n */\nconst Pagination: React.FC<Props> = (props: Props) => {\n  const {\n    rowsPerPageOptions,\n    currentPage,\n    defaultRowsPerPageValue,\n    rowsPerPageValue,\n    rowCount,\n    displayRowCount,\n    currentPageRowCount,\n    selectBoxWidth,\n    disabled,\n    onChange,\n    onFocus,\n    onBlur,\n  } = props;\n\n  const options = rowsPerPageOptions.map((option) => {\n    return {\n      value: option.value,\n      name: option.name || Digits.formalize(option.value) + '件',\n    };\n  });\n\n  const rowsPerPage = rowsPerPageValue || defaultRowsPerPageValue || 0;\n  const startNum = Math.min(\n    (currentPage - 1) * rowsPerPage + 1,\n    rowCount || Infinity\n  );\n  const endNum = Math.min(\n    (currentPage - 1) * rowsPerPage + (currentPageRowCount || rowsPerPage),\n    rowCount || Infinity\n  );\n\n  return (\n    <HStack\n      inline\n      alignItems=\"center\"\n      gap={1}\n      wrap=\"nowrap\"\n      {...pickCommonProps(props)}\n    >\n      <SelectBox\n        label=\"表示件数\"\n        width={selectBoxWidth || 'small'}\n        options={options}\n        defaultValue={defaultRowsPerPageValue?.toString()}\n        disabled={disabled}\n        value={rowsPerPageValue?.toString()}\n        onChange={onChange}\n        onFocus={onFocus}\n        onBlur={onBlur}\n      />\n      <Paragraph inline>\n        {Digits.formalize(startNum)} - {Digits.formalize(endNum)}\n        {displayRowCount || rowCount\n          ? ` / ${Digits.formalize(displayRowCount || rowCount)}`\n          : ''}\n      </Paragraph>\n    </HStack>\n  );\n};\n\nexport default Pagination;\n"
  },
  {
    "path": "src/lv2/personTag/PersonTag.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport PersonTag from './PersonTag';\nimport dsSquare from '../../lv1/icons/storyAssets/ds_square.jpeg';\n\nexport default {\n  component: PersonTag,\n};\n\nexport const PersonTagComponent = () => (\n  <PersonTag\n    removable={boolean('Removable', true, 'PersonTag')}\n    color={\n      select(\n        'Color',\n        {\n          success: 'success',\n          error: 'error',\n          undefined: '',\n        },\n        '',\n        'PersonTag'\n      ) || undefined\n    }\n    onRemove={action('remove')}\n    disabledRemoveButton={boolean('DisabledRemoveButton', false, 'PersonTag')}\n    imageUrl={dsSquare}\n    {...commonKnobs()}\n  >\n    {text('Children', '佐々木大輔', 'PersonTag')}\n  </PersonTag>\n);\n\nexport const Color = () => (\n  <>\n    <div style={{ marginBottom: '1rem' }}>\n      <PersonTag imageUrl={dsSquare} color=\"success\" type=\"success\">\n        佐々木大輔\n      </PersonTag>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <PersonTag imageUrl={dsSquare} color=\"error\" type=\"error\">\n        佐々木大輔\n      </PersonTag>\n    </div>\n  </>\n);\n\nexport const DisabledRemoveButton = () => (\n  <div>\n    <PersonTag\n      removable\n      imageUrl={dsSquare}\n      disabledRemoveButton\n      onRemove={action('onRemove')}\n    >\n      佐々木大輔\n    </PersonTag>\n  </div>\n);\n"
  },
  {
    "path": "src/lv2/personTag/PersonTag.tsx",
    "content": "import * as React from 'react';\nimport { MdCancel } from 'react-icons/md';\nimport { Keys } from '../../utilities/keyboard';\n\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { Avatar } from '../../lv1';\n\ntype PersonTagColor = 'success' | 'error';\n\ntype Props = {\n  children?: string;\n  onRemove?: () => any;\n  disabledRemoveButton?: boolean;\n  removable?: boolean;\n  type?: string;\n  color?: PersonTagColor;\n  imageUrl: string;\n} & MarginClassProps &\n  CommonProps;\n\nconst PersonTag: React.FC<Props> = (props: Props) => {\n  const {\n    type,\n    children,\n    removable,\n    onRemove,\n    disabledRemoveButton,\n    color,\n    imageUrl,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n  const baseClass = 'vb-personTag';\n  const classModifier = {\n    removable,\n    success: color === 'success',\n    error: color === 'error',\n  };\n\n  const bodyClassName = color\n    ? `${baseClass}__body ${baseClass}__body--${color}`\n    : `${baseClass}__body`;\n\n  return (\n    <span\n      {...commonProps(props, baseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginTop,\n        marginSize,\n      })}\n    >\n      <span className={`${baseClass}__inner`}>\n        <Avatar imageUrl={imageUrl} size=\"small\" mr={0.25} />\n        {type && <span className={`${baseClass}__type`}>{type}</span>}\n        <span className={bodyClassName} title={children}>\n          {children}\n        </span>\n        {removable && (\n          <span\n            className={`${baseClass}__removeButton${\n              disabledRemoveButton\n                ? ` ${baseClass}__removeButton--disabled`\n                : ''\n            }`}\n            aria-label={`${children || 'この人'}を削除`}\n            tabIndex={disabledRemoveButton ? -1 : 0}\n            role=\"button\"\n            onClick={() => onRemove && onRemove()}\n            onKeyDown={(e) => {\n              if (onRemove && (e.key === Keys.ENTER || e.key === Keys.SPACE)) {\n                e.preventDefault();\n                onRemove();\n              }\n            }}\n          >\n            <MdCancel className={`${baseClass}__removeIcon`} />\n          </span>\n        )}\n      </span>\n    </span>\n  );\n};\n\nexport default PersonTag;\n"
  },
  {
    "path": "src/lv2/popupProgressBar/PopupProgressBar.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { text, select, number } from '@storybook/addon-knobs';\nimport PopupProgressBar from './PopupProgressBar';\n\nexport default {\n  component: PopupProgressBar,\n};\n\nexport const PopupProgressBarComponent = () => (\n  <PopupProgressBar\n    status={select(\n      'status',\n      {\n        doing: 'doing',\n        done: 'done',\n        error: 'error',\n      },\n      'doing',\n      'PopupProgressBar'\n    )}\n    message={text('message', 'メッセージ', 'PopupProgressBar')}\n    progressValue={number('progressValue', 30, undefined, 'PopupProgressBar')}\n    progressMaxValue={number(\n      'progressMaxValue',\n      100,\n      undefined,\n      'PopupProgressBar'\n    )}\n    onClose={() => undefined}\n  />\n);\n"
  },
  {
    "path": "src/lv2/popupProgressBar/PopupProgressBar.tsx",
    "content": "import * as React from 'react';\nimport { MdClose, MdDone, MdError } from 'react-icons/md';\nimport {\n  IconOnlyButton,\n  InlineSpinner,\n  PopupBase,\n  ProgressBar,\n  MaterialIcon,\n} from '../..';\nimport { CommonProps } from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\n\nexport type ProgressState = {\n  status: 'doing' | 'done' | 'error';\n  message: string;\n  progressValue?: number;\n  progressMaxValue?: number;\n};\n\ntype Props = ProgressState & { onClose: () => void } & CommonProps;\n\n/**\n * 非同期処理の進捗を表示するメッセージ。非同期処理の進捗、完了、エラーに関するメッセージを表示するために使用してください。\n *\n * - 「エラーが起きた」「完了した」など、短いメッセージを伝えるのに使用してください。\n * - あくまで「ユーザーがフィードバックを見落とさないようにする」のを目的として使用してください。\n *   - 「○○は半角で入力してください」のようなエラーの詳細は、このコンポーネントとは別に、画面レイアウト内で表示してください。\n * - `progressValue` または `progressMaxValue` のどちらかが指定されていない場合、ProgressBarではなくアイコンでの表示になります。\n * - onCloseで閉じるボタンを押したときの挙動を指定してください。\n */\nconst PopupProgressBar: React.FC<Props> = ({\n  status,\n  message,\n  progressValue,\n  progressMaxValue,\n  onClose,\n}: Props) => {\n  const indeterminate = progressValue == null || progressMaxValue == null;\n  const baseClass = 'vb-popupProgressBar';\n\n  return (\n    <PopupBase paddingSize=\"zero\" fitContent>\n      <div className={`${baseClass}`}>\n        <div className={`${baseClass}__contents`}>\n          <div className={`${baseClass}__message`}>\n            <div\n              className={vbClassNames(`${baseClass}__message-block`, {\n                modifier: { small: status === 'done' && !indeterminate },\n              })}\n            >\n              <div className={`${baseClass}__icon`}>\n                {indeterminate && status === 'doing' && (\n                  <InlineSpinner isLoading large mr={0.5} />\n                )}\n                {(status === 'done' || status === 'error') && (\n                  <MaterialIcon\n                    IconComponent={status === 'done' ? MdDone : MdError}\n                    success={status === 'done'}\n                    error={status === 'error'}\n                    small={status === 'done' && !indeterminate}\n                    mr={0.5}\n                    mt={status === 'done' && !indeterminate ? 0.25 : undefined}\n                  />\n                )}\n              </div>\n              <div\n                aria-live={status === 'error' ? 'assertive' : 'polite'}\n                aria-atomic=\"true\"\n              >\n                {message}\n              </div>\n            </div>\n            <div>\n              {indeterminate ||\n                status === 'error' ||\n                `${progressValue}/${progressMaxValue}`}\n            </div>\n          </div>\n          {indeterminate || status === 'error' || (\n            <ProgressBar\n              mt={0.5}\n              mb={0.5}\n              value={progressValue}\n              maxValue={progressMaxValue}\n              width=\"full\"\n            />\n          )}\n        </div>\n        <div className={`${baseClass}__close`}>\n          <IconOnlyButton\n            ml={0.5}\n            IconComponent={MdClose}\n            label=\"閉じる\"\n            appearance=\"tertiary\"\n            onClick={() => onClose()}\n          />\n        </div>\n      </div>\n    </PopupBase>\n  );\n};\nexport default PopupProgressBar;\n"
  },
  {
    "path": "src/lv2/popupProgressBarPortal/PopupProgressBarPortal.stories.tsx",
    "content": "import * as React from 'react';\n\nimport PopupProgressBarPortal from './PopupProgressBarPortal';\nimport { Button } from '../..';\n\nexport default {\n  component: PopupProgressBarPortal,\n};\n\nexport const PopupProgressBarComponent = () => (\n  <PopupProgressBarPortal\n    progressStates={[\n      {\n        status: 'doing' as const,\n        message: 'メッセージ',\n        progressValue: 30,\n        progressMaxValue: 100,\n      },\n    ]}\n  />\n);\n\nexport const MultipleExample = () => {\n  const exampleProps = [\n    {\n      status: 'doing' as const,\n      message: 'メッセージ',\n      progressValue: 30,\n      progressMaxValue: 100,\n    },\n    {\n      status: 'done' as const,\n      message: 'メッセージ',\n    },\n    {\n      status: 'error' as const,\n      message: 'メッセージ',\n    },\n  ];\n\n  const [example, setExample] = React.useState<number>(0);\n  const [examples, setExamples] = React.useState<Array<number>>([]);\n\n  return (\n    <>\n      <Button\n        onClick={() => {\n          setExamples([...examples, example]);\n          setExample((example + 1) % 3);\n        }}\n      >\n        追加\n      </Button>\n      <PopupProgressBarPortal\n        progressStates={examples.map((example) => exampleProps[example])}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/popupProgressBarPortal/PopupProgressBarPortal.tsx",
    "content": "import * as React from 'react';\n\nimport { CommonProps } from '../../utilities/commonProps';\nimport AnimateHeight from 'react-animate-height';\nimport PopupProgressBar, {\n  ProgressState,\n} from '../popupProgressBar/PopupProgressBar';\n\ntype Props = {\n  progressStates: ProgressState[];\n} & CommonProps;\n\nconst PopupProgressBarWithAnimation = (state: ProgressState) => {\n  const [isShow, setIsShow] = React.useState<boolean>(false);\n\n  // フェードインさせるために初期値はfalseにしておく\n  React.useEffect(() => {\n    setTimeout(() => setIsShow(true), 100);\n  }, []);\n\n  React.useEffect(() => {\n    if (state.status === 'done') {\n      setTimeout(() => {\n        setIsShow(false);\n      }, 5000);\n    }\n  }, [state.status]);\n\n  return (\n    <AnimateHeight\n      duration={isShow ? 250 : 200}\n      height={isShow ? 'auto' : 0}\n      animateOpacity={true}\n    >\n      <div className=\"vb-popupProgressBarPortal__element\">\n        <PopupProgressBar {...state} onClose={() => setIsShow(false)} />\n      </div>\n    </AnimateHeight>\n  );\n};\n\n/**\n * 画面左下にフロート表示するメッセージ。非同期処理の進捗、完了、エラーに関するメッセージを表示するために使用してください。\n *\n * - 「エラーが起きた」「完了した」など、短いメッセージを伝えるのに使用してください。\n * - あくまで「ユーザーがフィードバックを見落とさないようにする」のを目的として使用してください。\n *   - 「○○は半角で入力してください」のようなエラーの詳細は、このコンポーネントとは別に、画面レイアウト内で表示してください。\n * - `done` タイプのメッセージは一定時間経過後に非表示となります。 `error` `doing` に関しては自動的には消えません。\n * - 複数表示する際には、上から古い順に並ぶように表示して下さい。\n * - `progressValue` または `progressMaxValue` のどちらかが指定されていない場合、ProgressBarではなくアイコンでの表示になります。\n */\nconst PopupProgressBarPortal: React.FC<Props> = ({\n  progressStates: states,\n}: Props) => {\n  return (\n    <div className=\"vb-popupProgressBarPortal\">\n      {states.map((state, index) => (\n        <PopupProgressBarWithAnimation key={index} {...state} />\n      ))}\n    </div>\n  );\n};\nexport default PopupProgressBarPortal;\n"
  },
  {
    "path": "src/lv2/propsListForm/PropsListForm.stories.tsx",
    "content": "import * as React from 'react';\nimport PropsListForm from './PropsListForm';\nimport { commonKnobs } from '../../../stories';\nimport { number, boolean } from '@storybook/addon-knobs';\nimport { CheckBox, RadioButton, SelectBox } from '../../lv1';\nimport { MiniTag } from '../tagBox/MiniTag';\n\nexport default {\n  component: PropsListForm,\n  parameters: {},\n};\n\nexport const PropsListFormComponent = () => {\n  const [values, setValues] = React.useState({\n    name: '',\n    displayName: '',\n    number: 'A0001',\n    age: 0,\n    entryDate: '2020-01-01',\n    custom1: '',\n    custom2: 'false',\n    custom3: '',\n    phoneNumber: '',\n    note: '',\n  });\n  type Values = typeof values;\n  const blocks = [\n    [\n      {\n        label: '姓名',\n        key: 'name',\n        required: true,\n        help: ({ readOnly }) => (readOnly ? null : '書類等で使用されます。'),\n        annotation: ({ readOnly }) =>\n          readOnly ? null : '姓と名の間は空白を入れないでください。',\n        field: {\n          factor: 'text',\n          onChange: (e) => {\n            setValues({\n              ...values,\n              name: e.target.value,\n              displayName: e.target.value,\n            });\n          },\n        },\n      },\n      {\n        label: '表示名 （ニックネーム）',\n        key: 'displayName',\n        help: ({ readOnly }) =>\n          readOnly ? null : '書類等には使用されません。',\n        required: true,\n        field: {\n          factor: 'text',\n        },\n      },\n    ],\n    [\n      {\n        label: '従業員番号',\n        key: 'number',\n        annotation: ({ readOnly }) =>\n          readOnly ? null : 'この項目は管理者のみ編集できます。',\n        field: { factor: 'read-only-text' },\n      },\n    ],\n    [\n      {\n        label: '年齢',\n        key: 'age',\n        field: { factor: 'number', width: 'small' },\n      },\n    ],\n    [\n      {\n        label: '入社日',\n        key: 'entryDate',\n        field: { factor: 'date' },\n      },\n    ],\n    [\n      {\n        label: '電話番号',\n        key: 'phoneNumber',\n        field: { factor: 'numeral-code' },\n      },\n    ],\n    {\n      numberOfColumns: 2,\n      definitions: [\n        {\n          label: '障害 ',\n          key: 'custom1',\n          field: ({ id }) => (\n            <SelectBox\n              id={id}\n              options={[\n                { name: '対象外', value: '0' },\n                { name: '障害者', value: '1' },\n                { name: '特別障害者', value: '2' },\n              ]}\n              onChange={(e) => {\n                setValues({\n                  ...values,\n                  custom1: e.target.value,\n                });\n              }}\n            />\n          ),\n        },\n        {\n          label: '配偶者',\n          key: 'custom2',\n          field: () => (\n            <>\n              <RadioButton\n                value=\"true\"\n                checked={values.custom2 === 'true'}\n                onChange={(e) => {\n                  setValues({\n                    ...values,\n                    custom2: e.target.value,\n                  });\n                }}\n                mr={1}\n              >\n                有\n              </RadioButton>\n              <RadioButton\n                value=\"false\"\n                checked={values.custom2 === 'false'}\n                onChange={(e) => {\n                  setValues({\n                    ...values,\n                    custom2: e.target.value,\n                  });\n                }}\n              >\n                無\n              </RadioButton>\n            </>\n          ),\n        },\n        {\n          label: '勤労学生',\n          key: 'custom3',\n          field: () => <CheckBox>該当する</CheckBox>,\n        },\n      ],\n    },\n    [\n      {\n        label: '備考欄',\n        key: 'note',\n        field: { factor: 'text-area' },\n      },\n    ],\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n\n  return (\n    <PropsListForm\n      blocks={blocks}\n      width={{ label: number('width.label', 10) }}\n      readOnly={boolean('readOnly', false)}\n      onChange={(values) => {\n        setValues(values as Values);\n      }}\n      values={values}\n      errors={{\n        name: ['姓名は必須です。'],\n        displayName: [],\n        number: [],\n        age: [],\n        entryDate: [],\n        custom1: [],\n        custom2: [],\n        custom3: [],\n        phoneNumber: [],\n        note: ['備考欄は200文字以内で入力してください。'],\n      }}\n      {...commonKnobs()}\n    />\n  );\n};\n\n/**\n * フィールドを固定のカラムで表示したい場合は二次元配列で定義します。<br>\n * 以下のように定義することで、縦一列のフォームが表示されます。<br>\n *\n * ```tsx\n * blocks={[\n *   [\n *     {\n *       label: 'item1',\n *       key: 'item1',\n *       field: { factor: 'text' },\n *     },\n *   ],\n *   [\n *     {\n *       label: 'item2',\n *       key: 'item2',\n *       field: { factor: 'text' },\n *     },\n *   ],\n *   [\n *     {\n *       label: 'item3',\n *       key: 'item3',\n *       field: { factor: 'text' },\n *     },\n *   ],\n * ]}\n * ```\n */\nexport const OneColumnFixedLengthBlock = () => {\n  const values = {\n    item1: 'value1',\n    item2: 'value2',\n    item3: 'value3',\n  };\n  type Values = typeof values;\n  const blocks = [\n    [\n      {\n        label: 'item1',\n        key: 'item1',\n        field: { factor: 'text' },\n      },\n    ],\n    [\n      {\n        label: 'item2',\n        key: 'item2',\n        field: { factor: 'text' },\n      },\n    ],\n    [\n      {\n        label: 'item3',\n        key: 'item3',\n        field: { factor: 'text' },\n      },\n    ],\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n\n  return (\n    <PropsListForm blocks={blocks} readOnly={false} values={values as Values} />\n  );\n};\n\n/**\n * 縦2列で表示したい場合は以下のように定義します。\n *\n * ```tsx\n * blocks={[\n *   [\n *     {\n *       label: 'item1',\n *       key: 'item1',\n *       field: { factor: 'text' },\n *     },\n *     {\n *       label: 'item2',\n *       key: 'item2',\n *       field: { factor: 'text' },\n *     },\n *   ],\n *   [\n *     {\n *       label: 'item3',\n *       key: 'item3',\n *       field: { factor: 'text' },\n *     },\n *     {\n *       label: 'item4',\n *       key: 'item4',\n *       field: { factor: 'text' },\n *     },\n *   ],\n * ]}\n * ```\n */\nexport const TwoColumnFixedLengthBlock = () => {\n  const values = {\n    item1: 'value1',\n    item2: 'value2',\n    item3: 'value3',\n    item4: 'value4',\n  };\n  type Values = typeof values;\n  const blocks = [\n    [\n      {\n        label: 'item1',\n        key: 'item1',\n        field: { factor: 'text' },\n      },\n      {\n        label: 'item2',\n        key: 'item2',\n        field: { factor: 'text' },\n      },\n    ],\n    [\n      {\n        label: 'item3',\n        key: 'item3',\n        field: { factor: 'text' },\n      },\n      {\n        label: 'item4',\n        key: 'item4',\n        field: { factor: 'text' },\n      },\n    ],\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n\n  return (\n    <PropsListForm blocks={blocks} readOnly={false} values={values as Values} />\n  );\n};\n\n/**\n * 指定したカラム数で折り返したい場合は、numberOfColumnsとdefinitionsを使用して定義します。<br>\n * numberOfColumnsは折り返すカラム数を表し、definitionsはフィールドの定義を配列で指定します。<br>\n * この方法は、項目を条件に応じて出し分けたい場合に有効です。<br>\n *\n * ```tsx\n * blocks={[{\n *   numberOfColumns: 2,\n *   definitions: [\n *     {\n *       label: 'item1',\n *       key: 'item1',\n *       field: { factor: 'text' },\n *     },\n *     {\n *       label: 'item2',\n *       key: 'item2',\n *       field: { factor: 'text' },\n *     },\n *     {\n *       label: 'item3',\n *       key: 'item3',\n *       field: { factor: 'text' },\n *     },\n *   ],\n * }]}\n * ```\n */\nexport const VariableLengthBlock = () => {\n  const values = {\n    item1: 'value1',\n    item2: 'value2',\n    item3: 'value3',\n  };\n  const blocks = [\n    {\n      numberOfColumns: 2,\n      definitions: [\n        {\n          label: 'item1',\n          key: 'item1',\n          field: { factor: 'text' },\n        },\n        {\n          label: 'item2',\n          key: 'item2',\n          field: { factor: 'text' },\n        },\n        {\n          label: 'item3',\n          key: 'item3',\n          field: { factor: 'text' },\n        },\n      ],\n    },\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n  type Values = typeof values;\n\n  return (\n    <PropsListForm blocks={blocks} readOnly={false} values={values as Values} />\n  );\n};\n\n/**\n * 項目の定義は以下が指定できます。<br>\n *\n * - `label`: 項目名を表すラベルです。\n * - `key`: ユニークな識別子です。\n * - `required`: 必須項目であることを示します。trueの場合、必須ラベルが表示されます。\n * - `help`: ヘルプメッセージです。文字列または関数を指定できます。関数の場合、readOnlyが引数として渡されます。\n * - `annotation`:  項目の説明です。文字列または関数を指定できます。関数の場合、readOnlyが引数として渡されます。\n * - `field`: フィールドの定義です。[フィールドの種別](#field-factors)をfactorで指定します。[カスタムフィールド](#custom-field)を指定する場合は関数を指定します。\n * - `readOnlyValue`:  読み取り専用の値です。readOnlyがtrueの場合に表示されます。指定されていない場合はvalueの値がそのまま表示されます。文字列または関数を指定できます。関数の場合、valueが引数として渡されます。[readOnlyの例](#read-only)を参照してください。\n *\n * ```tsx\n * blocks={[\n *   [\n *     {\n *       label: '姓名',\n *       key: 'name',\n *       required: true,\n *       help: ({ readOnly }) => (readOnly ? null : '書類等で使用されます。'),\n *       annotation: ({ readOnly }) =>\n *         readOnly ? null : '姓と名の間は空白を入れないでください。',\n *       field: { factor: 'text' },\n *     },\n *   ],\n * ]}\n * ```\n */\nexport const Item = () => {\n  const values = {\n    name: '',\n  };\n  type Values = typeof values;\n  const blocks = [\n    [\n      {\n        label: '姓名',\n        key: 'name',\n        required: true,\n        help: ({ readOnly }) => (readOnly ? null : '書類等で使用されます。'),\n        annotation: ({ readOnly }) =>\n          readOnly ? null : '姓と名の間は空白を入れないでください。',\n        field: { factor: 'text' },\n      },\n    ],\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n\n  return (\n    <PropsListForm\n      blocks={blocks}\n      width={{ label: number('width.label', 8) }}\n      readOnly={false}\n      values={values as Values}\n      {...commonKnobs()}\n    />\n  );\n};\n\n/**\n * フィールドごとのfactorは以下のいずれかを指定できます。<br>\n * また、onChangeが指定されている場合は共通のonChangeが無視され、onBlurが指定されている場合は共通のonBlurが無視されます。<br>\n *\n * - `text`: TextFieldのpropsを指定できます。<br>\n * - `text-area`: TextAreaのpropsを指定できます。<br>\n * - `number`: DigitsInputのpropsを指定できます。<br>\n * - `date`: DateInputのpropsを指定できます。<br>\n * - `numeral-code`: NumeralCodeInputのpropsを指定できます。<br>\n * - `read-only-text`: ReadOnlyFieldのpropsを指定できます。<br>\n *\n * TextFieldのpropsをoptionとして指定したtextフィールドの例\n *\n * ```tsx\n * field: {\n *   factor: 'text',\n *   placeholder: 'placeholder',\n *   maxLength: 10,\n *   onChange: (e) => {\n *     console.log(e.target.value);\n * },\n * ```\n *\n * カスタムフィールドを指定したい場合は[カスタムフィールド](#custom-field)を参照してください。\n *\n */\nexport const FieldFactors = () => {\n  const [values, setValues] = React.useState({\n    text: '',\n    text_area: '',\n    number: 0,\n    date: '',\n    numeral_code: '',\n    read_only_text: '',\n    custom_field: '',\n  });\n  type Values = typeof values;\n  const blocks = [\n    [\n      {\n        label: 'text',\n        key: 'text',\n        field: {\n          factor: 'text',\n        },\n      },\n    ],\n    [\n      {\n        label: 'text-area',\n        key: 'text_area',\n        field: {\n          factor: 'text-area',\n        },\n      },\n    ],\n    [\n      {\n        label: 'number',\n        key: 'number',\n        field: {\n          factor: 'number',\n        },\n      },\n    ],\n    [\n      {\n        label: 'date',\n        key: 'date',\n        field: {\n          factor: 'date',\n        },\n      },\n    ],\n    [\n      {\n        label: 'numeral-code',\n        key: 'numeral_code',\n        field: {\n          factor: 'numeral-code',\n        },\n      },\n    ],\n    [\n      {\n        label: 'read-only-text',\n        key: 'read_only_text',\n        field: {\n          factor: 'read-only-text',\n        },\n      },\n    ],\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n\n  return (\n    <PropsListForm\n      blocks={blocks}\n      width={{ label: number('width.label', 10) }}\n      readOnly={boolean('readOnly', false)}\n      onChange={(values) => {\n        setValues(values as Values);\n      }}\n      values={values}\n      {...commonKnobs()}\n    />\n  );\n};\n\n/**\n * カスタムフィールドを指定したい場合はfieldにReactNodeを返す関数を渡してください。<br>\n * idとvalueが引数として渡されます。<br>\n * PropsListFormの共通のonChange、onBlurは無視されます。<br>\n *\n * ```tsx\n * field: ({ id, value }) => <SelectBox id={id} value={String(value)} />\n * ```\n */\nexport const CustomField = () => {\n  const [values, setValues] = React.useState({\n    custom_field: '',\n  });\n  type Values = typeof values;\n  const blocks = [\n    [\n      {\n        label: 'custom field',\n        key: 'custom_field',\n        field: ({ id, value }) => <SelectBox id={id} value={String(value)} />,\n      },\n    ],\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n\n  return (\n    <PropsListForm\n      blocks={blocks}\n      width={{ label: number('width.label', 10) }}\n      readOnly={boolean('readOnly', false)}\n      onChange={(values) => {\n        setValues(values as Values);\n      }}\n      values={values}\n      {...commonKnobs()}\n    />\n  );\n};\n\n/**\n * readOnlyにtrueを指定すると全てのフィールドが読み取り専用になります。<br>\n * fieldごとのreadOnlyValueは省略することができます。<br>\n * readOnlyValueはstring、ReactNodeを指定できます。<br>\n * readOnlyValueが指定されていない場合は、valueがそのまま表示されます。<br>\n * 以下のstoryのコードを参考にしてください。\n */\nexport const ReadOnly = () => {\n  const values = {\n    name: 'freee会計',\n    is_sales: true,\n    tags: [1, 2],\n    modified_employee: null,\n  };\n  type Values = typeof values;\n  const blocks = [\n    [\n      {\n        label: '商品名',\n        key: 'name',\n        field: { factor: 'text' },\n        help: ({ readOnly }) => (readOnly ? null : 'フィールド1のヘルプ'),\n        annotation: ({ readOnly }) => (readOnly ? null : 'フィールド1の注釈'),\n      },\n    ],\n    [\n      {\n        label: '販売で利用',\n        key: 'is_sales',\n        readOnlyValue: '利用する',\n        field: { factor: 'text' },\n      },\n    ],\n    [\n      {\n        label: '会計品目タグ',\n        key: 'tags',\n        readOnlyValue: () => (\n          <>\n            <MiniTag mr={0.5}>タグ1</MiniTag>\n            <MiniTag mr={0.5}>タグ2</MiniTag>\n          </>\n        ),\n        field: { factor: 'text' },\n      },\n    ],\n    [\n      {\n        label: '最終更新者',\n        key: 'modified_employee',\n        field: { factor: 'text' },\n      },\n    ],\n  ] as React.ComponentProps<typeof PropsListForm>['blocks'];\n\n  return (\n    <PropsListForm\n      blocks={blocks}\n      width={{ label: number('width.label', 8) }}\n      readOnly={true}\n      values={values as Values}\n      errors={{ modified_employee: ['従業員の取得に失敗しました'] }}\n      {...commonKnobs()}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/propsListForm/PropsListForm.tsx",
    "content": "import * as React from 'react';\nimport TextField from '../../lv1/forms/TextField';\nimport DigitsInput from '../formFields/DigitsInput';\nimport DateInput from '../formFields/DateInput';\nimport TextArea from '../../lv1/forms/TextArea';\nimport FormControlLabel from '../../lv1/forms/FormControlLabel';\nimport NumeralCodeInput from '../formFields/NumeralCodeInput';\nimport MessageIcon from '../../lv2/messageIcon/MessageIcon';\nimport { MarginBase, ReadOnlyField } from '../../lv1';\nimport Note from '../../lv1/typography/Note';\nimport { RequiredIcon } from '../../lv1/icons/RequiredIcon';\nimport WithDescriptionContent from '../../lv1/layout/WithDescriptionContent';\nimport useUniqueId from '../../hooks/useUniqueId';\n\ntype Values = {\n  [key: string]: string | number | boolean | object | null;\n};\n\ntype FixedLengthBlock<T> =\n  | [PropsListFormFieldDefinition<T>]\n  | [PropsListFormFieldDefinition<T>, PropsListFormFieldDefinition<T>];\n\ntype VariableLengthBlock<T> = {\n  numberOfColumns: number;\n  definitions: Array<PropsListFormFieldDefinition<T>>;\n};\n\ntype Errors<T extends Values> = Partial<Record<keyof T, string[]>>;\n\ntype Props<T extends Values> = {\n  /**\n   * フィールドの定義です。\n   */\n  blocks: Array<FixedLengthBlock<T> | VariableLengthBlock<T>>;\n  /**\n   * labelの幅(rem)を指定します。\n   * @default { label: 8 }\n   */\n  width?: { label?: number };\n  /**\n   * readOnlyがtrueの場合、入力フィールドを表示しません。\n   * @default false\n   */\n  readOnly: boolean;\n  /**\n   * 共通のonChangeイベントハンドラーです。\n   * fieldのonChangeイベントハンドラーが指定されていた場合は実行されません。\n   * `(values) => { console.log(values) }`\n   */\n  onChange?: (values: T) => void;\n  /**\n   * 共通のonBlurイベントハンドラーです。<br>\n   * fieldのonBlurイベントハンドラーが指定されていた場合は実行されません。<br>\n   * `(values) => { console.log(values) }`\n   */\n  onBlur?: (values: T) => void;\n  /**\n   * フィールドの値です。<br>\n   * keyにはdefinitionのkeyを指定します。\n   */\n  values: T;\n  /**\n   * エラーの内容です。<br>\n   * keyにはdefinitionのkeyを指定します。\n   */\n  errors?: Errors<T>;\n};\n\nexport type PropsListFormFieldDefinition<T> = {\n  label: string;\n  key: keyof T;\n  help?:\n    | ((options: { readOnly: boolean }) => React.ReactNode)\n    | React.ReactNode;\n  readOnlyValue?:\n    | ((options: { value: T[keyof T] }) => React.ReactNode)\n    | React.ReactNode;\n  field?: PropsListFormFieldType<T[keyof T]>;\n  annotation?:\n    | ((options: { readOnly: boolean }) => React.ReactNode)\n    | React.ReactNode;\n  required?: boolean;\n};\n\ntype OmitProps<T> = Omit<T, 'value'>;\ntype TextFieldProps = OmitProps<React.ComponentProps<typeof TextField>>;\ntype TextAreaProps = OmitProps<React.ComponentProps<typeof TextArea>>;\ntype NumberFieldProps = OmitProps<React.ComponentProps<typeof DigitsInput>>;\ntype DateFieldProps = OmitProps<React.ComponentProps<typeof DateInput>>;\ntype NumeralCodeInputProps = OmitProps<\n  React.ComponentProps<typeof NumeralCodeInput>\n>;\ntype ReadOnlyFieldProps = OmitProps<React.ComponentProps<typeof ReadOnlyField>>;\n\nexport type PropsListFormFieldType<V> =\n  | ({ factor: 'text' } & TextFieldProps)\n  | ({ factor: 'text-area' } & TextAreaProps)\n  | ({ factor: 'number' } & NumberFieldProps)\n  | ({ factor: 'date' } & DateFieldProps)\n  | ({ factor: 'numeral-code' } & NumeralCodeInputProps)\n  | ({ factor: 'read-only-text' } & ReadOnlyFieldProps)\n  | ((options: { id: string; value: V }) => React.ReactNode);\n\n/**\n * フォームの定義をすることでフォームの一覧表示をすることができるコンポーネントです。<br>\n * DescriptionListとデザイン面で大きく異なるのは2カラム以上で表示することができ、一画面で多くの項目を表示できる点です。\n */\nconst PropsListForm = <T extends Values>(props: Props<T>) => {\n  const { blocks, ...rest } = props;\n\n  return (\n    <dl className=\"vb-propListForm__list--wrap\">\n      {blocks.map((block, i) => (\n        <DLBlock block={block} {...rest} key={i} />\n      ))}\n    </dl>\n  );\n};\n\nconst Item = <T extends Values>({\n  definition,\n  itemWidth,\n  itemMarginRight,\n  ...rest\n}: {\n  definition: PropsListFormFieldDefinition<T>;\n  itemWidth: string;\n  itemMarginRight: number;\n  values: T;\n  errors?: Errors<T>;\n  readOnly: boolean;\n} & FieldProps) => {\n  const { values, errors, readOnly, width } = rest;\n  const value = values[definition.key];\n  const id = useUniqueId('vb-propListForm__form');\n  const readOnlyValue =\n    typeof definition.readOnlyValue === 'function' ? (\n      definition.readOnlyValue({ value })\n    ) : typeof definition.readOnlyValue === 'string' ? (\n      <ReadOnlyField valueText={definition.readOnlyValue} />\n    ) : (\n      definition.readOnlyValue\n    );\n  const field =\n    readOnly && readOnlyValue ? (\n      readOnlyValue\n    ) : readOnly ? (\n      <ReadOnlyField valueText={value != null ? String(value) : undefined} />\n    ) : (\n      createField(definition, rest, id)\n    );\n  const fieldErrors = (errors?.[definition.key] || []) as string[];\n  const annotation =\n    typeof definition.annotation === 'function'\n      ? definition.annotation({ readOnly })\n      : definition.annotation;\n  const help =\n    typeof definition.help === 'function'\n      ? definition.help({ readOnly })\n      : definition.help;\n\n  return (\n    <div\n      className=\"vb-propListForm__item\"\n      style={{\n        width: itemWidth,\n        marginRight: `${itemMarginRight}rem`,\n      }}\n    >\n      <dt\n        className=\"vb-propListForm__term\"\n        style={{\n          maxWidth: `${width?.label || 8}rem`,\n          minWidth: `${width?.label || 8}rem`,\n        }}\n      >\n        <MarginBase mb={0.25} mt={0.25}>\n          <span className=\"vb-propListForm__termInner\">\n            <FormControlLabel htmlFor={id}>\n              <span className=\"vb-propListForm__termLabel\">\n                {definition.label}\n                {(definition.required || help) && (\n                  <span className=\"vb-propListForm__termIcons\">\n                    {!readOnly && definition.required && (\n                      <RequiredIcon ml={0.5} />\n                    )}\n                    {help && (\n                      <MessageIcon label=\"ヘルプ\" ml={0.25} small>\n                        {help}\n                      </MessageIcon>\n                    )}\n                  </span>\n                )}\n              </span>\n            </FormControlLabel>\n          </span>\n        </MarginBase>\n      </dt>\n      <dd className=\"vb-propListForm__description\">\n        <MarginBase mb={0.25} mt={0.25}>\n          <div className=\"vb-propListForm__descriptionInner\">\n            <WithDescriptionContent\n              renderContent={() => (\n                <div className=\"vb-propListForm__field\">\n                  {field}\n                  {fieldErrors.length > 0 && (\n                    <ErrorMessageIcon errors={fieldErrors || []} />\n                  )}\n                </div>\n              )}\n              renderDescriptionContent={() =>\n                annotation && <Note>{annotation}</Note>\n              }\n            />\n          </div>\n        </MarginBase>\n      </dd>\n    </div>\n  );\n};\n\nconst DLBlock = <T extends Values>({\n  block,\n  ...rest\n}: {\n  block: FixedLengthBlock<T> | VariableLengthBlock<T>;\n  values: T;\n  errors?: Errors<T>;\n  readOnly: boolean;\n} & FieldProps) => {\n  if (Array.isArray(block)) {\n    return (\n      <>\n        {block.map((definition, i) => (\n          <Item\n            key={i}\n            definition={definition}\n            itemWidth={`calc((100% - ${1.5 * (block.length - 1)}rem)/${\n              block.length\n            })`}\n            itemMarginRight={i + 1 === block.length ? 0 : 1.5}\n            {...rest}\n          />\n        ))}\n      </>\n    );\n  } else {\n    const { definitions, numberOfColumns } = block;\n\n    return (\n      <>\n        {definitions.map((definition, i) => (\n          <Item\n            key={i}\n            definition={definition}\n            itemWidth={`calc((100% - ${\n              1.5 * (numberOfColumns - 1)\n            }rem)/${numberOfColumns})`}\n            itemMarginRight={(i + 1) % numberOfColumns === 0 ? 0 : 1.5}\n            {...rest}\n          />\n        ))}\n      </>\n    );\n  }\n};\n\ntype FieldProps = {\n  /* 列の幅を rem で指定 */\n  width?: { label?: number };\n};\n\nconst ErrorMessageIcon = ({\n  errors,\n}: {\n  errors: string[];\n}): React.ReactElement | null => {\n  return (\n    <MessageIcon error label=\"エラー\" ml={0.5}>\n      {errors.map((error, i) => {\n        return (\n          <li key={i} style={{ listStyle: 'none' }}>\n            {error}\n          </li>\n        );\n      })}\n    </MessageIcon>\n  );\n};\n\nconst createField = <T extends Values>(\n  { label, key, field = { factor: 'text' } }: PropsListFormFieldDefinition<T>,\n  props: Omit<Props<T>, 'blocks'>,\n  id: string\n) => {\n  const { values, errors } = props;\n  const options = {\n    id: id,\n    error: errors && ((errors[key] || []) as string[]).length > 0,\n    commonOnChange: (value: string | number | null) => {\n      const newValues = { ...values, [key]: value };\n      props.onChange && props.onChange(newValues);\n    },\n    commonOnBlur: (value: string | number | null) => {\n      const newValues = { ...values, [key]: value };\n      props.onBlur && props.onBlur(newValues);\n    },\n    label: label,\n  };\n\n  // フィールドの型指定がシンプルな型名だけの処理\n  if (typeof field === 'object') {\n    switch (field.factor) {\n      case 'text':\n        return createTextField(key, values, { ...field, ...options });\n      case 'text-area':\n        return createTextArea(key, values, { ...field, ...options });\n      case 'number':\n        return createNumberField(key, values, { ...field, ...options });\n      case 'date':\n        return createDateField(key, values, { ...field, ...options });\n      case 'read-only-text':\n        return <ReadOnlyField valueText={String(values[key])} {...field} />;\n      case 'numeral-code':\n        return createNumeralCodeField(key, values, { ...field, ...options });\n    }\n  } else if (typeof field === 'function') {\n    return field({ id: id, value: values[key] });\n  }\n};\n\nconst createTextField = <T extends Values>(\n  key: keyof T,\n  values: T,\n  options?: TextFieldProps & {\n    factor: 'text';\n    commonOnChange: (value: string) => void;\n  }\n) => (\n  <TextField\n    {...options}\n    value={(values[key] || '') + ''}\n    onChange={\n      options?.onChange\n        ? options?.onChange\n        : (e) => options?.commonOnChange(e.target.value)\n    }\n  />\n);\n\nconst createTextArea = <T extends Values>(\n  key: keyof T,\n  values: T,\n  options?: TextAreaProps & {\n    commonOnChange: (value: string) => void;\n  }\n) => (\n  <TextArea\n    {...options}\n    width={options?.width || 'small'}\n    value={(values[key] || '') + ''}\n    autoResize={true}\n    onChange={\n      options?.onChange\n        ? options?.onChange\n        : (e) =>\n            options?.commonOnChange && options?.commonOnChange(e.target.value)\n    }\n  />\n);\n\nconst createNumberField = <T extends Values>(\n  key: keyof T,\n  values: T,\n  options?: NumberFieldProps & {\n    commonOnChange?: (value: number | null) => void;\n  }\n) => (\n  <DigitsInput\n    {...options}\n    value={+values[key]}\n    onChange={options?.onChange ? options?.onChange : options?.commonOnChange}\n  />\n);\n\nconst createDateField = <T extends Values>(\n  key: keyof T,\n  values: T,\n  options?: DateFieldProps & {\n    commonOnChange: (value: string) => void;\n    commonOnBlur: (value: string) => void;\n  }\n) => (\n  <DateInput\n    {...options}\n    value={(values[key] || '') + ''}\n    onChange={\n      options?.onChange ? options?.onChange : (e) => options?.commonOnChange(e)\n    }\n    onBlur={\n      options?.onBlur\n        ? options?.onBlur\n        : (e) => options?.commonOnBlur((e.target as HTMLInputElement).value)\n    }\n  />\n);\n\nconst createNumeralCodeField = <T extends Values>(\n  key: keyof T,\n  values: T,\n  options?: NumeralCodeInputProps & {\n    commonOnChange?: (value: number | null) => void;\n  }\n) => (\n  <NumeralCodeInput\n    {...options}\n    value={(values[key] || '') + ''}\n    onChange={\n      options?.onChange\n        ? options?.onChange\n        : (v) => {\n            if (!options?.commonOnChange) return;\n            if (v !== '') return options?.commonOnChange(Number(v));\n            options?.commonOnChange(null);\n          }\n    }\n  />\n);\n\nexport default PropsListForm;\n"
  },
  {
    "path": "src/lv2/scrimCoveredContent/ScrimCoveredContent.stories.tsx",
    "content": "import * as React from 'react';\nimport { boolean, text } from '@storybook/addon-knobs';\n\nimport ScrimCoveredContent from './ScrimCoveredContent';\nimport Button from '../../lv1/buttons/Button';\nimport SectionTitle from '../../lv1/typography/SectionTitle';\nimport TextField from '../../lv1/forms/TextField';\nimport FormControl from '../formControl/FormControl';\nimport { commonKnobs } from '../../../stories';\n\nconst LOREM =\n  'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';\n\nexport default {\n  component: ScrimCoveredContent,\n};\n\nexport const WithKnobs = () => (\n  <ScrimCoveredContent\n    inline={boolean('inline', false)}\n    message={text('message', 'このコンテンツは利用できません')}\n    {...commonKnobs()}\n  >\n    {LOREM}\n  </ScrimCoveredContent>\n);\n\nexport const IsInline = () => (\n  <ScrimCoveredContent message=\"このコンテンツは利用できません\" inline>\n    <SectionTitle>タイトル</SectionTitle>\n    <FormControl>\n      <TextField disabled />\n      <Button ml={1} disabled>\n        Submit\n      </Button>\n    </FormControl>\n  </ScrimCoveredContent>\n);\n"
  },
  {
    "path": "src/lv2/scrimCoveredContent/ScrimCoveredContent.tsx",
    "content": "import * as React from 'react';\nimport { CommonProps, pickCommonProps } from '../../utilities/commonProps';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport styled from 'styled-components';\nimport { OverlayZIndex } from '../../constants';\nimport { CommonStyle } from '../../internal/CommonStyle';\n\ntype Props = {\n  children: React.ReactNode;\n  inline?: boolean;\n  message?: React.ReactNode;\n} & CommonProps;\n\nconst Style = styled(CommonStyle).attrs(({ inline }: { inline?: boolean }) => ({\n  inline,\n  as: 'div',\n}))`\n  position: relative;\n  ${({ inline }) => ({ display: inline ? 'inline-block' : 'block' })}\n\n  .vb-scrimCoveredContent__cover {\n    z-index: ${OverlayZIndex};\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-color: rgba(255, 255, 255, 0.7);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    backdrop-filter: blur(0.1rem);\n  }\n`;\n\n/**\n * 非活性なコンテンツにメッセージ付きのスクリムを被せるコンポーネント\n */\nconst ScrimCoveredContent: React.FC<Props> = ({\n  children,\n  inline,\n  message,\n  ...props\n}: Props) => (\n  <Style inline={inline} {...pickCommonProps(props)}>\n    <div className=\"vb-scrimCoveredContent__cover\">\n      {message && <Paragraph>{message}</Paragraph>}\n    </div>\n    {children}\n  </Style>\n);\n\nexport default ScrimCoveredContent;\n"
  },
  {
    "path": "src/lv2/selectableButton/SelectableButton.stories.tsx",
    "content": "import * as React from 'react';\nimport { commonKnobs } from '../../../stories';\nimport SelectableButton from './SelectableButton';\nimport { HStack } from '../..';\n\nexport default {\n  component: SelectableButton,\n};\n\nexport const Base = () => {\n  const [selected, setSelected] = React.useState(0);\n  return (\n    <HStack>\n      <SelectableButton\n        label=\"デフォルト\"\n        selected={selected === 0}\n        onClick={() => setSelected(0)}\n        {...commonKnobs()}\n      />\n      <SelectableButton\n        label=\"システムビュー\"\n        selected={selected === 1}\n        onClick={() => setSelected(1)}\n        {...commonKnobs()}\n      />\n      <SelectableButton\n        label=\"バッジ付き\"\n        selected={selected === 2}\n        onClick={() => setSelected(2)}\n        badge={3}\n        {...commonKnobs()}\n      />\n      <SelectableButton\n        label=\"カスタムビュー\"\n        selected={selected === 3}\n        onClick={() => setSelected(3)}\n        dropdownContents={[\n          {\n            text: 'ビューを更新',\n            type: 'selectable',\n            onClick: () => {\n              // no-op\n            },\n          },\n          {\n            text: 'ビューの名前を変更',\n            type: 'selectable',\n            onClick: () => {\n              // no-op\n            },\n          },\n          {\n            text: 'ビューをコピー',\n            type: 'selectable',\n            onClick: () => {\n              // no-op\n            },\n          },\n          {\n            text: 'ビューを削除',\n            type: 'selectable',\n            onClick: () => {\n              // no-op\n            },\n          },\n        ]}\n        {...commonKnobs()}\n      />\n    </HStack>\n  );\n};\n"
  },
  {
    "path": "src/lv2/selectableButton/SelectableButton.tsx",
    "content": "import * as React from 'react';\nimport { MdArrowDropDown } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { WithDropdown } from '..';\nimport { DropdownContent } from '../dropdown/types';\n\ntype Props = {\n  /**\n   * ボタンの選択状態を指定します。\n   * The selection state of the button.\n   */\n  selected?: boolean;\n  /**\n   * ボタン内に表示するラベルを指定します。\n   * The label of the button.\n   */\n  label: string;\n  /**\n   * ボタンを押下したときの処理を指定します。\n   * The handler when the button is clicked.\n   */\n  onClick?: () => void;\n  /**\n   * 選択中のボタンを再選択したときに表示するドロップダウンの内容を指定します。\n   * 指定を行わない場合、ドロップダウンは表示されず、通常のボタンのように動作します。\n   * The contents of the dropdown to be displayed when the selected button is reselected.\n   * If not specified, the dropdown will not be displayed and will behave like a normal button.\n   */\n  dropdownContents?: DropdownContent[];\n  /**\n   * バッジに表示する数値を指定します。\n   * 0を指定した場合はバッジは表示されません。\n   * The number to be displayed in the badge.\n   * If 0 is specified, the badge will not be displayed.\n   */\n  badge?: number;\n} & CommonProps;\n\n/**\n * 選択中に再度選択するとドロップダウンを表示できるボタンです。\n */\nconst SelectableButton: React.FC<Props> = ({\n  selected,\n  label,\n  onClick,\n  dropdownContents,\n  badge,\n  ...props\n}: Props) => {\n  const baseClass = 'vb-selectableButton';\n\n  return (\n    <span {...commonProps(props, baseClass)}>\n      {dropdownContents && dropdownContents.length > 0 ? (\n        <WithDropdown\n          disabled={!selected}\n          dropdownContents={dropdownContents}\n          renderButton={(popupId, isOpen, controlRef) => (\n            <button\n              className={`${baseClass}__button ${selected ? 'active' : ''}`}\n              onClick={onClick}\n              aria-controls={popupId}\n              aria-expanded={isOpen}\n              ref={controlRef as React.RefObject<HTMLButtonElement>}\n            >\n              <span className={`${baseClass}__label`}>{label}</span>\n              {badge != null && badge > 0 && (\n                <span className={`${baseClass}__badge`}>{badge}</span>\n              )}\n              {selected && (\n                <MdArrowDropDown className={`${baseClass}__icon `} />\n              )}\n            </button>\n          )}\n        />\n      ) : (\n        <button\n          className={`${baseClass}__button ${selected ? 'active' : ''}`}\n          onClick={onClick}\n        >\n          <span className={`${baseClass}__label`}>{label}</span>\n          {badge != null && badge > 0 && (\n            <span className={`${baseClass}__badge`}>{badge}</span>\n          )}\n        </button>\n      )}\n    </span>\n  );\n};\n\nexport default SelectableButton;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonBlock.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { SkeletonBlock } from './SkeletonBlock';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: SkeletonBlock,\n};\nexport const SkeletonBlockComponent = () => (\n  <SkeletonBlock\n    size={select(\n      'size',\n      {\n        small: 'small',\n        medium: 'medium',\n        large: 'large',\n      },\n      'medium',\n      'SkeletonBlock'\n    )}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonBlock.tsx",
    "content": "import * as React from 'react';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * サイズを指定します\n   */\n  size?: 'small' | 'medium' | 'large';\n} & CommonProps;\n\nconst getWidth = (size: 'small' | 'medium' | 'large' = 'medium') => {\n  switch (size) {\n    case 'small':\n      return 4;\n    case 'medium':\n      return 7.5;\n    case 'large':\n      return 11;\n  }\n};\n\nconst getHeight = (size: 'small' | 'medium' | 'large' = 'medium') => {\n  switch (size) {\n    case 'small':\n      return 1.5;\n    case 'medium':\n      return 2.25;\n    case 'large':\n      return 3;\n  }\n};\n\n/**\n * ボタンやフォームのフィールドなど用のスケルトンイメージのコンポーネントです\n * This component provides skeleton images for buttons, form fields, and so on.\n */\nexport const SkeletonBlock: React.FC<Props> = (props) => (\n  <div\n    {...commonProps(props, 'vb-skeltonBlock', {\n      small: props.size === 'small',\n      large: props.size === 'large',\n    })}\n  >\n    <SkeletonBase width={getWidth(props.size)} height={getHeight(props.size)} />\n  </div>\n);\n\n/**\n * @deprecated SkeletonBlock を使ってください。 Use SkeletonBlock instead.\n */\nexport const SkeltonBlock = SkeletonBlock;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonCircle.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { SkeletonCircle } from './SkeletonCircle';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: SkeletonCircle,\n};\nexport const SkeletonCircleComponent = () => (\n  <SkeletonCircle\n    size={select(\n      'size',\n      {\n        small: 'small',\n        medium: 'medium',\n        large: 'large',\n        xlarge: 'xlarge',\n      },\n      'medium',\n      'SkeletonCircle'\n    )}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonCircle.tsx",
    "content": "import * as React from 'react';\nimport ContentLoader from 'react-content-loader';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\nimport { convertRemToPixel } from '../../utilities/convertRemToPixel';\n\ntype Props = {\n  /**\n   * サイズを指定します\n   */\n  size?: 'small' | 'medium' | 'large' | 'xlarge';\n} & CommonProps;\n\nconst getLength = (\n  size: 'small' | 'medium' | 'large' | 'xlarge' = 'medium'\n) => {\n  switch (size) {\n    case 'small':\n      return 0.75;\n    case 'medium':\n      return 1;\n    case 'large':\n      return 1.5;\n    case 'xlarge':\n      return 3;\n  }\n};\n\n/**\n * ユーザーアバターなど、円形で表示されるUIパーツ用のスケルトンイメージのコンポーネントです。\n * This component provides a skeleton image of circular UI parts such as user avaters.\n */\nexport const SkeletonCircle: React.FC<Props> = (props) => {\n  const lengthPixel = convertRemToPixel(getLength(props.size));\n\n  return (\n    <div\n      {...commonProps(props, 'vb-skeltonCircle', {\n        small: props.size === 'small',\n        large: props.size === 'large',\n        xlarge: props.size === 'xlarge',\n      })}\n    >\n      <ContentLoader\n        speed={1}\n        width={lengthPixel * 2}\n        height={lengthPixel * 2}\n        viewBox={`0 0 ${lengthPixel * 2} ${lengthPixel * 2}`}\n        backgroundColor=\"rgba(212,212,212,0.3)\" // #FFFFFF 上で #F2F2F2\n        foregroundColor=\"rgba(188,188,188,0.3)\" // #FFFFFF 上で #ebebeb\n      >\n        <circle cx={lengthPixel} cy={lengthPixel} r={lengthPixel} />\n      </ContentLoader>\n    </div>\n  );\n};\n\n/**\n * @deprecated SkeletonCircle を使ってください。 Use SkeletonCircle instead.\n */\nexport const SkeltonCircle = SkeletonCircle;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonDescriptionList.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { number } from '@storybook/addon-knobs';\nimport { SkeletonDescriptionList } from './SkeletonDescriptionList';\n\nexport default {\n  component: SkeletonDescriptionList,\n};\n\nexport const SkeletonDescriptionListComponent = () => (\n  <SkeletonDescriptionList\n    rowCount={number('rowCount', 3, undefined, 'SkeletonDescriptionList')}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonDescriptionList.tsx",
    "content": "import React from 'react';\nimport DescriptionList from '../descriptionList/DescriptionList';\nimport { SkeletonParagraph } from './SkeletonParagraph';\nimport { CommonProps } from '../../utilities';\n\ntype Props = {\n  /**\n   * 行数を指定します。デフォルトは３です。\n   */\n  rowCount?: number;\n} & CommonProps;\n\n/**\n * ローディング中の DescriptionList を表現するために使います\n * This component provides a skeleton image of DescriptionList.\n */\nexport const SkeletonDescriptionList: React.FC<Props> = (props) => {\n  const { rowCount = 3, ...commonProps } = props;\n\n  return (\n    <DescriptionList\n      listContents={Array(rowCount).fill({\n        title: <SkeletonParagraph size=\"small\" />,\n        value: <SkeletonParagraph size=\"medium\" />,\n      })}\n      {...commonProps}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonIcon.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { SkeletonIcon } from './SkeletonIcon';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: SkeletonIcon,\n};\nexport const SkeletonIconComponent = () => (\n  <SkeletonIcon\n    size={select(\n      'size',\n      {\n        small: 'small',\n        medium: 'medium',\n        large: 'large',\n      },\n      'medium',\n      'SkeletonIcon'\n    )}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonIcon.tsx",
    "content": "import * as React from 'react';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * サイズを指定します\n   */\n  size?: 'small' | 'medium' | 'large';\n} & CommonProps;\n\nconst getLength = (size: 'small' | 'medium' | 'large' = 'medium') => {\n  switch (size) {\n    case 'small':\n      return 1.5;\n    case 'medium':\n      return 2;\n    case 'large':\n      return 3;\n  }\n};\n\n/**\n * アイコン用のスケルトンイメージのコンポーネントです。\n * This component provides a skeleton image of icons.\n */\nexport const SkeletonIcon: React.FC<Props> = (props) => (\n  <div\n    {...commonProps(props, 'vb-skeltonIcon', {\n      small: props.size === 'small',\n      large: props.size === 'large',\n    })}\n  >\n    <SkeletonBase\n      width={getLength(props.size)}\n      height={getLength(props.size)}\n    />\n  </div>\n);\n\n/**\n * @deprecated SkeletonIcon を使ってください。 Use SkeletonIcon instead.\n */\nexport const SkeltonIcon = SkeletonIcon;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonInput.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport {\n  FormControl,\n  Paragraph,\n  SectionTitle,\n  SkeletonInput,\n  Stack,\n  TextField,\n} from '../../';\n\nexport default {\n  component: SkeletonInput,\n};\n\nexport const SkeletonInputComponent = () => (\n  <SkeletonInput {...commonKnobs()} />\n);\n\nconst value =\n  'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus scelerisque viverra ex ac finibus.';\n\nexport const SizeComparison = () => (\n  <>\n    <Stack gap={1}>\n      <SectionTitle>{'<SkeletonInput small width={*} />'}</SectionTitle>\n      <Stack direction=\"horizontal\" gap={1}>\n        <FormControl label=\"xSmall\">\n          <SkeletonInput small width=\"xSmall\" />\n        </FormControl>\n        <FormControl label=\"small\">\n          <SkeletonInput small width=\"small\" />\n        </FormControl>\n        <FormControl label=\"medium\">\n          <SkeletonInput small />\n        </FormControl>\n        <FormControl label=\"large\">\n          <SkeletonInput small width=\"large\" />\n        </FormControl>\n      </Stack>\n      <Stack direction=\"horizontal\" gap={1}>\n        <TextField value={value} small width=\"xSmall\" />\n        <TextField value={value} small width=\"small\" />\n        <TextField value={value} small />\n        <TextField value={value} small width=\"large\" />\n      </Stack>\n      <SectionTitle>{'<SkeletonInput width={*} />'}</SectionTitle>\n      <Stack direction=\"horizontal\" gap={1}>\n        <FormControl label=\"xSmall\">\n          <SkeletonInput width=\"xSmall\" />\n        </FormControl>\n        <FormControl label=\"small\">\n          <SkeletonInput width=\"small\" />\n        </FormControl>\n        <FormControl label=\"medium\">\n          <SkeletonInput />\n        </FormControl>\n        <FormControl label=\"large\">\n          <SkeletonInput width=\"large\" />\n        </FormControl>\n      </Stack>\n      <Stack direction=\"horizontal\" gap={1}>\n        <TextField value={value} width=\"xSmall\" />\n        <TextField value={value} width=\"small\" />\n        <TextField value={value} />\n        <TextField value={value} width=\"large\" />\n      </Stack>\n      <SectionTitle>{'<SkeletonInput large width={*} />'}</SectionTitle>\n      <Stack direction=\"horizontal\" gap={1}>\n        <FormControl label=\"xSmall\">\n          <SkeletonInput large width=\"xSmall\" />\n        </FormControl>\n        <FormControl label=\"small\">\n          <SkeletonInput large width=\"small\" />\n        </FormControl>\n        <FormControl label=\"medium\">\n          <SkeletonInput large />\n        </FormControl>\n        <FormControl label=\"large\">\n          <SkeletonInput large width=\"large\" />\n        </FormControl>\n      </Stack>\n      <Stack direction=\"horizontal\" gap={1}>\n        <TextField value={value} large width=\"xSmall\" />\n        <TextField value={value} large width=\"small\" />\n        <TextField value={value} large />\n        <TextField value={value} large width=\"large\" />\n      </Stack>\n      <SectionTitle>{'<SkeletonInput width=\"full\" />'}</SectionTitle>\n    </Stack>\n    {/* Stack children does not expand to 100% width  */}\n    <Paragraph mt={1}>\n      <SkeletonInput small width=\"full\" />\n    </Paragraph>\n    <Paragraph mt={1}>\n      <SkeletonInput width=\"full\" />\n    </Paragraph>\n    <Paragraph mt={1}>\n      <SkeletonInput large width=\"full\" />\n    </Paragraph>\n  </>\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonInput.tsx",
    "content": "import * as React from 'react';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\nimport { TextFieldWidth } from '../../lv1/forms/TextField';\n\ntype Props = {\n  /**\n   * Makes the height smaller /サイズを小さくします\n   */\n  small?: boolean;\n  /**\n   * Makes the height larger / サイズを大きくします\n   */\n  large?: boolean;\n  /**\n   * Changes the width / 幅を指定します\n   *\n   * - xSmall: 4rem (64px)\n   * - small: 7rem (112px)\n   * - medium (default): 11rem (176px)\n   * - large: 24rem (384px)\n   * - full: 100%\n   */\n  width?: TextFieldWidth;\n} & CommonProps;\n\nconst widthMap = { xSmall: 2, small: 4, medium: 7, large: 16, full: 12 };\n\n/**\n * TextField 等のスケルトンイメージのコンポーネントです。\n * Skeleton image component for TextField related components.\n */\nexport const SkeletonInput: React.FC<Props> = (props) => {\n  const { small, large, width } = props;\n\n  return (\n    <span\n      {...commonProps(props, 'vb-skeletonInput', {\n        small,\n        large,\n        widthXSmall: width === 'xSmall',\n        widthSmall: width === 'small',\n        widthMedium: width === 'medium' || !width,\n        widthLarge: width === 'large',\n        widthFull: width === 'full',\n      })}\n    >\n      <SkeletonBase\n        width={widthMap[width || 'medium']}\n        height={small ? 0.75 : large ? 1.5 : 1}\n      />\n    </span>\n  );\n};\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonListTable.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { number } from '@storybook/addon-knobs';\nimport { SkeletonListTable } from './SkeletonListTable';\nimport { SkeletonRectangle } from './SkeletonRectangle';\nimport { SkeletonCircle } from './SkeletonCircle';\nimport { SkeletonIcon } from './SkeletonIcon';\n\nexport default {\n  component: SkeletonListTable,\n};\n\nexport const SkeletonListTableComponent = () => (\n  <SkeletonListTable\n    columnCount={number('columnCount', 5, undefined, 'SkeletonListTable')}\n    rowCount={number('rowCount', 3, undefined, 'SkeletonListTable')}\n    {...commonKnobs()}\n  />\n);\n\nexport const CustomSkeletonComponents = () => (\n  <SkeletonListTable\n    rowCells={[\n      { value: <SkeletonRectangle /> },\n      { value: <SkeletonCircle /> },\n      { value: <SkeletonIcon /> },\n    ]}\n  />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonListTable.tsx",
    "content": "import React from 'react';\nimport ListTable, { TableCell } from '../listTable/ListTable';\nimport { SkeletonParagraph } from './SkeletonParagraph';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport { CommonProps } from '../../utilities';\n\ntype Props = {\n  /**\n   * 列数を指定します。デフォルトは５です。\n   */\n  columnCount?: number;\n  /**\n   * 行数を指定します。デフォルトは３です。\n   */\n  rowCount?: number;\n  /**\n   * 各行に表示するコンポーネント等を指定します。\n   * デフォルトでは、１列目に `SkeletonParagraph` の `\"medium\"`サイズが、２列目以降には `SkeletonParagraph` の `\"small\"` サイズが表示されます。\n   */\n  rowCells?: Array<TableCell>;\n} & CommonProps;\n\n/**\n * ローディング中のテーブルを表現するために使います\n * This component provides a skeleton image of ListTable.\n */\nexport const SkeletonListTable: React.FC<Props> = (props) => {\n  const { columnCount = 5, rowCount = 3, rowCells, ...commonProps } = props;\n  const numberOfColumns = rowCells?.length || columnCount;\n\n  return (\n    <ListTable\n      headers={Array(numberOfColumns).fill({\n        value: <SkeletonBase width={3} height={0.75} />,\n      })}\n      rows={Array(rowCount).fill({\n        cells: rowCells\n          ? rowCells\n          : Array(numberOfColumns)\n              .fill(1)\n              .map((_, i) => ({\n                value: (\n                  <SkeletonParagraph size={i === 0 ? 'medium' : 'small'} />\n                ),\n              })),\n      })}\n      {...commonProps}\n    />\n  );\n};\n\n/**\n * @deprecated SkeletonListTable を使ってください。 Use SkeletonListTable instead.\n */\nexport const SkeltonListTable = SkeletonListTable;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonPageTitle.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { SkeletonPageTitle } from './SkeletonPageTitle';\n\nexport default {\n  component: SkeletonPageTitle,\n};\n\nexport const SkeletonPageTitleComponent = () => (\n  <SkeletonPageTitle {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonPageTitle.tsx",
    "content": "import * as React from 'react';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\n\n/**\n * PageTitle用のスケルトンイメージのコンポーネントです。\n * This component provides a skeleton image of PageTitle component.\n */\nexport const SkeletonPageTitle: React.FC<CommonProps> = (props) => (\n  <div {...commonProps(props, 'vb-skeltonPageTitle')}>\n    <SkeletonBase width={12} height={1.5} />\n  </div>\n);\n\n/**\n * @deprecated SkeletonPageTitle を使ってください。 Use SkeletonPageTitle instead.\n */\nexport const SkeltonPageTitle = SkeletonPageTitle;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonParagraph.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { select } from '@storybook/addon-knobs';\nimport { SkeletonParagraph } from './SkeletonParagraph';\n\nexport default {\n  component: SkeletonParagraph,\n};\nexport const SkeletonParagraphComponent = () => (\n  <SkeletonParagraph\n    size={select(\n      'size',\n      {\n        small: 'small',\n        medium: 'medium',\n        large: 'large',\n      },\n      'medium',\n      'SkeletonParagraph'\n    )}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonParagraph.tsx",
    "content": "import * as React from 'react';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * サイズを指定します\n   */\n  size?: 'small' | 'medium' | 'large';\n} & CommonProps;\n\nconst getWidth = (size: 'small' | 'medium' | 'large' = 'medium') => {\n  switch (size) {\n    case 'small':\n      return 6;\n    case 'medium':\n      return 11;\n    case 'large':\n      return 24;\n  }\n};\n/**\n * Paragraph用のスケルトンイメージのコンポーネントです。\n * This component provides a skeleton image of Paragraph component.\n */\nexport const SkeletonParagraph: React.FC<Props> = (props) => (\n  <div {...commonProps(props, 'vb-skeltonParagraph')}>\n    <SkeletonBase width={getWidth(props.size)} height={0.875} />\n  </div>\n);\n\n/**\n * @deprecated SkeletonParagraph を使ってください。 Use SkeletonParagraph instead.\n */\nexport const SkeltonParagraph = SkeletonParagraph;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonRectangle.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { SkeletonRectangle } from './SkeletonRectangle';\nimport { select } from '@storybook/addon-knobs';\n\nexport default {\n  component: SkeletonRectangle,\n};\nexport const SkeletonRectangleComponent = () => (\n  <SkeletonRectangle\n    size={select(\n      'size',\n      {\n        default: 'default',\n        large: 'large',\n      },\n      'default',\n      'SkeletonRectangle'\n    )}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonRectangle.tsx",
    "content": "import * as React from 'react';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * サイズを指定します\n   */\n  size?: 'default' | 'large';\n} & CommonProps;\n\nconst getWidth = (size: 'default' | 'large' = 'default') => {\n  switch (size) {\n    case 'default':\n      return 5;\n    case 'large':\n      return 18;\n  }\n};\n\n/**\n * 画像サムネイルなど、大きめの正方形・長方形用のスケルトンイメージのコンポーネントです。\n * This component provides a skeleton images for larger squares or rectangles, such as image thumbnails.\n */\nexport const SkeletonRectangle: React.FC<Props> = (props) => (\n  <div {...commonProps(props, 'vb-skeltonRectangle')}>\n    <SkeletonBase width={getWidth(props.size)} height={5} />\n  </div>\n);\n\n/**\n * @deprecated SkeletonRectangle を使ってください。 Use SkeletonRectangle instead.\n */\nexport const SkeltonRectangle = SkeletonRectangle;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonSectionTitle.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { commonKnobs } from '../../../stories';\nimport { SkeletonSectionTitle } from './SkeletonSectionTitle';\n\nexport default {\n  component: SkeletonSectionTitle,\n};\nexport const SkeletonSectionTitleComponent = () => (\n  <SkeletonSectionTitle {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonSectionTitle.tsx",
    "content": "import * as React from 'react';\nimport { SkeletonBase } from '../../lv1/skeleton/SkeletonBase';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\n\n/**\n * SectionTitle用のスケルトンイメージのコンポーネントです。\n * This component provides a skeleton image of SectionTitle component.\n */\nexport const SkeletonSectionTitle: React.FC<CommonProps> = (props) => (\n  <div {...commonProps(props, 'vb-skeltonSectionTitle')}>\n    <SkeletonBase width={9} height={1} />\n  </div>\n);\n\n/**\n * @deprecated SkeletonSectionTitle を使ってください。 Use SkeletonSectionTitle instead.\n */\nexport const SkeltonSectionTitle = SkeletonSectionTitle;\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonStackedBarChart.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { SkeletonStackedBarChart } from '../skeleton/SkeletonStackedBarChart';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: SkeletonStackedBarChart,\n};\n\nexport const SkeletonStackedBarChartComponent = () => (\n  <SkeletonStackedBarChart {...commonKnobs()} />\n);\n"
  },
  {
    "path": "src/lv2/skeleton/SkeletonStackedBarChart.tsx",
    "content": "import * as React from 'react';\nimport ContentLoader from 'react-content-loader';\nimport { CommonProps } from '../../utilities';\nimport commonProps from '../../utilities/commonProps';\n\ntype Props = CommonProps;\n\nexport const SkeletonStackedBarChart: React.FC<Props> = (props) => {\n  const width = '100%';\n  const height = '0.875rem';\n\n  return (\n    <div {...commonProps(props, 'vb-skeletonStackedBarChart')}>\n      <ContentLoader\n        speed={1}\n        width={width}\n        height={height}\n        viewBox={`0 0 ${width} ${height}`}\n        backgroundColor=\"rgba(212,212,212,0.3)\" // #FFFFFF 上で #F2F2F2\n        foregroundColor=\"rgba(188,188,188,0.3)\" // #FFFFFF 上で #ebebeb\n      >\n        <rect x=\"0\" y=\"0\" rx=\"4\" ry=\"4\" width={width} height={height} />\n      </ContentLoader>\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv2/stackedBarChart/StackedBarChart.stories.tsx",
    "content": "import * as React from 'react';\nimport { action } from '@storybook/addon-actions';\n\nimport { StackedBarChart } from './StackedBarChart';\nimport { Paragraph } from '../../lv1';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: StackedBarChart,\n};\n\nconst colors = ['RE', 'OR', 'YE', 'YG', 'GR', 'BG', 'PU', 'GY'] as const;\nconst items = colors.map((color, i) => ({\n  label: color,\n  value: (100 / colors.length) * (i + 1),\n  valueLabel: `${(i + 1) * 10}個`,\n  color: color,\n}));\n\nexport const StackedBarChartComponent = () => (\n  <StackedBarChart\n    items={items}\n    onClickItem={action('onClickItem')}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithLongLabelItem = () => (\n  <>\n    <Paragraph mb={1}>ラベルが長い項目は省略されます。</Paragraph>\n    <StackedBarChart\n      items={[\n        {\n          label:\n            'ラベルが長い項目は省略されますラベルが長い項目は省略されますラベルが長い項目は省略されます',\n          value: 30,\n          valueLabel: '30%',\n          color: 'RE',\n        },\n        {\n          label: '別の項目',\n          value: 70,\n          valueLabel: '70%',\n          color: 'OR',\n        },\n      ]}\n      onClickItem={action('onClickItem')}\n    />\n  </>\n);\n\nexport const WithTooSmallValueItem = () => (\n  <>\n    <Paragraph mb={1}>\n      非情に小さな値をもつ項目であっても消失しないように、一定の幅で表示されます。それ以外の項目には残った領域が割り当てられます。\n    </Paragraph>\n    <StackedBarChart\n      items={[\n        {\n          label: '非情に小さな値をもつ項目であっても、一定の幅で表示されます',\n          value: 1,\n          valueLabel: '1%',\n          color: 'RE',\n        },\n        {\n          label: 'それ以外の項目には残った領域が割り当てられます',\n          value: 29,\n          valueLabel: '29%',\n          color: 'OR',\n        },\n        {\n          label: 'それ以外の項目には残った領域が割り当てられます',\n          value: 70,\n          valueLabel: '70%',\n          color: 'YE',\n        },\n      ]}\n      onClickItem={action('onClickItem')}\n    />\n    <Paragraph mb={1} mt={2}>\n      ただし、項目の値が 0（すなわち割合が 0\n      ％）の場合は、項目は表示されません。\n    </Paragraph>\n    <StackedBarChart\n      items={[\n        {\n          label: '項目の値が 0 の場合は非表示になります',\n          value: 0,\n          valueLabel: '0%',\n          color: 'RE',\n        },\n        {\n          label: 'それ以外の項目には残った領域が割り当てられます',\n          value: 30,\n          valueLabel: '30%',\n          color: 'OR',\n        },\n        {\n          label: '項目の値が 0 の場合は非表示になります',\n          value: 0,\n          valueLabel: '0%',\n          color: 'RE',\n        },\n        {\n          label: 'それ以外の項目には残った領域が割り当てられます',\n          value: 70,\n          valueLabel: '70%',\n          color: 'YE',\n        },\n        {\n          label: '項目の値が 0 の場合は非表示になります',\n          value: 0,\n          valueLabel: '0%',\n          color: 'RE',\n        },\n      ]}\n      onClickItem={action('onClickItem')}\n    />\n  </>\n);\n\nexport const TooManyItems = () => {\n  const tooManyItems = items.concat(items, items, items);\n  return (\n    <>\n      <Paragraph mb={1}>\n        親要素の幅に対して項目の数が多すぎる場合、項目が溢れることがあります。そのため、\n        最小幅の 3.375rem × 項目数\n        が親要素の幅よりも小さくなることを保証する必要があります。\n      </Paragraph>\n      <StackedBarChart\n        items={tooManyItems}\n        onClickItem={action('onClickItem')}\n      />\n    </>\n  );\n};\n"
  },
  {
    "path": "src/lv2/stackedBarChart/StackedBarChart.tsx",
    "content": "import * as React from 'react';\nimport { CommonProps } from '../../utilities';\nimport WithBalloon from '../withBalloon/WithBalloon';\nimport commonProps from '../../utilities/commonProps';\nimport vbClassNames from '../../utilities/vbClassNames';\n\nexport type StackedBarChartItem = {\n  color: 'RE' | 'OR' | 'YE' | 'YG' | 'GR' | 'BG' | 'PU' | 'GY';\n  /**\n   * 項目名\n   */\n  label: string;\n  /**\n   * 項目の値。各項目の値の比率に基づいて項目の幅を決定します\n   */\n  value: number;\n  /**\n   * 実際に表示される項目の値のラベル。例えば「100名」など\n   */\n  valueLabel: string;\n};\n\ntype Props = {\n  items: Array<StackedBarChartItem>;\n  /**\n   * 項目のクリック時に呼び出されるコールバック\n   * @param index クリックされた item の index\n   */\n  onClickItem: (index: number) => void;\n} & CommonProps;\n\n/**\n * 与えられた各項目の構成比を、項目の幅によって視覚的に示す帯グラフ。\n * - コンポーネントの振る舞い\n *   - 割合が 0 の項目は表示されません。\n *   - 表示されている項目はクリッカブルで、クリックすることができます。\n *   - 親要素の幅に対して項目の数が多すぎる場合、項目が溢れることがあります。そのため、最小幅の 3.375rem × 項目数が親要素の幅よりも小さくなることを保証する必要があります。\n * - コンポーネントの使用方針\n *   - 全体量に対する割合がある項目を視覚化、フィルターとして利用したい時に使用してください。\n *   - このコンポーネントを使用する場合は、このコンポーネント以外にすべての項目を網羅して表示させることのできるフィルターを同画面内に配置してください。\n *     - Tab や SelectBox など、表示されるものを切り替えられるもの\n *     - 割合が 0 の場合などに、このコンポーネントのみだとありうる項目を網羅して表示させることができないため\n *   - 項目がクリックされフィルタリングされる際は、項目の詳細コンテンツを表示してください。\n *     - 割合が少ない場合、StackedBarChart 内では項目表記が省略されるので視認性観点でも代わりに説明できる手段を残してください。\n *   - 最終的に StackedBarChart を使用するにあたって同画面内に必要なパーツ\n *     - ありうる項目を網羅するフィルターUI（Tab や SelectBox）\n *     - フィルターUIや StackedBarChart の項目をクリックすることで表示される詳細コンテンツ\n */\nexport const StackedBarChart: React.FC<Props> = (props) => {\n  const { items, onClickItem, ...others } = props;\n  const sum = items.reduce((acc, item) => acc + item.value, 0);\n\n  // 割合が 0 の項目は非表示\n  const visibleItems = React.useMemo(\n    () =>\n      items.flatMap((item, i) => {\n        const proportion = sum > 0 ? item.value / sum : 0;\n\n        if (proportion === 0) {\n          return [];\n        }\n\n        return {\n          ...item,\n          proportion,\n          originalIndex: i,\n        };\n      }),\n    [items, sum]\n  );\n\n  const baseClass = 'vb-stackedBarChart';\n\n  return (\n    <ul {...commonProps(others, `${baseClass}__container`)}>\n      {visibleItems.map((item, i) => {\n        const isFirst = i === 0;\n        const isLast = i === visibleItems.length - 1;\n\n        const classModifier = {\n          first: isFirst,\n          last: isLast,\n          RE: item.color === 'RE',\n          OR: item.color === 'OR',\n          YE: item.color === 'YE',\n          YG: item.color === 'YG',\n          GR: item.color === 'GR',\n          BG: item.color === 'BG',\n          PU: item.color === 'PU',\n          GY: item.color === 'GY',\n        };\n\n        return (\n          <li\n            className={`${baseClass}__item`}\n            key={i}\n            style={{\n              // ある幅以上の大きさで、割合に応じて幅を伸縮させる\n              minWidth: '3.375rem',\n              width: `calc(100% * ${item.proportion})`,\n              flexGrow: item.proportion,\n            }}\n          >\n            <WithBalloon\n              renderBalloonContent={() => `${item.label} ${item.valueLabel}`}\n              renderContent={() => (\n                <button\n                  className={vbClassNames(`${baseClass}__item__button`, {\n                    modifier: classModifier,\n                  })}\n                  onClick={() => onClickItem(item.originalIndex)}\n                >\n                  {`${item.label} ${item.valueLabel}`}\n                </button>\n              )}\n            />\n          </li>\n        );\n      })}\n    </ul>\n  );\n};\n"
  },
  {
    "path": "src/lv2/statusSelector/StatusSelector.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport { commonKnobs } from '../../../stories';\nimport StatusSelector from './StatusSelector';\nimport { DropdownContent } from '../dropdown/types';\n\nexport default {\n  component: StatusSelector,\n};\n\nconst dropdownContents: DropdownContent[] = [\n  {\n    type: 'selectable',\n    text: '完了',\n    onClick: action('onClick-done'),\n  },\n  {\n    type: 'selectable',\n    text: '進行中',\n    onClick: action('onClick-success'),\n  },\n  {\n    type: 'selectable',\n    text: '却下',\n    onClick: action('onClick-warning'),\n  },\n];\n\nexport const StatusSelectorComponent = () => (\n  <StatusSelector\n    dropdownContents={dropdownContents}\n    disabled={boolean('disabled', false, 'StatusSelector')}\n    type={\n      select(\n        'Type',\n        [\n          '',\n          'done',\n          'success',\n          'progress',\n          'required',\n          'disabled',\n          'emphasis',\n          'warning',\n          'error',\n        ],\n        '',\n        'StatusSelector'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text('Children', 'ラベル', 'StatusSelectorComponent')}\n  </StatusSelector>\n);\n\nexport const Samples = () => (\n  <div>\n    <StatusSelector\n      type=\"done\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      done\n    </StatusSelector>\n    <StatusSelector\n      type=\"success\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      success\n    </StatusSelector>\n    <StatusSelector\n      type=\"progress\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      progress\n    </StatusSelector>\n    <StatusSelector\n      type=\"required\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      required\n    </StatusSelector>\n    <StatusSelector\n      type=\"disabled\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      disabled\n    </StatusSelector>\n    <StatusSelector\n      type=\"emphasis\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      emphasis\n    </StatusSelector>\n    <StatusSelector\n      type=\"warning\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      warning\n    </StatusSelector>\n    <StatusSelector\n      type=\"error\"\n      dropdownContents={dropdownContents}\n      marginRight\n      marginBottom\n    >\n      error\n    </StatusSelector>\n  </div>\n);\n"
  },
  {
    "path": "src/lv2/statusSelector/StatusSelector.tsx",
    "content": "import * as React from 'react';\nimport { StatusType } from '../../lv1/icons/StatusIcon';\nimport WithDropdown from '../withDropdown/WithDropdown';\nimport { DropdownContent } from '../dropdown/types';\nimport { MdArrowDropDown } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { MarginClassProps } from '../../utilities/marginClasses';\n\ntype Props = {\n  children?: React.ReactNode;\n  /**\n   * color type を指定します\n   */\n  type?: StatusType;\n  /**\n   * ドロップダウンで選択するステータスを指定します\n   */\n  dropdownContents: DropdownContent[];\n  /**\n   * ドロップダウン選択を disabled に設定します\n   */\n  disabled?: boolean;\n} & MarginClassProps &\n  CommonProps;\n\n/**\n * StatusIconをクリッカブルにし、ドロップダウンから選択してステータスを切り替えられるようにしたコンポーネントです。\n *\n * 用途や type の使い分けについては StatusIcon の doc を参照してください。\n */\nconst StatusSelector: React.FC<Props> = (props: Props) => {\n  const {\n    dropdownContents,\n    disabled,\n    children,\n    type,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n\n  const statusSelectorBaseClass = 'vb-statusSelector';\n\n  const camelCase = (str: string) => {\n    const s = str.charAt(0).toLowerCase() + str.slice(1);\n    return s.replace(/[-_](.)/g, (_, group1) => group1.toUpperCase());\n  };\n\n  const classModifier = [\n    'done',\n    'success',\n    'progress',\n    'required',\n    'disabled',\n    'emphasis',\n    'warning',\n    'error',\n  ].reduce(\n    (acm, mod) => ({ ...acm, [camelCase(`type_${mod}`)]: type === mod }),\n    {\n      disabled,\n    }\n  );\n\n  return (\n    <WithDropdown\n      dropdownContents={dropdownContents}\n      disabled={disabled}\n      renderButton={(dropdownId, isOpen, buttonRef) => (\n        <button\n          {...commonProps(props, statusSelectorBaseClass, classModifier, {\n            marginBottom,\n            marginLeft,\n            marginRight,\n            marginTop,\n            marginSize,\n          })}\n          aria-disabled={disabled}\n          aria-haspopup={true}\n          aria-controls={dropdownId}\n          aria-expanded={isOpen}\n          ref={buttonRef as React.RefObject<HTMLButtonElement>}\n        >\n          {children}\n          <MdArrowDropDown\n            className={`${statusSelectorBaseClass}__dropdownIcon`}\n          />\n        </button>\n      )}\n    />\n  );\n};\nexport default StatusSelector;\n"
  },
  {
    "path": "src/lv2/stepper/Stepper.stories.tsx",
    "content": "import * as React from 'react';\n\nimport Stepper from './Stepper';\nimport { number, boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: Stepper,\n};\n\nexport const StepperComponent = () => (\n  <Stepper\n    steps={['step1', 'step2', 'step3', 'step4', 'step5']}\n    currentStepIndex={number(\n      'currentStepIndex',\n      2,\n      { min: 0, max: 4 },\n      'Stepper'\n    )}\n    disabledStepIndex={[3, 4]}\n    small={boolean('small', false, 'Stepper')}\n    {...commonKnobs()}\n  />\n);\n\nexport const Small = () => (\n  <Stepper\n    steps={['step1', 'step2', 'step3', 'step4', 'step5']}\n    currentStepIndex={2}\n    disabledStepIndex={[3, 4]}\n    small\n    {...commonKnobs()}\n  />\n);\n\nexport const StepperWithReactNode = () => (\n  <Stepper\n    steps={[\n      <>\n        長いと\n        <br />\n        改行したく\n        <br />\n        なる\n      </>,\n      <>\n        ちょっと\n        <br />\n        <strong>強調</strong>\n        <br />\n        してみる\n      </>,\n      'step3',\n      'step4',\n      'step5',\n    ]}\n    currentStepIndex={number(\n      'currentStepIndex',\n      2,\n      { min: 0, max: 4 },\n      'Stepper'\n    )}\n    disabledStepIndex={[3, 4]}\n    small={boolean('small', false, 'Stepper')}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/stepper/Stepper.tsx",
    "content": "import * as React from 'react';\nimport { Stack, StepNumber, Text } from '../../lv1';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  currentStepIndex: number;\n  disabledStepIndex: Array<number>;\n  small?: boolean;\n  steps: Array<React.ReactNode>;\n} & CommonProps;\n\nconst Stepper: React.FC<Props> = (props: Props) => {\n  const { steps, currentStepIndex, disabledStepIndex, small } = props;\n  const stepperBaseClass = 'vb-stepper';\n\n  return (\n    <ul {...commonProps(props, stepperBaseClass, { small })}>\n      {steps.map((name, i) => (\n        <li key={i} className={`${stepperBaseClass}__listItem`}>\n          <div className={`${stepperBaseClass}__listContent`}>\n            <Stack\n              direction=\"vertical\"\n              gap={small ? 0.25 : 0.5}\n              alignItems=\"center\"\n            >\n              <StepNumber\n                number={(i + 1).toString()}\n                current={currentStepIndex === i}\n                done={currentStepIndex > i}\n                small={small}\n                disabled={disabledStepIndex.includes(i)}\n              />\n              <Text color={currentStepIndex === i ? 'P5' : 'S9'} size={0.75}>\n                {name}\n              </Text>\n            </Stack>\n          </div>\n        </li>\n      ))}\n    </ul>\n  );\n};\n\nexport default Stepper;\n"
  },
  {
    "path": "src/lv2/stepper/VerticalSteps.stories.tsx",
    "content": "import * as React from 'react';\nimport { select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { VerticalSteps } from './VerticalSteps';\nimport {\n  Button,\n  Paragraph,\n  HStack,\n  OptionButton,\n  RadioButton,\n  VStack,\n  TextField,\n  CheckBox,\n} from '../../lv1';\nimport { DescriptionList, FormattedTextField, FormControl } from '..';\n\nexport default {\n  component: VerticalSteps,\n};\n\nexport const StepperComponent = () => {\n  const [stepIndex, setStepIndex] = React.useState(0);\n  const [formValues, setFormValues] = React.useState({\n    paymentMethod: 'prepayment',\n    postalCode: '',\n    address: '',\n    name: '',\n    cool: false,\n  });\n  return (\n    <VerticalSteps\n      currentStepIndex={stepIndex}\n      stepHeadlineLevel={select(\n        'stepHeadlineLevel',\n        {\n          '1': 1,\n          '2': 2,\n          '3': 3,\n          '4': 4,\n          '5': 5,\n          '6': 6,\n          '-1': -1,\n          undefined: undefined,\n        },\n\n        undefined,\n        'VerticalSteps'\n      )}\n      steps={[\n        {\n          title: '料金の支払い方法を選んでください',\n          content: (\n            <>\n              <HStack>\n                <OptionButton\n                  size=\"large\"\n                  checked={formValues.paymentMethod === 'prepayment'}\n                >\n                  <RadioButton\n                    name=\"paymentMethod\"\n                    value=\"prepaid\"\n                    checked={formValues.paymentMethod === 'prepayment'}\n                    onChange={(e) =>\n                      e.target.checked &&\n                      setFormValues({\n                        ...formValues,\n                        paymentMethod: 'prepayment',\n                      })\n                    }\n                  >\n                    元払い\n                  </RadioButton>\n                </OptionButton>\n                <OptionButton\n                  size=\"large\"\n                  checked={formValues.paymentMethod === 'postpayment'}\n                >\n                  <RadioButton\n                    name=\"paymentMethod\"\n                    value=\"postpayment\"\n                    checked={formValues.paymentMethod === 'postpayment'}\n                    onChange={(e) =>\n                      e.target.checked &&\n                      setFormValues({\n                        ...formValues,\n                        paymentMethod: 'postpayment',\n                      })\n                    }\n                  >\n                    着払い\n                  </RadioButton>\n                </OptionButton>\n              </HStack>\n            </>\n          ),\n          contentSummary: (\n            <Paragraph>\n              {formValues.paymentMethod === 'postpayment' ? '着' : '元'}払い\n            </Paragraph>\n          ),\n          actions: (\n            <Button\n              appearance=\"primary\"\n              onClick={() => setStepIndex(stepIndex + 1)}\n            >\n              次へ\n            </Button>\n          ),\n        },\n        {\n          title: '送り先情報を入力してください',\n          content: (\n            <VStack>\n              <FormControl label=\"郵便番号\" fieldId=\"stepper-2-postal-code\">\n                <FormattedTextField\n                  preset=\"postalCode\"\n                  id=\"stepper-2-postal-code\"\n                  value={formValues.postalCode}\n                  onChange={(e) =>\n                    setFormValues({ ...formValues, postalCode: e.target.value })\n                  }\n                  autoComplete=\"postal-code\"\n                />\n              </FormControl>\n              <FormControl label=\"住所\" fieldId=\"stepper-2-address\">\n                <TextField\n                  id=\"stepper-2-address\"\n                  width=\"large\"\n                  value={formValues.address}\n                  onChange={(e) =>\n                    setFormValues({ ...formValues, address: e.target.value })\n                  }\n                  autoComplete=\"street-address\"\n                />\n              </FormControl>\n              <FormControl label=\"受取人\" fieldId=\"stepper-2-postal-code\">\n                <TextField\n                  id=\"stepper-2-postal-code\"\n                  width=\"large\"\n                  value={formValues.name}\n                  onChange={(e) =>\n                    setFormValues({ ...formValues, name: e.target.value })\n                  }\n                />\n              </FormControl>\n            </VStack>\n          ),\n          contentSummary: (\n            <>\n              {formValues.postalCode ? (\n                <Paragraph>〒{formValues.postalCode}</Paragraph>\n              ) : (\n                ''\n              )}\n              {formValues.address || formValues.name ? (\n                <Paragraph>\n                  {formValues.address} {formValues.name}\n                </Paragraph>\n              ) : (\n                ''\n              )}\n            </>\n          ),\n          actions: (\n            <HStack>\n              <Button\n                appearance=\"primary\"\n                onClick={() => setStepIndex(stepIndex + 1)}\n              >\n                次へ\n              </Button>\n              <Button onClick={() => setStepIndex(stepIndex - 1)}>戻る</Button>\n            </HStack>\n          ),\n        },\n        {\n          title: 'オプションを選択しましょう',\n          content: (\n            <OptionButton checked={formValues.cool} size=\"medium\">\n              <CheckBox\n                name=\"cool\"\n                checked={formValues.cool}\n                onChange={(e) =>\n                  setFormValues({ ...formValues, cool: e.target.checked })\n                }\n              >\n                クール便を使用する\n              </CheckBox>\n            </OptionButton>\n          ),\n          contentSummary: (\n            <>\n              {formValues.cool ? <Paragraph>クール便を使用する</Paragraph> : ''}\n            </>\n          ),\n          actions: (\n            <HStack>\n              <Button\n                appearance=\"primary\"\n                onClick={() => setStepIndex(stepIndex + 1)}\n              >\n                次へ\n              </Button>\n              <Button onClick={() => setStepIndex(stepIndex - 1)}>戻る</Button>\n            </HStack>\n          ),\n        },\n        {\n          title: '内容を確認して、送信しましょう',\n          content: (\n            <>\n              <DescriptionList\n                listContents={[\n                  {\n                    title: '支払い方法',\n                    value:\n                      formValues.paymentMethod === 'postpayment'\n                        ? '着払い'\n                        : '元払い',\n                  },\n                  {\n                    title: '送付先',\n                    value: (\n                      <>\n                        {formValues.postalCode ? (\n                          <Paragraph>〒{formValues.postalCode}</Paragraph>\n                        ) : (\n                          ''\n                        )}\n                        {formValues.address || formValues.name ? (\n                          <Paragraph>\n                            {formValues.address} {formValues.name}\n                          </Paragraph>\n                        ) : (\n                          ''\n                        )}\n                      </>\n                    ),\n                  },\n                  {\n                    title: 'オプション',\n                    value: formValues.cool ? 'クール便を使用する' : '',\n                  },\n                ]}\n              />\n            </>\n          ),\n          actions: (\n            <HStack>\n              <Button appearance=\"primary\">送信</Button>\n              <Button onClick={() => setStepIndex(stepIndex - 1)}>戻る</Button>\n            </HStack>\n          ),\n        },\n      ]}\n      {...commonKnobs()}\n    />\n  );\n};\n"
  },
  {
    "path": "src/lv2/stepper/VerticalSteps.tsx",
    "content": "import * as React from 'react';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport { StepNumber, VisuallyHidden } from '../../lv1';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype Props = {\n  /**\n   * 現在のステップの位置（0始まり）\n   */\n  currentStepIndex: number;\n  steps: {\n    /**\n     * ステップのタイトル\n     */\n    title: React.ReactNode;\n    /**\n     * ステップの内容。現在のステップの内容のみ表示されます。\n     */\n    content: React.ReactNode;\n    /**\n     * ステップから次へ進む/目に戻るアクションのボタン\n     */\n    actions?: React.ReactNode;\n    /**\n     * 以前のステップでのユーザーの入力内容のサマリー\n     */\n    contentSummary?: React.ReactNode;\n  }[];\n  /**\n   * ステップのタイトル部分の見出しレベル。`-1` にすると見出し要素ではなくなります。\n   */\n  stepHeadlineLevel?: 1 | 2 | 3 | 4 | 5 | 6 | -1;\n} & CommonProps;\n\n/**\n * ユーザーに手順を提示し、順番に沿って操作させるためのコンポーネントです。\n *\n * - 手順ごとに `title` `content` `contentSummary` `actions` を指定できます。\n *   - `title` は常に表示されます\n *   - `content` はステップの内容で、フォーム等を配置します。現在のステップのみ表示されます\n *   - `actions` はステップを完了する、または前のステップに戻るボタンを配置します。現在のステップにのみ表示されます。\n *   - `contentSummary` はステップでのユーザーの入力・選択内容の概要を表現します。通過したステップにのみ表示されます\n *     - `contentSummary` にはステップで入力・選択した結果のみを含め、インタラクティブなものを含めないでください\n * - 各ステップの `title` は見出しとなります。デフォルトの見出しレベルは2ですが、 `stepHeadlineLevel` により変更ができます\n *   - `-1` にすると、見出しではなくなります。\n */\nexport const VerticalSteps: React.FC<Props> = ({\n  currentStepIndex,\n  steps,\n  stepHeadlineLevel = 2,\n  ...props\n}) => {\n  const className = 'vb-verticalSteps';\n  const StepHeadlineTag =\n    stepHeadlineLevel === 1\n      ? 'h1'\n      : stepHeadlineLevel === 2\n      ? 'h2'\n      : stepHeadlineLevel === 3\n      ? 'h3'\n      : stepHeadlineLevel === 4\n      ? 'h4'\n      : stepHeadlineLevel === 5\n      ? 'h5'\n      : stepHeadlineLevel === 6\n      ? 'h6'\n      : 'div';\n  const uniqueId = useUniqueId(className);\n  const selfRef = React.useRef<HTMLDivElement>(null);\n  const renderedFlagRef = React.useRef(false);\n  const getStepTitleIdFromIndex = (index: number, uniqueId: string) =>\n    `${uniqueId}__title-${index + 1}`;\n  React.useEffect(() => {\n    if (renderedFlagRef.current && selfRef.current) {\n      const elm = selfRef.current.querySelector(\n        `#${getStepTitleIdFromIndex(currentStepIndex, uniqueId)}`\n      );\n      if (elm) {\n        (elm as HTMLElement).focus();\n      }\n    } else if (uniqueId) {\n      renderedFlagRef.current = true;\n    }\n  }, [currentStepIndex, uniqueId]);\n\n  return (\n    <div {...commonProps(props, className)} ref={selfRef} id={uniqueId}>\n      {steps.map(({ title, content, contentSummary, actions }, i) => (\n        <div key={i} className={`${className}__step`}>\n          {/* マークアップ都合でStepNumber部分を見出しに含められないため、aria-hiddenして、見出し側にVisuallyHiddenで番号を書いている */}\n          <div className={`${className}__number`} aria-hidden=\"true\">\n            <StepNumber\n              number={i + 1}\n              current={currentStepIndex === i}\n              done={i < currentStepIndex}\n            />\n          </div>\n          <StepHeadlineTag\n            className={`${className}__title${\n              i > currentStepIndex ? ` ${className}__title--future` : ''\n            }`}\n            id={getStepTitleIdFromIndex(i, uniqueId)}\n            tabIndex={-1}\n            aria-current={currentStepIndex === i ? 'step' : undefined}\n          >\n            <VisuallyHidden>{i + 1}</VisuallyHidden>\n            {title}\n          </StepHeadlineTag>\n          <div className={`${className}__content`}>\n            {i === currentStepIndex\n              ? content\n              : i < currentStepIndex\n              ? contentSummary\n              : ''}\n\n            {actions && i === currentStepIndex && (\n              <div className={`${className}__actions`}>{actions}</div>\n            )}\n          </div>\n        </div>\n      ))}\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv2/tabBar/TabBar.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\n\nimport TabBar from './TabBar';\nimport { commonKnobs } from '../../../stories';\nimport { select, boolean } from '@storybook/addon-knobs';\nimport Button from '../../lv1/buttons/Button';\nimport IconOnlyButton from '../../lv1/buttons/IconOnlyButton';\nimport { MdDelete, MdEdit } from 'react-icons/md';\nimport StatusIcon from '../../lv1/icons/StatusIcon';\n\nexport default {\n  component: TabBar,\n};\n\nexport const TabBarComponent = () => (\n  <TabBar\n    tabs={['tab1', 'tab2', 'tab3', 'tab4', 'tab5']}\n    currentTabIndex={select(\n      'currentTabIndex',\n      {\n        '0': 0,\n        '1': 1,\n        '2': 2,\n        '3': 3,\n        '4': 4,\n      },\n      3,\n      'TabBar'\n    )}\n    small={boolean('small', false, 'TabBar')}\n    onClickTab={action('tabclicked')}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithDataAttributes = () => (\n  <TabBar\n    tabs={['tab1', 'tab2', 'tab3', 'tab4', 'tab5'].map((name) => ({\n      name,\n      'data-guide': name,\n      'data-test': name,\n      'data-tracking': name,\n    }))}\n    currentTabIndex={3}\n    onClickTab={action('tabclicked')}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithDataAttributesAndReactElement = () => (\n  <TabBar\n    tabs={['tab1', 'tab2', 'tab3', 'tab4', 'tab5'].map((name) => ({\n      name: (\n        <>\n          {name}\n          <StatusIcon type=\"success\" marginLeft>\n            success\n          </StatusIcon>\n        </>\n      ),\n      'data-guide': name,\n      'data-test': name,\n      'data-tracking': name,\n    }))}\n    currentTabIndex={3}\n    onClickTab={action('tabclicked')}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithButtons = () => (\n  <TabBar\n    tabs={['tab1', 'tab2', 'tab3', 'tab4', 'tab5']}\n    currentTabIndex={3}\n    onClickTab={action('tabclicked')}\n    renderButtons={() => [\n      <Button key={0} appearance=\"tertiary\">\n        新規登録\n      </Button>,\n      <IconOnlyButton\n        label=\"編集\"\n        IconComponent={MdEdit}\n        key={1}\n        appearance=\"tertiary\"\n      />,\n      <IconOnlyButton\n        label=\"削除\"\n        IconComponent={MdDelete}\n        key={2}\n        appearance=\"tertiary\"\n      />,\n    ]}\n    {...commonKnobs()}\n  />\n);\n\nexport const WithNotifications = () => (\n  <TabBar\n    tabs={[\n      {\n        name: 'tab1',\n        notification: 'New message has arrived',\n      },\n      {\n        name: 'tab2',\n      },\n      {\n        name: 'tab3',\n        notification: 'New message has arrived',\n      },\n    ]}\n    currentTabIndex={1}\n    onClickTab={action('tabclicked')}\n    {...commonKnobs()}\n  />\n);\n"
  },
  {
    "path": "src/lv2/tabBar/TabBar.tsx",
    "content": "import * as React from 'react';\nimport Tab from '../../lv1/interactiveParts/Tab';\nimport { KeyCodes } from '../../utilities/keyboard';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport ButtonGroup from '../buttonGroup/ButtonGroup';\n\nexport type TabElement =\n  | string\n  | {\n      name: React.ReactNode;\n      notification?: string;\n      'data-guide'?: string;\n      'data-test'?: string;\n      'data-tracking'?: string;\n      'data-masking'?: boolean;\n    };\ntype Props = {\n  tabs: Array<TabElement>;\n  currentTabIndex: number;\n  small?: boolean;\n  onClickTab: (i: number) => void;\n  renderButtons?: () => React.ReactNode | React.ReactNodeArray;\n} & CommonProps;\n\nconst TabBar: React.FC<Props> = ({\n  currentTabIndex,\n  onClickTab,\n  small,\n  tabs,\n  renderButtons,\n  ...props\n}: Props) => {\n  const selfRef = React.useRef<HTMLDivElement>(null);\n  const [selectedTabIndex, setSelectedTabIndex] =\n    React.useState<number>(currentTabIndex);\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n    const focusableItems = selfRef.current\n      ? selfRef.current.querySelectorAll('.vb-tab')\n      : null;\n\n    if (!focusableItems) {\n      return;\n    }\n\n    switch (e.keyCode) {\n      case KeyCodes.LEFT: {\n        const newIndex =\n          (selectedTabIndex < 0 ? currentTabIndex : selectedTabIndex) - 1;\n        const newTab = focusableItems[newIndex];\n        if (newTab) {\n          setSelectedTabIndex(newIndex);\n          (newTab as HTMLButtonElement).focus();\n        }\n        break;\n      }\n      case KeyCodes.RIGHT: {\n        const newIndex =\n          (selectedTabIndex < 0 ? currentTabIndex : selectedTabIndex) + 1;\n\n        const newTab = focusableItems[newIndex];\n        if (newTab) {\n          setSelectedTabIndex(newIndex);\n          (newTab as HTMLButtonElement).focus();\n        }\n        break;\n      }\n      case KeyCodes.TAB: {\n        setSelectedTabIndex(currentTabIndex);\n        break;\n      }\n    }\n  };\n  const handleFocus = (e: React.FocusEvent<HTMLDivElement>): void => {\n    const focusableItems = selfRef.current\n      ? selfRef.current.querySelectorAll('.vb-tab')\n      : null;\n    if (focusableItems && e.target) {\n      const index = Array.prototype.indexOf.call(focusableItems, e.target);\n      if (index >= 0) {\n        setSelectedTabIndex(index);\n      }\n    }\n  };\n\n  return (\n    <div\n      onKeyDown={handleKeyDown}\n      onFocus={handleFocus}\n      role=\"tablist\"\n      tabIndex={-1}\n      {...commonProps(props, 'vb-tabBar')}\n      ref={selfRef}\n    >\n      <div>\n        {tabs.map((tab: TabElement, i: number) => (\n          <Tab\n            key={i}\n            current={currentTabIndex === i}\n            small={small && true}\n            selected={selectedTabIndex === i}\n            onClick={(): void => onClickTab(i)}\n            data-guide={typeof tab !== 'string' ? tab['data-guide'] : undefined}\n            data-test={typeof tab !== 'string' ? tab['data-test'] : undefined}\n            data-tracking={\n              typeof tab !== 'string' ? tab['data-tracking'] : undefined\n            }\n            data-masking={\n              typeof tab !== 'string' ? tab['data-masking'] : undefined\n            }\n            notification={\n              typeof tab !== 'string' && tab.notification\n                ? tab.notification\n                : undefined\n            }\n          >\n            {typeof tab !== 'string' ? tab.name : tab}\n          </Tab>\n        ))}\n      </div>\n      {renderButtons && <ButtonGroup ml={1}>{renderButtons()}</ButtonGroup>}\n    </div>\n  );\n};\nexport default TabBar;\n"
  },
  {
    "path": "src/lv2/tagBox/MiniTag.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport { MiniTag } from './MiniTag';\n\nexport default {\n  component: MiniTag,\n};\n\nexport const MiniTagComponent = () => (\n  <MiniTag\n    type={text('type', '取引先', 'MiniTag')}\n    disabledRemoveButton={boolean('disabledRemoveButton', true, 'MiniTag')}\n    removable={boolean('removable', true, 'MiniTag')}\n    removeButtonTabIndex={select(\n      'removeButtonTabIndex',\n      { none: undefined, '0': 0, '-1': -1 },\n      undefined,\n      'MiniTag'\n    )}\n    onRemove={action('onRemove')}\n    color={\n      select(\n        'Color',\n        {\n          RE: 'RE',\n          OR: 'OR',\n          YE: 'YE',\n          YG: 'YG',\n          GR: 'GR',\n          BG: 'BG',\n          PU: 'PU',\n          GY: 'GY',\n          undefined: '',\n        },\n        '',\n        'MiniTag'\n      ) || undefined\n    }\n    {...commonKnobs()}\n  >\n    {text('children', 'フリー株式会社', 'MiniTag')}\n  </MiniTag>\n);\n\nexport const AccentColor = () => (\n  <>\n    <MiniTag type=\"色\" removable mr={1} mb={1}>\n      None\n    </MiniTag>\n    <MiniTag color=\"RE\" type=\"色\" removable mr={1} mb={1}>\n      RE\n    </MiniTag>\n    <MiniTag color=\"OR\" type=\"色\" removable mr={1} mb={1}>\n      OR\n    </MiniTag>\n    <MiniTag color=\"YE\" type=\"色\" removable mr={1} mb={1}>\n      YE\n    </MiniTag>\n    <MiniTag color=\"YG\" type=\"色\" removable mr={1} mb={1}>\n      YG\n    </MiniTag>\n    <MiniTag color=\"GR\" type=\"色\" removable mr={1} mb={1}>\n      GR\n    </MiniTag>\n    <MiniTag color=\"BG\" type=\"色\" removable mr={1} mb={1}>\n      BG\n    </MiniTag>\n    <MiniTag color=\"PU\" type=\"色\" removable mr={1} mb={1}>\n      PU\n    </MiniTag>\n    <MiniTag color=\"GY\" type=\"色\" removable mr={1} mb={1}>\n      GY\n    </MiniTag>\n  </>\n);\n\nexport const LongText = () => (\n  <>\n    <MiniTag mb={0.25}>{Array(1000).fill('あ').join('')}</MiniTag>\n    <MiniTag removable>{Array(1000).fill('あ').join('')}</MiniTag>\n  </>\n);\n"
  },
  {
    "path": "src/lv2/tagBox/MiniTag.tsx",
    "content": "import * as React from 'react';\nimport { MdClear } from 'react-icons/md';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport { VisuallyHidden } from '../../lv1';\n\ntype Props = {\n  /**\n   * タグの名前を指定します\n   */\n  children: string;\n  /**\n   * タグの種別（取引先、品目、etc...）を指定します\n   */\n  type?: string;\n  /**\n   * 削除ボタンが押せない場合 true を指定します\n   */\n  disabledRemoveButton?: boolean;\n  /**\n   * 削除ボタンを表示するかを指定します\n   */\n  removable?: boolean;\n  /**\n   * 削除時の処理を指定します\n   */\n  onRemove?: () => void;\n  color?: 'RE' | 'OR' | 'YE' | 'YG' | 'GR' | 'BG' | 'PU' | 'GY';\n  /**\n   * 削除ボタンの `tabIndex` を指定します。\n   * コンボボックスなどで、ボタンにフォーカスして押下する以外のキーボード操作による削除が可能な場合のみ `-1` を指定してください。\n   */\n  removeButtonTabIndex?: 0 | -1;\n} & CommonProps;\n\n/**\n * TagBoxよりも小さいサイズの、タグ表示用コンポーネントです。コンボボックスの内部などで使う想定です。\n *\n * コンボボックスの内部以外では、**TagBoxを使用することを強く推奨します**。\n * どうしてもこのコンポーネントである必要がある場合のみ、アクセシビリティに細心の注意を払ったうえで使ってください。\n *\n * - サイズを小さくするため、タグの種別が非表示になっています\n *   - 可能な限り、色と種別の対応をユーザーが理解できるようにしてください\n * - 色と種別の対応は、Vibes内では定義していません。プロダクト内では一貫したものを使用してください\n * - 種別 (`type`) はoptionalにしていますが、複数の種別を並べて表示する場合には必ず指定してください\n *   - VisuallyHiddenにて、スクリーンリーダーからは読み取れるようにしてあります\n */\nexport const MiniTag: React.FC<Props> = ({\n  type,\n  children,\n  disabledRemoveButton,\n  removable,\n  onRemove,\n  color = 'YE',\n  removeButtonTabIndex,\n  ...props\n}: Props) => {\n  const baseClass = 'vb-miniTag';\n  const classModifier = {\n    removable,\n    RE: color === 'RE',\n    OR: color === 'OR',\n    YE: color === 'YE',\n    YG: color === 'YG',\n    GR: color === 'GR',\n    BG: color === 'BG',\n    PU: color === 'PU',\n    GY: color === 'GY',\n  };\n\n  const bodyClassName = `${baseClass}__body`;\n  const removeButtonColorClassName = ` ${baseClass}__removeButton--${color}`;\n\n  return (\n    <span {...commonProps(props, baseClass, classModifier)}>\n      <span className={`${baseClass}__inner`}>\n        <span className={bodyClassName} title={children}>\n          {children}\n        </span>\n        {type && <VisuallyHidden>({type})</VisuallyHidden>}\n        {removable && (\n          <button\n            className={`${baseClass}__removeButton${\n              disabledRemoveButton\n                ? ` ${baseClass}__removeButton--disabled`\n                : ''\n            }${removeButtonColorClassName}`}\n            aria-label={`${children}${type ? `(${type})` : ''}を削除`}\n            tabIndex={removeButtonTabIndex}\n            onClick={() => onRemove && onRemove()}\n          >\n            <MdClear className={`${baseClass}__removeIcon`} />\n          </button>\n        )}\n      </span>\n    </span>\n  );\n};\n"
  },
  {
    "path": "src/lv2/tagBox/TagBox.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport TagBox from './TagBox';\n\nexport default {\n  component: TagBox,\n};\n\nexport const TagBoxComponent = () => (\n  <TagBox\n    type={text('Type', '取引先', 'TagBox')}\n    removable={boolean('Removable', true, 'TagBox')}\n    maxWidth={\n      select(\n        'MaxWidth',\n        {\n          small: 'small',\n          medium: 'medium',\n          large: 'large',\n          undefined: '',\n        },\n        '',\n        'TagBox'\n      ) || undefined\n    }\n    color={\n      select(\n        'Color',\n        {\n          success: 'success',\n          error: 'error',\n          RE: 'RE',\n          OR: 'OR',\n          YE: 'YE',\n          YG: 'YG',\n          GR: 'GR',\n          BG: 'BG',\n          PU: 'PU',\n          GY: 'GY',\n          undefined: '',\n        },\n        '',\n        'TagBox'\n      ) || undefined\n    }\n    onRemove={action('remove')}\n    disabledRemoveButton={boolean('DisabledRemoveButton', false, 'TagBox')}\n    {...commonKnobs()}\n  >\n    {text('Children', 'フリー株式会社', 'TagBox')}\n  </TagBox>\n);\n\nexport const MaxWidth = () => (\n  <>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox type=\"small\" removable maxWidth=\"small\">\n        これは要素をはみ出るほど長い名前の会社です。とてもながーーーーーーーい\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox type=\"medium\" removable maxWidth=\"medium\">\n        これは要素をはみ出るほど長い名前の会社です。とてもながーーーーーーーい\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox type=\"large\" removable maxWidth=\"large\">\n        これは要素をはみ出るほど長い名前の会社です。とてもながーーーーーーーい\n      </TagBox>\n    </div>\n  </>\n);\n\nexport const Color = () => (\n  <>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"success\">正常系の色</TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"error\">異常系の色</TagBox>\n    </div>\n  </>\n);\n\nexport const AccentColor = () => (\n  <>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"RE\" type=\"type\" removable>\n        RE\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"OR\" type=\"type\" removable>\n        OR\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"YE\" type=\"type\" removable>\n        YE\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"YG\" type=\"type\" removable>\n        YG\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"GR\" type=\"type\" removable>\n        GR\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"BG\" type=\"type\" removable>\n        BG\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"PU\" type=\"type\" removable>\n        PU\n      </TagBox>\n    </div>\n    <div style={{ marginBottom: '1rem' }}>\n      <TagBox color=\"GY\" type=\"type\" removable>\n        GY\n      </TagBox>\n    </div>\n  </>\n);\n\nexport const DisabledRemoveButton = () => (\n  <div>\n    <TagBox removable disabledRemoveButton onRemove={action('onRemove')}>\n      フリー株式会社\n    </TagBox>\n  </div>\n);\n"
  },
  {
    "path": "src/lv2/tagBox/TagBox.tsx",
    "content": "import * as React from 'react';\nimport { MdCancel } from 'react-icons/md';\nimport { Keys } from '../../utilities/keyboard';\n\nimport { MarginClassProps } from '../../utilities/marginClasses';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype TagBoxMaxWidth = 'small' | 'medium' | 'large';\ntype TagBoxColor = 'success' | 'error' | AccentColor;\ntype AccentColor = 'RE' | 'OR' | 'YE' | 'YG' | 'GR' | 'BG' | 'PU' | 'GY';\n\ntype Props = {\n  children?: string;\n  onRemove?: () => any;\n  disabledRemoveButton?: boolean;\n  removable?: boolean;\n  type?: string;\n  maxWidth?: TagBoxMaxWidth;\n  color?: TagBoxColor;\n} & MarginClassProps &\n  CommonProps;\n\nconst TagBox: React.FC<Props> = (props: Props) => {\n  const {\n    type,\n    children,\n    removable,\n    onRemove,\n    disabledRemoveButton,\n    maxWidth,\n    color,\n    marginTop,\n    marginLeft,\n    marginRight,\n    marginBottom,\n    marginSize,\n  } = props;\n  const baseClass = 'vb-tagBox';\n  const classModifier = {\n    removable,\n    maxWidthSmall: maxWidth === 'small',\n    maxWidthMedium: maxWidth === 'medium' || !maxWidth,\n    maxWidthLarge: maxWidth === 'large',\n    success: color === 'success',\n    error: color === 'error',\n    RE: color === 'RE',\n    OR: color === 'OR',\n    YE: color === 'YE',\n    YG: color === 'YG',\n    GR: color === 'GR',\n    BG: color === 'BG',\n    PU: color === 'PU',\n    GY: color === 'GY',\n  };\n\n  const isAccentColor = color && color !== 'success' && color !== 'error';\n\n  const bodyClassName = color\n    ? `${baseClass}__body ${baseClass}__body--${color}`\n    : `${baseClass}__body`;\n\n  const typeClassName = isAccentColor\n    ? `${baseClass}__type ${baseClass}__type--${color}`\n    : `${baseClass}__type`;\n\n  const removeButtonColorClassName = isAccentColor\n    ? ` ${baseClass}__removeButton--${color}`\n    : '';\n\n  return (\n    <span\n      {...commonProps(props, baseClass, classModifier, {\n        marginBottom,\n        marginLeft,\n        marginRight,\n        marginTop,\n        marginSize,\n      })}\n    >\n      <span className={`${baseClass}__inner`}>\n        {type && <span className={typeClassName}>{type}</span>}\n        <span className={bodyClassName} title={children}>\n          {children}\n        </span>\n        {removable && (\n          <span\n            className={`${baseClass}__removeButton${\n              disabledRemoveButton\n                ? ` ${baseClass}__removeButton--disabled`\n                : ''\n            }${removeButtonColorClassName}`}\n            aria-label={`${children || 'このタグ'}を削除`}\n            tabIndex={disabledRemoveButton ? -1 : 0}\n            role=\"button\"\n            onClick={() => onRemove && onRemove()}\n            onKeyDown={(e) => {\n              if (onRemove && (e.key === Keys.ENTER || e.key === Keys.SPACE)) {\n                e.preventDefault();\n                onRemove();\n              }\n            }}\n          >\n            <MdCancel className={`${baseClass}__removeIcon`} />\n          </span>\n        )}\n      </span>\n    </span>\n  );\n};\n\nexport default TagBox;\n"
  },
  {
    "path": "src/lv2/withAccordionContent/WithAccordionContent.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { boolean, select } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport ColumnBase from '../../lv1/bases/ColumnBase';\nimport WithAccordionContent from './WithAccordionContent';\n\nexport default {\n  component: WithAccordionContent,\n};\n\nexport const WithAccordionContentComponent = () => {\n  const [isOpen, setOpen] = React.useState(false);\n  return (\n    <WithAccordionContent\n      renderAccordionButtonArea={(AccordionButton, contentId) => (\n        <AccordionButton\n          contentId={contentId}\n          open={isOpen}\n          small={boolean('Small', false, 'WithAccordionContent')}\n          large={boolean('Large', false, 'WithAccordionContent')}\n          appearance={\n            select(\n              'Appearance',\n              {\n                primary: 'primary',\n                secondary: 'secondary',\n                tertiary: 'tertiary',\n                undefined: '',\n              },\n              '',\n              'WithAccordionContent'\n            ) || undefined\n          }\n          onClick={() => setOpen(!isOpen)}\n          {...commonKnobs()}\n        >\n          アコーディオンボタン\n        </AccordionButton>\n      )}\n      isOpen={isOpen}\n      {...commonKnobs()}\n    >\n      <ColumnBase mt={0.5}>\n        <Paragraph marginBottom>ほげほげほげほげ</Paragraph>\n        <Paragraph>ふがふがふがふが</Paragraph>\n      </ColumnBase>\n    </WithAccordionContent>\n  );\n};\n\nexport const UseAsHeading = () => {\n  const [isOpen, setOpen] = React.useState(false);\n  return (\n    <WithAccordionContent\n      renderAccordionButtonArea={(AccordionButton, contentId) => (\n        <h3\n          style={{\n            margin: 0,\n          }}\n        >\n          <AccordionButton\n            contentId={contentId}\n            open={isOpen}\n            small={boolean('Small', false, 'WithAccordionContent')}\n            large={boolean('Large', false, 'WithAccordionContent')}\n            appearance={\n              select(\n                'Appearance',\n                {\n                  primary: 'primary',\n                  secondary: 'secondary',\n                  tertiary: 'tertiary',\n                  undefined: '',\n                },\n                '',\n                'WithAccordionContent'\n              ) || undefined\n            }\n            onClick={() => setOpen(!isOpen)}\n            {...commonKnobs()}\n          >\n            見出しを入れられるよ\n          </AccordionButton>\n        </h3>\n      )}\n      isOpen={isOpen}\n      {...commonKnobs()}\n    >\n      <ColumnBase mt={0.5}>\n        <Paragraph marginBottom>\n          そのまま見出しを入れると <code>h</code>\n          タグ標準のスタイルがついてくるので自分でスタイル打ち消しとか入れないといけないかも\n        </Paragraph>\n        <Paragraph>ふがふがふがふが</Paragraph>\n      </ColumnBase>\n    </WithAccordionContent>\n  );\n};\n"
  },
  {
    "path": "src/lv2/withAccordionContent/WithAccordionContent.tsx",
    "content": "import * as React from 'react';\nimport { MdExpandLess, MdExpandMore } from 'react-icons/md';\nimport Button from '../../lv1/buttons/Button';\nimport commonProps, {\n  CommonProps,\n  pickCommonProps,\n} from '../../utilities/commonProps';\nimport useUniqueId from '../../hooks/useUniqueId';\n\ntype AccordionButtonProps = {\n  /**\n   * 開閉される要素のidを設定します。このidはaria-controlsに用います。\n   */\n  contentId: string;\n  /**\n   * 開閉状態を設定します。\n   */\n  open: boolean;\n} & Pick<\n  Parameters<typeof Button>[0],\n  'onClick' | 'children' | 'appearance' | 'small' | 'large'\n> &\n  CommonProps;\n\nconst AccordionButton: React.FC<AccordionButtonProps> = (\n  props: AccordionButtonProps\n) => {\n  const { contentId, open, onClick, children, appearance, small, large } =\n    props;\n\n  return (\n    <Button\n      IconComponent={open ? MdExpandLess : MdExpandMore}\n      iconPosition=\"right\"\n      appearance={appearance}\n      small={small}\n      large={large}\n      aria-controls={contentId}\n      aria-expanded={open}\n      onClick={onClick}\n      {...pickCommonProps(props)}\n    >\n      {children}\n    </Button>\n  );\n};\n\ntype Props = {\n  /**\n   * AccordionButtonを含む要素を返します。\n   * contentIdはAccordionButtonの引数として渡してください。\n   */\n  renderAccordionButtonArea: (\n    AccordionButton: React.FC<AccordionButtonProps>,\n    contentId: string\n  ) => React.ReactNode;\n  /**\n   * 開閉状態を設定します。\n   */\n  isOpen: boolean;\n  /**\n   * 開閉される要素を設定します。\n   */\n  children: React.ReactNode;\n} & CommonProps;\n\n/**\n * 開閉される要素に用いるコンポーネントです。\n * 同ファイル内に定義されているAccordionButtonと併せて使われる想定です。\n */\nconst WithAccordionContent: React.FC<Props> = (props: Props) => {\n  const { renderAccordionButtonArea, isOpen, children } = props;\n  const contentId = useUniqueId('accordionContent');\n\n  return (\n    <div {...commonProps(props, 'vb-withAccordionContent')}>\n      {renderAccordionButtonArea(AccordionButton, contentId)}\n      {isOpen && (\n        <div id={contentId} aria-hidden={!isOpen}>\n          {children}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default WithAccordionContent;\n"
  },
  {
    "path": "src/lv2/withBalloon/WithBalloon.stories.tsx",
    "content": "import * as React from 'react';\n\nimport WithBalloon from './WithBalloon';\nimport { commonKnobs } from '../../../stories';\nimport ScrollableBase from '../../lv1/bases/ScrollableBase';\nimport { select, text } from '@storybook/addon-knobs';\nimport Button from '../../lv1/buttons/Button';\nimport { Avatar, Paragraph } from '../../lv1';\nimport dsSquare from '../../lv1/icons/storyAssets/ds_square.jpeg';\n\nexport default {\n  component: WithBalloon,\n};\n\nexport const WithBalloonComponent = () => (\n  <WithBalloon\n    border={\n      select(\n        'border',\n        {\n          alert: 'alert',\n          success: 'success',\n          notice: 'notice',\n          default: 'default',\n          none: '',\n        },\n        'default',\n        'WithBalloon'\n      ) || undefined\n    }\n    renderBalloonContent={() =>\n      text('balloonContent', 'こういう感じでバルーンを出せます', 'WithBalloon')\n    }\n    renderContent={() =>\n      text(\n        'content',\n        'コンテンツに対する注釈をバルーンで表示できます。タッチ操作やキーボード操作では開けないことがあるため、バルーンコンテンツには代替アクセス手段を用意してください。',\n        'WithBalloon'\n      )\n    }\n    {...commonKnobs()}\n  />\n);\n\nexport const FocusableElement = () => (\n  <WithBalloon\n    border={\n      select(\n        'border',\n        {\n          alert: 'alert',\n          success: 'success',\n          notice: 'notice',\n          default: 'default',\n          none: '',\n        },\n        'default',\n        'WithBalloon'\n      ) || undefined\n    }\n    balloonContent={text(\n      'balloonContent',\n      'こういう感じでバルーンを出せます',\n      'WithBalloon'\n    )}\n    renderContent={(balloonId) => (\n      <>\n        このように\n        <a href=\"https://www.freee.co.jp/\" aria-describedby={balloonId}>\n          フォーカス可能な要素\n        </a>\n        があると、フォーカス時にバルーンが表示されます。\n        <a href=\"https://jobs.freee.co.jp\">採用情報</a>\n      </>\n    )}\n    {...commonKnobs()}\n  />\n);\n\nexport const LazyImageLoading = () => (\n  <WithBalloon\n    border={\n      select(\n        'border',\n        {\n          alert: 'alert',\n          success: 'success',\n          notice: 'notice',\n          default: 'default',\n          none: '',\n        },\n        'default',\n        'WithBalloon'\n      ) || undefined\n    }\n    renderBalloonContent={(isVisible) => (\n      <>\n        <Avatar size=\"small\" imageUrl={isVisible ? dsSquare : ''} />\n        <Paragraph inline ml={0.5}>\n          freee株式会社 CEO\n        </Paragraph>\n      </>\n    )}\n    renderContent={() => '佐々木大輔'}\n    {...commonKnobs()}\n  />\n);\nexport const InsideBigScroll = () => (\n  <div style={{ width: '40rem', height: '20rem', display: 'flex' }}>\n    <ScrollableBase scrollableX scrollableY>\n      <div style={{ position: 'relative', width: '80rem', height: '40rem' }}>\n        <div style={{ position: 'absolute', top: '15rem', left: '40rem' }}>\n          <WithBalloon\n            border={\n              select(\n                'border',\n                {\n                  alert: 'alert',\n                  success: 'success',\n                  notice: 'notice',\n                  default: 'default',\n                  none: '',\n                },\n                'default',\n                'WithBalloon'\n              ) || undefined\n            }\n            renderBalloonContent={() =>\n              text(\n                'balloonContent',\n                'こういう感じでバルーンを出せます',\n                'WithBalloon'\n              )\n            }\n            {...commonKnobs()}\n            renderContent={() => 'あああ'}\n          />\n        </div>\n      </div>\n    </ScrollableBase>\n  </div>\n);\n\nexport const DisabledButton = () => (\n  <div lang=\"ja\">\n    <WithBalloon\n      border={\n        select(\n          'border',\n          {\n            alert: 'alert',\n            success: 'success',\n            notice: 'notice',\n            default: 'default',\n            none: '',\n          },\n          'default',\n          'WithBalloon'\n        ) || undefined\n      }\n      renderBalloonContent={() => 'こういう感じでバルーンを出せます'}\n      renderContent={(balloonId) => (\n        <Button disabled aria-describedby={balloonId}>\n          非活性なボタン\n        </Button>\n      )}\n      {...commonKnobs()}\n    ></WithBalloon>\n  </div>\n);\n\nexport const DeprecatedProps = () => (\n  <WithBalloon\n    border={\n      select(\n        'border',\n        {\n          alert: 'alert',\n          success: 'success',\n          notice: 'notice',\n          default: 'default',\n          none: '',\n        },\n        'default',\n        'WithBalloon'\n      ) || undefined\n    }\n    balloonContent={text(\n      'balloonContent',\n      'こういう感じでバルーンを出せます',\n      'WithBalloon'\n    )}\n    {...commonKnobs()}\n  >\n    {text(\n      'content',\n      'コンテンツに対する注釈をバルーンで表示できます。タッチ操作やキーボード操作では開けないことがあるため、バルーンコンテンツには代替アクセス手段を用意してください。',\n      'WithBalloon'\n    )}\n  </WithBalloon>\n);\n"
  },
  {
    "path": "src/lv2/withBalloon/WithBalloon.tsx",
    "content": "import * as React from 'react';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport Balloon from '../../lv1/bases/Balloon';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport { FocusTrap } from '../../lv1';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport { Keys } from '../../utilities/keyboard';\nimport { getFocusableElements, isFocusableElement } from '../../utilities';\nimport { useBalloon } from './useBalloon';\n\ntype Props = Pick<Parameters<typeof Balloon>[0], 'border'> & {\n  /**\n   * バルーンの中身を描画します。ホバーやフォーカスによってバルーンが表示されているとき、`isVisible` が `true` になります。 `balloonContent` より優先して使用されます。\n   */\n  renderBalloonContent?: (isVisible: boolean) => React.ReactNode;\n  /**\n   * (deprecated) バルーンの中身を描画します。バルーンの表示状態を取得できないため、なるべく `renderBalloonContent` を使用してください。\n   * @deprecated `renderBalloonContent` を使用してください\n   */\n  balloonContent?: React.ReactNode;\n  /**\n   * バルーンを付ける側（呼び出し側）をrenderします。\n   * ボタンや入力フォームなどのインタラクティブなコンポーネントがある場合には、`balloonId` を `aria-describedby` に渡してください\n   */\n  renderContent?: (balloonId: string) => React.ReactNode;\n  /**\n   * (deprecated) renderContentが渡されていない場合に使用されます。aria-describedbyが使用できないため、なるべく `renderContent` を使用してください。\n   * @deprecated `renderContent` を使用してください\n   */\n  children?: React.ReactNode;\n\n  /**\n   * trueにしておくとバルーンを表示しません。特定の条件でのみバルーンを表示したい場合に使用してください。\n   */\n  balloonDisabled?: boolean;\n} & CommonProps;\n\nconst findNextFocusable = (\n  el: HTMLElement,\n  backward = false\n): Element | undefined => {\n  let e = backward ? el.previousElementSibling : el.nextElementSibling;\n  while (e) {\n    if (isFocusableElement(e)) {\n      return e;\n    }\n    const focusables = getFocusableElements(e as HTMLElement);\n    const focusableIndex = findFocusableElIndex(focusables);\n    if (focusables.length > 0) {\n      return focusables[backward ? focusableIndex : 0];\n    }\n    e = backward ? e.previousElementSibling : e.nextElementSibling;\n  }\n  const parent = el.parentElement;\n  return parent ? findNextFocusable(parent, backward) : undefined;\n};\n\nconst findFocusableElIndex = (focusables: NodeListOf<Element>): number => {\n  let focusableLastIndex = 0;\n  focusables.forEach((node, i) => {\n    let isVisible = true;\n    let parent = node.parentElement;\n    while (parent) {\n      if (parent.style.display === 'none') {\n        isVisible = false;\n        break;\n      }\n      parent = parent.parentElement;\n    }\n    if (isVisible) {\n      focusableLastIndex = i;\n    }\n  });\n  return focusableLastIndex;\n};\n\n/**\n * `children` の要素にマウスホバーした際に表示されるバルーンを付与します。\n *\n * - タッチスクリーンによる操作ではバルーンを表示できません。**読めないことで使用できなくなる情報を配置しないでください**。\n * - バルーン内にはキーボード操作で到達できないため、何かの操作のUIを配置する場合は **必ず代替アクセス手段を用意してください**。\n * - バルーンの要素の `id` を `renderContent` の `balloonId` 引数で取得できます。`aria-describedby` で使用してください。\n * - バルーン表示中に `Esc` キーを押下すると、バルーンを非表示にできます。\n */\nconst WithBalloon: React.FC<Props> = (props: Props) => {\n  const {\n    children,\n    renderContent,\n    balloonContent,\n    renderBalloonContent,\n    balloonDisabled,\n    border,\n  } = props;\n  const baseClass = 'vb-withBalloon';\n  const wrapperRef = React.useRef<HTMLSpanElement>(null);\n  const uniqueId = useUniqueId(baseClass);\n\n  const {\n    balloonIsVisibleByHover,\n    clearHoverFlags,\n    handleTargetMouseEnter,\n    handleTargetMouseLeave,\n    handleBalloonMouseEnter,\n    handleBalloonMouseLeave,\n    position,\n    verticalPosition,\n    adjustPosition,\n    baseRef,\n    balloonRef,\n  } = useBalloon();\n  const [focused, setFocused] = React.useState<boolean>(false);\n  const showBalloon = !balloonDisabled && (balloonIsVisibleByHover || focused);\n  const balloonId = `${uniqueId}__balloonWrapper`;\n\n  React.useEffect(() => {\n    const handleEsc = (e: KeyboardEvent) => {\n      if (e.key === Keys.ESC) {\n        clearHoverFlags();\n        setFocused(false);\n      }\n    };\n    if (showBalloon) {\n      window.addEventListener('keydown', handleEsc);\n      return () => window.removeEventListener('keydown', handleEsc);\n    }\n  }, [showBalloon, clearHoverFlags]);\n\n  return (\n    <span\n      {...commonProps(props, baseClass)}\n      ref={baseRef}\n      id={uniqueId}\n      aria-describedby={balloonId}\n    >\n      {/* フォーカス可能なものがrenderContentに存在しなかった場合に、無理やりフォーカスする挙動を作るために、FocusTrapを使用している */}\n      <FocusTrap\n        onFocusInsideTop={() => {\n          // Shift+Tabでフォーカスを外に出そうとしたときの挙動\n          // 前のほうのフォーカス可能な要素を探してフォーカスする\n          const target = baseRef.current\n            ? findNextFocusable(baseRef.current, true)\n            : undefined;\n          if (target) {\n            (target as HTMLElement).focus();\n          }\n          return true;\n        }}\n        onFocusInsideBottom={() => {\n          // Tabでフォーカスを外に出そうとしたときの挙動\n          // 後ろのほうのフォーカス可能な要素を探してフォーカスする\n          const target = baseRef.current\n            ? findNextFocusable(baseRef.current)\n            : undefined;\n          if (target) {\n            (target as HTMLElement).focus();\n          }\n          return true;\n        }}\n        onFocusOutsideTop={() => {\n          // Tabでフォーカスを内側に入れるときの挙動\n          // フォーカス可能なものがあればそれに、無ければwrapperにフォーカスを移す\n          if (wrapperRef.current) {\n            const focusable = getFocusableElements(wrapperRef.current);\n            if (focusable.length > 0) {\n              (focusable.item(0) as HTMLElement).focus();\n            } else {\n              wrapperRef.current.focus();\n            }\n          }\n          return true;\n        }}\n        onFocusOutsideBottom={() => {\n          // Shift+Tabでフォーカスを内側に入れるときの挙動\n          // フォーカス可能なものがあればそれに、無ければwrapperにフォーカスを移す\n          if (wrapperRef.current) {\n            const focusable = getFocusableElements(wrapperRef.current);\n            if (focusable.length > 0) {\n              (focusable.item(focusable.length - 1) as HTMLElement).focus();\n            } else {\n              wrapperRef.current.focus();\n            }\n          }\n          return true;\n        }}\n      >\n        <span\n          className={`${baseClass}__contentWrapper`}\n          tabIndex={-1}\n          ref={wrapperRef}\n          onMouseEnter={handleTargetMouseEnter}\n          onMouseLeave={handleTargetMouseLeave}\n          onFocus={() => setFocused(true)}\n          onBlur={() => setFocused(false)}\n        >\n          {renderContent ? renderContent(balloonId) : children}\n        </span>\n      </FocusTrap>\n      <ScrollPortal\n        isActive={showBalloon}\n        positionalBaseElement={baseRef.current || undefined}\n        verticalPosition={verticalPosition}\n        horizontalPosition={position}\n        onOverflow={() => {\n          clearHoverFlags();\n          setFocused(false);\n        }}\n        onScroll={adjustPosition}\n        data-masking={props['data-masking']}\n      >\n        <div\n          className={`${baseClass}__balloonWrapper${\n            showBalloon ? '' : ` ${baseClass}__balloonWrapper--hidden`\n          }`}\n          onMouseEnter={handleBalloonMouseEnter}\n          onMouseLeave={handleBalloonMouseLeave}\n          id={balloonId}\n          role=\"tooltip\"\n          aria-hidden={!showBalloon}\n        >\n          <Balloon\n            border={border}\n            position={position}\n            verticalPosition={verticalPosition}\n            ref={balloonRef}\n          >\n            {renderBalloonContent\n              ? renderBalloonContent(showBalloon)\n              : balloonContent}\n          </Balloon>\n        </div>\n      </ScrollPortal>\n    </span>\n  );\n};\n\nexport default WithBalloon;\n"
  },
  {
    "path": "src/lv2/withBalloon/useBalloon.ts",
    "content": "import * as React from 'react';\n\n// バルーンが表示されるまでの時間（ミリ秒）\n// マウスがちょっとアイコンを通過しただけとかを無視できるよう、ある程度待ってから表示されるようにする\nconst BALLOON_SHOW_DELAY = 200;\n// バルーンが消えるまでの時間（ミリ秒）\n// アイコンからバルーン内へのマウス移動時に消えてしまいにくいよう、ある程度待ってから消えるようにしている\nconst BALLOON_HIDE_DELAY = 400;\n\nexport const useBalloon = () => {\n  const [targetHovered, setTargetHovered] = React.useState<boolean>(false);\n  const [balloonHovered, setBalloonHovered] = React.useState<boolean>(false);\n  const hoverTimeoutRef = React.useRef<number | null>(null);\n  const messageHoverTimeoutRef = React.useRef<number | null>(null);\n  const baseRef = React.useRef<HTMLElement>(null);\n  const balloonRef = React.useRef<HTMLDivElement>(null);\n\n  const [position, setPosition] = React.useState<'left' | 'right' | 'center'>(\n    'center'\n  );\n  const [verticalPosition, setVerticalPosition] = React.useState<\n    'top' | 'bottom'\n  >('top');\n\n  const handleMouseHover = (entered: boolean) => {\n    if (hoverTimeoutRef.current) {\n      window.clearTimeout(hoverTimeoutRef.current);\n    }\n    hoverTimeoutRef.current = window.setTimeout(\n      () => setTargetHovered(entered),\n      entered ? BALLOON_SHOW_DELAY : BALLOON_HIDE_DELAY\n    );\n  };\n\n  const handleTargetMouseEnter = (): void => {\n    handleMouseHover(true);\n  };\n  const handleTargetMouseLeave = (): void => {\n    handleMouseHover(false);\n  };\n  const handleBalloonMouseEnter = (): void => {\n    if (messageHoverTimeoutRef.current) {\n      window.clearTimeout(messageHoverTimeoutRef.current);\n    }\n    hoverTimeoutRef.current = null;\n    setBalloonHovered(true);\n  };\n  const handleBalloonMouseLeave = (): void => {\n    if (messageHoverTimeoutRef.current) {\n      window.clearTimeout(messageHoverTimeoutRef.current);\n    }\n\n    messageHoverTimeoutRef.current = window.setTimeout(\n      () => setBalloonHovered(false),\n      BALLOON_HIDE_DELAY\n    );\n  };\n\n  const clearHoverFlags = () => {\n    if (hoverTimeoutRef.current) {\n      window.clearTimeout(hoverTimeoutRef.current);\n      hoverTimeoutRef.current = null;\n    }\n    if (messageHoverTimeoutRef.current) {\n      window.clearTimeout(messageHoverTimeoutRef.current);\n      messageHoverTimeoutRef.current = null;\n    }\n    setTargetHovered(false);\n    setBalloonHovered(false);\n  };\n\n  // アンマウント時にタイムアウトを破棄する\n  React.useEffect(() => {\n    return () => {\n      if (hoverTimeoutRef.current) {\n        clearTimeout(hoverTimeoutRef.current);\n      }\n      if (messageHoverTimeoutRef.current) {\n        clearTimeout(messageHoverTimeoutRef.current);\n      }\n    };\n  }, [hoverTimeoutRef, messageHoverTimeoutRef]);\n\n  const adjustPosition = () => {\n    if (!baseRef.current || !balloonRef.current) {\n      return;\n    }\n    const rect = baseRef.current.getBoundingClientRect();\n    const balloonRect = balloonRef.current.getBoundingClientRect();\n\n    const horizontalCenter = rect.left + rect.width / 2;\n\n    if (horizontalCenter < balloonRect.width / 2) {\n      setPosition('left');\n    } else if (horizontalCenter > window.innerWidth - balloonRect.width / 2) {\n      setPosition('right');\n    } else {\n      setPosition('center');\n    }\n\n    if (rect.top < balloonRect.height + 16) {\n      setVerticalPosition('bottom');\n    } else {\n      setVerticalPosition('top');\n    }\n  };\n\n  React.useLayoutEffect(() => {\n    adjustPosition();\n  }, [targetHovered, balloonHovered]);\n\n  return {\n    balloonIsVisibleByHover: targetHovered || balloonHovered,\n    handleTargetMouseEnter,\n    handleTargetMouseLeave,\n    handleBalloonMouseEnter,\n    handleBalloonMouseLeave,\n    clearHoverFlags,\n    position,\n    verticalPosition,\n    adjustPosition,\n    baseRef,\n    balloonRef,\n  };\n};\n"
  },
  {
    "path": "src/lv2/withDropdown/WithDropdown.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport WithDropdown from './WithDropdown';\nimport { boolean } from '@storybook/addon-knobs';\n\nexport default {\n  component: WithDropdown,\n};\n\nexport const WithDropdownComponent = () => {\n  const disabled = boolean('disabled', false, 'WithDropdown');\n  return (\n    <WithDropdown\n      dropdownContents={[\n        {\n          type: 'selectable',\n          text: 'menu1',\n          ariaLabel: 'menu1',\n          onClick: action('click'),\n        },\n        {\n          type: 'selectable',\n          text: 'menu2',\n          ariaLabel: 'menu2',\n          onClick: action('click'),\n        },\n        {\n          type: 'selectable',\n          text: 'とてもとてもとてもとてもとてもとてもとてもとてもとてもとてもとてもとてもとてもとても長い',\n          ariaLabel: 'menu3',\n          onClick: action('click'),\n        },\n        {\n          type: 'selectable',\n          text: 'menu4 (disabled)',\n          ariaLabel: 'menu4',\n          disabled: true,\n        },\n        { type: 'selectable', text: '発注（あなたが作成中）' },\n        { type: 'selectable', text: '発注（取引先の確認待ち）' },\n        { type: 'selectable', text: '発注（確認済み）' },\n        { type: 'selectable', text: 'もっと見る', disableOnRequestClose: true },\n      ]}\n      disabled={disabled}\n      renderButton={(dropdownId, isOpen, buttonRef, togglePopup) => (\n        <span\n          // 例として、<span> で実装した例を載せています。\n          // あくまでメニューの開閉ボタンはボタンであり、本来<button>で実装されるべきことに注意してください。\n          role=\"button\"\n          // キーボード操作が可能になるよう、フォーカス可能にする\n          tabIndex={0}\n          // <span>ではクリックイベントが発火しないため、Enterキー押下時にtogglePopupする\n          onKeyDown={(e) => e.key === 'Enter' && togglePopup(!isOpen)}\n          // <span> なのでaria-disabledを使用しています。\n          // <button> で実装する場合は、WithFilterableDropdownに渡すのと同じ条件をボタンのdisabledにも渡してください\n          aria-disabled={disabled}\n          aria-controls={dropdownId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={buttonRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </span>\n      )}\n      onOpen={action('open')}\n      onClose={action('close')}\n    ></WithDropdown>\n  );\n};\n"
  },
  {
    "path": "src/lv2/withDropdown/WithDropdown.tsx",
    "content": "import * as React from 'react';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport { CommonProps, pickCommonProps } from '../../utilities/commonProps';\nimport DropdownMenuContent from '../dropdown/DropdownMenuContent';\nimport { DropdownContent } from '../dropdown/types';\nimport WithPopup from '../withPopup/WithPopup';\n\ntype Props = {\n  /**\n   * メニュー開閉ボタン描画用 render function\n   *\n   * - `dropdownId` を開閉ボタンの `aria-controls` に渡してください\n   * - `isOpen` を開閉ボタンの `aria-expanded` に渡してください\n   * - `buttonRef` を開閉ボタンの `ref` に渡してください\n   */\n  renderButton: Pick<Parameters<typeof WithPopup>[0], 'render'>['render'];\n  disabled?: boolean;\n  dropdownContents: Array<DropdownContent>;\n  /**\n   * @deprecated このプロパティは使用されません\n   */\n  contentsFixed?: boolean;\n  /**\n   * dropdownを開いた時に発火します。useEffectのトリガーになるためメモ化したものを渡すことを推奨します。\n   */\n  onOpen?: () => void;\n  /**\n   * dropdownを閉じた時に発火します。useEffectのトリガーになるためメモ化したものを渡すことを推奨します。\n   */\n  onClose?: () => void;\n} & CommonProps;\n\n/**\n * ドロップダウンメニューを実装するためのコンポーネントです。\n *\n * - ボタンからドロップダウンメニューを表示したい場合は、 `DropdownButton` コンポーネントを使用してください\n * - どうしてもという場合でなければ `DropdownButton` コンポーネントを使用してください。このコンポーネントは扱いが面倒です。\n * - 開閉ボタンを `Button` `IconOnlyButton` 以外にしたい場合のみ、こちらのコンポーネントを使用してください\n * - `renderButton` の引数は以下のように使用してください\n *   - `dropdownId` を開閉ボタンの `aria-controls` に渡してください\n *   - `isOpen` を開閉ボタンの `aria-expanded` に渡してください\n *   - `buttonRef` を開閉ボタンの `ref` に渡してください\n */\nconst WithDropdown: React.FC<Props> = (props: Props) => {\n  const { renderButton, disabled, dropdownContents, onOpen, onClose } = props;\n\n  return (\n    <WithPopup\n      disabled={disabled}\n      render={renderButton}\n      renderPopup={(requestClose, firstSelectableRef, controlRef) => (\n        <PopupBase paddingSize=\"zero\">\n          <DropdownMenuContent\n            contents={dropdownContents}\n            onRequestClose={requestClose}\n            onFocusOut={() => controlRef.current?.focus()}\n            ref={firstSelectableRef as React.RefObject<HTMLDivElement>}\n          />\n        </PopupBase>\n      )}\n      onOpen={onOpen}\n      onClose={onClose}\n      {...pickCommonProps(props)}\n    />\n  );\n};\nexport default WithDropdown;\n"
  },
  {
    "path": "src/lv2/withFilterableDropdown/WithFilterableDropdown.stories.tsx",
    "content": "import * as React from 'react';\n\nimport { action } from '@storybook/addon-actions';\nimport { boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport WithFilterableDropdown from './WithFilterableDropdown';\nimport { Button } from '../..';\nimport { MdAdd } from 'react-icons/md';\n\nexport default {\n  component: WithFilterableDropdown,\n};\n\nexport const WithDropdownComponent = () => {\n  const data = [\n    { label: '杏', keywords: ['あんず', 'anzu'] },\n    { label: '円', keywords: ['まどか', 'madoka'] },\n    { label: '桜', keywords: ['さくら', 'sakura'] },\n    { label: '巴', keywords: ['ともえ', 'tomoe'] },\n    { label: '焔', keywords: ['ほむら', 'homura'] },\n    { label: '渚', keywords: ['なぎさ', 'nagisa'] },\n    {\n      label: '海鮮助六',\n      keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n    },\n    {\n      label: '助六',\n      keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n    },\n  ];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  const disabled = boolean('disabled', false, 'WithFilterableDropdown');\n  return (\n    <WithFilterableDropdown\n      disabled={disabled}\n      isLoading={boolean('isLoading', false, 'WithFilterableDropdown')}\n      {...commonKnobs()}\n      dropdownContents={data.map((d, i) => ({\n        type: 'checkbox',\n        text: d.label,\n        keywords: d.keywords,\n        checked: status[i],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[i] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      render={(dropdownId, isOpen, buttonRef, togglePopup) => (\n        <span\n          // 例として、<span> で実装した例を載せています。\n          // あくまでメニューの開閉ボタンはボタンであり、本来<button>で実装されるべきことに注意してください。\n          role=\"button\"\n          // キーボード操作が可能になるよう、フォーカス可能にする\n          tabIndex={0}\n          // <span>ではクリックイベントが発火しないため、Enterキー押下時にtogglePopupする\n          onKeyDown={(e) => e.key === 'Enter' && togglePopup(!isOpen)}\n          // <span> なのでaria-disabledを使用しています。\n          // <button> で実装する場合は、WithFilterableDropdownに渡すのと同じ条件をボタンのdisabledにも渡してください\n          aria-disabled={disabled}\n          aria-controls={dropdownId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={buttonRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </span>\n      )}\n    ></WithFilterableDropdown>\n  );\n};\n\nexport const FilterableMenu = () => {\n  const data = [\n    { label: '杏', keywords: ['あんず', 'anzu'] },\n    { label: '円', keywords: ['まどか', 'madoka'] },\n    { label: '桜', keywords: ['さくら', 'sakura'] },\n    { label: '巴', keywords: ['ともえ', 'tomoe'] },\n    { label: '焔', keywords: ['ほむら', 'homura'] },\n    { label: '渚', keywords: ['なぎさ', 'nagisa'] },\n    {\n      label: '海鮮助六',\n      keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n    },\n    {\n      label: '助六',\n      keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n    },\n  ];\n  const disabled = boolean('disabled', false, 'WithFilterableDropdown');\n  return (\n    <WithFilterableDropdown\n      disabled={disabled}\n      {...commonKnobs()}\n      dropdownContents={data.map((d) => ({\n        type: 'selectable',\n        text: d.label,\n        keywords: d.keywords,\n        onClick: action(`click menu ${d.label}`),\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      render={(dropdownId, isOpen, buttonRef, togglePopup) => (\n        <span\n          // 例として、<span> で実装した例を載せています。\n          // あくまでメニューの開閉ボタンはボタンであり、本来<button>で実装されるべきことに注意してください。\n          role=\"button\"\n          // キーボード操作が可能になるよう、フォーカス可能にする\n          tabIndex={0}\n          // <span>ではクリックイベントが発火しないため、Enterキー押下時にtogglePopupする\n          onKeyDown={(e) => e.key === 'Enter' && togglePopup(!isOpen)}\n          // <span> なのでaria-disabledを使用しています。\n          // <button> で実装する場合は、WithFilterableDropdownに渡すのと同じ条件をボタンのdisabledにも渡してください\n          aria-disabled={disabled}\n          aria-controls={dropdownId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={buttonRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </span>\n      )}\n    ></WithFilterableDropdown>\n  );\n};\n\nexport const WithFixedItems = () => {\n  const data = [{ label: '杏', keywords: ['あんず', 'anzu'] }];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  const disabled = boolean('disabled', false, 'WithFilterableDropdown');\n  return (\n    <WithFilterableDropdown\n      disabled={disabled}\n      isLoading={boolean('isLoading', false, 'WithFilterableDropdown')}\n      {...commonKnobs()}\n      dropdownContents={data.map((d, i) => ({\n        type: 'checkbox',\n        text: d.label,\n        keywords: d.keywords,\n        checked: status[i],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[i] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      render={(dropdownId, isOpen, buttonRef, togglePopup) => (\n        <span\n          // 例として、<span> で実装した例を載せています。\n          // あくまでメニューの開閉ボタンはボタンであり、本来<button>で実装されるべきことに注意してください。\n          role=\"button\"\n          // キーボード操作が可能になるよう、フォーカス可能にする\n          tabIndex={0}\n          // <span>ではクリックイベントが発火しないため、Enterキー押下時にtogglePopupする\n          onKeyDown={(e) => e.key === 'Enter' && togglePopup(!isOpen)}\n          // <span> なのでaria-disabledを使用しています。\n          // <button> で実装する場合は、WithFilterableDropdownに渡すのと同じ条件をボタンのdisabledにも渡してください\n          aria-disabled={disabled}\n          aria-controls={dropdownId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={buttonRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </span>\n      )}\n      fixedItems={[\n        {\n          onSelect: () => {\n            // no-op\n          },\n          isVisible: () => true,\n          label: 'もっと見る',\n          disableOnRequestClose: true,\n        },\n        {\n          onSelect: () => {\n            // no-op\n          },\n          isVisible: () => true,\n          label: (value) => `${value}を新規登録`,\n        },\n        {\n          onSelect: () => {\n            // no-op\n          },\n          isVisible: (value) => !value,\n          label: 'valueが空の時だけ表示',\n        },\n      ]}\n    ></WithFilterableDropdown>\n  );\n};\n\nexport const WithNoItems = () => {\n  const data: any[] = [];\n  const disabled = boolean('disabled', false, 'WithFilterableDropdown');\n  return (\n    <WithFilterableDropdown\n      disabled={disabled}\n      {...commonKnobs()}\n      dropdownContents={data.map((d) => ({\n        type: 'selectable',\n        text: d.label,\n        keywords: d.keywords,\n        onClick: action(`click menu ${d.label}`),\n      }))}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      render={(dropdownId, isOpen, buttonRef, togglePopup) => (\n        <span\n          // 例として、<span> で実装した例を載せています。\n          // あくまでメニューの開閉ボタンはボタンであり、本来<button>で実装されるべきことに注意してください。\n          role=\"button\"\n          // キーボード操作が可能になるよう、フォーカス可能にする\n          tabIndex={0}\n          // <span>ではクリックイベントが発火しないため、Enterキー押下時にtogglePopupする\n          onKeyDown={(e) => e.key === 'Enter' && togglePopup(!isOpen)}\n          // <span> なのでaria-disabledを使用しています。\n          // <button> で実装する場合は、WithFilterableDropdownに渡すのと同じ条件をボタンのdisabledにも渡してください\n          aria-disabled={disabled}\n          aria-controls={dropdownId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={buttonRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </span>\n      )}\n    ></WithFilterableDropdown>\n  );\n};\n\nexport const WithDropdownBottomContent = () => {\n  const data = [\n    { label: '杏', keywords: ['あんず', 'anzu'] },\n    { label: '円', keywords: ['まどか', 'madoka'] },\n    { label: '桜', keywords: ['さくら', 'sakura'] },\n    { label: '巴', keywords: ['ともえ', 'tomoe'] },\n    { label: '焔', keywords: ['ほむら', 'homura'] },\n    { label: '渚', keywords: ['なぎさ', 'nagisa'] },\n    {\n      label: '海鮮助六',\n      keywords: ['かいせんすけろく', 'kaisensukeroku', 'さやか', 'sayaka'],\n    },\n    {\n      label: '助六',\n      keywords: ['すけろく', 'sukeroku', 'さやか', 'sayaka'],\n    },\n  ];\n  const [status, setStatus] = React.useState<boolean[]>(\n    Array(data.length).fill(false)\n  );\n\n  const disabled = boolean('disabled', false, 'WithFilterableDropdown');\n  return (\n    <WithFilterableDropdown\n      disabled={disabled}\n      isLoading={boolean('isLoading', false, 'WithFilterableDropdown')}\n      {...commonKnobs()}\n      dropdownContents={data.map((d, i) => ({\n        type: 'checkbox',\n        text: d.label,\n        keywords: d.keywords,\n        checked: status[i],\n        onChange: (e) => {\n          const newStatus = [...status];\n          newStatus[i] = e.target.checked;\n          setStatus(newStatus);\n        },\n      }))}\n      renderDropdownBottomContent={(requestClose) => (\n        <Button\n          type=\"button\"\n          appearance=\"tertiary\"\n          iconPosition=\"left\"\n          IconComponent={MdAdd}\n          onClick={() => requestClose()}\n          mr={1}\n        >\n          取引先を追加\n        </Button>\n      )}\n      onFilterChange={action('onFilterChange')}\n      onOpen={action('onOpen')}\n      render={(dropdownId, isOpen, buttonRef, togglePopup) => (\n        <span\n          // 例として、<span> で実装した例を載せています。\n          // あくまでメニューの開閉ボタンはボタンであり、本来<button>で実装されるべきことに注意してください。\n          role=\"button\"\n          // キーボード操作が可能になるよう、フォーカス可能にする\n          tabIndex={0}\n          // <span>ではクリックイベントが発火しないため、Enterキー押下時にtogglePopupする\n          onKeyDown={(e) => e.key === 'Enter' && togglePopup(!isOpen)}\n          // <span> なのでaria-disabledを使用しています。\n          // <button> で実装する場合は、WithFilterableDropdownに渡すのと同じ条件をボタンのdisabledにも渡してください\n          aria-disabled={disabled}\n          aria-controls={dropdownId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={buttonRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </span>\n      )}\n    ></WithFilterableDropdown>\n  );\n};\n"
  },
  {
    "path": "src/lv2/withFilterableDropdown/WithFilterableDropdown.tsx",
    "content": "import * as React from 'react';\nimport { pickCommonProps, CommonProps } from '../../utilities/commonProps';\nimport SearchField from '../../lv1/forms/SearchField';\nimport WithPopup from '../withPopup/WithPopup';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport DropdownMenuContent from '../dropdown/DropdownMenuContent';\nimport {\n  DropdownContentCheckbox,\n  DropdownContentSelectable,\n} from '../dropdown/types';\nimport Note from '../../lv1/typography/Note';\nimport { Keys } from '../../utilities/keyboard';\nimport Loading from '../../lv1/Loading';\nimport MarginBase from '../../lv1/bases/MarginBase';\n\ntype WithFilterableDropdownContentProps = {\n  controlRef: React.RefObject<HTMLElement>;\n  dropdownContents: FilterableDropdownContent[];\n  filterValue: string;\n  firstSelectableItemRef: React.RefObject<HTMLElement>;\n  handleFilterChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n  isLoading: boolean;\n  menuContentRef: React.RefObject<HTMLDivElement>;\n  noDataMessage?: React.ReactNode;\n  noResultsMessage?: React.ReactNode;\n  renderDropdownBottomContent?: (requestClose: () => void) => React.ReactNode;\n  requestClose: () => void;\n  visibleContents: FilterableDropdownContent[];\n};\n\nconst WithFilterableDropdownContent: React.FC<\n  WithFilterableDropdownContentProps\n> = (props: WithFilterableDropdownContentProps) => {\n  const {\n    controlRef,\n    dropdownContents,\n    filterValue,\n    firstSelectableItemRef,\n    handleFilterChange,\n    isLoading,\n    menuContentRef,\n    noDataMessage,\n    noResultsMessage,\n    renderDropdownBottomContent,\n    requestClose,\n    visibleContents,\n  } = props;\n\n  const [menuMaxHeightOffset, setMenuMaxHeightOffset] = React.useState<\n    number | undefined\n  >();\n\n  const bottomContentRef = React.useRef<HTMLElement>(null);\n\n  React.useEffect(() => {\n    if (bottomContentRef?.current) {\n      setMenuMaxHeightOffset(\n        bottomContentRef?.current?.getBoundingClientRect().height\n      );\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [bottomContentRef?.current?.getBoundingClientRect().height]);\n\n  return (\n    <div className=\"vb-withFilterableDropdown__popup\">\n      <SearchField\n        mb={1}\n        label=\"検索\"\n        width=\"full\"\n        value={filterValue}\n        onKeyDown={(e) => {\n          if (\n            // 変換中のイベントを無視する。isComposingがないブラウザでは（IEのこと）、全て無視する\n            !('isComposing' in e.nativeEvent) ||\n            e.nativeEvent.isComposing\n          ) {\n            return;\n          }\n          if (e.key === Keys.DOWN) {\n            //下キーならメニューにフォーカス（すると1個めの項目にフォーカスする）\n            menuContentRef.current?.focus();\n            e.preventDefault();\n          } else if (e.key === Keys.UP) {\n            //上キーなら開閉ボタンにフォーカス\n            controlRef.current?.focus();\n            e.preventDefault();\n          }\n        }}\n        onChange={handleFilterChange}\n        ref={firstSelectableItemRef as React.RefObject<HTMLInputElement>}\n      />\n      {visibleContents.length > 0 ? (\n        <MarginBase mr={-1} ml={-1}>\n          <Loading isLoading={!!isLoading}>\n            <DropdownMenuContent\n              contents={visibleContents}\n              menuMaxHeightOffset={\n                renderDropdownBottomContent ? menuMaxHeightOffset : 0\n              }\n              onRequestClose={requestClose}\n              onFocusOut={(direction) => {\n                if (direction === 'upward') {\n                  firstSelectableItemRef.current?.focus();\n                } else {\n                  if (renderDropdownBottomContent) {\n                    // bottomContentRef.current?.focus();\n                    controlRef.current?.focus();\n                  } else {\n                    controlRef.current?.focus();\n                  }\n                }\n              }}\n              ref={menuContentRef}\n            />\n          </Loading>\n        </MarginBase>\n      ) : !isLoading &&\n        filterValue.length > 0 &&\n        dropdownContents.length > 0 ? (\n        <div className=\"vb-withFilterableDropdown__note\">\n          <Note textAlign=\"center\">\n            {noResultsMessage ?? '該当する候補がありません'}\n          </Note>\n        </div>\n      ) : (\n        <div className=\"vb-withFilterableDropdown__note\">\n          <Note textAlign=\"center\">\n            {noDataMessage ?? 'データが登録されていません'}\n          </Note>\n        </div>\n      )}\n      {renderDropdownBottomContent && (\n        <div\n          className=\"vb-withFilterableDropdown__footer\"\n          // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n          tabIndex={0}\n          ref={bottomContentRef as React.RefObject<HTMLInputElement>}\n        >\n          {renderDropdownBottomContent(requestClose)}\n        </div>\n      )}\n    </div>\n  );\n};\n\ntype FixedItem = {\n  disableOnRequestClose?: boolean;\n  isVisible: (filterValue: string) => boolean;\n  label: React.ReactNode | ((filterValue: string) => React.ReactNode);\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  onSelect: (filterValue: string) => any;\n};\n\nexport type FilterableDropdownContent = (\n  | DropdownContentCheckbox\n  | DropdownContentSelectable\n) & {\n  /**\n   * 項目の読みがなやショートカットコードを指定してください（複数指定可能）\n   */\n  keywords?: string[];\n};\ntype Props = Pick<Parameters<typeof WithPopup>[0], 'render' | 'disabled'> & {\n  /**\n   * メニューの項目です。`keywords` として、複数の読みがなやショートカットコードを指定できます。\n   */\n  dropdownContents: FilterableDropdownContent[];\n  /**\n   * `SearchField` の変化時に発火します\n   */\n  onFilterChange?: React.ChangeEventHandler<HTMLInputElement>;\n  /**\n   * Dropdownの展開時に発火します\n   */\n  onOpen?: () => void;\n  /**\n   * スピナーを表示します。\n   */\n  isLoading?: boolean;\n  /**\n   * リストの最後尾に追加するアイテム 一つ目はもっと見る、二つ目新規登録を想定しています\n   */\n  fixedItems?: FixedItem[];\n  noResultsMessage?: React.ReactNode;\n  noDataMessage?: React.ReactNode;\n  renderDropdownBottomContent?: (requestClose: () => void) => React.ReactNode;\n} & CommonProps;\n\n/**\n * ボタン部分のカスタマイズがどうしても必要な場合を除いて `FilterableDropdownButton` を使用してください。\n */\nconst WithFilterableDropdown: React.FC<Props> = (props: Props) => {\n  const {\n    disabled,\n    dropdownContents,\n    fixedItems = [],\n    isLoading,\n    onFilterChange,\n    onOpen,\n    render,\n    noResultsMessage,\n    noDataMessage,\n    renderDropdownBottomContent,\n  } = props;\n  const [filterValue, setFilterValue] = React.useState('');\n  const menuContentRef = React.useRef<HTMLDivElement>(null);\n\n  const handleFilterChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setFilterValue(e.target.value);\n    onFilterChange && onFilterChange(e);\n  };\n\n  const filteredContents =\n    filterValue.length > 0\n      ? dropdownContents.filter(\n          (c) =>\n            (c.type === 'checkbox' && c.checked) ||\n            (typeof c.text === 'string' && c.text.indexOf(filterValue) >= 0) ||\n            (c.keywords &&\n              c.keywords.some((k) =>\n                filterValue\n                  .toLowerCase()\n                  .split(/\\s+/)\n                  .every((word) => k.toLowerCase().indexOf(word) >= 0)\n              ))\n        )\n      : dropdownContents;\n\n  const visibleContents = [\n    ...filteredContents,\n    ...fixedItems\n      .filter((fixedItem) => fixedItem.isVisible(filterValue))\n      .map(\n        ({ label, onSelect, disableOnRequestClose }) =>\n          ({\n            type: 'selectable',\n            text: typeof label === 'function' ? label(filterValue) : label,\n            onClick: () => onSelect(filterValue),\n            disableOnRequestClose,\n          } as DropdownContentSelectable)\n      ),\n  ];\n\n  const memorizedOnClose = React.useCallback(\n    () => setFilterValue(''),\n    [setFilterValue]\n  );\n\n  return (\n    <WithPopup\n      onClose={memorizedOnClose}\n      render={render}\n      disabled={disabled}\n      onOpen={onOpen}\n      renderPopup={(requestClose, firstSelectableItemRef, controlRef) => (\n        <PopupBase paddingSize=\"zero\">\n          <WithFilterableDropdownContent\n            handleFilterChange={handleFilterChange}\n            visibleContents={visibleContents}\n            isLoading={!!isLoading}\n            firstSelectableItemRef={firstSelectableItemRef}\n            menuContentRef={menuContentRef}\n            controlRef={controlRef}\n            filterValue={filterValue}\n            dropdownContents={dropdownContents}\n            noResultsMessage={noResultsMessage}\n            noDataMessage={noDataMessage}\n            requestClose={requestClose}\n            renderDropdownBottomContent={renderDropdownBottomContent}\n          />\n        </PopupBase>\n      )}\n      {...pickCommonProps(props)}\n    />\n  );\n};\n\nexport default WithFilterableDropdown;\n"
  },
  {
    "path": "src/lv2/withPopup/WithPopup.stories.tsx",
    "content": "import * as React from 'react';\n\nimport WithPopup from './WithPopup';\nimport { action } from '@storybook/addon-actions';\nimport { boolean } from '@storybook/addon-knobs';\nimport { commonKnobs } from '../../../stories';\nimport PopupBase from '../../lv1/bases/PopupBase';\nimport Button from '../../lv1/buttons/Button';\nimport Paragraph from '../../lv1/typography/Paragraph';\nimport TextField from '../../lv1/forms/TextField';\nimport TaskDialog from '../dialogs/TaskDialog';\nimport Container from '../../lv1/bases/Container';\n\nexport default {\n  component: WithPopup,\n};\n\nexport const WithWithPopupComponent = () => {\n  const disabled = boolean('disabled', false, 'WithPopup');\n  return (\n    <WithPopup\n      render={(popupId, isOpen, controlRef, togglePopup) => (\n        <span\n          // 例として、<span> で実装した例を載せています。\n          // あくまでメニューの開閉ボタンはボタンであり、本来<button>で実装されるべきことに注意してください。\n          role=\"button\"\n          // キーボード操作が可能になるよう、フォーカス可能にする\n          tabIndex={0}\n          // <span>ではクリックイベントが発火しないため、Enterキー押下時にtogglePopupする\n          onKeyDown={(e) => e.key === 'Enter' && togglePopup(!isOpen)}\n          // <span> なのでaria-disabledを使用しています。\n          // <button> で実装する場合は、WithFilterableDropdownに渡すのと同じ条件をボタンのdisabledにも渡してください\n          aria-disabled={disabled}\n          aria-controls={popupId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={controlRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </span>\n      )}\n      renderPopup={(requestClose, firstSelectableItemRef) => (\n        <PopupBase paddingSize=\"small\">\n          <Button\n            ref={firstSelectableItemRef as React.RefObject<HTMLButtonElement>}\n            onClick={() => requestClose()}\n            mr={1}\n          >\n            ボタン1\n          </Button>\n          <Button onClick={() => requestClose()}>ボタン2</Button>\n        </PopupBase>\n      )}\n      disabled={disabled}\n      onOpen={action('open')}\n      onClose={action('close')}\n      {...commonKnobs()}\n    ></WithPopup>\n  );\n};\n\nexport const MultipleComponents = () => (\n  <>\n    <WithPopup\n      render={(popupId, isOpen, controlRef) => (\n        <Button\n          aria-controls={popupId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={controlRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </Button>\n      )}\n      renderPopup={(requestClose, firstSelectableItemRef) => (\n        <PopupBase paddingSize=\"small\">\n          <Button\n            ref={firstSelectableItemRef as React.RefObject<HTMLButtonElement>}\n            onClick={() => requestClose()}\n            mr={1}\n          >\n            ボタン1\n          </Button>\n          <Button onClick={() => requestClose()}>ボタン2</Button>\n        </PopupBase>\n      )}\n      disabled={boolean('disabled', false, 'WithPopup')}\n      {...commonKnobs()}\n    ></WithPopup>\n    <WithPopup\n      render={(popupId, isOpen, controlRef) => (\n        <Button\n          aria-controls={popupId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={controlRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </Button>\n      )}\n      renderPopup={(requestClose, firstSelectableItemRef) => (\n        <PopupBase paddingSize=\"small\">\n          <Button\n            ref={firstSelectableItemRef as React.RefObject<HTMLButtonElement>}\n            onClick={() => requestClose()}\n            mr={1}\n          >\n            ボタン1\n          </Button>\n          <Button onClick={() => requestClose()}>ボタン2</Button>\n        </PopupBase>\n      )}\n      disabled={boolean('disabled', false, 'WithPopup')}\n      {...commonKnobs()}\n    ></WithPopup>\n  </>\n);\n\nexport const WithoutFirstSelectableItemRef = () => (\n  <WithPopup\n    render={(popupId, isOpen, controlRef) => (\n      <Button\n        aria-controls={popupId}\n        aria-haspopup={true}\n        aria-expanded={isOpen}\n        ref={controlRef as React.RefObject<HTMLButtonElement>}\n      >\n        開閉ボタン\n      </Button>\n    )}\n    renderPopup={(requestClose) => (\n      <PopupBase paddingSize=\"small\">\n        <Paragraph mb={1}>\n          firstSelectableItemRef\n          使わない場合、最初にTabキーでフォーカスするのはPopupになります。\n        </Paragraph>\n        <Paragraph mb={1}>\n          ボタンやフォームコントロールより前に説明を乗せたりする場合はfirstSelectableItemRefを使わないようにすると良いです\n        </Paragraph>\n        <Button onClick={() => requestClose()} mr={1}>\n          ボタン1\n        </Button>\n        <Button onClick={() => requestClose()}>ボタン2</Button>\n      </PopupBase>\n    )}\n    disabled={boolean('disabled', false, 'WithPopup')}\n    {...commonKnobs()}\n  ></WithPopup>\n);\nexport const InBigBlock = () => (\n  <div style={{ padding: '20rem 80rem' }}>\n    <WithPopup\n      render={(popupId, isOpen, controlRef) => (\n        <Button\n          aria-controls={popupId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={controlRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </Button>\n      )}\n      renderPopup={(requestClose, firstSelectableItemRef) => (\n        <PopupBase paddingSize=\"small\">\n          <Button\n            ref={firstSelectableItemRef as React.RefObject<HTMLButtonElement>}\n            onClick={() => requestClose()}\n            mr={1}\n          >\n            ボタン1\n          </Button>\n          <Button onClick={() => requestClose()}>ボタン2</Button>\n        </PopupBase>\n      )}\n      disabled={boolean('disabled', false, 'WithPopup')}\n      {...commonKnobs()}\n    ></WithPopup>\n  </div>\n);\n\nconst TaskDialogSample = () => {\n  const [isOpen, setIsOpen] = React.useState(false);\n\n  return (\n    <>\n      <Button onClick={() => setIsOpen(true)}>open dialog</Button>\n\n      <TaskDialog\n        onRequestClose={() => {\n          setIsOpen(false);\n        }}\n        title=\"TaskDialog\"\n        isOpen={isOpen}\n        closeButtonLabel=\"閉じる\"\n      >\n        <div style={{ height: '5rem' }}></div>\n        <WithPopup\n          render={(popupId, isOpen, controlRef) => (\n            <Button\n              aria-controls={popupId}\n              aria-haspopup={true}\n              aria-expanded={isOpen}\n              ref={controlRef as React.RefObject<HTMLButtonElement>}\n            >\n              開閉ボタン\n            </Button>\n          )}\n          renderPopup={(requestClose, firstSelectableItemRef) => (\n            <PopupBase paddingSize=\"small\">\n              <Button\n                ref={\n                  firstSelectableItemRef as React.RefObject<HTMLButtonElement>\n                }\n                onClick={() => requestClose()}\n                mr={1}\n              >\n                ボタン1\n              </Button>\n              <Button onClick={() => requestClose()}>ボタン2</Button>\n            </PopupBase>\n          )}\n          disabled={boolean('disabled', false, 'WithPopup')}\n          {...commonKnobs()}\n        ></WithPopup>\n        <div style={{ height: '40rem' }}></div>\n      </TaskDialog>\n    </>\n  );\n};\n\nexport const InsideTaskDialog = () => <TaskDialogSample />;\nexport const InsideContainer = () => (\n  <Container>\n    <div style={{ height: '5rem' }}></div>\n    <WithPopup\n      render={(popupId, isOpen, controlRef) => (\n        <Button\n          aria-controls={popupId}\n          aria-haspopup={true}\n          aria-expanded={isOpen}\n          ref={controlRef as React.RefObject<HTMLButtonElement>}\n        >\n          開閉ボタン\n        </Button>\n      )}\n      renderPopup={(requestClose, firstSelectableItemRef) => (\n        <PopupBase paddingSize=\"small\">\n          <Button\n            ref={firstSelectableItemRef as React.RefObject<HTMLButtonElement>}\n            onClick={() => requestClose()}\n            mr={1}\n          >\n            ボタン1\n          </Button>\n          <Button onClick={() => requestClose()}>ボタン2</Button>\n        </PopupBase>\n      )}\n      disabled={boolean('disabled', false, 'WithPopup')}\n      {...commonKnobs()}\n    ></WithPopup>\n    <div style={{ height: '40rem' }}></div>\n  </Container>\n);\n\nexport const OpenCloseCallback = () => {\n  const [log, setLog] = React.useState<string[]>([]);\n  return (\n    <>\n      <WithPopup\n        renderPopup={(requestClose) => (\n          <PopupBase>\n            <Button onClick={() => requestClose()}>閉じる</Button>\n          </PopupBase>\n        )}\n        render={(popupId, isOpen, controlRef) => (\n          <Button\n            aria-controls={popupId}\n            aria-expanded={isOpen}\n            ref={controlRef as React.RefObject<HTMLButtonElement>}\n          >\n            Open Popup\n          </Button>\n        )}\n        onOpen={() => setLog(log.concat(['open']))}\n        onClose={() => setLog(log.concat(['close']))}\n      />\n      <output>\n        {log.map((e, i) => (\n          <div key={i}>{e}</div>\n        ))}\n      </output>\n    </>\n  );\n};\n\nconst InputSupportExample = () => {\n  const [handling, setHandling] = React.useState<boolean>(false);\n  const [value, setValue] = React.useState<number>(0);\n\n  React.useEffect(() => {\n    if (handling) {\n      const closeMenu = () => {\n        setHandling(false);\n      };\n      window.addEventListener('click', closeMenu);\n      return () => window.removeEventListener('click', closeMenu);\n    }\n  }, [handling]);\n  return (\n    <WithPopup\n      render={(popupId, isOpen, controlRef, toggleOpen) => (\n        // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n        <span\n          onClick={(e) => e.stopPropagation()}\n          onKeyDown={() => {\n            /* do nothing */\n          }}\n        >\n          <TextField\n            label=\"数字\"\n            value={`${value}`}\n            onChange={(e) => setValue(Number(e.target.value))}\n            aria-controls={popupId}\n            aria-haspopup={true}\n            aria-expanded={isOpen}\n            role=\"combobox\"\n            ref={controlRef as React.RefObject<HTMLInputElement>}\n            onFocus={() => {\n              if (!handling) {\n                toggleOpen(true);\n                setHandling(true);\n              }\n            }}\n            onBlur={() => {\n              if (!isOpen) {\n                setHandling(false);\n              }\n            }}\n            onKeyDown={(e) => {\n              if (e.keyCode === 27 /* ESC */) {\n                toggleOpen(false);\n              } else if (e.keyCode !== 9 /* TAB */) {\n                toggleOpen(true);\n              }\n            }}\n          />\n        </span>\n      )}\n      renderPopup={(_requestClose, firstSelectableItemRef) => (\n        <PopupBase paddingSize=\"small\">\n          <Button\n            ref={firstSelectableItemRef as React.RefObject<HTMLButtonElement>}\n            onClick={() => {\n              setValue(value + 1);\n            }}\n            mr={1}\n          >\n            +1\n          </Button>\n          <Button\n            onClick={() => {\n              setValue(value + 10);\n            }}\n            mr={1}\n          >\n            +10\n          </Button>\n          <Button\n            onClick={() => {\n              setValue(value + 100);\n            }}\n            mr={1}\n          >\n            +100\n          </Button>\n        </PopupBase>\n      )}\n      disabled={boolean('disabled', false, 'WithPopup')}\n      {...commonKnobs()}\n    ></WithPopup>\n  );\n};\n\nexport const InputSupport = () => (\n  <>\n    <Paragraph>\n      入力サポートUIみたいなものを作れないか実験してみているサンプル\n    </Paragraph>\n    <InputSupportExample />\n  </>\n);\n"
  },
  {
    "path": "src/lv2/withPopup/WithPopup.tsx",
    "content": "import * as React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\nimport ScrollPortal from '../../utilities/ScrollPortal';\nimport { Keys } from '../../utilities/keyboard';\nimport useUniqueId from '../../hooks/useUniqueId';\nimport { FocusTrap } from '../../lv1';\nimport Button from '../../lv1/buttons/Button';\nimport VisuallyHidden from '../../lv1/a11y/VisuallyHidden';\n\ntype Props = {\n  /**\n   * ポップアップ開閉コントロール描画用 render function\n   *\n   * - `popupId` を開閉コントロールの `aria-controls` に渡してください\n   * - `isOpen` を開閉コントロールの `aria-expanded` に渡してください\n   * - `controlRef` を開閉コントロールの `ref` に渡してください\n   * - `togglePopup` はクリック以外のタイミングでポップアップを開閉したい際に使用してください。\n   */\n  render: (\n    /**\n     * ポップアップのid: ボタンのaria-controlsに渡してください\n     */\n    popupId: string,\n    /**\n     * ドロップダウンメニューの開閉状況: ボタンのaria-expandedに渡してください\n     */\n    isOpen: boolean,\n    /**\n     * 開閉コントロールのrefに渡してください\n     */\n    controlRef: React.RefObject<HTMLElement>,\n    /**\n     * 強制的に表示/非表示を切り替えます。要素のクリック以外のタイミングでポップアップを開閉する際に使用します。\n     */\n    togglePopup: (open: boolean) => void\n  ) => React.ReactNode;\n  /**\n   * ポップアップ描画用 render function\n   *\n   * - requestClose を呼ぶことでポップアップを閉じさせます\n   * - firstSelectedItemRef は、フォーカス可能な要素のうち最初の要素のrefに渡してください。\n   * - フォーカス可能な要素より前に説明文等がある場合は、firstSelectedItemRef をどの要素にも渡さないでください\n   */\n  renderPopup: (\n    /**\n     * これを呼ぶことでポップアップを閉じます\n     */\n    requestClose: () => void,\n    /**\n     * - フォーカス可能な要素のうち最初の要素のrefに渡してください。\n     * - フォーカス可能な要素より前に説明文等がある場合は、firstSelectedItemRef をどの要素にも渡さないでください\n     */\n    firstSelectableItemRef: React.RefObject<HTMLElement>,\n    /**\n     * renderに渡さるのと同じRefオブジェクトです。ボタンへの参照として使用し、ref属性には渡さないでください。\n     */\n    controlRefDoNotUseAsRefAttribute: React.RefObject<HTMLElement>\n  ) => React.ReactNode;\n  disabled?: boolean;\n  /**\n   * popupを開いた時に発火します。useEffectのトリガーになるためメモ化したものを渡すことを推奨します。\n   */\n  onOpen?: () => void;\n  /**\n   * popupを閉じた時に発火します。useEffectのトリガーになるためメモ化したものを渡すことを推奨します。\n   */\n  onClose?: () => void;\n} & CommonProps;\n\n/**\n * ポップアップを実装するためのコンポーネントです。\n *\n * - ボタンからドロップダウンメニューを表示したい場合は、 `DropdownButton` コンポーネントを使用してください\n * - 作ろうとしている機能と同じ機能を持つコンポーネントが存在する場合はそちらを使用してください。このコンポーネントは扱いが面倒です。\n * - `render` の引数は以下のように使用してください\n *   - `popupId` を開閉コントロールの `aria-controls` に渡してください\n *   - `isOpen` を開閉コントロールの `aria-expanded` に渡してください\n *   - `controlRef` を開閉コントロールの `ref` に渡してください\n * - `renderPopup` の引数は以下のように使用してください\n *   - requestClose を呼ぶことでポップアップを閉じさせます\n *   - firstSelectedItemRef は、フォーカス可能な要素のうち最初の要素のrefに渡してください。\n *   - フォーカス可能な要素より前に説明文等がある場合は、firstSelectedItemRef をどの要素にも渡さないでください\n */\nconst WithPopup: React.FC<Props> = (props: Props) => {\n  const { render, disabled, renderPopup, onOpen, onClose } = props;\n  const baseClass = 'vb-withPopup';\n  const [open, setOpen] = React.useState(false);\n  const firstSelectableItemRef = React.useRef<HTMLElement>(null);\n  const popupRef = React.useRef<HTMLDivElement>(null);\n\n  const contentWrapperRef = React.useRef<HTMLSpanElement>(null);\n  const [horizontalPosition, setHorizontalPosition] = React.useState<\n    'left' | 'right'\n  >('left');\n  const [verticalPosition, setVerticalPosition] = React.useState<\n    'top' | 'bottom'\n  >('bottom');\n  const uid = useUniqueId(baseClass);\n  const popupId = `${uid}__popup`;\n  const controlRef = React.useRef<HTMLElement>(null);\n\n  const adjustPosition = () => {\n    if (!(contentWrapperRef.current && popupRef.current)) {\n      return;\n    }\n    const buttonRect = contentWrapperRef.current.getBoundingClientRect();\n    const popupRect = popupRef.current.getBoundingClientRect();\n\n    setHorizontalPosition(\n      buttonRect.left + popupRect.width > document.documentElement.clientWidth\n        ? 'right'\n        : 'left'\n    );\n    setVerticalPosition(\n      buttonRect.bottom + popupRect.height >\n        document.documentElement.clientHeight &&\n        buttonRect.bottom > popupRect.height\n        ? 'top'\n        : 'bottom'\n    );\n  };\n\n  const openCallbackFlagRef = React.useRef(false);\n  const closeCallbackFlagRef = React.useRef(false);\n\n  const openMenu = () => {\n    setOpen(true);\n    openCallbackFlagRef.current = true;\n  };\n  const closeMenu = React.useCallback(() => {\n    setOpen(false);\n    closeCallbackFlagRef.current = true;\n  }, []);\n\n  const openCallback = React.useCallback(() => {\n    if (openCallbackFlagRef.current) {\n      onOpen?.();\n      openCallbackFlagRef.current = false;\n    }\n  }, [onOpen]);\n  const closeCallback = React.useCallback(() => {\n    if (closeCallbackFlagRef.current) {\n      onClose?.();\n      closeCallbackFlagRef.current = false;\n    }\n  }, [onClose]);\n\n  React.useEffect(() => {\n    if (open) {\n      openCallback();\n      // 開いた瞬間にwindowにイベントが伝播して閉じてしまうのを防ぐため、setTimeoutしてaddEventListenerを遅らせている\n      setTimeout(() => {\n        (firstSelectableItemRef.current || popupRef.current)?.focus();\n        window.addEventListener('click', closeMenu);\n      });\n      return () => window.removeEventListener('click', closeMenu);\n    } else {\n      closeCallback();\n    }\n  }, [closeMenu, open, openCallback, closeCallback]);\n\n  React.useLayoutEffect(() => {\n    adjustPosition();\n  }, [open]);\n\n  const requestClose = () => {\n    closeMenu();\n    if (controlRef.current) {\n      controlRef.current.focus();\n    }\n  };\n\n  const togglePopup = (open: boolean) => {\n    if (disabled) {\n      return;\n    }\n    if (open) {\n      openMenu();\n    } else {\n      closeMenu();\n    }\n    if (controlRef.current) {\n      controlRef.current.focus();\n    }\n  };\n\n  const popupWrapper = () => {\n    return (\n      <CSSTransition\n        in={open}\n        classNames={`${baseClass}__animation`}\n        timeout={{\n          enter: 300,\n          exit: 300,\n        }}\n        unmountOnExit={true}\n      >\n        <div className={`${baseClass}__popupWrapper`}>\n          <FocusTrap\n            // ポップアップの始まり・終わりまでTabキーで移動した場合、ボタンあるいはポップアップ自体にフォーカスを戻す\n            onFocusInsideTop={() => {\n              if (controlRef.current) {\n                controlRef.current.focus();\n              } else if (popupRef.current) {\n                popupRef.current.focus();\n              }\n              return true;\n            }}\n            onFocusInsideBottom={() => {\n              if (controlRef.current) {\n                controlRef.current.focus();\n              } else if (popupRef.current) {\n                popupRef.current.focus();\n              }\n              return true;\n            }}\n          >\n            {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n            <div\n              className={`${baseClass}__popup${\n                horizontalPosition === 'right'\n                  ? ` ${baseClass}__popup--rightAligned`\n                  : ''\n              }`}\n              tabIndex={-1}\n              id={popupId}\n              onKeyDown={(e) => {\n                e.stopPropagation();\n                if (e.key === Keys.ESC) {\n                  closeMenu();\n                  if (controlRef.current) {\n                    controlRef.current.focus();\n                  }\n                }\n              }}\n              onClick={(e) => e.stopPropagation()}\n              ref={popupRef}\n            >\n              {renderPopup(requestClose, firstSelectableItemRef, controlRef)}\n            </div>\n          </FocusTrap>\n          {/* iOS VoiceOver/Android Talkbackでポップアップを閉じられるように明示的に閉じるUIを置いておく */}\n          <VisuallyHidden>\n            <Button onClick={closeMenu}>閉じる</Button>\n          </VisuallyHidden>\n        </div>\n      </CSSTransition>\n    );\n  };\n\n  return (\n    // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n    <span\n      {...commonProps(props, baseClass)}\n      onClick={(e): void => {\n        open && e.stopPropagation();\n        if (!disabled) {\n          if (open) {\n            closeMenu();\n          } else {\n            openMenu();\n          }\n        }\n      }}\n      onKeyDown={(e) => {\n        if (!open) {\n          return;\n        }\n        if (\n          (e.key === Keys.TAB || e.key === Keys.DOWN) &&\n          (popupRef.current || firstSelectableItemRef.current)\n        ) {\n          e.preventDefault();\n          if (firstSelectableItemRef.current) {\n            firstSelectableItemRef.current.focus();\n          } else if (popupRef.current) {\n            popupRef.current.focus();\n          }\n        }\n      }}\n    >\n      {/* Dropdownの位置調整は、contentWrapperをdisplay:blockにして、これを基準にする */}\n      <span className={`${baseClass}__contentWrapper`} ref={contentWrapperRef}>\n        {render(popupId, open, controlRef, togglePopup)}\n      </span>\n      <ScrollPortal\n        isActive={open}\n        positionalBaseElement={contentWrapperRef.current || undefined}\n        horizontalPosition={horizontalPosition}\n        verticalPosition={verticalPosition}\n        onOverflow={() => closeMenu()}\n        popupRef={popupRef}\n        data-masking={props['data-masking']}\n      >\n        {popupWrapper()}\n      </ScrollPortal>\n    </span>\n  );\n};\nexport default WithPopup;\n"
  },
  {
    "path": "src/lv2/withTOC/WithTOC.stories.tsx",
    "content": "import React, { useMemo } from 'react';\n\nimport { MdHome } from 'react-icons/md';\nimport {\n  Colors2021GY02,\n  ColumnBase,\n  GlobalNavi,\n  MarginBase,\n  PageTitle,\n  Paragraph,\n  SectionTitle,\n  WithTOC,\n} from '../../';\nimport { commonKnobs } from '../../../stories';\n\nexport default {\n  component: WithTOC,\n};\n\nconst Skelton = () => (\n  <svg width={600} height={30} viewBox=\"0 0 600 30\" fill={Colors2021GY02}>\n    <rect x=\"0\" y=\"0\" rx=\"15\" ry=\"15\" width=\"200\" height=\"30\" />\n    <rect x=\"220\" y=\"0\" rx=\"15\" ry=\"15\" width=\"380\" height=\"30\" />\n  </svg>\n);\n\nexport const WithTOCComponent = () => {\n  const contents = useMemo(\n    () =>\n      ['Section 1', 'Section 2', 'Lorem ipsum dolor sit amet'].map(\n        (label, i) => ({\n          id: `WithTOCComponent--section${i}`,\n          label,\n          content: (\n            <ColumnBase mb={1}>\n              <SectionTitle mb={1}>{label}</SectionTitle>\n              <Skelton />\n            </ColumnBase>\n          ),\n        })\n      ),\n    []\n  );\n  return <WithTOC contents={contents} {...commonKnobs()} />;\n};\n\nexport const OffsetExample = () => {\n  const contents = useMemo(\n    () =>\n      [\n        'Section 1',\n        'Section 2',\n        'セクション３',\n        'Lorem ipsum dolor sit amet',\n        '寿限無寿限無五劫のすりきれ海砂利水魚の水行末雲来末風来末',\n      ].map((label, i) => ({\n        id: `OffsetExample--section${i}`,\n        label,\n        content: (\n          <ColumnBase mb={3}>\n            <SectionTitle mb={1}>{label}</SectionTitle>\n            <Paragraph mb={2}>\n              Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam\n              vitae ligula id augue ultrices mollis vitae eget neque.\n              Pellentesque nibh ex, dictum ac tempor eget, mollis a nulla. Sed\n              semper velit lectus, eu convallis tellus dapibus nec. Orci varius\n              natoque penatibus et magnis dis parturient montes, nascetur\n              ridiculus mus. Fusce eget enim nunc. Morbi ac egestas mi. Integer\n              aliquet quam vel commodo molestie.\n            </Paragraph>\n            {[...Array(5)].map((_, n) => (\n              <MarginBase key={n} mt={1}>\n                <Skelton />\n              </MarginBase>\n            ))}\n          </ColumnBase>\n        ),\n      })),\n    []\n  );\n\n  return (\n    <div\n      id=\"OffsetExample--ScrollContainer\"\n      style={{ position: 'relative', overflow: 'auto', height: '30rem' }}\n    >\n      <div style={{ position: 'sticky', top: 0, zIndex: 1 }}>\n        <GlobalNavi\n          links={[\n            {\n              title: 'Some Sticky Header',\n              url: '#',\n              IconComponent: MdHome,\n              current: true,\n            },\n          ]}\n        />\n      </div>\n      <PageTitle mt={2} mb={1}>\n        Lorem Ipsum Dolor\n      </PageTitle>\n      {[...Array(3)].map((_, n) => (\n        <MarginBase key={n} mb={1}>\n          <Skelton />\n        </MarginBase>\n      ))}\n      <WithTOC\n        contents={contents}\n        containerID=\"OffsetExample--ScrollContainer\"\n        offsetTop={48}\n        mt={2}\n        mb={2}\n      />\n      {[...Array(10)].map((_, n) => (\n        <MarginBase key={n} mt={1}>\n          <Skelton />\n        </MarginBase>\n      ))}\n    </div>\n  );\n};\n"
  },
  {
    "path": "src/lv2/withTOC/WithTOC.tsx",
    "content": "import React, { useMemo, useRef } from 'react';\nimport { Link } from 'react-scroll';\nimport commonProps, { CommonProps } from '../../utilities/commonProps';\n\ntype WithTOCContent = {\n  id: string;\n  label: string;\n  content: React.ReactNode;\n};\n\ntype Props = {\n  /**\n   * Content bodies and definitions across each sections.\n   * 項目ごとの内容および定義一覧。\n   *\n   * - `id`: Section ID which users can refer to as an anchor. アンカーとして利用される、各項目ごとの要素ID。\n   * - `label`: Section name appears in the ToC. 目次に表示される項目名。\n   * - `content`: Body of each sections. 各項目の内容。\n   */\n  contents: Array<WithTOCContent>;\n\n  /**\n   * Container to perform scrolling in.\n   * スクロールさせる親コンテナ要素。\n   */\n  containerID?: string;\n\n  /**\n   * Scroll position offset from top in screen pixels (`px`).\n   * スクロールのオフセット値を指定。\n   */\n  offsetTop?: number;\n\n  /**\n   * Callback fired on ToC link clicks.\n   * 目次のリンク押下時に呼び出されるコールバック。\n   *\n   * Usage example: `id => history.push({ hash: id })`\n   */\n  onNavigateTo?: (id: string) => void;\n} & CommonProps;\n\n/**\n * `<WithTOC/>` represents a list of content sections with an automatically generated table of contents.\n * 目次付きのコンテンツリストです。\n */\nconst WithTOC: React.FC<Props> = (props: Props) => {\n  const baseClass = 'vb-withTOC';\n  const { containerID, contents, offsetTop, onNavigateTo } = props;\n\n  const contentsRef = useRef<HTMLDivElement>(null);\n\n  const toc = useMemo(\n    () =>\n      contents.map((c) => (\n        <li key={`index-${c.id}`}>\n          <Link\n            to={c.id}\n            className={`${baseClass}__toc__link`}\n            activeClass={`${baseClass}__toc__link--current`}\n            href={`#${c.id}`}\n            onClick={() => {\n              (\n                contentsRef.current?.querySelector(\n                  `.${baseClass}__contents__section#${c.id}`\n                ) as HTMLElement | null\n              )?.focus({ preventScroll: true });\n              onNavigateTo && onNavigateTo(c.id);\n            }}\n            containerId={containerID}\n            offset={offsetTop && 0 - offsetTop}\n            smooth=\"easeOutCubic\"\n            duration={500}\n            spy\n            hashSpy\n          >\n            {c.label}\n          </Link>\n        </li>\n      )),\n    [containerID, contents, offsetTop, onNavigateTo]\n  );\n\n  const bodies = useMemo(\n    () =>\n      contents.map((c) => (\n        <section\n          key={`body-${c.id}`}\n          id={c.id}\n          className={`${baseClass}__contents__section`}\n          aria-label={c.label}\n          tabIndex={-1}\n        >\n          {c.content}\n        </section>\n      )),\n    [contents]\n  );\n\n  const containerStyle = useMemo(\n    () => (offsetTop ? { top: `${offsetTop}px` } : {}),\n    [offsetTop]\n  );\n\n  return (\n    <section {...commonProps(props, baseClass)}>\n      <nav className={`${baseClass}__toc`} aria-label=\"目次\">\n        <ol className={`${baseClass}__toc__container`} style={containerStyle}>\n          {toc}\n        </ol>\n      </nav>\n      <div ref={contentsRef} className={`${baseClass}__contents`}>\n        {bodies}\n      </div>\n    </section>\n  );\n};\nexport default WithTOC;\n"
  },
  {
    "path": "src/utilities/AriaProps.ts",
    "content": "/*\n  roleごとに使用できるaria属性を定義しておくことで、WAI-ARIAを扱う上で便利にしたいものの、量が多くてしんどそう。\n  普段使わないものまでここに定義していくのはしんどいので、よく使うもの/必要になったものを定義していっています。\n */\n\ntype AriaExpandedT = boolean;\ntype AriaPressedT = boolean | 'mixed';\ntype AriaControlsT = string;\ntype AriaOwnsT = string;\ntype AriaHaspopupT = boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\ntype AriaDescribedbyT = string;\ntype AriaActivedescendantT = string;\ntype AriaAutocompleteT = 'inline' | 'list' | 'both' | 'none';\ntype AriaAtomicT = boolean;\ntype AriaNumberValueT = number;\ntype AriaLevelT = number;\ntype AriaSetSizeT = number;\ntype AriaPosinsetT = number;\n\nexport type ButtonAriaProps = {\n  'aria-expanded'?: AriaExpandedT;\n  'aria-pressed'?: AriaPressedT;\n  'aria-controls'?: AriaControlsT;\n  'aria-owns'?: AriaOwnsT;\n  'aria-haspopup'?: AriaHaspopupT;\n  'aria-describedby'?: AriaDescribedbyT;\n  'aria-atomic'?: AriaAtomicT;\n};\n\nexport type LinkAriaProps = {\n  'aria-expanded'?: AriaExpandedT;\n  'aria-controls'?: AriaControlsT;\n  'aria-owns'?: AriaOwnsT;\n  'aria-haspopup'?: AriaHaspopupT;\n  'aria-describedby'?: AriaDescribedbyT;\n  'aria-atomic'?: AriaAtomicT;\n};\n\nexport type TextBoxAriaProps = {\n  'aria-expanded'?: AriaExpandedT;\n  'aria-activedescendant'?: AriaActivedescendantT;\n  'aria-controls'?: AriaControlsT;\n  'aria-owns'?: AriaOwnsT;\n  'aria-haspopup'?: AriaHaspopupT;\n  'aria-describedby'?: AriaDescribedbyT;\n  'aria-autocomplete'?: AriaAutocompleteT;\n  'aria-atomic'?: AriaAtomicT;\n};\n\nexport type NumberInputAriaProps = {\n  'aria-valuemin'?: AriaNumberValueT;\n  'aria-valuemax'?: AriaNumberValueT;\n  'aria-valuenow'?: AriaNumberValueT;\n};\n\nexport type TableRowAriaProps = {\n  'aria-level'?: AriaLevelT;\n  'aria-setsize'?: AriaSetSizeT;\n  'aria-posinset'?: AriaPosinsetT;\n  'aria-expanded'?: AriaExpandedT;\n};\n\nexport function filterButtonAriaProps(props: ButtonAriaProps): ButtonAriaProps {\n  return {\n    'aria-expanded': props['aria-expanded'],\n    'aria-pressed': props['aria-pressed'],\n    'aria-controls': props['aria-controls'],\n    'aria-owns': props['aria-owns'],\n    'aria-haspopup': props['aria-haspopup'],\n    'aria-describedby': props['aria-describedby'],\n    'aria-atomic': props['aria-atomic'],\n  };\n}\n\nexport function filterLinkAriaProps(props: LinkAriaProps): LinkAriaProps {\n  return {\n    'aria-expanded': props['aria-expanded'],\n    'aria-controls': props['aria-controls'],\n    'aria-owns': props['aria-owns'],\n    'aria-haspopup': props['aria-haspopup'],\n    'aria-describedby': props['aria-describedby'],\n    'aria-atomic': props['aria-atomic'],\n  };\n}\n\nexport function filterTextBoxAriaProps(\n  props: TextBoxAriaProps\n): TextBoxAriaProps {\n  return {\n    'aria-expanded': props['aria-expanded'],\n    'aria-activedescendant': props['aria-activedescendant'],\n    'aria-controls': props['aria-controls'],\n    'aria-owns': props['aria-owns'],\n    'aria-haspopup': props['aria-haspopup'],\n    'aria-describedby': props['aria-describedby'],\n    'aria-autocomplete': props['aria-autocomplete'],\n    'aria-atomic': props['aria-atomic'],\n  };\n}\n\nexport function filterNumberInputAriaProps(\n  props: NumberInputAriaProps\n): NumberInputAriaProps {\n  return {\n    'aria-valuemin': props['aria-valuemin'],\n    'aria-valuemax': props['aria-valuemax'],\n    'aria-valuenow': props['aria-valuenow'],\n  };\n}\n\nexport function filterTableRowAriaProps(\n  props: TableRowAriaProps\n): TableRowAriaProps {\n  return {\n    'aria-expanded': props['aria-expanded'],\n    'aria-setsize': props['aria-setsize'],\n    'aria-posinset': props['aria-posinset'],\n    'aria-level': props['aria-level'],\n  };\n}\n"
  },
  {
    "path": "src/utilities/Ascii.test.ts",
    "content": "import { Ascii } from './Ascii';\n\ndescribe('Ascii', () => {\n  const zenkaku =\n    '１２３４５６７８９０－＝ｑｗｅｒｔｙｕｉｏｐ［］＼ａｓｄｆｇｈｊｋｌ；＇ｚｘｃｖｂｎｍ，．／！＠＃＄％＾＆＊（）＿＋ＱＷＥＲＴＹＵＩＯＰ｛｝｜ＡＳＤＦＧＨＪＫＬ：＂ＺＸＣＶＢＮＭ＜＞？';\n  const hankaku =\n    '1234567890-=qwertyuiop[]\\\\asdfghjkl;\\'zxcvbnm,./!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>?';\n  describe('zenkakuToHankaku', () => {\n    it('converts zenkaku to ASCII code', () => {\n      const subject = Ascii.zenkakuToHankaku(zenkaku);\n      expect(subject).toEqual(hankaku);\n    });\n    it('converts not convert hankaku', () => {\n      const subject = Ascii.zenkakuToHankaku(hankaku);\n      expect(subject).toEqual(hankaku);\n    });\n  });\n  describe('hankakuToZenkaku', () => {\n    it('converts hankaku to zenkaku code', () => {\n      const subject = Ascii.hankakuToZenkaku(hankaku);\n      expect(subject).toEqual(zenkaku);\n    });\n    it('converts not convert zenkaku', () => {\n      const subject = Ascii.hankakuToZenkaku(zenkaku);\n      expect(subject).toEqual(zenkaku);\n    });\n  });\n});\n"
  },
  {
    "path": "src/utilities/Ascii.ts",
    "content": "const hankakuToZenkaku = (str: string): string => {\n  // 全角スペースは離れてるので先にやる\n  return str.replace(/\\u0020/g, '\\u3000').replace(\n    // 半角「!」(0021) から半角チルダ(007E)\n    /[\\u0021-\\u007E]/g,\n    (s) => String.fromCharCode(s.charCodeAt(0) + 0xfee0)\n  );\n};\n\nconst zenkakuToHankaku = (str: string): string => {\n  // 全角スペースは離れてるので先にやる\n  return str.replace(/\\u3000/g, '\\u0020').replace(\n    // 全角「！」(FF01)から全角チルダ(FF5E)\n    /[\\uFF01-\\uFF5E]/g,\n    (s) => String.fromCharCode(s.charCodeAt(0) - 0xfee0)\n  );\n};\n\nexport const Ascii = { hankakuToZenkaku, zenkakuToHankaku };\n"
  },
  {
    "path": "src/utilities/DOMUtil.ts",
    "content": "export const scrollableParent = (\n  el: HTMLElement | null\n): HTMLElement | null => {\n  if (\n    !el ||\n    el === window.document.documentElement ||\n    el === window.document.body\n  ) {\n    return null;\n  }\n  const styles = window.getComputedStyle(el);\n  if (\n    ['auto', 'scroll'].indexOf(styles.overflowY) >= 0 ||\n    ['auto', 'scroll'].indexOf(styles.overflowX) >= 0\n  ) {\n    return el;\n  } else if (styles.position === 'fixed' || styles.position === 'sticky') {\n    return window.document.body;\n  }\n  return scrollableParent(el.parentElement);\n};\n"
  },
  {
    "path": "src/utilities/Dialog.tsx",
    "content": "import * as React from 'react';\nimport Modal from 'react-modal';\nimport useUniqueId from '../hooks/useUniqueId';\nimport { usePortalParentContext } from '../utilities/VibesProvider';\n\nconst overlayStyle: React.CSSProperties = {\n  backgroundColor: 'rgba(0, 0, 0, 0.5)',\n  display: 'flex',\n};\nconst contentStyle: React.CSSProperties = {\n  alignSelf: 'center',\n  position: 'static',\n  background: 'transparent',\n  borderRadius: 0,\n  border: 0,\n  top: 'auto',\n  left: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  padding: 0,\n  margin: 'auto',\n};\n\ntype DialogProps = {\n  /**\n   * ダイアログのid属性を指定します。\n   * 指定しない場合は、重複しないように生成された文字列が使用されます。\n   */\n  id?: string;\n  /**\n   * アラートダイアログ（他のダイアログの上に表示されるダイアログ）の場合はtrueにしてください\n   */\n  alertDialog: boolean;\n  render: (props: {\n    /**\n     * モーダルの固有のidが指定されます\n     */\n    id: string;\n    /**\n     * モーダルのタイトルを表示する要素のidが指定されます\n     * aria-labelledbyに使用されるため、必ずタイトルを表示する要素にidとして渡してください\n     */\n    titleId: string;\n  }) => React.ReactNode;\n  /**\n   * ダイアログの開閉状態を指定します\n   */\n  isOpen: boolean;\n  /**\n   * Close ボタンの click ハンドラを設定します。\n   */\n  onRequestClose: React.MouseEventHandler;\n  /**\n   * `true` のとき、ダイアログの外（オーバーレイ部分）のクリックまたは、Escキーの押下によりダイアログを閉じられるようにします。\n   * ユーザーの意図しないタイミングで閉じられることがない場合のみ、`true` にしてください。\n   */\n  shouldCloseOnOverlayClickOrEsc: boolean;\n  /**\n   * ダイアログを閉じたときにフォーカスする要素を指定します。\n   * 指定しない場合には、ダイアログが開く直前にフォーカスしていた要素にフォーカスします。\n   */\n  elementFocusAfterClose?: HTMLElement;\n  /**\n   * モーダルのaria-labelを指定できます。\n   * 指定しなかった場合はaria-labelledbyによってタイトルの文言が参照されます。\n   */\n  contentLabel?: string;\n  /**\n   * react-modal の contentRef に渡す値です。\n   */\n  contentRef?: React.ComponentProps<typeof Modal>['contentRef'];\n};\n\nexport type DialogContentProps = {\n  /**\n   * ダイアログのid属性を指定します。\n   */\n  id?: string;\n  /**\n   * ダイアログの見出しのid属性を指定します\n   */\n  titleId?: string;\n} & Pick<DialogProps, 'onRequestClose'>;\n\nconst Dialog = (props: DialogProps) => {\n  const {\n    id,\n    alertDialog,\n    render,\n    isOpen,\n    onRequestClose,\n    shouldCloseOnOverlayClickOrEsc,\n    elementFocusAfterClose,\n    contentRef,\n  } = props;\n  const uniqueId = useUniqueId('vb-Dialog', id);\n  const portalParent = usePortalParentContext();\n  const titleId = `${uniqueId}__title`;\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      onRequestClose={onRequestClose}\n      onAfterClose={() => {\n        if (elementFocusAfterClose) {\n          elementFocusAfterClose.focus();\n        }\n      }}\n      style={{\n        overlay: {\n          ...overlayStyle,\n          // $vbMessageModalZIndex もしくは $vbModalZIndex\n          zIndex: alertDialog ? 1500 - 1 : 1000 - 1,\n        },\n        content: contentStyle,\n      }}\n      contentLabel={props.contentLabel}\n      ariaHideApp={false}\n      aria={{\n        labelledby: props.contentLabel ? undefined : titleId,\n      }}\n      shouldCloseOnOverlayClick={shouldCloseOnOverlayClickOrEsc}\n      shouldCloseOnEsc={shouldCloseOnOverlayClickOrEsc}\n      // 閉じたときにフォーカスする要素が指定されている場合は、react-modalのフォーカスを戻す機構を使用しない\n      shouldReturnFocusAfterClose={!elementFocusAfterClose}\n      id={`${uniqueId}__screen`}\n      bodyOpenClassName=\"vb-ReactModal__Body--open\"\n      parentSelector={() => portalParent}\n      contentRef={contentRef}\n      closeTimeoutMS={300}\n    >\n      {render({ id: uniqueId, titleId })}\n    </Modal>\n  );\n};\n\nexport default Dialog;\n"
  },
  {
    "path": "src/utilities/Digits.test.ts",
    "content": "import { Digits } from './Digits';\n\ndescribe('Digits', () => {\n  describe('formalize', () => {\n    it('converts undefined to 0', () =>\n      expect(Digits.formalize()).toEqual('0'));\n    it('converts number to comma-separated', () =>\n      expect(Digits.formalize(12345678)).toEqual('12,345,678'));\n    it('converts string to comma-separated', () =>\n      expect(Digits.formalize('12345678')).toEqual('12,345,678'));\n    it('converts negative value', () =>\n      expect(Digits.formalize('-12345678')).toEqual('-12,345,678'));\n    it('converts float number', () => {\n      expect(Digits.formalize('12345678.90123456')).toEqual(\n        '12,345,678.90123456'\n      );\n      expect(Digits.formalize('-12345678.90123456')).toEqual(\n        '-12,345,678.90123456'\n      );\n    });\n  });\n  describe('numberize', () => {\n    it('converts number-string to number', () =>\n      expect(Digits.numberize('1234')).toEqual(1234));\n    it('ignores non-number string', () =>\n      expect(Digits.numberize('a1b2c3d4')).toEqual(1234));\n    it('convers negative value', () =>\n      expect(Digits.numberize('-1234')).toEqual(-1234));\n  });\n  describe('toPercent', () => {\n    it('converts number to percentage', () =>\n      expect(Digits.toPercent(0.123456)).toEqual('12.346'));\n    it('converts string to percentage', () =>\n      expect(Digits.toPercent('0.123456')).toEqual('12.346'));\n    it('uses toPercent', () =>\n      expect(Digits.toPercent('0.123456', 2)).toEqual('12.35'));\n  });\n});\n"
  },
  {
    "path": "src/utilities/Digits.ts",
    "content": "/**\n * 数値の3桁毎に `,` を挿入した文字列を返す。小数点以下は `,` を挿入しない\n * @param str 数値または文字列化された数値\n */\nconst formalize = (str?: string | number): string => {\n  return str\n    ? String(str).replace(\n        /^(-?\\d+)(\\..*)?/,\n        (_matched, p1: string, p2?: string): string => {\n          return `${p1.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,')}${p2 || ''}`;\n        }\n      )\n    : '0';\n};\n\n/**\n * 文字列を数値にする\n * @param str 文字列化された数値\n */\nconst numberize = (str: string): number => {\n  return Number(str.replace(/[^0-9\\-.]/g, ''));\n};\n\n/**\n * 数値からパーセントに変換する\n * @param val 数値または文字列化された数値\n * @param toFixed 桁数(デフォルトは3)\n */\nconst toPercent = (val: string | number, toFixed = 3): string => {\n  return (Number(val) * 100).toFixed(toFixed);\n};\n\nexport const Digits = { formalize, numberize, toPercent };\n"
  },
  {
    "path": "src/utilities/FixedPortal.tsx",
    "content": ""
  },
  {
    "path": "src/utilities/FocusableEelements.ts",
    "content": "export const getFocusableElements = (el: HTMLElement) =>\n  el.querySelectorAll(\n    'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), *[tabindex]:not([tabindex=\"-1\"])'\n  );\n\nexport const isFocusableElement = (el: Element): boolean => {\n  if (el.getAttribute('aria-hidden') === 'true') {\n    return false;\n  }\n  switch (el.tagName) {\n    case 'A':\n      return el.hasAttribute('href');\n    case 'BUTTON':\n    case 'INPUT':\n    case 'TEXTAREA':\n    case 'SELECT':\n      return !el.hasAttribute('disabled');\n    default:\n      return (\n        el.hasAttribute('tabindex') && el.getAttribute('tabindex') !== '-1'\n      );\n  }\n};\n"
  },
  {
    "path": "src/utilities/Mins.ts",
    "content": "import { TimeString } from './TimeString';\n\nconst strToMin = (str: string): number => {\n  const min = TimeString.getMin(str);\n  const hour = TimeString.getHour(str);\n  return hour * 60 + min;\n};\n\nconst minToStr = (min: number): string => {\n  return TimeString.createTimeString(0, min);\n};\n\nexport const Mins = {\n  strToMin,\n  minToStr,\n};\n"
  },
  {
    "path": "src/utilities/ScrollPortal.tsx",
    "content": "import * as React from 'react';\nimport { scrollableParent } from './DOMUtil';\nimport ReactDOM from 'react-dom';\nimport { usePortalParentContext } from '../utilities/VibesProvider';\n\ntype Props = {\n  children: React.ReactNode;\n  isActive: boolean;\n  onOverflow?: () => void;\n  onScroll?: () => void;\n  portalTargetElement?: HTMLElement | undefined;\n  positionalBaseElement: HTMLElement | undefined;\n  verticalPosition?: 'top' | 'bottom';\n  horizontalPosition?: 'left' | 'center' | 'right';\n  popupRef?: React.RefObject<HTMLDivElement>;\n  'data-masking'?: boolean;\n};\n\n/**\n * children をスクロールに追従する要素でラップして Portal 化する\n */\nconst ScrollPortal: React.FC<Props> = ({\n  children,\n  isActive,\n  onOverflow,\n  onScroll,\n  portalTargetElement,\n  positionalBaseElement,\n  verticalPosition = 'bottom',\n  horizontalPosition = 'left',\n  popupRef,\n  ...props\n}: Props) => {\n  const [listBoxLeft, setListBoxLeft] = React.useState<string>('0');\n  const [listBoxTop, setListBoxTop] = React.useState<string>('0');\n  const portalParent = usePortalParentContext();\n  // positionalBaseElementが画面から隠れていればonOverflowを呼ぶ\n  const checkScrollPosition = React.useCallback(() => {\n    if (!(onOverflow && positionalBaseElement)) {\n      return;\n    }\n    const scrollableElement = scrollableParent(positionalBaseElement);\n    if (scrollableElement) {\n      // positionalBaseElementの上端座標（scrollableElement相対）\n      // スクロール量によって変動\n      const topEdge =\n        positionalBaseElement.getBoundingClientRect().top -\n        scrollableElement.getBoundingClientRect().top;\n      // positionalBaseElementの下端座標（scrollableElement相対）\n      const bottomEdge =\n        topEdge + positionalBaseElement.getBoundingClientRect().height;\n      const leftEdge =\n        positionalBaseElement.getBoundingClientRect().left -\n        scrollableElement.getBoundingClientRect().left;\n      const rightEdge =\n        leftEdge + positionalBaseElement.getBoundingClientRect().width;\n      // スクロールコンテンツの上端/下端/左端/右端に到達\n      if (\n        bottomEdge < 0 ||\n        topEdge > scrollableElement.clientHeight ||\n        rightEdge < 0 ||\n        leftEdge > scrollableElement.clientWidth\n      ) {\n        onOverflow();\n        return;\n      }\n    }\n  }, [onOverflow, positionalBaseElement]);\n\n  // positionalBaseElement の下端または上端につく形で位置を調整する\n  const calculatePosition = React.useCallback(() => {\n    if (!positionalBaseElement) {\n      return;\n    }\n    const { left, top, bottom, height, width } =\n      positionalBaseElement.getBoundingClientRect();\n\n    setListBoxLeft(\n      `${\n        left +\n        (horizontalPosition === 'right'\n          ? width\n          : horizontalPosition === 'center'\n          ? width / 2\n          : 0) +\n        window.pageXOffset\n      }px`\n    );\n    if (!popupRef) {\n      setListBoxTop(\n        `${\n          top +\n          (verticalPosition === 'bottom' ? height : 0) +\n          window.pageYOffset\n        }px`\n      );\n    } else {\n      const popupHeight = popupRef.current?.getBoundingClientRect().height;\n      if (verticalPosition === 'bottom') {\n        setListBoxTop(`${top + height + window.pageYOffset}px`);\n      } else {\n        if (popupHeight) {\n          setListBoxTop(\n            `${bottom - popupHeight - height + window.pageYOffset}px`\n          );\n        }\n      }\n    }\n  }, [popupRef, horizontalPosition, positionalBaseElement, verticalPosition]);\n\n  // 要素がactiveになったら表示位置を再計算する\n  React.useLayoutEffect(() => {\n    if (!isActive) {\n      return;\n    }\n    calculatePosition();\n\n    // scroll可能なElement がある時はscrollに追従するようにする\n    const handleScroll = () => {\n      calculatePosition();\n      checkScrollPosition();\n      onScroll && onScroll();\n    };\n\n    if (positionalBaseElement) {\n      const target = scrollableParent(positionalBaseElement);\n\n      window.addEventListener('resize', handleScroll);\n      if (target) {\n        window.addEventListener('scroll', handleScroll);\n        target.addEventListener('scroll', handleScroll);\n      }\n      return () => {\n        window.removeEventListener('resize', handleScroll);\n        if (target) {\n          window.removeEventListener('scroll', handleScroll);\n          target.removeEventListener('scroll', handleScroll);\n        }\n      };\n    }\n  }, [\n    isActive,\n    onScroll,\n    calculatePosition,\n    checkScrollPosition,\n    positionalBaseElement,\n  ]);\n\n  return ReactDOM.createPortal(\n    <div\n      className=\"vb-scrollPortal\"\n      style={{\n        position: 'absolute',\n        left: listBoxLeft,\n        top: listBoxTop,\n      }}\n      data-masking={props['data-masking']}\n    >\n      {children}\n    </div>,\n    portalTargetElement || portalParent\n  );\n};\n\nexport default ScrollPortal;\n"
  },
  {
    "path": "src/utilities/TimeString.ts",
    "content": "import { differenceInMinutes } from 'date-fns';\nimport { Ascii } from './Ascii';\n\nconst createTimeString = (hour: number, min: number): string => {\n  // 分が60以上だったら時間を加算する\n  // ex) 01:70→ 02:10\n  if (min >= 60) {\n    hour = hour + Math.floor(min / 60);\n    min = min % 60;\n  } else if (min < 0) {\n    hour = hour + Math.floor(min / 60);\n    min = 60 + (min % 60);\n  }\n  // 10未満の時は2桁になるようにゼロ埋めして 12:34 形式に\n  return `${hour < 10 ? ('0' + hour).slice(-2) : hour}:${('0' + min).slice(\n    -2\n  )}`;\n};\n\nconst getHour = (timeStr: string): number => {\n  if (timeStr) {\n    const matched =\n      timeStr.match(/^(\\d+):/) ||\n      timeStr.match(/(\\d+)\\d{2}$/) ||\n      timeStr.match(/^(\\d+)$/);\n    if (matched) {\n      return Number(matched[1]);\n    }\n  }\n  return 0;\n};\n\nconst getMin = (timeStr: string): number => {\n  if (timeStr) {\n    const matched = timeStr.match(/:(\\d+)$/) || timeStr.match(/^\\d+(\\d{2})$/);\n    if (matched) {\n      return Number(matched[1]);\n    }\n  }\n  return 0;\n};\n\nconst convert = (str: string, minTime?: string, maxTime?: string): string => {\n  const replaced = Ascii.zenkakuToHankaku(str.replace(/[^:0-9]/g, ''));\n  const hour = getHour(replaced);\n  const min = getMin(replaced);\n\n  const timeString = createTimeString(hour, min);\n  const timeByDate = new Date(2000, 0, 1, hour, min);\n  const minTimeByDate = minTime\n    ? new Date(2000, 0, 1, getHour(minTime), getMin(minTime))\n    : undefined;\n  const maxTimeByDate = maxTime\n    ? new Date(2000, 0, 1, getHour(maxTime), getMin(maxTime))\n    : undefined;\n\n  const isSameOrAfterThanMinTime = minTimeByDate\n    ? differenceInMinutes(timeByDate, minTimeByDate) >= 0\n    : true;\n\n  if (minTime && !isSameOrAfterThanMinTime) {\n    return minTime;\n  }\n\n  const isSameOrBeforeThanMaxTime = maxTimeByDate\n    ? differenceInMinutes(maxTimeByDate, timeByDate) >= 0\n    : true;\n\n  if (maxTime && !isSameOrBeforeThanMaxTime) {\n    return maxTime;\n  }\n\n  return timeString;\n};\n\nexport const TimeString = {\n  createTimeString,\n  getHour,\n  getMin,\n  convert,\n};\n"
  },
  {
    "path": "src/utilities/VibesContext.ts",
    "content": "import * as React from 'react';\n\ntype VibesContextValue = {\n  /**\n   * trueにすると、一部のコンポーネントの表示が画面幅に応じて変化するようになります。\n   */\n  responsive: boolean;\n  /**\n   * ポップアップやダイアログ等のポータルを作成する際の親要素を指定します。\n   * 指定しない場合、document.bodyが親要素となります。\n   */\n  portalParent?: HTMLElement;\n  /**\n   * portalParentをrefで指定する場合に使用します。\n   */\n  portalParentRef?: React.RefObject<HTMLElement>;\n  /**\n   * 言語を指定します。\n   * 対応コンポーネントに埋め込まれたテキストが指定した言語で表示されます。\n   * デフォルトは 'ja' です。\n   */\n  lang?: 'ja' | 'en';\n};\n\n/**\n * VibesContextを単体で利用することもできますが、できる限りVibesProviderを通して利用してください。\n */\nexport const VibesContext = React.createContext<VibesContextValue>({\n  responsive: false,\n  portalParent: document.body,\n  portalParentRef: undefined,\n  lang: 'ja',\n});\n"
  },
  {
    "path": "src/utilities/VibesProvider.tsx",
    "content": "import * as React from 'react';\nimport { useMedia } from './useMedia';\nimport { ThemeContext, ThemeProvider } from 'styled-components';\nimport { VibesContext } from './VibesContext';\nimport {\n  TabletBoundaryWidth,\n  MobileBoundaryWidth,\n  NarrowMobileBoundaryWidth,\n} from '../constants';\n\nexport type MediaType = 'pc' | 'tablet' | 'mobile';\n\nconst baseRemSize = 16;\nconst deviceRemSize =\n  typeof document === 'undefined'\n    ? baseRemSize\n    : parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n/**\n * Vibes共通のコンテクストを提供するProviderコンポーネントです。\n *\n * Provider component which determine media type according to screen width.\n *\n * 320 ~ 767px mobile\n * 768 ~ 1024px tablet\n * 1025px ~ pc\n *\n * (when 1rem = 16px)\n */\nexport const VibesProvider = ({\n  children,\n  fixedLayout = false,\n  portalParent = document.body,\n  portalParentRef = undefined,\n  lang = 'ja',\n}: {\n  children: React.ReactNode;\n  /**\n   * レイアウトを固定するかどうかを設定します\n   * styled-componentsでは常にpcレイアウトとして扱われます。\n   * VibesContextValueのresponsiveの値は!fixedLayoutで計算されます\n   * （fixedLayoutがfalseの場合、一部のコンポーネントの表示が画面幅に応じて変化するようになります。）\n   */\n  fixedLayout?: boolean;\n  /**\n   * ポップアップやダイアログ等のポータルを作成する際の親要素を指定します。\n   * 指定しない場合、document.bodyが親要素となります。\n   */\n  portalParent?: HTMLElement;\n  /**\n   * portalParentをrefで指定する場合に使用します。\n   */\n  portalParentRef?: React.RefObject<HTMLElement>;\n  /**\n   * 言語を指定します。\n   * 対応コンポーネントに埋め込まれたテキストが指定した言語で表示されます。\n   * デフォルトは 'ja' です。\n   */\n  lang?: 'ja' | 'en';\n}) => {\n  const isTablet = useMedia(\n    `not (min-width: ${TabletBoundaryWidth})`,\n    window.innerWidth <\n      deviceRemSize * Number(TabletBoundaryWidth.replace('rem', ''))\n  );\n  const isMobile = useMedia(\n    `not (min-width: ${MobileBoundaryWidth})`,\n    window.innerWidth <\n      deviceRemSize * Number(MobileBoundaryWidth.replace('rem', ''))\n  );\n  // Narrower than iPhone8 (375px)\n  const isNarrowMobile = useMedia(\n    `not (min-width: ${NarrowMobileBoundaryWidth})`,\n    window.innerWidth <\n      deviceRemSize * Number(NarrowMobileBoundaryWidth.replace('rem', ''))\n  );\n\n  const media = {\n    mediaType: (fixedLayout\n      ? 'pc'\n      : isMobile\n      ? 'mobile'\n      : isTablet\n      ? 'tablet'\n      : 'pc') as MediaType,\n    isNarrowMobile,\n  };\n\n  return (\n    <ThemeProvider theme={media}>\n      <VibesContext.Provider\n        value={{\n          responsive: !fixedLayout,\n          portalParent,\n          portalParentRef,\n          lang,\n        }}\n      >\n        {children}\n      </VibesContext.Provider>\n    </ThemeProvider>\n  );\n};\n\nexport const useVibes = () => React.useContext(ThemeContext);\n\nexport const useResponsive = (responsiveProp?: boolean) => {\n  const contextValue = React.useContext(VibesContext);\n  return responsiveProp === undefined\n    ? contextValue.responsive\n    : responsiveProp;\n};\n\nexport const usePortalParentContext = () => {\n  const { portalParent, portalParentRef } = React.useContext(VibesContext);\n  return portalParent || portalParentRef?.current || document.body;\n};\n\nexport const useLang = () => {\n  const { lang } = React.useContext(VibesContext);\n  return lang || 'ja';\n};\n"
  },
  {
    "path": "src/utilities/browsers.ts",
    "content": "/**\n * Returns true if using Microsoft Edge\n * Microsoft Edgeを使用している場合にtrueを返す\n */\nexport const isEdge = () => !!navigator.userAgent.match(/Edg\\//);\n"
  },
  {
    "path": "src/utilities/commonProps.test.ts",
    "content": "import commonProps, { pickCommonProps } from './commonProps';\nimport { MarginSize } from './functionalMarginClasses';\n\nconst ma: MarginSize = 0.5;\nconst mt: MarginSize = 1;\nconst mb: MarginSize = 1.5;\nconst mr: MarginSize = 2;\nconst ml: MarginSize = 3;\nconst dataGuide = 'data-guide-example';\nconst dataTest = 'data-test-example';\nconst dataTracking = 'data-tracking-example';\nconst dataMasking = true;\n\nconst base = 'vb-base';\nconst deprecatedMarginClassProps = {\n  marginBottom: true,\n  marginLeft: true,\n  marginRight: true,\n  marginTop: true,\n};\n\ndescribe('commonProps', () => {\n  it('succeed with full props', () => {\n    const props = {\n      ma,\n      mt,\n      mb,\n      mr,\n      ml,\n      'data-guide': dataGuide,\n      'data-test': dataTest,\n      'data-tracking': dataTracking,\n      'data-masking': dataMasking,\n    };\n    const subject = commonProps(\n      props,\n      base,\n      {\n        foo: true,\n        bar: true,\n        baz: true,\n      },\n      deprecatedMarginClassProps\n    );\n\n    expect(subject).toEqual(\n      expect.objectContaining({\n        className: `${base} ${base}--foo ${base}--bar ${base}--baz vb-mt100 vb-mb100 vb-mr100 vb-ml100 vb-ma50 vb-mt100 vb-mb150 vb-mr200 vb-ml300`,\n        'data-guide': dataGuide,\n        'data-test': dataTest,\n        'data-tracking': dataTracking,\n        'data-masking': dataMasking,\n      })\n    );\n  });\n\n  it('succeed with minimum props', () => {\n    const subject = commonProps({}, base);\n\n    expect(subject).toEqual(\n      expect.objectContaining({\n        className: base,\n      })\n    );\n  });\n});\n\ndescribe('pickCommonProps', () => {\n  it('succeed with full props and etc.', () => {\n    const props = {\n      ma,\n      mt,\n      mb,\n      mr,\n      ml,\n      'data-guide': dataGuide,\n      'data-test': dataTest,\n      'data-tracking': dataTracking,\n      'data-masking': dataMasking,\n      dummy: 42,\n    };\n    const subject = pickCommonProps(props);\n\n    expect(subject.ma).toBe(ma);\n    expect(subject.mt).toBe(mt);\n    expect(subject.mb).toBe(mb);\n    expect(subject.ml).toBe(ml);\n    expect(subject.mr).toBe(mr);\n    expect(subject['data-guide']).toBe(dataGuide);\n    expect(subject['data-test']).toBe(dataTest);\n    expect(subject['data-tracking']).toBe(dataTracking);\n    expect(subject['data-masking']).toBe(dataMasking);\n    expect(subject).not.toHaveProperty('dummy');\n  });\n\n  it('succeed with blank props', () => {\n    const subject = pickCommonProps({});\n\n    expect(subject.ma).toBeUndefined();\n    expect(subject.mt).toBeUndefined();\n    expect(subject.mb).toBeUndefined();\n    expect(subject.ml).toBeUndefined();\n    expect(subject.mr).toBeUndefined();\n    expect(subject['data-guide']).toBeUndefined();\n    expect(subject['data-test']).toBeUndefined();\n    expect(subject['data-tracking']).toBeUndefined();\n    expect(subject['data-masking']).toBeUndefined();\n  });\n});\n"
  },
  {
    "path": "src/utilities/commonProps.ts",
    "content": "import {\n  pickFunctionalMarginProps,\n  FunctionalMarginProps,\n} from './functionalMarginClasses';\nimport vbClassNames, { ModifierClassProps } from './vbClassNames';\nimport { MarginClassProps } from './marginClasses';\n\nexport type CommonDataProps = {\n  'data-guide'?: string;\n  'data-test'?: string;\n  'data-tracking'?: string;\n  'data-masking'?: boolean;\n};\n\nexport type CommonProps = CommonDataProps & FunctionalMarginProps;\n\nexport const pickCommonProps = (props: CommonProps): CommonProps => {\n  return {\n    ...pickCommonDataProps(props),\n    ...pickFunctionalMarginProps(props),\n  };\n};\n\nexport const pickCommonDataProps = (props: CommonProps): CommonDataProps => ({\n  'data-guide': props['data-guide'],\n  'data-test': props['data-test'],\n  'data-tracking': props['data-tracking'],\n  'data-masking': props['data-masking'],\n});\n\nexport default function commonProps(\n  props: CommonProps,\n  baseClassName: string,\n  classModifiers: ModifierClassProps = {},\n  deprecatedMarginClassProps: MarginClassProps = {}\n): CommonDataProps & { className: string } {\n  return {\n    'data-guide': props['data-guide'],\n    'data-test': props['data-test'],\n    'data-tracking': props['data-tracking'],\n    'data-masking': props['data-masking'],\n    className: vbClassNames(baseClassName, {\n      props,\n      modifier: classModifiers,\n      margin: deprecatedMarginClassProps,\n    }),\n  };\n}\n"
  },
  {
    "path": "src/utilities/convertRemToPixel.ts",
    "content": "export const convertRemToPixel = (rem: number) => {\n  const baseFontSize =\n    parseInt(\n      getComputedStyle(document.documentElement).fontSize.split('px')[0]\n    ) || 16;\n  return rem * baseFontSize;\n};\n"
  },
  {
    "path": "src/utilities/date.test.ts",
    "content": "import {\n  isValidDateInRange,\n  getValidDateNearestTarget,\n  formatDate,\n  formatDayOfWeek,\n} from './date';\n\ndescribe('isValidDateInRange', () => {\n  describe('when date is empty', () => {\n    it('return false', () =>\n      expect(isValidDateInRange('', '', '')).toEqual(false));\n  });\n});\n\ndescribe('getValidDateNearestTarget', () => {\n  describe('when a target is in the range', () => {\n    it('returns the target.', () =>\n      expect(\n        getValidDateNearestTarget(\n          new Date('2022-01-01'),\n          new Date('2021-01-01'),\n          new Date('2023-01-01')\n        )\n      ).toEqual(new Date('2022-01-01')));\n  });\n\n  describe('without the range', () => {\n    it('returns the target.', () =>\n      expect(\n        getValidDateNearestTarget(new Date('2022-01-01'), undefined, undefined)\n      ).toEqual(new Date('2022-01-01')));\n  });\n\n  describe('when a target is before minDate', () => {\n    it('returns the minDate.', () =>\n      expect(\n        getValidDateNearestTarget(\n          new Date('2020-01-01'),\n          new Date('2021-01-01'),\n          new Date('2023-01-01')\n        )\n      ).toEqual(new Date('2021-01-01')));\n  });\n\n  describe('when a target is after maxDate', () => {\n    it('returns the maxDate.', () =>\n      expect(\n        getValidDateNearestTarget(\n          new Date('2024-01-01'),\n          new Date('2021-01-01'),\n          new Date('2023-01-01')\n        )\n      ).toEqual(new Date('2023-01-01')));\n  });\n\n  describe('with only minDate that is after the target', () => {\n    it('returns the mixDate.', () =>\n      expect(\n        getValidDateNearestTarget(\n          new Date('2020-01-01'),\n          new Date('2021-01-01'),\n          undefined\n        )\n      ).toEqual(new Date('2021-01-01')));\n  });\n\n  describe('when the range is invalid', () => {\n    it('returns null.', () =>\n      expect(\n        getValidDateNearestTarget(\n          new Date('2020-01-01'),\n          new Date('2023-01-01'),\n          new Date('2021-01-01')\n        )\n      ).toEqual(null));\n  });\n\n  describe('when the target is invalid', () => {\n    it('returns null.', () =>\n      expect(\n        getValidDateNearestTarget(new Date('2020-01-41'), undefined, undefined)\n      ).toEqual(null));\n  });\n});\n\ndescribe('formatDate', () => {\n  describe('when date is empty', () => {\n    it('return empty string', () => expect(formatDate('')).toEqual(''));\n  });\n\n  describe('when date is not empty', () => {\n    it('return formatted date', () =>\n      expect(formatDate('2021-01-01')).toEqual('2021-01-01'));\n  });\n});\n\ndescribe('formatDayOfWeek', () => {\n  describe('when date is empty', () => {\n    it('return empty string', () => expect(formatDayOfWeek('')).toEqual(''));\n  });\n\n  describe('when date is not empty', () => {\n    it('return formatted date', () => {\n      expect(formatDayOfWeek('2021-01-01')).toEqual('金曜日');\n      expect(formatDayOfWeek('2021-01-02')).toEqual('土曜日');\n      expect(formatDayOfWeek('2021-01-03')).toEqual('日曜日');\n      expect(formatDayOfWeek('2021-01-04')).toEqual('月曜日');\n      expect(formatDayOfWeek('2021-01-05')).toEqual('火曜日');\n      expect(formatDayOfWeek('2021-01-06')).toEqual('水曜日');\n      expect(formatDayOfWeek('2021-01-07')).toEqual('木曜日');\n    });\n  });\n});\n"
  },
  {
    "path": "src/utilities/date.ts",
    "content": "import {\n  parse,\n  isValid,\n  isSameDay,\n  isAfter,\n  isBefore,\n  format,\n  getDay,\n} from 'date-fns';\n\n// パースに成功し妥当な値のとき Date を\n// そうでなければ null を返却する\nexport function parseDate(date: Date | string | null | undefined): Date | null {\n  if (!date) {\n    return null;\n  }\n\n  const parsedDate = parse(date);\n  if (!isValid(parsedDate)) {\n    return null;\n  }\n\n  return parsedDate;\n}\n\nexport function isValidDateInRange(\n  date: string | Date,\n  minDate?: string | Date,\n  maxDate?: string | Date\n): boolean {\n  if (!date) {\n    return false;\n  }\n  const parsedDate = parse(date);\n  const parsedMinDate = minDate && parse(minDate);\n  const parsedMaxDate = maxDate && parse(maxDate);\n  return (\n    isValid(parsedDate) &&\n    (parsedMinDate && isValid(parsedMinDate)\n      ? isSameDay(parsedDate, parsedMinDate) ||\n        isAfter(parsedDate, parsedMinDate)\n      : true) &&\n    (parsedMaxDate && isValid(parsedMaxDate)\n      ? isSameDay(parsedDate, parsedMaxDate) ||\n        isBefore(parsedDate, parsedMaxDate)\n      : true)\n  );\n}\n\nexport function getValidDateNearestTarget(\n  target: Date | string,\n  minDate?: Date | string,\n  maxDate?: Date | string\n): Date | null {\n  const parsedTarget = parseDate(target);\n  const parsedMinDate = parseDate(minDate);\n  const parsedMaxDate = parseDate(maxDate);\n\n  if (\n    !parsedTarget ||\n    (parsedMinDate && parsedMaxDate && isAfter(parsedMinDate, parsedMaxDate))\n  ) {\n    return null;\n  }\n\n  if (isValidDateInRange(target, minDate, maxDate)) {\n    return parsedTarget;\n  }\n\n  const diffByMin = parsedMinDate\n    ? Math.abs(parsedMinDate.getTime() - parsedTarget.getTime())\n    : Number.MAX_VALUE;\n  const diffByMax = parsedMaxDate\n    ? Math.abs(parsedMaxDate.getTime() - parsedTarget.getTime())\n    : Number.MAX_VALUE;\n\n  if (diffByMin <= diffByMax) {\n    return parsedMinDate;\n  } else {\n    return parsedMaxDate;\n  }\n}\n\nexport function formatDate(date: string | Date): string {\n  const parsedDate = parse(date);\n  return isValid(parsedDate) ? format(parsedDate, 'YYYY-MM-DD') : '';\n}\n\nexport function formatDayOfWeek(date: string | Date): string {\n  const parsedDate = parse(date);\n  if (isValid(parsedDate)) {\n    switch (getDay(parsedDate)) {\n      case 0:\n        return '日曜日';\n      case 1:\n        return '月曜日';\n      case 2:\n        return '火曜日';\n      case 3:\n        return '水曜日';\n      case 4:\n        return '木曜日';\n      case 5:\n        return '金曜日';\n      case 6:\n        return '土曜日';\n    }\n  }\n  return '';\n}\n"
  },
  {
    "path": "src/utilities/functionalMarginClasses.test.ts",
    "content": "import functionalMarginClasses, {\n  pickFunctionalMarginProps,\n  MarginSize,\n} from './functionalMarginClasses';\n\nconst ma: MarginSize = 0.5;\nconst mt: MarginSize = 1;\nconst mb: MarginSize = 1.5;\nconst mr: MarginSize = 2;\nconst ml: MarginSize = 3;\n\ndescribe('functionalMarginClasses', () => {\n  it('succeed with full props', () => {\n    const props = {\n      ma,\n      mt,\n      mb,\n      mr,\n      ml,\n    };\n    const subject = functionalMarginClasses(props);\n\n    expect(subject).toBe('vb-ma50 vb-mt100 vb-mb150 vb-mr200 vb-ml300');\n  });\n\n  it('succeed with blank props', () => {\n    const subject = functionalMarginClasses({});\n\n    expect(subject).toBe('');\n  });\n});\n\ndescribe('pickFunctionalMarginProps', () => {\n  it('succeed with full props and etc.', () => {\n    const props = {\n      ma,\n      mt,\n      mb,\n      mr,\n      ml,\n      dummy: 42,\n    };\n    const subject = pickFunctionalMarginProps(props);\n\n    expect(subject.ma).toBe(ma);\n    expect(subject.mt).toBe(mt);\n    expect(subject.mb).toBe(mb);\n    expect(subject.ml).toBe(ml);\n    expect(subject.mr).toBe(mr);\n    expect(subject).not.toHaveProperty('dummy');\n  });\n\n  it('succeed with blank props', () => {\n    const subject = pickFunctionalMarginProps({});\n\n    expect(subject.ma).toBeUndefined();\n    expect(subject.mt).toBeUndefined();\n    expect(subject.mb).toBeUndefined();\n    expect(subject.ml).toBeUndefined();\n    expect(subject.mr).toBeUndefined();\n  });\n});\n"
  },
  {
    "path": "src/utilities/functionalMarginClasses.ts",
    "content": "export type MarginSize =\n  | 0.25\n  | 0.5\n  | 1\n  | 1.5\n  | 2\n  | 3\n  | -0.25\n  | -0.5\n  | -1\n  | -1.5\n  | -2\n  | -3\n  | 'auto';\n\nexport type FunctionalMarginProps = {\n  /**\n   * 全方向のマージン (rem)\n   */\n  ma?: MarginSize;\n  /**\n   * 上方向のマージン (rem)\n   */\n  mt?: MarginSize;\n  /**\n   * 下方向のマージン (rem)\n   */\n  mb?: MarginSize;\n  /**\n   * 左方向のマージン (rem)\n   */\n  ml?: MarginSize;\n  /**\n   * 右方向のマージン (rem)\n   */\n  mr?: MarginSize;\n};\n\nexport const pickFunctionalMarginProps = ({\n  ma,\n  mt,\n  mb,\n  ml,\n  mr,\n}: FunctionalMarginProps): FunctionalMarginProps => {\n  return { ma, mt, mb, ml, mr };\n};\n\nconst formatMarginSize = (ms: MarginSize): string =>\n  ms === 'auto' ? '-auto' : String(ms * 100);\n\nconst functionalMarginClasses = ({\n  ma,\n  mt,\n  mb,\n  ml,\n  mr,\n}: FunctionalMarginProps): string => {\n  return [\n    ma ? `vb-ma${formatMarginSize(ma)}` : '',\n    mt ? `vb-mt${formatMarginSize(mt)}` : '',\n    mb ? `vb-mb${formatMarginSize(mb)}` : '',\n    mr ? `vb-mr${formatMarginSize(mr)}` : '',\n    ml ? `vb-ml${formatMarginSize(ml)}` : '',\n  ]\n    .filter((e) => e)\n    .join(' ');\n};\n\nexport default functionalMarginClasses;\n"
  },
  {
    "path": "src/utilities/index.ts",
    "content": "// utilities ディレクトリの中身はVibes内部でしか使わないものとVibes外でも使いたいものの\n// 整理ができていないので、Vibes外でも使うことが想定されるものだけexportする方針とします\n\nexport { Ascii } from './Ascii';\nexport { pickCommonProps } from './commonProps';\nexport type { CommonProps } from './commonProps';\nexport { convertRemToPixel } from './convertRemToPixel';\nexport { Digits } from './Digits';\nexport { Mins } from './Mins';\nexport { TimeString } from './TimeString';\nexport { VibesContext } from './VibesContext';\nexport { VibesProvider, useVibes } from './VibesProvider';\nexport * from './FocusableEelements';\nexport const VibesVersion = '100.1.0';\n"
  },
  {
    "path": "src/utilities/keyboard.ts",
    "content": "export const KeyCodes = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  ESC: 27,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  H: 72,\n  J: 74,\n  K: 75,\n  L: 76,\n} as const;\n\nexport const Keys = {\n  BACKSPACE: 'Backspace',\n  TAB: 'Tab',\n  ENTER: 'Enter',\n  ESC: 'Escape',\n  LEFT: 'ArrowLeft',\n  UP: 'ArrowUp',\n  RIGHT: 'ArrowRight',\n  DOWN: 'ArrowDown',\n  SPACE: ' ',\n} as const;\n"
  },
  {
    "path": "src/utilities/marginClasses.ts",
    "content": "import functionalMarginClasses, {\n  MarginSize as FunctionalMarginSize,\n} from './functionalMarginClasses';\n\nexport type MarginClassProps = {\n  /**\n   * 上方向にマージンを付けるか否か（ `mt` propsが使用できる場合はそちらを使用してください）\n   */\n  marginTop?: boolean;\n  /**\n   * 左方向にマージンを付けるか否か（ `ml` propsが使用できる場合はそちらを使用してください）\n   */\n  marginLeft?: boolean;\n  /**\n   * 右方向にマージンを付けるか否か（ `mr` propsが使用できる場合はそちらを使用してください）\n   */\n  marginRight?: boolean;\n  /**\n   * 下方向にマージンを付けるか否か（ `mb` propsが使用できる場合はそちらを使用してください）\n   */\n  marginBottom?: boolean;\n  /**\n   * `marginTop`, `marginLeft`, `marginRight`, `marginBottom` によるマージンの大きさ。無指定であれば 1rem。\n   * `xSmall` = 0.25rem, `small` = 0.5rem, `large` = 1.5rem, `xLarge` = 2rem, `xxlarge` = 3rem\n   */\n  marginSize?: 'xSmall' | 'small' | 'large' | 'xLarge' | 'xxLarge';\n};\n\ntype MarginSize = 'xSmall' | 'small' | 'large' | 'xLarge' | 'xxLarge';\n\nfunction marginSizeToRem(\n  marginSize: MarginSize | undefined\n): FunctionalMarginSize {\n  switch (marginSize) {\n    case 'xSmall':\n      return 0.25;\n    case 'small':\n      return 0.5;\n    case 'large':\n      return 1.5;\n    case 'xLarge':\n      return 2;\n    case 'xxLarge':\n      return 3;\n  }\n  return 1;\n}\n\nexport const pickMarginClassProps = ({\n  marginTop,\n  marginLeft,\n  marginRight,\n  marginBottom,\n  marginSize,\n}: MarginClassProps): MarginClassProps => ({\n  marginTop,\n  marginLeft,\n  marginRight,\n  marginBottom,\n  marginSize,\n});\n\nexport const marginClassPropsToFunctionalMarginProps = ({\n  marginTop,\n  marginLeft,\n  marginRight,\n  marginBottom,\n  marginSize,\n}: MarginClassProps) => {\n  const remSize = marginSizeToRem(marginSize);\n  return {\n    mt: marginTop ? remSize : undefined,\n    mb: marginBottom ? remSize : undefined,\n    ml: marginLeft ? remSize : undefined,\n    mr: marginRight ? remSize : undefined,\n  };\n};\n\nexport default function marginClasses(props: MarginClassProps): Array<string> {\n  return functionalMarginClasses(\n    marginClassPropsToFunctionalMarginProps(props)\n  ).split(' ');\n}\n"
  },
  {
    "path": "src/utilities/selfWindowNavigator.ts",
    "content": "const isModifiedEvent = (event: React.MouseEvent | MouseEvent): boolean => {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n};\n\nexport type SelfWindowNavigationProp = {\n  /**\n   * react-router等で、画面遷移時にデフォルトとは違う挙動をさせたいときに使用します。\n   * Ctrlキー等を押しながらのクリックや、コンテキストメニューから新しいタブを開いた場合などには発火しません。\n   */\n  onSelfWindowNavigation?: (url?: string) => void;\n};\n\n/**\n * A要素でCtrl + Clickを有効にしつつ（＝別タブで開く挙動を残しつつ）、react-routerでハンドリングできるようにする。\n * （実際のハンドリングはコンポーネント呼び出し側が行う。Vibesはあくまでその口を用意するスタンス）\n * 通常のリンク等の onClick とは違う挙動となるため、onClickとは別名のインタフェースとして用意することを推奨します\n * 実装はreact-routerのものを参考にしています https://github.com/ReactTraining/react-router/blob/c0b8ce42d3c6b85e3a53d1c56ae12c88205d00d8/packages/react-router-dom/modules/Link.js#L35-L52\n * */\nconst selfWindowNavigator = (navigate?: (url?: string) => void) => {\n  if (navigate) {\n    return (event: React.MouseEvent | MouseEvent, url?: string) => {\n      if (\n        event.defaultPrevented || // 既にdefault以外の挙動になっているものは無視\n        event.button !== 0 || // 左ボタンクリック以外は無視\n        isModifiedEvent(event) // Ctrlキーなどを押している場合は無視\n      ) {\n        return;\n      }\n\n      event.preventDefault();\n      navigate(url);\n    };\n  }\n};\n\nexport default selfWindowNavigator;\n"
  },
  {
    "path": "src/utilities/useMedia.ts",
    "content": "import { useState, useEffect } from 'react';\n\n/**\n * ウインドウ幅に応じてメディアクエリの状態を変更するカスタムフック\n * ref: https://github.com/streamich/use-media/blob/master/src/useMedia.ts\n * query: window.matchMedia() に渡すメディアクエリ文字列\n * defaultState: 初期値\n */\nexport const useMedia = (query: string, defaultState?: boolean) => {\n  const [currentState, setCurrentState] = useState(defaultState);\n\n  useEffect(() => {\n    let mounted = true;\n    const mql = window.matchMedia(query);\n    const onChange = () => {\n      if (!mounted) {\n        return;\n      }\n      setCurrentState(!!mql.matches);\n    };\n    mql.addEventListener('change', onChange);\n    setCurrentState(mql.matches);\n\n    return () => {\n      mounted = false;\n      mql.removeEventListener('change', onChange);\n    };\n  }, [query]);\n\n  return currentState;\n};\n"
  },
  {
    "path": "src/utilities/vbClassNames.ts",
    "content": "import classNames from 'classnames';\nimport marginClasses, { MarginClassProps } from './marginClasses';\nimport functionalMarginClasses, {\n  FunctionalMarginProps,\n} from './functionalMarginClasses';\n\nexport type ModifierClassProps = {\n  [key: string]: boolean | null | undefined;\n};\n\n/**\n * { propName: 'property-value' }形式のpropsを { propNamePropertyValue: true } 形式にする\n */\nexport const convertClassModifiers = (props: {\n  [key: string]: string | undefined;\n}): { [key: string]: boolean } =>\n  Object.fromEntries(\n    Object.entries(props)\n      .map(([key, value]) =>\n        'string' === typeof value\n          ? [\n              `${key}${value\n                .split(/[-]/)\n                .reduce(\n                  (prev, curr) =>\n                    `${prev}${curr[0].toUpperCase()}${curr.slice(1)}`,\n                  ''\n                )}`,\n              true,\n            ]\n          : []\n      )\n      .filter((e) => e.length > 0)\n  );\n\nconst modifierClasses = (\n  baseClassName: string,\n  modifierClassProps: ModifierClassProps\n): string[] =>\n  classNames(modifierClassProps)\n    .split(' ')\n    .map((modifierName) =>\n      modifierName ? `${baseClassName}--${modifierName}` : ''\n    );\n\nconst vbClassNames = (\n  baseClassName: string,\n  {\n    modifier,\n    margin,\n    props,\n  }: {\n    modifier?: ModifierClassProps;\n    margin?: MarginClassProps;\n    props?: FunctionalMarginProps; // 今後、共通でクラスを付けたいやつがきたらここに & で増やすやつ\n  }\n): string =>\n  [\n    baseClassName,\n    ...(modifier ? modifierClasses(baseClassName, modifier) : []),\n    ...(margin ? marginClasses(margin) : []),\n    props ? functionalMarginClasses(props) : '',\n  ]\n    .filter((e) => e)\n    .join(' ');\n\nexport default vbClassNames;\n"
  },
  {
    "path": "stories/commonKnobs.ts",
    "content": "import { select, text, boolean } from '@storybook/addon-knobs';\nconst marginOptions = {\n  '0': '',\n  '0.25rem': 0.25,\n  '0.5rem': 0.5,\n  '1rem': 1,\n  '1.5rem': 1.5,\n  '2rem': 2,\n  '3rem': 3,\n  '-0.25r': -0.25,\n  '-0.5rem': -0.5,\n  '-1rem': -1,\n  '-1.5rem': -1.5,\n  '-2rem': -2,\n  '-3rem': -3,\n  auto: 'auto'\n} as const;\nconst commonKnobs = () => ({\n  ma: select('MarginAll', marginOptions, '', 'CommonProps') || undefined,\n  mt: select('MarginTop', marginOptions, '', 'CommonProps') || undefined,\n  mb: select('MarginBottom', marginOptions, '', 'CommonProps') || undefined,\n  mr: select('MarginRight', marginOptions, '', 'CommonProps') || undefined,\n  ml: select('MarginLeft', marginOptions, '', 'CommonProps') || undefined,\n  'data-guide': text('Data-Guide', '', 'CommonProps'),\n  'data-test': text('Data-Test', '', 'CommonProps'),\n  'data-tracking': text('Data-Tracking', '', 'CommonProps'),\n  'data-masking': boolean('Data-Masking', false, 'CommonProps') || undefined\n});\nexport default commonKnobs;\n"
  },
  {
    "path": "stories/index.ts",
    "content": "export { default as commonKnobs } from './commonKnobs';\n"
  },
  {
    "path": "stylelint.config.js",
    "content": "module.exports = {\n  extends: ['stylelint-config-standard', 'stylelint-config-prettier'],\n  rules: {\n    'property-no-unknown': [\n      true,\n      {\n        ignoreProperties: ['container-name', 'container-type'],\n      },\n    ],\n    'at-rule-no-unknown': [\n      true,\n      {\n        ignoreAtRules: [\n          'extend',\n          'at-root',\n          'each',\n          'for',\n          'mixin',\n          'include',\n          'if',\n          'else',\n          'use',\n          'function',\n          'return',\n          'container',\n        ],\n      },\n    ],\n    'unit-no-unknown': [true, { ignoreUnits: ['svh'] }],\n  },\n};\n"
  },
  {
    "path": "stylesheets/_container_query.scss",
    "content": "// VSCode 上での syntax error 回避のため、@container 相当の mixin を定義します\n// ビルドして出力される CSS を確認しながら利用してください\n@mixin at-container($x, $y: '') {\n  $name: '';\n  $rule: '';\n\n  @if $y == '' {\n    $rule: $x;\n  } @else {\n    $name: $x;\n    $rule: $y;\n  }\n\n  // 以下が VSCode 上で syntax error となっていても問題ありません (このファイルに syntax error を閉じ込めています)\n  @container #{$name} (#{$rule}) {\n    @content;\n  }\n}\n"
  },
  {
    "path": "stylesheets/_lv1.scss",
    "content": "@import './lv1/Loading';\n@import './lv1/base';\n@import './lv1/button';\n@import './lv1/calendar';\n@import './lv1/content';\n@import './lv1/focusHighlight';\n@import './lv1/focusTrap';\n@import './lv1/form';\n@import './lv1/grid';\n@import './lv1/headline';\n@import './lv1/icon';\n@import './lv1/image';\n@import './lv1/interactive-parts';\n@import './lv1/list';\n@import './lv1/layout';\n@import './lv1/message';\n@import './lv1/margin-option';\n@import './lv1/InlineSpinner';\n@import './lv1/progress';\n"
  },
  {
    "path": "stylesheets/_lv2.scss",
    "content": "@import './lv2/accordionPanel';\n@import './lv2/bulletedList';\n@import './lv2/buttonGroup';\n@import './lv2/breadcrumbs';\n@import './lv2/calendar';\n@import './lv2/cardNavigation';\n@import './lv2/comboBox';\n@import './lv2/descriptionList';\n@import './lv2/dateInput';\n@import './lv2/dialog';\n@import './lv2/dialogFooter';\n@import './lv2/dropdown';\n@import './lv2/dropdownButton';\n@import './lv2/formBlock';\n@import './lv2/formField';\n@import './lv2/filterTag';\n@import './lv2/fileUploader';\n@import './lv2/fileDropArea';\n@import './lv2/footer';\n@import './lv2/formGroup';\n@import './lv2/globalNavi';\n@import './lv2/guidanceMessage';\n@import './lv2/guidedContent';\n@import './lv2/header';\n@import './lv2/headlineArea';\n@import './lv2/indexSearchField';\n@import './lv2/lineSeparatedList';\n@import './lv2/listButtonSelector';\n@import './lv2/listTable';\n@import './lv2/listCard';\n@import './lv2/messageBlock';\n@import './lv2/pageSelector';\n@import './lv2/messageIcon';\n@import './lv2/modal';\n@import './lv2/numericTable';\n@import './lv2/emptyStates';\n@import './lv2/pager';\n@import './lv2/selectableButton';\n@import './lv2/stackedBarChart';\n@import './lv2/statusSelector';\n@import './lv2/stepper';\n@import './lv2/tabbar';\n@import './lv2/tagBox';\n@import './lv2/withAccordionContent';\n@import './lv2/withBalloon';\n@import './lv2/withPopup';\n@import './lv2/withTOC';\n@import './lv2/withFilterableDropdown';\n@import './lv2/personTag';\n@import './lv2/popupProgressBar';\n@import './lv2/popupProgressBarPortal';\n@import './lv2/skeleton';\n@import './lv2/hierarchicalTable';\n@import './lv2/propListForm';\n"
  },
  {
    "path": "stylesheets/freee.scss",
    "content": "@import './lv0/colors';\n\n$basicFont: -apple-system, BlinkMacSystemFont, 'Helvetica Neue',\n  'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo,\n  sans-serif;\n\nbody {\n  background: $vbColorsP01;\n  color: $vbColorsGY07;\n  font-family: $basicFont;\n  margin: 0;\n  padding: 0;\n}\n\na {\n  color: $vbColorsP07;\n}\n"
  },
  {
    "path": "stylesheets/lv0/_colors.scss",
    "content": "@use 'sass:color';\n@use 'sass:math';\n\n$vbColorsP01: #ebf3ff;\n$vbColorsP02: #dce8ff;\n$vbColorsP03: #aac8ff;\n$vbColorsP04: #73a5ff;\n$vbColorsP05: #2864f0;\n$vbColorsP06: #3264dc;\n$vbColorsP07: #285ac8;\n$vbColorsP08: #1e46aa;\n$vbColorsP09: #23418c;\n$vbColorsP10: #143278;\n\n$vbColorsS01: #f7f5f5;\n$vbColorsS02: #f0eded;\n$vbColorsS03: #e9e7e7;\n$vbColorsS04: #e1dcdc;\n$vbColorsS05: #d7d2d2;\n$vbColorsS06: #bebaba;\n$vbColorsS07: #aaa7a7;\n$vbColorsS08: #8c8989;\n$vbColorsS09: #6e6b6b;\n$vbColorsS10: #464343;\n\n$vbColorsRE02: #fad2d7;\n$vbColorsRE04: #f07882;\n$vbColorsRE05: #dc1e32;\n$vbColorsRE07: #a51428;\n$vbColorsRE10: #6e0f19;\n\n$vbColorsOR02: #ffe1d2;\n$vbColorsOR04: #ffaa78;\n$vbColorsOR05: #fa6414;\n$vbColorsOR07: #be4b0f;\n$vbColorsOR10: #7d320a;\n\n$vbColorsYE02: #fff0d2;\n$vbColorsYE04: #ffd278;\n$vbColorsYE05: #ffb91e;\n$vbColorsYE07: #be8c14;\n$vbColorsYE10: #825a0f;\n\n$vbColorsYG02: #e6f0d2;\n$vbColorsYG04: #b4dc7d;\n$vbColorsYG05: #82c31e;\n$vbColorsYG07: #50961e;\n$vbColorsYG10: #3c5f14;\n\n$vbColorsGR02: #cdebd7;\n$vbColorsGR04: #64be8c;\n$vbColorsGR05: #00963c;\n$vbColorsGR07: #006e2d;\n$vbColorsGR10: #004b1e;\n\n$vbColorsBG02: #cdf0f0;\n$vbColorsBG04: #64d2d2;\n$vbColorsBG05: #00b9b9;\n$vbColorsBG07: #008c8c;\n$vbColorsBG10: #146464;\n\n$vbColorsPU02: #e6d7fa;\n$vbColorsPU04: #b482f0;\n$vbColorsPU05: #733ce6;\n$vbColorsPU07: #5a2daa;\n$vbColorsPU10: #3c1e73;\n\n$vbColorsGY01: #fbfbfb;\n$vbColorsGY02: #dcdcdc;\n$vbColorsGY04: #a0a0a0;\n$vbColorsGY05: #5a5a5a;\n$vbColorsGY07: #323232;\n$vbColorsGY10: #1e1e1e;\n\n$vbPrimaryColor: $vbColorsP07;\n$vbAccentColor: $vbColorsP04;\n$vbLinkColor: $vbColorsP07;\n$vbColumnColor: $vbColorsS01;\n$vbBaseColor1: $vbColorsS02;\n$vbBaseColor2: $vbColorsS03;\n$vbBaseColor3: $vbColorsS08;\n$vbBurntColor: $vbColorsS09;\n$vbBlackColor: $vbColorsGY07;\n$vbAlertColor: $vbColorsRE05;\n$vbNoticeColor: $vbColorsYE07;\n\n$vbBackgroundColor: $vbColorsP01;\n\n$vbScrimColor: rgba(0, 0, 0, 0.5);\n$vbThinScrimColor: rgba(0, 0, 0, 0.12);\n\n$vbCardShadow: 0 0 1rem rgba(0, 0, 0, 0.1),\n  0 0.125rem 0.25rem rgba(0, 0, 0, 0.2);\n$vbFloatingShadow: 0 0 1.5rem rgba(0, 0, 0, 0.1),\n  0 0.25rem 0.5rem rgba(0, 0, 0, 0.2);\n$vbPopupShadow: 0 0 2rem rgba(0, 0, 0, 0.1),\n  0 0.375rem 0.75rem rgba(0, 0, 0, 0.2);\n\n$use2021Style: true;\n\n// #FFFFFF の上に置いたときに $color に指定した色に見える、 opacity: $alpha な色を返す\n@function add-transparency($color, $alpha) {\n  @return color.change(\n    $color,\n    $red: math.div((color.red($color) - 255 * (1 - $alpha)), $alpha),\n    $green: math.div((color.green($color) - 255 * (1 - $alpha)), $alpha),\n    $blue: math.div((color.blue($color) - 255 * (1 - $alpha)), $alpha),\n    $alpha: $alpha\n  );\n}\n"
  },
  {
    "path": "stylesheets/lv0/_focus.scss",
    "content": "@import './colors';\n@import './size';\n\n$vbFocusHighlightWidth: 2;\n\n$vbFocusHighlightShadow: 0 0 0 $vbMinimum #fff,\n  //内側に白1px\n  0 0 0 $vbMinimum * ($vbFocusHighlightWidth + 1) $vbColorsP05,\n  //内側の白1px+フォーカスインジケーターの幅(#vbFocusHighlightWidth)\n  0 0 0 $vbMinimum * (\n      $vbFocusHighlightWidth + 2\n    ) #fff; //内側の白1px+フォーカスインジケーターの幅(#vbFocusHighlightWidth)+外側の1px\n\n$vbFocusHighlightShadowInset: inset 0 0 0 $vbMinimum #fff,\n  inset 0 0 0 $vbMinimum * ($vbFocusHighlightWidth + 1) $vbColorsP05,\n  inset 0 0 0 $vbMinimum * ($vbFocusHighlightWidth + 2) #fff;\n"
  },
  {
    "path": "stylesheets/lv0/_fonts.scss",
    "content": "@font-face {\n  font-family: 'freee-logo';\n  font-style: normal;\n  src: local('Noto Sans CJK JP Medium'),\n    url(//fonts.gstatic.com/ea/notosansjp/v5/NotoSansJP-Medium.woff2)\n      format('woff2'),\n    url(//fonts.gstatic.com/ea/notosansjp/v5/NotoSansJP-Medium.woff)\n      format('woff'),\n    url(//fonts.gstatic.com/ea/notosansjp/v5/NotoSansJP-Medium.otf)\n      format('opentype');\n}\n"
  },
  {
    "path": "stylesheets/lv0/_size.scss",
    "content": "$vbMinimum: 1px;\n\n$vbXSmallSize: 0.25rem; // 4dp\n$vbSmallSize: 0.5rem; // 8dp\n$vbBasicSize: 1rem; // 16dp\n$vbLargeSize: 1.5rem; // 24dp\n$vbXLargeSize: 2rem; // 32dp\n$vbXXLargeSize: 3rem; // 48dp\n\n$vbContainerSize: 70rem; // 1120dp\n\n$vbFormControlHeight: 2.25rem; //36dp\n$vbFormControlSmallHeight: 1.5rem; // 24dp\n$vbFormControlLargeHeight: 3rem; // 48dp\n\n// type-scale\n// design-token （各コンポーネントの実装に直接使わないでください）\n$vbFontSize0625: 0.625rem; // 10dp\n$vbFontSize0750: 0.75rem; // 12dp\n$vbFontSize0875: 0.875rem; // 14dp\n$vbFontSize1000: 1rem; // 16dp\n$vbFontSize1500: 1.5rem; // 24dp\n\n// semantic-token （各componentでfont-sizeを扱うときにはこちらを利用）\n$vbSmallestIconFontSize: $vbFontSize0625; // 10dp\n$vbCaptionFontSize: $vbFontSize0750; // 12dp\n$vbNormalFontSize: $vbFontSize0875; // 14dp\n$vbHeadline3FontSize: $vbFontSize0875; // 14dp\n$vbHeadline2FontSize: $vbFontSize1000; // 16dp\n$vbHeadline1FontSize: $vbFontSize1500; // 24dp\n\n$vbMobileHeadline3FontSize: $vbFontSize0875; // 14dp\n$vbMobileHeadline2FontSize: $vbFontSize0875; // 14dp\n$vbMobileHeadline1FontSize: $vbFontSize1000; // 16dp\n\n$vbOverlayZIndex: 100;\n$vbFormActionsZIndex: 200;\n$vbFloatingZIndex: 500;\n$vbFullScreenZIndex: 700;\n$vbModalZIndex: 1000;\n$vbMessageModalZIndex: 1500;\n$vbPopupZIndex: 2000;\n$vbPopupMessageZIndex: 3000;\n$vbFixedMessageZIndex: 4000;\n$vbMaxZIndex: 2147483647;\n\n// モバイルを想定した横幅の閾値(320 ~ 768px)\n$vbMobileBoundaryWidth: 48rem;\n\n// フォントの設定はサイズが絡むのでfonts.scssじゃなくてこのファイルに書いてるよ\n$vbFontFamily: '-apple-system', BlinkMacSystemFont, 'Helvetica Neue',\n  'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo,\n  sans-serif;\n\n$vbLineHeight: 1.5;\n\n// 地の文\n$vbNormalFont: normal #{$vbNormalFontSize}/#{$vbLineHeight} $vbFontFamily;\n\n// キャプション（地の文よりも小さめ）\n$vbCaptionFont: normal #{$vbCaptionFontSize}/#{$vbLineHeight} $vbFontFamily;\n\n// フォームのラベルや表の見出し（キャプションと同じ内容だが目的が違うので分けている）\n$vbItemNameFont: normal #{$vbCaptionFontSize}/#{$vbLineHeight} $vbFontFamily;\n\n// 見出し最大\n$vbHeadlineFont1: bold #{$vbHeadline1FontSize}/#{$vbLineHeight} $vbFontFamily;\n\n// 見出し中間\n$vbHeadlineFont2: bold #{$vbHeadline2FontSize}/#{$vbLineHeight} $vbFontFamily;\n\n// 見出し最小\n$vbHeadlineFont3: bold #{$vbNormalFontSize}/#{$vbLineHeight} $vbFontFamily;\n\n// 見出し最大 (モバイル)\n$vbMobileHeadlineFont1: bold #{$vbMobileHeadline1FontSize}/#{$vbLineHeight}\n  $vbFontFamily;\n\n// 見出し中間 (モバイル)\n$vbMobileHeadlineFont2: bold #{$vbMobileHeadline2FontSize}/#{$vbLineHeight}\n  $vbFontFamily;\n\n// 見出し最小 (モバイル)\n$vbMobileHeadlineFont3: bold #{$vbMobileHeadline3FontSize}/#{$vbLineHeight}\n  $vbFontFamily;\n\n// border-radius-size\n// design-token （各コンポーネントの実装に直接使わないでください）\n$vbBorderRadius0250: 0.25rem; // 4dp\n$vbBorderRadius0500: 0.5rem; // 8dp\n$vbBorderRadius0750: 0.75rem; // 12dp\n$vbBorderRadius1000: 1rem; // 16dp\n$vbBorderRadius1500: 1.5rem; // 24dp\n$vbBorderRadius9900: 99rem; // 円形にするための大きい数字\n\n// semantic-token （各コンポーネントの実装に原則直接使わないでください）\n$vbXSmallBorderRadius: $vbBorderRadius0250; // 4dp\n$vbSmallBorderRadius: $vbBorderRadius0500; // 8dp\n$vbMediumBorderRadius: $vbBorderRadius0750; // 12dp\n$vbLargeBorderRadius: $vbBorderRadius1000; // 16dp\n$vbXLargeBorderRadius: $vbBorderRadius1500; // 24dp\n$vbFullBorderRadius: $vbBorderRadius9900; // この変数のみ単体で利用可能\n\n// alias-token（各componentでborder-radiusを扱うときにはこちらを利用）\n$vbBaseBorderRadius: $vbSmallBorderRadius; // Base系コンポーネント\n$vbCardBorderRadius: $vbMediumBorderRadius; // Card系コンポーネント\n$vbFloatingBorderRadius: $vbLargeBorderRadius; // Floating系コンポーネント\n$vbPopupBorderRadius: $vbLargeBorderRadius; // Popup系コンポーネント\n$vbDialogBorderRadius: $vbXLargeBorderRadius; // Dialog系コンポーネント\n$vbFontBorderRadius: $vbSmallBorderRadius; // Button,Inputなどテキストを含むコンポーネント\n$vbMiniPaddingBorderRadius: $vbXSmallBorderRadius; // テキストを含むコンポーネントの中でもPaddingが小さいコンポーネント\n$vbFocusHighlightBorderRadius: $vbXSmallBorderRadius; // フォーカスハイライト系コンポーネント\n"
  },
  {
    "path": "stylesheets/lv1/InlineSpinner.scss",
    "content": ".vb-spinner {\n  display: inline-block;\n  vertical-align: middle;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  position: relative;\n\n  &--large {\n    width: 1.75rem;\n    height: 1.75rem;\n  }\n\n  &__base {\n    position: absolute;\n    top: -0.25rem;\n    left: -0.25rem;\n  }\n\n  &__fade-enter-active,\n  &__fade-enter-done {\n    opacity: 1;\n    transition: opacity 0.3s ease;\n  }\n\n  &__animation {\n    width: 1.5rem;\n    height: 1.5rem;\n\n    &--large {\n      width: 2.25rem;\n      height: 2.25rem;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/Loading.scss",
    "content": ".vb-loading {\n  &--block {\n    position: relative;\n  }\n\n  &--inline {\n    display: inline-block;\n  }\n\n  &__fade-enter,\n  &__fade-exit {\n    opacity: 0;\n    transition: opacity 0.3s ease;\n  }\n\n  &__fade-enter-active,\n  &__fade-enter-done {\n    opacity: 1;\n    transition: opacity 0.3s ease;\n  }\n\n  &__cover {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    background-color: rgba(255, 255, 255, 0.7);\n    z-index: $vbOverlayZIndex;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n\n    &--coverAll {\n      position: fixed;\n      z-index: $vbMaxZIndex;\n    }\n  }\n\n  &__animation {\n    position: relative;\n    width: 3rem;\n    height: 3rem;\n    max-width: 100%;\n    max-height: 100%;\n\n    &--coverAll {\n      width: 31.5rem;\n      height: 10.5rem;\n      max-width: 80vw;\n    }\n  }\n\n  &__message {\n    font: $vbNormalFont;\n    color: $vbBlackColor;\n    margin-top: $vbLargeSize;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/base.scss",
    "content": "/** @define base */\n%vbBase {\n  box-sizing: border-box;\n  padding: $vbLargeSize;\n  background-color: $vbColumnColor;\n}\n\n.vb-marginBase {\n  &--fitContent {\n    max-width: fit-content;\n  }\n}\n\n.vb-columnBase {\n  @extend %vbBase;\n\n  &--overflowHidden {\n    // `ColumnBase`内で`Portal`を利用していない`DropDown`があった場合、\n    // `overflow: hidden;`によって見切れてしまう問題が発生しているので、\n    // それを避けるために暫定的にオンオフできるようにしています\n    overflow: hidden;\n  }\n\n  &--rounded {\n    border-radius: $vbBaseBorderRadius;\n  }\n}\n\n.vb-floatingBase {\n  @extend %vbBase;\n\n  background-color: #fff;\n  box-shadow: $vbFloatingShadow;\n  z-index: $vbFloatingZIndex;\n  position: relative;\n  border-radius: $vbFloatingBorderRadius;\n  overflow: hidden;\n\n  &--fitContent {\n    max-width: fit-content;\n  }\n}\n\n.vb-scrimBase {\n  @extend %vbBase;\n\n  background-color: $vbScrimColor;\n  color: #fff;\n  z-index: $vbModalZIndex - 1;\n\n  &--small {\n    padding: $vbBasicSize;\n  }\n}\n\n.vb-popupBase {\n  @extend %vbBase;\n\n  background-color: #fff;\n  box-shadow: $vbPopupShadow;\n  z-index: $vbPopupZIndex;\n  position: relative;\n  border-radius: $vbPopupBorderRadius;\n  overflow: hidden;\n\n  &--fitContent {\n    max-width: fit-content;\n  }\n}\n\n.vb-dialogBase {\n  @extend %vbBase;\n\n  background-color: #fff;\n  z-index: $vbModalZIndex;\n  position: relative;\n  border-radius: $vbDialogBorderRadius;\n  overflow: hidden;\n\n  &--message {\n    z-index: $vbMessageModalZIndex;\n  }\n}\n\n.vb-cardBase {\n  @extend %vbBase;\n\n  background-color: #fff;\n  box-shadow: $vbCardShadow;\n  position: relative;\n  border-radius: $vbCardBorderRadius;\n\n  &--overflowHidden {\n    // `CardBase`内で`Portal`を利用していない`DropDown`があった場合、\n    // `overflow: hidden;`によって見切れてしまう問題が発生しているので、\n    // それを避けるために暫定的にオンオフできるようにしています\n    overflow: hidden;\n  }\n\n  &:not(&--disabled) &--clickable {\n    border-radius: $vbCardBorderRadius;\n    transition-duration: 0.2s;\n    transition-property: background-color, color;\n\n    &:hover {\n      background-color: mix($vbPrimaryColor, #fff, 6%);\n    }\n  }\n\n  &--disabled {\n    background-color: $vbBaseColor1;\n    opacity: 0.5;\n    cursor: not-allowed;\n  }\n\n  &__link,\n  &__button {\n    text-decoration: none;\n    color: $vbBlackColor;\n    display: block;\n    text-align: left;\n    border: 0;\n    background-color: transparent;\n    font-size: 100%;\n    padding: 0;\n    font-family: inherit;\n    cursor: pointer;\n\n    &::after {\n      // クリックできる領域をカード全体に広げる\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      border-radius: $vbCardBorderRadius;\n      // blur 時の挙動が意図通りでないため一旦コメントアウトする\n      // transition-property: background-color;\n      // transition-duration: 0.2s;\n    }\n\n    &:hover::after {\n      background-color: $vbColorsP01;\n      mix-blend-mode: multiply;\n    }\n\n    &--disabled {\n      cursor: not-allowed;\n    }\n  }\n\n  &__content {\n    position: relative;\n  }\n}\n\n.vb-zebraBase {\n  padding: $vbLargeSize;\n  background-color: $vbColumnColor;\n}\n\n.vb-columnBase,\n.vb-floatingBase,\n.vb-popupBase,\n.vb-dialogBase {\n  &--border {\n    &Default {\n      border: 1px solid $vbBaseColor2;\n      background-color: #fff;\n    }\n\n    &Alert {\n      border: 1px solid $vbAlertColor;\n      background-color: #fff;\n    }\n\n    &Notice {\n      border: 1px solid $vbNoticeColor;\n      background-color: #fff;\n    }\n\n    &Success {\n      border: 1px solid $vbPrimaryColor;\n      background-color: #fff;\n    }\n  }\n}\n\n.vb-columnBase,\n.vb-popupBase,\n.vb-floatingBase,\n.vb-dialogBase,\n.vb-cardBase {\n  &--inline {\n    display: inline-block;\n    vertical-align: middle;\n  }\n}\n\n.vb-columnBase,\n.vb-popupBase,\n.vb-floatingBase,\n.vb-dialogBase,\n.vb-zebraBase,\n.vb-cardBase {\n  &--padding {\n    &Small {\n      padding: $vbBasicSize;\n    }\n\n    &Large {\n      padding: $vbXLargeSize;\n    }\n\n    &Zero {\n      padding: 0;\n    }\n  }\n}\n\n.vb-columnBase,\n.vb-zebraBase,\n.vb-cardBase {\n  &--paddingResponsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      padding: $vbLargeSize $vbBasicSize;\n    }\n  }\n}\n\n.vb-zebraBase:nth-child(even) {\n  background-color: #fff;\n}\n\n%balloon-tail-base {\n  content: '';\n  display: block;\n  border-top: 0.5rem solid $vbColumnColor;\n  border-left: 0.314rem solid transparent;\n  border-right: 0.314rem solid transparent;\n  position: absolute;\n  bottom: -0.5rem;\n  transform: translateX(-50%);\n}\n\n%balloon-tail-border-base {\n  content: '';\n  display: block;\n  border-top: 0.6rem solid $vbBaseColor2;\n  border-left: 0.414rem solid transparent;\n  border-right: 0.414rem solid transparent;\n  position: absolute;\n  bottom: -0.6rem;\n  transform: translateX(-50%);\n}\n\n.vb-balloon {\n  box-sizing: border-box;\n  width: max-content;\n  min-width: 13rem; // for IE (min非対応)\n  min-width: #{'min(13rem, 66vw)'};\n  max-width: 44rem; // for IE (min非対応)\n  max-width: #{'min(44rem, calc(100vw - 5rem), 66vw)'};\n  padding: $vbBasicSize;\n  background-color: $vbColumnColor;\n  box-shadow: $vbPopupShadow;\n  position: absolute;\n  left: 50%;\n  bottom: calc(100% + 0.5rem);\n  transform: translateX(-50%);\n  font-size: $vbCaptionFontSize;\n  z-index: $vbPopupMessageZIndex;\n\n  &::after {\n    @extend %balloon-tail-base;\n\n    left: 50%;\n    transform: translateX(-50%);\n  }\n\n  &::before {\n    @extend %balloon-tail-border-base;\n\n    left: 50%;\n    transform: translateX(-50%);\n  }\n\n  &--left {\n    &::before,\n    &::after {\n      left: calc(1rem - 1px);\n      transform: translateX(-50%);\n    }\n\n    transform: none;\n    left: calc(-50% + 0.414rem + 1px);\n  }\n\n  &--right {\n    &::before,\n    &::after {\n      left: auto;\n      right: calc(1rem - 1px);\n      transform: translateX(50%);\n    }\n\n    transform: none;\n    left: auto;\n    right: calc(-50% + 0.414rem + 1px);\n  }\n\n  &--bottom {\n    bottom: auto;\n    top: 0.5rem;\n\n    &::after {\n      border-top: 0;\n      border-bottom: 0.5rem solid $vbColumnColor;\n      bottom: auto;\n      top: -0.5rem;\n    }\n\n    &::before {\n      border-top: 0;\n      border-bottom: 0.6rem solid $vbBaseColor2;\n      bottom: auto;\n      top: -0.6rem;\n    }\n  }\n\n  &--border {\n    &-default {\n      border: 1px solid $vbBaseColor2;\n      background-color: #fff;\n\n      &::after {\n        border-top-color: #fff;\n        border-bottom-color: #fff;\n      }\n    }\n\n    &-alert {\n      border: 1px solid $vbAlertColor;\n      background-color: #fff;\n\n      &::after {\n        border-top-color: #fff;\n        border-bottom-color: #fff;\n      }\n\n      &::before {\n        border-top-color: $vbAlertColor;\n        border-bottom-color: $vbAlertColor;\n      }\n    }\n\n    &-notice {\n      border: 1px solid $vbNoticeColor;\n      background-color: #fff;\n\n      &::after {\n        border-top-color: #fff;\n        border-bottom-color: #fff;\n      }\n\n      &::before {\n        border-top-color: $vbNoticeColor;\n        border-bottom-color: $vbNoticeColor;\n      }\n    }\n\n    &-success {\n      border: 1px solid $vbPrimaryColor;\n      background-color: #fff;\n\n      &::after {\n        border-top-color: #fff;\n        border-bottom-color: #fff;\n      }\n\n      &::before {\n        border-top-color: $vbPrimaryColor;\n        border-bottom-color: $vbPrimaryColor;\n      }\n    }\n  }\n}\n\n.vb-container {\n  display: block;\n  width: calc(100vw - 3rem);\n  margin: 0 auto;\n  position: relative;\n  box-sizing: border-box;\n  max-width: $vbContainerSize;\n  min-width: $vbContainerSize;\n\n  &--widthWide {\n    max-width: 100rem;\n  }\n\n  &--widthNarrow {\n    max-width: 40rem;\n    min-width: 40rem;\n  }\n\n  &--responsive {\n    min-width: 20rem;\n\n    @media (max-width: $vbMobileBoundaryWidth) {\n      width: 100vw;\n    }\n  }\n}\n\n.vb-contentsBase {\n  display: block;\n  background-color: #fff;\n  padding: $vbLargeSize;\n  position: relative;\n  box-sizing: border-box;\n\n  &--padding {\n    &-small {\n      padding: $vbBasicSize;\n    }\n\n    &-large {\n      padding: $vbXLargeSize;\n    }\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      padding: $vbBasicSize;\n    }\n\n    & + & {\n      margin-top: $vbLargeSize;\n\n      @media (max-width: $vbMobileBoundaryWidth) {\n        margin-top: 0;\n        border-top: $vbMinimum solid $vbBaseColor2;\n      }\n    }\n  }\n}\n\n.vb-negativeContentsBase {\n  $componentClass: &;\n\n  margin-left: -$vbLargeSize;\n  margin-right: -$vbLargeSize;\n\n  &:last-child {\n    margin-bottom: -$vbLargeSize;\n  }\n\n  &--negativeMarginSmall {\n    margin-left: -$vbBasicSize;\n    margin-right: -$vbBasicSize;\n\n    &:last-child {\n      margin-bottom: -$vbLargeSize;\n    }\n  }\n\n  &--negativeMarginLarge {\n    margin-left: -$vbXLargeSize;\n    margin-right: -$vbXLargeSize;\n\n    &:last-child {\n      margin-bottom: -$vbXLargeSize;\n    }\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      margin-left: -$vbBasicSize;\n      margin-right: -$vbBasicSize;\n\n      &:last-child {\n        margin-bottom: -$vbBasicSize;\n      }\n    }\n  }\n}\n\n.vb-negativeMargin {\n  &--small {\n    &--top {\n      margin-top: -$vbBasicSize;\n    }\n\n    &--left {\n      margin-left: -$vbBasicSize;\n    }\n\n    &--right {\n      margin-right: -$vbBasicSize;\n    }\n\n    &--bottom {\n      margin-bottom: -$vbBasicSize;\n    }\n  }\n\n  &--medium {\n    &--top {\n      margin-top: -$vbLargeSize;\n    }\n\n    &--left {\n      margin-left: -$vbLargeSize;\n    }\n\n    &--right {\n      margin-right: -$vbLargeSize;\n    }\n\n    &--bottom {\n      margin-bottom: -$vbLargeSize;\n    }\n  }\n\n  &--large {\n    &--top {\n      margin-top: -$vbXLargeSize;\n    }\n\n    &--left {\n      margin-left: -$vbXLargeSize;\n    }\n\n    &--right {\n      margin-right: -$vbXLargeSize;\n    }\n\n    &--bottom {\n      margin-bottom: -$vbXLargeSize;\n    }\n  }\n}\n\n.vb-scrollableBase {\n  &--scrollableY {\n    overflow-y: auto;\n  }\n\n  &--scrollableX {\n    overflow-x: auto;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/button.scss",
    "content": "%button-disabled-face {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n\n  &:hover {\n    cursor: not-allowed;\n  }\n}\n\n%button-base {\n  display: inline-block;\n  margin: 0;\n  padding: 0 $vbBasicSize;\n  text-align: center;\n  text-decoration: none;\n  box-sizing: border-box;\n  border-radius: $vbFontBorderRadius;\n  border: 0;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color, box-shadow, border-color;\n  font-family: $vbFontFamily;\n  font-size: $vbNormalFontSize;\n  height: $vbFormControlHeight;\n  vertical-align: middle;\n  white-space: nowrap;\n  line-height: calc(#{$vbFormControlHeight} - #{$vbMinimum * 2});\n\n  &:hover {\n    text-decoration: none;\n  }\n\n  &:focus {\n    outline: none;\n    box-shadow: $vbFocusHighlightShadow;\n  }\n}\n\n%button-small-base {\n  height: $vbFormControlSmallHeight;\n  padding: 0 $vbSmallSize;\n  font-size: $vbCaptionFontSize;\n  line-height: calc(#{$vbFormControlSmallHeight} - #{$vbMinimum * 2});\n}\n\n%button-large-base {\n  height: $vbFormControlLargeHeight;\n  padding: 0 $vbBasicSize;\n  font-size: $vbHeadline2FontSize;\n  line-height: calc(#{$vbFormControlLargeHeight} - #{$vbMinimum * 2});\n}\n\n%button-face {\n  background-color: #fff;\n  color: $vbBlackColor;\n  border: $vbMinimum solid $vbColorsGY02;\n  font-weight: bold;\n\n  @if not $use2021Style {\n    color: $vbLinkColor;\n    border-color: $vbBaseColor3;\n  }\n\n  &:hover {\n    color: $vbColorsP08;\n    background-color: $vbColorsP02;\n    border-color: $vbColorsP08;\n  }\n}\n\n%tab-button-face {\n  background-color: $vbBaseColor1;\n  color: $vbBlackColor;\n  font-weight: normal;\n\n  &:hover {\n    background-color: darken($vbBaseColor1, 9%);\n  }\n}\n\n%button-primary-face {\n  border: 0;\n  background-color: $vbPrimaryColor;\n  color: #fff;\n  font-weight: bold;\n\n  &:hover {\n    background-color: $vbColorsP09;\n  }\n\n  &:hover,\n  &:focus {\n    // 読み込みプロダクト内のグローバル定義側で:hover, :focus時にボタン文字色が意図せず変更されるケースを防止する\n    color: #fff;\n  }\n}\n\n%button-danger-face {\n  border: 0;\n  background-color: $vbAlertColor;\n  color: #fff;\n  font-weight: bold;\n\n  &:hover {\n    background-color: $vbColorsRE07;\n  }\n}\n\n%button-current-face {\n  border: 0;\n  background-color: $vbPrimaryColor;\n  color: #fff;\n  font-weight: bold;\n  cursor: default;\n\n  &:hover {\n    background-color: $vbPrimaryColor;\n  }\n}\n\n%button-icon-base {\n  width: 1.5em;\n  height: 1.5em;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n\n%leftIconButton {\n  padding-left: 2.75em;\n  position: relative;\n  text-align: left;\n\n  &__icon {\n    @extend %button-icon-base;\n\n    left: 0.625em;\n  }\n}\n\n%rightIconButton {\n  padding-right: 2.75em;\n  position: relative;\n  text-align: left;\n\n  &__icon {\n    @extend %button-icon-base;\n\n    right: 0.625em;\n  }\n}\n\n/** @define button */\n.vb-button {\n  @extend %button-base;\n\n  &--small {\n    @extend %button-small-base;\n  }\n\n  &--large {\n    @extend %button-large-base;\n  }\n\n  &--disabled {\n    @extend %button-disabled-face;\n  }\n\n  &--leftIcon {\n    padding-left: 2.75em;\n    position: relative;\n    text-align: left;\n  }\n\n  &--rightIcon {\n    padding-right: 2.75em;\n    position: relative;\n    text-align: left;\n  }\n\n  &__icon {\n    @extend %button-icon-base;\n\n    &--left {\n      left: 0.625em;\n    }\n\n    &--right {\n      right: 0.625em;\n    }\n  }\n\n  &--appearancePrimary {\n    @extend %button-primary-face;\n  }\n\n  @at-root #{selector-append(#{&}--appearancePrimary, #{&}--danger)} {\n    @extend %button-danger-face;\n  }\n\n  &--appearanceSecondary {\n    @extend %button-face;\n  }\n\n  @at-root #{selector-append(#{&}--appearanceSecondary, #{&}--danger)} {\n    color: $vbAlertColor;\n\n    &:hover {\n      border-color: $vbColorsRE07;\n      color: $vbColorsRE07;\n      background-color: $vbColorsRE02;\n    }\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  &--hasMinWidth {\n    min-width: 6rem;\n  }\n\n  &#{&}--hasMinWidth#{&}--small {\n    min-width: 5rem;\n  }\n\n  &#{&}--hasMinWidth#{&}--large {\n    min-width: 11rem;\n  }\n\n  &--appearanceTertiary {\n    min-width: auto;\n    background-color: transparent;\n    color: $vbBlackColor;\n    font-weight: bold;\n    border: $vbMinimum solid transparent;\n\n    @if not $use2021Style {\n      color: $vbLinkColor;\n    }\n\n    &:hover {\n      color: $vbColorsP08;\n      background-color: add-transparency($vbColorsP02, 0.3);\n    }\n  }\n\n  // Tertiaryボタンの左側にアイコンがないときはpaddingを詰める\n  @at-root #{selector-append(#{&}--appearanceTertiary, \"#{&}:not(#{&}--leftIcon)\")} {\n    padding-left: $vbSmallSize;\n  }\n\n  // Tertiaryボタンの右側にアイコンがないときはpaddingを詰める\n  @at-root #{selector-append(#{&}--appearanceTertiary, \"#{&}:not(#{&}--rightIcon)\",)} {\n    padding-right: $vbSmallSize;\n  }\n\n  @at-root #{selector-append(#{&}--appearanceTertiary, #{&}--danger)} {\n    color: $vbAlertColor;\n\n    &:hover {\n      color: $vbColorsRE07;\n      background-color: add-transparency($vbColorsRE02, 0.3);\n    }\n  }\n}\n\n/** @define textButton */\n.vb-textButton {\n  display: inline-block;\n  font-family: $vbFontFamily;\n  $block: &;\n\n  & &__icon {\n    display: inline-block;\n    width: 1.5em;\n    height: 1.5em;\n    margin-right: $vbXSmallSize;\n    fill: $vbBlackColor;\n    vertical-align: middle;\n\n    &--right {\n      margin-right: 0;\n      margin-left: $vbXSmallSize;\n    }\n  }\n\n  &__link {\n    text-decoration: underline;\n    color: $vbLinkColor;\n    font-weight: bold;\n    vertical-align: middle;\n    transition-duration: 0.2s;\n    transition-property: color;\n  }\n\n  &__button {\n    text-decoration: underline;\n    color: $vbLinkColor;\n    font-weight: bold;\n    vertical-align: middle;\n    transition-duration: 0.2s;\n    transition-property: color;\n  }\n\n  &--noBorder &__link,\n  &--noBorder &__button {\n    text-decoration: none;\n  }\n\n  &:not(&--disabled) &__link:hover,\n  &:not(&--disabled) &__button:hover {\n    color: $vbAccentColor;\n    cursor: pointer;\n  }\n\n  &--disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n  }\n\n  &--small {\n    font-size: $vbCaptionFontSize;\n  }\n}\n\n.vb-globalNaviButton {\n  font-weight: bold;\n  font-family: $vbFontFamily;\n  text-decoration: none;\n  color: #fff;\n  display: block;\n  padding: $vbBasicSize;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n\n  @if $use2021Style {\n    box-sizing: border-box;\n    color: $vbBlackColor;\n    padding: 0 $vbBasicSize;\n    height: calc(#{$vbXXLargeSize} - #{$vbMinimum});\n    line-height: calc(#{$vbXXLargeSize - $vbXSmallSize} - #{$vbMinimum});\n  }\n\n  &__icon {\n    display: inline-block;\n    width: 1.5em;\n    height: 1.5em;\n    margin-right: 0.375em;\n    vertical-align: middle;\n  }\n\n  & &__text {\n    vertical-align: middle;\n  }\n\n  &:not(&--current):hover {\n    background-color: rgba(255, 255, 255, 0.1);\n\n    @if $use2021Style {\n      background-color: $vbColorsP01;\n      color: $vbPrimaryColor;\n    }\n  }\n\n  &--current {\n    background-color: rgba(0, 0, 0, 0.15);\n\n    @if $use2021Style {\n      color: $vbPrimaryColor;\n      background-color: #fff;\n      border-bottom: $vbXSmallSize solid $vbColorsP05;\n    }\n  }\n}\n\n/** @define jumpButton */\n%jumpButton {\n  background: #fff;\n  border: $vbMinimum solid $vbPrimaryColor;\n  color: $vbPrimaryColor;\n  text-align: left;\n  font-weight: bold;\n  text-decoration: none;\n}\n\n.vb-jumpButton,\n.vb-backwardButton {\n  display: inline-block;\n  padding: 0;\n}\n\n/** @define tabButton */\n.vb-tabButton {\n  @extend %button-base;\n  @extend %tab-button-face;\n\n  //color: $vbBurntColor;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n\n  &:hover:not(.vb-tabButton--current) {\n    color: $vbBlackColor;\n  }\n\n  &#{&}--current {\n    @extend %button-current-face;\n\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n    cursor: default;\n  }\n\n  &#{&}--small {\n    min-width: 7rem;\n    padding: 0.5rem;\n    font-size: $vbCaptionFontSize;\n  }\n}\n\n/** @define pagerButton */\n.vb-pagerButton {\n  @extend %button-face;\n\n  padding: 0 $vbSmallSize;\n  box-sizing: border-box;\n  min-width: $vbXLargeSize;\n  height: $vbXLargeSize;\n  border-radius: $vbFontBorderRadius;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  font-size: $vbNormalFontSize;\n  font-family: $vbFontFamily;\n\n  &#{&}--current {\n    @extend %button-current-face;\n\n    font-size: $vbHeadline2FontSize;\n    cursor: default;\n    outline: 0;\n  }\n\n  &#{&}--small {\n    height: $vbLargeSize;\n    min-width: $vbLargeSize;\n    font-size: $vbCaptionFontSize;\n  }\n\n  &--disabled {\n    @extend %button-disabled-face;\n  }\n}\n\n/** @define iconOnlyButton */\n.vb-iconOnlyButton {\n  padding: 0;\n  box-sizing: border-box;\n  width: $vbFormControlHeight;\n  height: $vbFormControlHeight;\n  border-radius: $vbFontBorderRadius;\n  text-align: center;\n  position: relative;\n  vertical-align: middle;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color, border;\n  font-size: $vbLargeSize;\n  display: inline-block;\n\n  & &__icon {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n  }\n\n  &--appearancePrimary {\n    @extend %button-primary-face;\n\n    &:hover {\n      color: #fff;\n    }\n  }\n\n  @at-root #{selector-append(#{&}--appearancePrimary, #{&}--danger)} {\n    @extend %button-danger-face;\n  }\n\n  &--appearanceSecondary {\n    @extend %button-face;\n  }\n\n  @at-root #{selector-append(#{&}--appearanceSecondary, #{&}--danger)} {\n    color: $vbAlertColor;\n\n    &:hover {\n      border-color: $vbColorsRE07;\n      color: $vbColorsRE07;\n      background-color: $vbColorsRE02;\n    }\n  }\n\n  &--appearanceTertiary {\n    background-color: transparent;\n    color: $vbBlackColor;\n    border: $vbMinimum solid transparent;\n\n    @if not $use2021Style {\n      color: $vbLinkColor;\n    }\n\n    &:hover {\n      color: $vbColorsP08;\n      background-color: add-transparency($vbColorsP02, 0.3);\n    }\n  }\n\n  @at-root #{selector-append(#{&}--appearanceTertiary, #{&}--danger)} {\n    color: $vbAlertColor;\n\n    &:hover {\n      background-color: add-transparency($vbColorsRE02, 0.3);\n    }\n  }\n\n  &--small {\n    height: $vbFormControlSmallHeight;\n    width: $vbFormControlSmallHeight;\n    font-size: $vbBasicSize;\n  }\n\n  &--large {\n    height: $vbFormControlLargeHeight;\n    width: $vbFormControlLargeHeight;\n    font-size: $vbXLargeSize;\n  }\n\n  &:hover {\n    text-decoration: none;\n  }\n\n  &--disabled {\n    @extend %button-disabled-face;\n  }\n}\n\n.vb-listButton {\n  @extend %button-base;\n\n  display: block;\n  width: 100%;\n  border-radius: 0;\n  background-color: $vbColumnColor;\n  font-weight: bold;\n  text-align: left;\n  color: inherit;\n  word-break: keep-all;\n\n  &:hover:not([aria-selected]) {\n    background-color: $vbBaseColor1;\n  }\n\n  &--selected {\n    cursor: default;\n    color: $vbBurntColor;\n  }\n\n  &--bgTransparent {\n    background-color: transparent;\n  }\n\n  &__leftIcon {\n    margin-right: 0.375em;\n  }\n\n  &__farRightIcon {\n    float: right;\n  }\n}\n\n.vb-inlineLink {\n  transition-duration: 0.2s;\n  transition-property: color, background-color;\n  display: inline;\n  border: 0;\n  padding: 0;\n  background: transparent;\n  font-size: 1em;\n  font-family: $vbFontFamily;\n  color: $vbLinkColor;\n  cursor: pointer;\n  text-decoration: underline;\n\n  &:hover {\n    color: $vbColorsP09;\n  }\n\n  &__iconWrapper {\n    height: 1em;\n    width: 1.5em;\n    vertical-align: middle;\n    display: inline-block;\n    position: relative;\n    line-height: 1;\n  }\n\n  &__icon {\n    font-size: 1.5em;\n    position: absolute;\n    left: 0;\n    top: 50%;\n    margin-top: -50%;\n  }\n\n  &--disabled {\n    opacity: 0.5;\n    cursor: not-allowed;\n    pointer-events: none;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/calendar.scss",
    "content": "%calendar-date-base {\n  padding: 0;\n  margin: 0;\n  border-bottom: 1px solid $vbBaseColor2;\n  position: relative;\n  background-color: #fff;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n\n  &::before {\n    content: '';\n    display: block;\n    padding-top: 100%;\n  }\n}\n\n%calendar-date-face {\n  color: $vbBlackColor;\n  cursor: pointer;\n\n  &:hover {\n    background-color: $vbBaseColor1;\n  }\n}\n\n%calendar-date-input-face {\n  background-color: $vbPrimaryColor;\n  color: #fff;\n  cursor: pointer;\n\n  &:hover {\n    background-color: $vbAccentColor;\n  }\n}\n\n%calendar-date-secondary-holiday-face {\n  color: $vbBurntColor;\n  cursor: pointer;\n\n  &:hover {\n    background-color: $vbBaseColor1;\n  }\n}\n\n%calendar-date-primary-holiday-face {\n  color: $vbAlertColor;\n  cursor: pointer;\n\n  &:hover {\n    background-color: $vbBaseColor1;\n  }\n}\n\n%calendar-date-disabled-face {\n  background-color: $vbColumnColor;\n  color: $vbBaseColor3;\n  cursor: not-allowed;\n  outline: none;\n  pointer-events: none;\n}\n\n%calendar-date-number-base {\n  display: block;\n  font-size: $vbHeadline1FontSize;\n  line-height: 1;\n  position: absolute;\n  top: $vbBasicSize;\n  left: $vbBasicSize;\n}\n\n%calendar-date-number-today-face {\n  width: 2em;\n  height: 2em;\n  margin: -0.5em 0 0 -0.5em;\n  border-radius: $vbFullBorderRadius;\n  background-color: $vbPrimaryColor;\n  color: #fff;\n  font-size: 1em;\n  text-align: center;\n  line-height: 2em;\n}\n\n%calendar-date-number-today-input-face {\n  width: 2em;\n  height: 2em;\n  margin: -0.5em 0 0 -0.5em;\n  border-radius: $vbFullBorderRadius;\n  background-color: #fff;\n  color: $vbPrimaryColor;\n  font-size: 1em;\n  text-align: center;\n  line-height: 2em;\n}\n\n/** @define calendar */\n.vb-calendarDate {\n  @extend %calendar-date-base;\n  @extend %calendar-date-face;\n\n  &__inner {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n  }\n\n  &--input {\n    @extend %calendar-date-input-face;\n  }\n\n  &--secondary-holiday {\n    @extend %calendar-date-secondary-holiday-face;\n  }\n\n  &--primary-holiday {\n    @extend %calendar-date-primary-holiday-face;\n  }\n\n  &--disabled {\n    @extend %calendar-date-disabled-face;\n  }\n\n  &__status {\n    &--alert {\n      position: relative;\n\n      &::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        right: 0;\n        padding: 0;\n        width: 0;\n        height: 0;\n        border: 0 solid transparent;\n        border-top-width: 0;\n        border-bottom-width: 2.7em;\n        border-right: 2.7em solid $vbAlertColor;\n      }\n    }\n\n    &--notice {\n      position: relative;\n\n      &::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        right: 0;\n        padding: 0;\n        width: 0;\n        height: 0;\n        border: 0 solid transparent;\n        border-top-width: 0;\n        border-bottom-width: 2.7em;\n        border-right: 2.7em solid $vbNoticeColor;\n      }\n    }\n\n    &--success {\n      position: relative;\n\n      &::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        right: 0;\n        padding: 0;\n        width: 0;\n        height: 0;\n        border: 0 solid transparent;\n        border-top-width: 0;\n        border-bottom-width: 2.7em;\n        border-right: 2.7em solid $vbAccentColor;\n      }\n    }\n  }\n\n  &__icon {\n    display: block;\n    position: absolute;\n    color: #fff;\n    top: 0.25em;\n    right: 0.25em;\n  }\n\n  &__number {\n    @extend %calendar-date-number-base;\n\n    &--today {\n      @extend %calendar-date-number-today-face;\n\n      &--input {\n        @extend %calendar-date-number-today-input-face;\n      }\n    }\n  }\n\n  &--disabled &__number--today {\n    color: #fff;\n    background: $vbBaseColor3;\n  }\n\n  &__type {\n    display: block;\n    font-size: $vbCaptionFontSize;\n    line-height: 1;\n    position: absolute;\n    top: $vbXXLargeSize;\n    left: $vbBasicSize;\n  }\n\n  &__time {\n    display: block;\n    font-size: $vbNormalFontSize;\n    text-align: right;\n    line-height: 1;\n    position: absolute;\n    right: $vbBasicSize;\n    bottom: $vbBasicSize;\n  }\n}\n\n.vb-calendarHead {\n  border-bottom: 1px solid $vbBaseColor2;\n\n  &__cell {\n    text-align: left;\n    font-weight: $vbNormalFontSize;\n    font-weight: normal;\n    padding: 0 0 1rem 1rem;\n\n    &--secondary-holiday {\n      color: #001478;\n    }\n\n    &--primary-holiday {\n      color: #c7423a;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/content.scss",
    "content": "/** @define iconWrapper */\n.vb-iconWrapper {\n  display: inline-block;\n  margin: 0;\n  padding: 0.5rem;\n  background-color: #fff;\n  line-height: 1;\n}\n"
  },
  {
    "path": "stylesheets/lv1/focusHighlight.scss",
    "content": ".vb-focusHighlight {\n  display: block;\n  width: fit-content;\n  position: relative;\n\n  &--inline {\n    display: inline-block;\n  }\n\n  &--full {\n    width: 100%;\n  }\n\n  $element: &;\n\n  // 表示順などの問題（フォーカスハイライトを手前に表示したい）で、 :after がフォーカスハイライトの本体になります。\n  &::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    pointer-events: none;\n    overflow: hidden;\n    opacity: 0;\n    transition-duration: 0.2s;\n    transition-property: opacity;\n  }\n\n  &--round::after {\n    border-radius: $vbFocusHighlightBorderRadius;\n  }\n\n  @at-root #{selector-append(\"#{$element}:focus-within\",\"#{$element}:after\")} {\n    box-shadow: $vbFocusHighlightShadow;\n    opacity: 1;\n  }\n\n  @at-root #{selector-append(\"#{$element}:focus-within\",\"#{$element}--inset:after\")} {\n    box-shadow: $vbFocusHighlightShadowInset;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/focusTrap.scss",
    "content": ".vb-focusTrap {\n  &--inline {\n    display: inline-block;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/form.scss",
    "content": "@use 'sass:math';\n\n/** @define form */\n\n%form-base {\n  display: inline-flex;\n  padding: 0;\n  margin: 0;\n  border: none;\n  box-shadow: none;\n  box-sizing: border-box;\n  font: $vbNormalFont;\n  vertical-align: inherit;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n\n  &::-ms-expand {\n    display: none;\n  }\n}\n\n%form-text-base {\n  @extend %form-base;\n\n  height: $vbFormControlHeight;\n  padding: 0 $vbSmallSize;\n  border: 1px solid $vbColorsGY02;\n  border-radius: $vbFontBorderRadius;\n  background-color: #fff;\n  transition-duration: 0.2s;\n  transition-property: border-color, background-color, color;\n\n  @if not $use2021Style {\n    border-color: $vbBaseColor2;\n  }\n\n  &:-ms-input-placeholder {\n    color: $vbBaseColor3;\n    transition-duration: 0.3s;\n    transition-property: opacity;\n  }\n\n  &::placeholder {\n    color: $vbBaseColor3;\n    transition-duration: 0.3s;\n    transition-property: opacity;\n  }\n\n  &:focus {\n    &:-ms-input-placeholder {\n      opacity: 0;\n    }\n\n    &::placeholder {\n      opacity: 0;\n    }\n  }\n\n  &[disabled] {\n    background-color: $vbBaseColor1;\n    cursor: not-allowed;\n    color: revert;\n  }\n}\n\n%form-text-error-face {\n  border-color: $vbAlertColor;\n  color: $vbAlertColor;\n\n  &:-ms-input-placeholder {\n    color: $vbAlertColor;\n  }\n\n  &::placeholder {\n    color: $vbAlertColor;\n  }\n}\n\n%form-text-small-face {\n  height: $vbFormControlSmallHeight;\n  padding: 0 $vbSmallSize;\n  font-size: $vbCaptionFontSize;\n}\n\n%form-text-large-face {\n  height: $vbFormControlLargeHeight;\n  padding: 0 $vbBasicSize;\n  font-size: $vbHeadline2FontSize;\n}\n\n%form-text-borderless-face {\n  border: 0;\n  border-radius: 0;\n  outline: none;\n}\n\n%form-textarea-base {\n  @extend %form-text-base;\n\n  min-width: 55em;\n  height: 5em;\n  max-width: 100%;\n  padding-top: $vbSmallSize;\n  padding-bottom: $vbSmallSize;\n}\n\n%form-control-base {\n  cursor: pointer;\n  margin: 0;\n  vertical-align: middle;\n}\n\n%form-label-base {\n  margin-left: $vbSmallSize;\n  vertical-align: middle;\n}\n\n%form-control-disabled-face {\n  color: $vbBaseColor2;\n  cursor: not-allowed;\n}\n\n%form-control-error-face {\n  color: $vbAlertColor;\n}\n\n%form-control-small-face {\n  font-size: $vbCaptionFontSize;\n}\n\n/**\n  @define radio\n  @define checkbox\n*/\n.vb-radio,\n.vb-checkbox {\n  @extend %form-base;\n\n  align-items: baseline;\n  cursor: pointer;\n\n  & &__control {\n    @extend %form-control-base;\n\n    &--disabled {\n      cursor: not-allowed;\n      opacity: 0.5;\n    }\n  }\n\n  & &__label {\n    @extend %form-label-base;\n  }\n\n  &--disabled {\n    cursor: not-allowed;\n    opacity: 0.5;\n  }\n\n  &--error {\n    @extend %form-control-error-face;\n  }\n\n  &--small {\n    @extend %form-control-small-face;\n  }\n}\n\n/** @define searchField */\n.vb-searchField {\n  display: inline-block;\n  position: relative;\n  max-width: 100%;\n  min-width: 4rem;\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  & &__input {\n    @extend %form-text-base;\n\n    padding-left: 2.75em;\n    max-width: 100%;\n    min-width: 4rem;\n\n    &::-webkit-search-cancel-button {\n      cursor: pointer;\n    }\n\n    + svg {\n      fill: $vbBaseColor2;\n    }\n\n    &--error {\n      @extend %form-text-error-face;\n\n      + svg {\n        fill: $vbAlertColor;\n      }\n    }\n\n    &--small {\n      @extend %form-text-small-face;\n\n      padding-left: 1.75rem;\n    }\n\n    &--large {\n      @extend %form-text-large-face;\n    }\n\n    &--widthXSmall {\n      width: 4rem;\n    }\n\n    &--widthSmall {\n      width: 7rem;\n    }\n\n    &--widthMedium {\n      width: 11rem;\n    }\n\n    &--widthLarge {\n      width: 24rem;\n    }\n\n    &--widthFull {\n      width: 100%;\n    }\n\n    &--borderless {\n      @extend %form-text-borderless-face;\n    }\n\n    &--responsive {\n      @media (max-width: $vbMobileBoundaryWidth) {\n        font-size: $vbFontSize1000;\n      }\n    }\n  }\n\n  & &__icon {\n    display: block;\n    width: 1.5em;\n    height: 1.5em;\n    position: absolute;\n    top: 50%;\n    left: 0.75em;\n    transform: translateY(-50%);\n\n    &--small {\n      display: block;\n      width: 1em;\n      height: 1em;\n      position: absolute;\n      top: 50%;\n      left: 0.5em;\n      transform: translateY(-50%);\n    }\n  }\n}\n\n/** @define select */\n.vb-select {\n  display: inline-flex;\n  position: relative;\n  min-width: 4rem;\n  max-width: 100%;\n  overflow: hidden;\n  border-radius: $vbFontBorderRadius;\n\n  &:focus-within {\n    box-shadow: $vbFocusHighlightShadow;\n  }\n\n  &::before,\n  &::after {\n    content: '';\n    display: block;\n    width: 0;\n    border-left: 0.1875em solid transparent;\n    border-right: 0.1875em solid transparent;\n    position: absolute;\n    right: 0.5em;\n    pointer-events: none;\n    z-index: 1;\n  }\n\n  &::before {\n    border-bottom: 0.315em solid $vbBlackColor;\n    bottom: 50%;\n    transform: translateY(-0.08em);\n  }\n\n  &::after {\n    border-top: 0.315em solid $vbBlackColor;\n    top: 50%;\n    transform: translateY(0.08em);\n  }\n\n  &--widthXSmall {\n    width: 4rem;\n  }\n\n  &--widthSmall {\n    width: 7rem;\n  }\n\n  &--widthMedium {\n    width: 11rem;\n  }\n\n  &--widthLarge {\n    width: 24rem;\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  &--error {\n    &::before {\n      border-bottom-color: $vbAlertColor;\n    }\n\n    &::after {\n      border-top-color: $vbAlertColor;\n    }\n  }\n\n  &__body {\n    @extend %form-text-base;\n\n    padding-right: $vbBasicSize;\n    width: 100%;\n    text-overflow: ellipsis;\n\n    &:focus {\n      outline: none;\n    }\n\n    &:not(&--error) {\n      color: $vbBlackColor;\n    }\n\n    &--small {\n      @extend %form-text-small-face;\n    }\n\n    &--large {\n      @extend %form-text-large-face;\n    }\n\n    &--error {\n      @extend %form-text-error-face;\n\n      optgroup:not(:disabled),\n      option:not(:disabled) {\n        color: initial;\n      }\n    }\n\n    &--alignCenter {\n      text-align: center;\n    }\n\n    &--alignRight {\n      text-align: right;\n    }\n  }\n}\n\n/** @define textarea */\n.vb-textarea {\n  @extend %form-textarea-base;\n\n  font-family: inherit;\n\n  &--small {\n    @extend %form-text-small-face;\n  }\n\n  &--large {\n    @extend %form-text-large-face;\n  }\n\n  &--error {\n    @extend %form-text-error-face;\n  }\n\n  &--resizeNone {\n    resize: none;\n  }\n\n  &--resizeHorizontal {\n    resize: horizontal;\n  }\n\n  &--resizeVertical {\n    resize: vertical;\n  }\n\n  &--resizeBoth {\n    resize: both;\n  }\n\n  &--widthSmall {\n    min-width: 24rem;\n  }\n\n  &--widthMedium {\n    min-width: 55rem;\n  }\n\n  &--widthLarge {\n    min-width: 67rem;\n  }\n\n  &--widthFull {\n    min-width: 100%;\n  }\n\n  @for $i from 1 through 70 {\n    &--height#{$i} {\n      height: #{$i}rem;\n    }\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      font-size: $vbFontSize1000;\n    }\n  }\n}\n\n/** @define textField */\n.vb-textField {\n  @extend %form-text-base;\n\n  min-width: 4rem;\n  max-width: 100%;\n\n  &__wrapper {\n    position: relative;\n    display: inline-flex;\n    max-width: 100%;\n    align-items: center;\n\n    &--widthFull {\n      width: 100%;\n    }\n  }\n\n  &--alignCenter {\n    text-align: center;\n  }\n\n  &--alignRight {\n    text-align: right;\n  }\n\n  &--small {\n    @extend %form-text-small-face;\n  }\n\n  &--large {\n    @extend %form-text-large-face;\n  }\n\n  &--error {\n    @extend %form-text-error-face;\n  }\n\n  &--widthXSmall {\n    width: 4rem;\n  }\n\n  &--widthSmall {\n    width: 7rem;\n  }\n\n  &--widthMedium {\n    width: 11rem;\n  }\n\n  &--widthLarge {\n    width: 24rem;\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  &--hideSpinner {\n    -moz-appearance: textfield;\n\n    &::-webkit-outer-spin-button,\n    &::-webkit-inner-spin-button {\n      -webkit-appearance: none;\n      margin: 0;\n    }\n  }\n\n  &--borderless {\n    @extend %form-text-borderless-face;\n  }\n\n  &--withIcon {\n    padding-right: 1.25rem;\n  }\n\n  &__suffix {\n    font: $vbNormalFont;\n    margin-left: $vbXSmallSize;\n\n    &--small {\n      font-size: $vbCaptionFontSize;\n    }\n\n    &--large {\n      font-size: $vbHeadline2FontSize;\n    }\n  }\n\n  &__icon,\n  &__iconButton {\n    position: absolute;\n    right: $vbXSmallSize;\n    top: 0;\n    bottom: 0;\n    font-size: $vbBasicSize;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    vertical-align: middle;\n    text-align: center;\n    line-height: 1;\n    color: $vbBaseColor3;\n    box-sizing: border-box;\n\n    // アイコンが小さいので、クリック可能領域を24px四方になるように広げる\n    &::before {\n      content: '';\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      right: -$vbXSmallSize;\n      width: $vbLargeSize;\n    }\n  }\n\n  &__icon {\n    pointer-events: none;\n  }\n\n  &__iconButton {\n    border: 0;\n    background: transparent;\n    padding: 0;\n\n    &[disabled] {\n      opacity: 0.5;\n      cursor: not-allowed;\n    }\n\n    &:not([disabled]):hover {\n      cursor: pointer;\n      color: $vbColorsP07;\n    }\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      font-size: $vbFontSize1000;\n    }\n  }\n}\n\n.vb-readOnlyField {\n  display: inline-block;\n  min-height: $vbFormControlHeight;\n  font-size: $vbNormalFontSize;\n  vertical-align: middle;\n\n  &__inner {\n    display: flex;\n    align-items: center;\n    height: 100%;\n    min-height: $vbFormControlHeight;\n    white-space: pre-line;\n  }\n\n  &--alignRight {\n    .vb-readOnlyField__inner {\n      justify-content: flex-end;\n    }\n  }\n\n  &--small {\n    height: $vbFormControlSmallHeight;\n    font-size: $vbCaptionFontSize;\n  }\n\n  &--large {\n    height: $vbFormControlLargeHeight;\n    font-size: $vbHeadline2FontSize;\n  }\n\n  &--widthXSmall {\n    min-width: 4rem;\n  }\n\n  &--widthSmall {\n    min-width: 7rem;\n  }\n\n  &--widthMedium {\n    min-width: 11rem;\n  }\n\n  &--widthLarge {\n    min-width: 24rem;\n  }\n\n  &--widthFull {\n    min-width: 100%;\n  }\n}\n\n.vb-formControlLabel {\n  display: inline-block;\n\n  &__text {\n    display: inline-block;\n    vertical-align: middle;\n    overflow-wrap: break-word;\n    color: $vbBlackColor;\n    font: $vbItemNameFont;\n  }\n}\n\n.vb-toggleButton {\n  display: inline-block;\n\n  &--disabled {\n    opacity: 0.5;\n    pointer-events: none;\n  }\n\n  &__input {\n    // vb-visuallyHiddenと同じなのだが、兄弟セレクタを使用するために直接指定している\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n    position: absolute;\n    clip: rect(1px 1px 1px 1px);\n  }\n\n  &__body {\n    display: inline-block;\n    cursor: pointer;\n    font-size: $vbNormalFontSize;\n    box-sizing: border-box;\n    transition-duration: 0.2s;\n    transition-property: background-color, color, border-color;\n    height: $vbFormControlHeight;\n    line-height: $vbFormControlHeight;\n    vertical-align: middle;\n    padding: 0 $vbSmallSize;\n    border: $vbMinimum solid $vbBaseColor2;\n    margin-left: -$vbMinimum;\n    color: $vbLinkColor;\n    background-color: #fff;\n    position: relative;\n\n    &:hover {\n      background-color: mix($vbPrimaryColor, #fff, 6%);\n    }\n\n    // focus時に枠線を太くしたいが、元々の枠線を太くすると要素のサイズが替わってしまう\n    // 調整するのではなく、疑似要素を被せてそれの枠線を太くしている\n    &::before {\n      transition-duration: 0.2s;\n      transition-property: border-color;\n      content: '';\n      position: absolute;\n      top: -$vbMinimum;\n      left: -$vbMinimum;\n      right: -$vbMinimum;\n      bottom: -$vbMinimum;\n      border: $vbMinimum * 2 solid transparent;\n    }\n  }\n\n  &--small &__body {\n    height: $vbFormControlSmallHeight;\n    line-height: $vbFormControlSmallHeight;\n    font-size: $vbCaptionFontSize;\n  }\n\n  &:first-child &__body {\n    margin-left: unset;\n    border-top-left-radius: 0.4em;\n    border-bottom-left-radius: 0.4em;\n\n    &::before {\n      border-top-left-radius: 0.4em;\n      border-bottom-left-radius: 0.4em;\n    }\n  }\n\n  &:last-child &__body {\n    border-top-right-radius: 0.4em;\n    border-bottom-right-radius: 0.4em;\n\n    &::before {\n      border-top-right-radius: 0.4em;\n      border-bottom-right-radius: 0.4em;\n    }\n  }\n\n  %focused-toggle-button {\n    z-index: 2; // ほかの __body よりも前面に表示\n\n    &::before {\n      border-color: $vbAccentColor;\n    }\n  }\n\n  &__input:focus + &__body {\n    @extend %focused-toggle-button;\n  }\n\n  &__input:checked + &__body {\n    background: $vbColumnColor;\n    border-color: $vbBaseColor3;\n    font-weight: bold;\n    z-index: 1; // ほかの __body よりも前面に表示\n\n    &:hover {\n      background-color: mix($vbPrimaryColor, #fff, 6%);\n    }\n  }\n\n  &__input:focus:checked + &__body {\n    @extend %focused-toggle-button;\n  }\n}\n\n.vb-optionButton {\n  border-radius: $vbFontBorderRadius;\n  box-sizing: border-box;\n  border: $vbMinimum solid $vbColorsS05;\n  display: inline-block;\n  vertical-align: middle;\n  cursor: pointer;\n  background: #fff;\n  position: relative;\n  transition-duration: 0.2s;\n  transition-property: background-color, border-color, box-shadow;\n\n  &:hover {\n    background-color: mix($vbPrimaryColor, #fff, 6%);\n  }\n\n  $base: &;\n\n  &--size {\n    &Small {\n      min-height: $vbFormControlSmallHeight;\n      min-width: 5rem;\n      padding: 0 $vbSmallSize;\n\n      #{$base}__children {\n        min-height: $vbFormControlSmallHeight;\n      }\n    }\n\n    &Medium {\n      min-height: $vbFormControlHeight;\n      min-width: 6rem;\n      padding: 0 $vbBasicSize;\n\n      #{$base}__children {\n        min-height: $vbFormControlHeight;\n      }\n    }\n\n    &Large {\n      min-width: 11rem;\n      min-height: $vbFormControlLargeHeight;\n      padding: 0 $vbBasicSize;\n\n      #{$base}__children {\n        min-height: $vbFormControlLargeHeight;\n      }\n    }\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  &--checked {\n    border-color: $vbColorsP05;\n    box-shadow: 0 0 0 $vbMinimum $vbColorsP05;\n  }\n\n  &__button {\n    position: absolute;\n    inset: 0;\n  }\n\n  &__children {\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-start;\n    align-items: center;\n    height: 100%;\n\n    &__inner {\n      width: 100%;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/grid.scss",
    "content": ".vb-gridWrapper {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-items: stretch;\n}\n\n.vb-gridBlock {\n  display: flex;\n\n  > * {\n    // 直下の要素だけflex-growする = ボックスの高さがピッタリになる\n    flex-grow: 1;\n  }\n\n  $vbGridBlockInterval: 1.5rem;\n\n  &--oneThird {\n    flex-basis: calc((100% - #{$vbGridBlockInterval} * 2) / 3);\n  }\n\n  &--twoThirds {\n    flex-basis: calc(\n      (100% - #{$vbGridBlockInterval} * 2) / 3 * 2 + #{$vbGridBlockInterval}\n    );\n  }\n\n  &--half {\n    flex-basis: calc((100% - #{$vbGridBlockInterval}) / 2);\n  }\n\n  &--oneQuarter {\n    flex-basis: calc((100% - #{$vbGridBlockInterval} * 3) / 4);\n  }\n\n  &--threeQuarters {\n    flex-basis: calc(\n      (100% - #{$vbGridBlockInterval} * 3) / 4 * 3 + #{$vbGridBlockInterval} * 2\n    );\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/headline.scss",
    "content": "// reset h1~h6\n%reset {\n  margin: 0;\n  padding: 0;\n  font-weight: normal;\n}\n\n%titleHeadline {\n  @extend %reset;\n\n  display: block;\n  overflow-wrap: break-word;\n  border-radius: $vbFocusHighlightBorderRadius;\n\n  &:focus {\n    outline: none;\n\n    &:focus-visible {\n      // ページの内容が変化したことをスクリーンリーダーに伝えたり、キーボード操作をしやすくするために、見出し部分へのフォーカスを行うことがあるが、\n      // 通常のフォーカスインジケーターが表示されていると存在感が強く、ユーザーに違和感を与えてしまう。\n      // このケースではフォーカスインジケーターを消してしまっても大きな問題とはならないはずだが、それをすると開発者がフォーカスの当たる挙動を確認することができなくなる問題が起き得る。\n      // そこで、focus-visibleな状況に限り、通常よりも薄い色のフォーカスインジケーターを表示する。\n      // focus-visibleな場合のみの表示なので、マウスポインタによる操作以外ではフォーカスインジケーターが表示される。\n      // ここではコントラスト比が低くなりそうな色を意図的に選んでいる。\n      box-shadow: 0 0 0 $vbMinimum * 2 $vbColorsP02;\n    }\n  }\n}\n\n.vb-pageTitle {\n  @extend %titleHeadline;\n\n  color: $vbBlackColor;\n  font: $vbHeadlineFont1;\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      font: $vbMobileHeadlineFont1;\n    }\n  }\n}\n\n.vb-sectionTitle {\n  @extend %titleHeadline;\n\n  color: $vbBlackColor;\n  font: $vbHeadlineFont2;\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      font: $vbMobileHeadlineFont2;\n    }\n  }\n}\n\n.vb-subSectionTitle {\n  @extend %titleHeadline;\n\n  color: $vbBurntColor;\n  font: $vbHeadlineFont3;\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      font: $vbMobileHeadlineFont3;\n    }\n  }\n}\n\n/** @define note */\n.vb-note {\n  @extend %reset;\n\n  display: block;\n  color: $vbBurntColor;\n  font: $vbCaptionFont;\n}\n\n/** @define paragraph */\n.vb-paragraph {\n  @extend %reset;\n\n  display: block;\n  font: $vbNormalFont;\n  color: $vbBlackColor;\n}\n\n.vb-text {\n  @extend %reset;\n\n  color: $vbBlackColor;\n  font: $vbNormalFont;\n\n  &--weightBold {\n    font-weight: bold;\n  }\n\n  &--size0750 {\n    font-size: $vbCaptionFontSize;\n  }\n\n  &--size1500 {\n    font-size: $vbHeadline1FontSize;\n  }\n\n  &--size1000 {\n    font-size: $vbHeadline2FontSize;\n  }\n\n  &--colorWhite {\n    color: #fff;\n  }\n\n  &--colorGY7 {\n    color: $vbColorsGY07;\n  }\n\n  &--colorS9 {\n    color: $vbColorsS09;\n  }\n\n  &--colorP7 {\n    color: $vbColorsP07;\n  }\n\n  &--colorP5 {\n    color: $vbColorsP05;\n  }\n\n  &--colorRE5 {\n    color: $vbColorsRE05;\n  }\n\n  &--colorYE10 {\n    color: $vbColorsYE10;\n  }\n\n  &--ellipsis {\n    display: inline-block;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    max-width: 100%;\n  }\n}\n\n.vb-pageTitle,\n.vb-sectionTitle,\n.vb-subSectionTitle,\n.vb-paragraph,\n.vb-note {\n  &--inline {\n    display: inline-block;\n  }\n\n  &--alignLeft {\n    text-align: left;\n  }\n\n  &--alignRight {\n    text-align: right;\n  }\n\n  &--alignCenter {\n    text-align: center;\n  }\n}\n\n.vb-paragraph,\n.vb-note {\n  &--ellipsis {\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    max-width: 100%;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/icon.scss",
    "content": "/** @define materialIcon */\n.vb-materialIcon {\n  width: $vbLargeSize;\n  height: $vbLargeSize;\n  color: $vbBlackColor;\n\n  &--small {\n    width: $vbBasicSize;\n    height: $vbBasicSize;\n  }\n\n  &--pointerEventsNone {\n    pointer-events: none;\n  }\n\n  &--colorInherit {\n    color: inherit;\n  }\n\n  &--colorWhite {\n    color: #fff;\n  }\n\n  &--colorP1 {\n    color: $vbColorsP01;\n  }\n\n  &--colorP2 {\n    color: $vbColorsP02;\n  }\n\n  &--colorP3 {\n    color: $vbColorsP03;\n  }\n\n  &--colorP4 {\n    color: $vbColorsP04;\n  }\n\n  &--colorP5 {\n    color: $vbColorsP05;\n  }\n\n  &--colorP6 {\n    color: $vbColorsP06;\n  }\n\n  &--colorP7 {\n    color: $vbColorsP07;\n  }\n\n  &--colorP8 {\n    color: $vbColorsP08;\n  }\n\n  &--colorP9 {\n    color: $vbColorsP09;\n  }\n\n  &--colorP10 {\n    color: $vbColorsP10;\n  }\n\n  &--colorS1 {\n    color: $vbColorsS01;\n  }\n\n  &--colorS2 {\n    color: $vbColorsS02;\n  }\n\n  &--colorS3 {\n    color: $vbColorsS03;\n  }\n\n  &--colorS4 {\n    color: $vbColorsS04;\n  }\n\n  &--colorS5 {\n    color: $vbColorsS05;\n  }\n\n  &--colorS6 {\n    color: $vbColorsS06;\n  }\n\n  &--colorS7 {\n    color: $vbColorsS07;\n  }\n\n  &--colorS8 {\n    color: $vbColorsS08;\n  }\n\n  &--colorS9 {\n    color: $vbColorsS09;\n  }\n\n  &--colorS10 {\n    color: $vbColorsS10;\n  }\n\n  &--colorRE2 {\n    color: $vbColorsRE02;\n  }\n\n  &--colorRE4 {\n    color: $vbColorsRE04;\n  }\n\n  &--colorRE5 {\n    color: $vbColorsRE05;\n  }\n\n  &--colorRE7 {\n    color: $vbColorsRE07;\n  }\n\n  &--colorRE10 {\n    color: $vbColorsRE10;\n  }\n\n  &--colorOR2 {\n    color: $vbColorsOR02;\n  }\n\n  &--colorOR4 {\n    color: $vbColorsOR04;\n  }\n\n  &--colorOR5 {\n    color: $vbColorsOR05;\n  }\n\n  &--colorOR7 {\n    color: $vbColorsOR07;\n  }\n\n  &--colorOR10 {\n    color: $vbColorsOR10;\n  }\n\n  &--colorYE2 {\n    color: $vbColorsYE02;\n  }\n\n  &--colorYE4 {\n    color: $vbColorsYE04;\n  }\n\n  &--colorYE5 {\n    color: $vbColorsYE05;\n  }\n\n  &--colorYE7 {\n    color: $vbColorsYE07;\n  }\n\n  &--colorYE10 {\n    color: $vbColorsYE10;\n  }\n\n  &--colorYG2 {\n    color: $vbColorsYG02;\n  }\n\n  &--colorYG4 {\n    color: $vbColorsYG04;\n  }\n\n  &--colorYG5 {\n    color: $vbColorsYG05;\n  }\n\n  &--colorYG7 {\n    color: $vbColorsYG07;\n  }\n\n  &--colorYG10 {\n    color: $vbColorsYG10;\n  }\n\n  &--colorGR2 {\n    color: $vbColorsGR02;\n  }\n\n  &--colorGR4 {\n    color: $vbColorsGR04;\n  }\n\n  &--colorGR5 {\n    color: $vbColorsGR05;\n  }\n\n  &--colorGR7 {\n    color: $vbColorsGR07;\n  }\n\n  &--colorGR10 {\n    color: $vbColorsGR10;\n  }\n\n  &--colorBG2 {\n    color: $vbColorsBG02;\n  }\n\n  &--colorBG4 {\n    color: $vbColorsBG04;\n  }\n\n  &--colorBG5 {\n    color: $vbColorsBG05;\n  }\n\n  &--colorBG7 {\n    color: $vbColorsBG07;\n  }\n\n  &--colorBG10 {\n    color: $vbColorsBG10;\n  }\n\n  &--colorPU2 {\n    color: $vbColorsPU02;\n  }\n\n  &--colorPU4 {\n    color: $vbColorsPU04;\n  }\n\n  &--colorPU5 {\n    color: $vbColorsPU05;\n  }\n\n  &--colorPU7 {\n    color: $vbColorsPU07;\n  }\n\n  &--colorPU10 {\n    color: $vbColorsPU10;\n  }\n\n  &--colorGY1 {\n    color: $vbColorsGY01;\n  }\n\n  &--colorGY2 {\n    color: $vbColorsGY02;\n  }\n\n  &--colorGY4 {\n    color: $vbColorsGY04;\n  }\n\n  &--colorGY5 {\n    color: $vbColorsGY05;\n  }\n\n  &--colorGY7 {\n    color: $vbColorsGY07;\n  }\n\n  &--colorGY10 {\n    color: $vbColorsGY10;\n  }\n}\n\n%icon-base {\n  display: inline-block;\n  min-width: 2.375rem;\n  box-sizing: border-box;\n  padding: 0.2rem 0.5rem;\n  font-size: 0.6875rem;\n  font-weight: bold;\n  text-align: center;\n  line-height: 1;\n  vertical-align: middle;\n  border-radius: $vbMiniPaddingBorderRadius;\n}\n\n%icon-border-face {\n  padding-top: 0.125rem;\n  padding-bottom: 0.125rem;\n  border: 1px solid $vbBaseColor3;\n  background-color: #fff;\n}\n\n%icon-fill-face {\n  color: #fff;\n}\n\n/** @define statusIcon */\n.vb-statusIcon {\n  @extend %icon-base;\n\n  &--done {\n    @extend %icon-border-face;\n\n    border-color: $vbBaseColor3;\n    color: $vbBurntColor;\n  }\n\n  &--success {\n    @extend %icon-border-face;\n\n    border-color: $vbPrimaryColor;\n    color: $vbPrimaryColor;\n  }\n\n  &--progress {\n    @extend %icon-border-face;\n\n    border-color: $vbNoticeColor;\n    // 文字色のコントラスト比を上げるため、 $vbNoticeColorより濃い色を使用する\n    color: $vbColorsYE10;\n\n    @if not $use2021Style {\n      color: #ad5c0c;\n    }\n  }\n\n  &--required {\n    @extend %icon-border-face;\n\n    border-color: $vbAlertColor;\n    color: $vbAlertColor;\n  }\n\n  &--disabled {\n    @extend %icon-fill-face;\n\n    background-color: $vbBurntColor;\n  }\n\n  &--emphasis {\n    @extend %icon-fill-face;\n\n    background-color: $vbPrimaryColor;\n  }\n\n  &--warning {\n    @extend %icon-fill-face;\n\n    // 文字色のコントラスト比を上げるため、 $vbNoticeColorより濃い色を使用する\n    background-color: $vbColorsYE10;\n\n    @if not $use2021Style {\n      background-color: #ad5c0c;\n    }\n  }\n\n  &--error {\n    @extend %icon-fill-face;\n\n    background-color: $vbAlertColor;\n  }\n}\n\n.vb-avatar {\n  width: $vbXLargeSize;\n  height: $vbXLargeSize;\n  font-size: $vbXLargeSize;\n  line-height: $vbXLargeSize;\n  display: inline-block;\n  box-sizing: border-box;\n\n  &__background {\n    fill: $vbBaseColor1;\n  }\n\n  &__placeholderIcon {\n    display: block;\n    width: 100%;\n    height: 100%;\n    fill: $vbBaseColor3;\n  }\n\n  &--small {\n    width: $vbLargeSize;\n    height: $vbLargeSize;\n    font-size: $vbLargeSize;\n    line-height: $vbLargeSize;\n  }\n\n  &--large {\n    width: $vbXXLargeSize;\n    height: $vbXXLargeSize;\n    font-size: $vbXXLargeSize;\n    line-height: $vbXXLargeSize;\n  }\n\n  &--xLarge {\n    width: $vbXXLargeSize * 2;\n    height: $vbXXLargeSize * 2;\n    font-size: $vbXXLargeSize * 2;\n    line-height: $vbXXLargeSize * 2;\n  }\n}\n\n.vb-requiredIcon {\n  display: inline-block;\n  vertical-align: middle;\n  line-height: 1;\n  box-sizing: border-box;\n  // 和文の文字は vertical-align: middleだとやや下寄りになるので、少しpadding-bottomを付けて上寄りに表示する\n  padding-bottom: 0.125em;\n\n  &__content {\n    background-color: $vbColorsRE02;\n    color: $vbColorsRE07;\n    font-size: $vbSmallestIconFontSize;\n    display: block;\n    border-radius: $vbFullBorderRadius;\n    padding: 0.125rem 0.25rem;\n    line-height: 1;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/image.scss",
    "content": "@use 'sass:math';\n\n%image-base {\n  margin: 0;\n  padding: 0;\n  display: inline-block;\n  line-height: 0;\n}\n\n%logo-base {\n  margin: 0;\n  padding: 0;\n  fill: #4575b4;\n  display: inline-block;\n  line-height: 0;\n  height: 3rem;\n}\n\n%logo--small {\n  height: 1.5rem;\n}\n\n%logo__svg {\n  height: 100%;\n  width: 100%;\n  text-indent: 0;\n}\n\n/** @define logo */\n.vb-logo {\n  margin: 0;\n  padding: 0;\n  fill: #4575b4;\n  display: inline-block;\n  line-height: 0;\n\n  & &__svg {\n    height: 3rem;\n    text-indent: 0;\n  }\n\n  &--minpaku &__svg {\n    width: 10.9375rem;\n  }\n\n  &--seal &__svg {\n    width: 10.9375rem;\n  }\n\n  &--sfa &__svg {\n    width: 10.75rem;\n  }\n\n  &--cryptocurrency &__svg {\n    width: 9.8125rem;\n  }\n}\n\n/** @define illust */\n$illustClass: vb-illust;\n\n.#{$illustClass} {\n  @extend %image-base;\n\n  & &__svg {\n    height: 12rem;\n  }\n\n  & &__background {\n    fill: #fff;\n  }\n\n  & &__frame {\n    fill: $vbBaseColor2;\n  }\n\n  & &__border {\n    fill: $vbBaseColor1;\n  }\n\n  &--fileUpload,\n  &--imageUpload,\n  &--csvUpload,\n  &--cloudUpload,\n  &--cloudSkeleton {\n    .#{$illustClass}__svg {\n      height: 8rem;\n      width: 8rem;\n    }\n  }\n}\n\n.vb-swallow {\n  &__svg {\n    display: block;\n    margin: auto;\n  }\n}\n\n/** @define storeBadge */\n.vb-storeBadge {\n  @extend %image-base;\n\n  & &__svg {\n    height: 2.5rem;\n  }\n\n  &--googlePlayStore &__svg {\n    width: 8.4375rem;\n  }\n\n  &--appStore &__svg {\n    width: 6.8125rem;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/interactive-parts.scss",
    "content": ".vb-tab {\n  display: inline-block;\n  min-width: 7.25em;\n  height: 2em;\n  padding: 0 $vbCaptionFontSize;\n  margin: 0;\n  background-color: #fff;\n  border: none;\n  box-sizing: border-box;\n  font-size: $vbHeadline2FontSize;\n  font-weight: bold;\n  text-align: center;\n  line-height: 2em;\n  vertical-align: bottom;\n  position: relative;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  color: $vbBurntColor;\n\n  &::after {\n    content: '';\n    display: block;\n    height: 1px;\n    background-color: $vbBaseColor2;\n    position: absolute;\n    left: 0;\n    right: 0;\n    bottom: -1px;\n    transition-duration: 0.2s;\n    transition-property: background-color;\n  }\n\n  &:focus {\n    color: $vbBlackColor;\n    z-index: 1; // focusリングが表に出るよう、他のものよりz-indexを上げる\n  }\n\n  &:hover:not(.vb-tab--current) {\n    cursor: pointer;\n    background-color: mix($vbPrimaryColor, #fff, 6%);\n\n    &::after {\n      background-color: $vbAccentColor;\n    }\n  }\n\n  &--current {\n    color: $vbPrimaryColor;\n    cursor: default;\n\n    @if $use2021Style {\n      color: $vbColorsP05;\n    }\n\n    &::after {\n      height: 2px;\n      background-color: $vbPrimaryColor;\n\n      @if $use2021Style {\n        background-color: $vbColorsP05;\n      }\n    }\n  }\n\n  &--small {\n    font-size: $vbCaptionFontSize;\n  }\n\n  &__block {\n    display: inline-block;\n    position: relative;\n  }\n\n  &__notificationDot {\n    display: inline-block;\n    width: 0.5rem;\n    height: 0.5rem;\n    position: absolute;\n    right: 0;\n    top: 0;\n    background-color: $vbAlertColor;\n    border-radius: $vbFullBorderRadius;\n    z-index: 1; // focus しても表示されるように、focus 時の tab の z-index と揃える\n  }\n}\n\n/** @define segmentControl */\n.vb-segmentControlButton {\n  display: inline-block;\n  height: $vbFormControlHeight;\n  line-height: calc(#{$vbFormControlHeight} - #{$vbMinimum * 2});\n  padding: 0 1rem;\n  border: $vbMinimum solid $vbPrimaryColor;\n  min-width: 3rem;\n  border-right-width: 0;\n  box-sizing: border-box;\n  font-size: $vbNormalFontSize;\n  font-weight: bold;\n  vertical-align: middle;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  background-color: #fff;\n  color: $vbPrimaryColor;\n  cursor: pointer;\n  text-decoration: none;\n\n  &:hover {\n    background-color: $vbColumnColor;\n    text-decoration: none;\n  }\n\n  &:first-child {\n    border-top-left-radius: 0.4em;\n    border-bottom-left-radius: 0.4em;\n  }\n\n  &:last-child {\n    border-top-right-radius: 0.4em;\n    border-bottom-right-radius: 0.4em;\n    border-right-width: 1px;\n  }\n\n  &--large {\n    font-size: $vbHeadline2FontSize;\n    height: $vbFormControlLargeHeight;\n    line-height: calc(#{$vbFormControlLargeHeight} - #{$vbMinimum * 2});\n  }\n\n  &--small {\n    font-size: $vbCaptionFontSize;\n    height: $vbFormControlSmallHeight;\n    line-height: calc(#{$vbFormControlSmallHeight} - #{$vbMinimum * 2});\n  }\n\n  &--icon {\n    padding-left: 2.75em;\n    position: relative;\n    text-align: left;\n  }\n\n  &__icon {\n    width: 1.5em;\n    height: 1.5em;\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n    left: 0.625em;\n  }\n\n  &--current {\n    background-color: $vbPrimaryColor;\n    color: #fff;\n    cursor: default;\n\n    &:hover {\n      background-color: $vbPrimaryColor;\n    }\n  }\n}\n\n.vb-stepNumber {\n  display: inline-flex;\n  flex-direction: row;\n  justify-content: center;\n  align-items: center;\n  box-sizing: border-box;\n  width: 3rem;\n  height: 3rem;\n  border-radius: $vbFullBorderRadius;\n  position: relative;\n  background-color: #fff;\n  border: $vbMinimum solid $vbBaseColor3;\n  color: $vbBurntColor;\n  font-family: $vbFontFamily;\n  font-size: 1.5em;\n\n  &__numberCheck {\n    width: 1rem;\n    height: 1rem;\n    margin: 0;\n    border-radius: $vbFullBorderRadius;\n    background-color: $vbBaseColor3;\n    position: absolute;\n    top: -0.25rem;\n    right: -0.25rem;\n  }\n\n  &__numberCheckSvg {\n    display: block;\n    width: 0.75rem;\n    height: 0.75rem;\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    fill: #fff;\n  }\n\n  &--current {\n    background-color: #fff;\n    border: $vbMinimum solid $vbColorsP05;\n    color: $vbColorsP05;\n  }\n\n  &--done {\n    background-color: #fff;\n    border: $vbMinimum solid $vbBaseColor3;\n    color: $vbBurntColor;\n  }\n\n  &--disabled {\n    background-color: #fff;\n    border: 1px dashed $vbBaseColor3;\n    color: $vbBurntColor;\n  }\n\n  &--small {\n    font-size: 1rem;\n    width: 2.25rem;\n    height: 2.25rem;\n  }\n}\n\n.vb-stepBlock {\n  $block: &;\n\n  display: inline-block;\n  width: 4rem;\n  text-align: center;\n\n  &__title {\n    display: block;\n    margin-top: 0.5rem;\n    font: $vbCaptionFont;\n    color: $vbBurntColor;\n  }\n\n  &--current {\n    #{$block}__title {\n      color: $vbColorsP05;\n    }\n  }\n\n  &--small {\n    font-size: 0.75rem;\n  }\n}\n\n.vb-stepBorder {\n  display: inline-block;\n  width: 3em;\n  height: 4px;\n  background-color: $vbBaseColor2;\n\n  @if $use2021Style {\n    background-color: $vbBaseColor2;\n  }\n\n  &--done {\n    background-color: $vbPrimaryColor;\n\n    @if $use2021Style {\n      background-color: $vbBurntColor;\n    }\n  }\n\n  &--separator {\n    margin: 1.5em -0.5em 0;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/layout.scss",
    "content": ".vb-withSideContent {\n  display: flex;\n  justify-content: space-between;\n\n  &--alignTop {\n    align-items: flex-start;\n  }\n\n  &--alignMiddle {\n    align-items: center;\n  }\n\n  &--alignBottom {\n    align-items: flex-end;\n  }\n\n  &__content {\n    flex-grow: 1;\n  }\n\n  &__sideContent {\n    flex-shrink: 0;\n  }\n}\n\n.vb-withDescriptionContent {\n  display: flex;\n  flex-direction: column-reverse;\n\n  &--horizontal {\n    flex-direction: row-reverse;\n    align-items: center;\n  }\n\n  // 先にreverseじゃないほうを作ったので、flex-directionのreverseと逆になってる。わかりにくいけどゆるして。\n  &--verticalReverse {\n    flex-direction: column;\n  }\n\n  &__content {\n    flex-grow: 0;\n  }\n\n  &__description {\n    flex-grow: 1;\n  }\n}\n\n.vb-stack {\n  display: flex;\n\n  > * {\n    flex-shrink: 0;\n  }\n\n  &--inline {\n    display: inline-flex;\n  }\n\n  &--directionVertical {\n    flex-direction: column;\n  }\n\n  &--directionHorizontal {\n    flex-direction: row;\n  }\n\n  &--directionVerticalReverse {\n    flex-direction: column-reverse;\n  }\n\n  &--directionHorizontalReverse {\n    flex-direction: row-reverse;\n  }\n\n  @each $i in (0.25, 0.5, 1, 1.5, 2, 3) {\n    &--gap#{$i * 100} {\n      gap: #{$i}rem;\n    }\n  }\n\n  &--justifyContentStart {\n    justify-content: start;\n  }\n\n  &--justifyContentEnd {\n    justify-content: end;\n  }\n\n  &--justifyContentCenter {\n    justify-content: center;\n  }\n\n  &--justifyContentSpaceBetween {\n    justify-content: space-between;\n  }\n\n  &--alignItemsStrech {\n    align-items: stretch;\n  }\n\n  &--alignItemsCenter {\n    align-items: center;\n  }\n\n  &--alignItemsStart {\n    align-items: start;\n  }\n\n  &--alignItemsEnd {\n    align-items: end;\n  }\n\n  &--wrapWrap {\n    flex-wrap: wrap;\n  }\n\n  &--wrapNowrap {\n    flex-wrap: nowrap;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/list.scss",
    "content": "@use 'sass:math';\n$vbListTableRowHeight: 2.5rem;\n\n%table-row-base {\n  border: none;\n  border-collapse: collapse;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  height: $vbListTableRowHeight;\n}\n\n%table-cell-base {\n  border: none;\n  border-spacing: 0;\n  border-collapse: collapse;\n  font-size: $vbNormalFontSize;\n  text-align: left;\n  padding: $vbXSmallSize $vbSmallSize;\n  line-height: 1;\n  vertical-align: middle;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  word-break: break-all;\n\n  &:first-child {\n    padding-left: $vbLargeSize;\n  }\n\n  &:last-child {\n    padding-right: $vbLargeSize;\n  }\n}\n\n%border-table-cell-face {\n  border-right: 1px solid $vbBaseColor2;\n  border-bottom: 1px solid $vbBaseColor2;\n\n  &:last-child {\n    border-right: none;\n  }\n}\n\n%table-hover-face {\n  background-color: $vbColumnColor;\n}\n\n.vb-tableListCell,\n.vb-BorderTableListCell {\n  @extend %table-cell-base;\n\n  position: relative;\n\n  &--small {\n    font-size: $vbCaptionFontSize;\n  }\n\n  &--alignCenter {\n    text-align: center;\n  }\n\n  &--alignRight {\n    text-align: right;\n  }\n\n  &--alignBottom {\n    vertical-align: bottom;\n  }\n\n  &--alignTop {\n    vertical-align: top;\n  }\n\n  &--breakWord {\n    word-break: normal;\n    overflow-wrap: break-word;\n  }\n}\n\n.vb-tableListCell {\n  border-bottom: 1px solid $vbBaseColor2;\n\n  &__link {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n  }\n\n  &__indentContainer {\n    display: flex;\n    flex-direction: row;\n  }\n\n  &__indent {\n    width: $vbLargeSize - $vbSmallSize;\n    flex-shrink: 0;\n  }\n\n  &__indentedContent {\n    flex-grow: 1;\n    min-width: 0;\n\n    &--alignCenter {\n      text-align: center;\n    }\n\n    &--alignRight {\n      text-align: right;\n    }\n  }\n\n  &__text {\n    // __link より上に表示されるようにしておく\n    position: relative;\n    display: inline-block;\n    width: 100%;\n\n    &--withLink {\n      pointer-events: none;\n\n      a[href],\n      button,\n      label,\n      input,\n      select,\n      textarea,\n      [role='button'] {\n        pointer-events: auto;\n      }\n    }\n  }\n\n  // IEのflexバグの問題で、display:flexを使うとセル内でテキストが折り返さなくなる。そのためインデントをdisplay:flexではなくdisplay:tableで表現する\n  // IEのflexバグが解消した際は、display:flexでindentとtextを横並びにするのが良い\n  @at-root {\n    @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n      &__link {\n        top: -$vbXSmallSize;\n        left: -$vbSmallSize;\n        right: -$vbSmallSize;\n        bottom: -$vbXSmallSize;\n      }\n\n      &:first-child &__link {\n        left: -$vbLargeSize;\n      }\n\n      &:last-child &__link {\n        right: -$vbLargeSize;\n      }\n\n      &__indentContainerWrapper {\n        display: table;\n        width: 100%;\n        height: 100%;\n        position: relative;\n      }\n\n      &__indentContainer {\n        display: table-row;\n      }\n\n      &__indent {\n        display: table-cell;\n      }\n\n      &__indentedContent {\n        display: table-cell;\n        vertical-align: middle;\n      }\n\n      &--alignTop &__indentedContent {\n        vertical-align: top;\n      }\n\n      &--alignBottom &__indentedContent {\n        vertical-align: bottom;\n      }\n    }\n  }\n}\n\n.vb-BorderTableListCell {\n  @extend %border-table-cell-face;\n\n  &--clickable {\n    cursor: pointer;\n\n    &:hover {\n      @extend %table-hover-face;\n    }\n  }\n\n  &__clickElement {\n    // クリック可能域をセル全体にするために透明な疑似要素を置く\n    &::before {\n      position: absolute;\n      content: '';\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n    }\n  }\n\n  &__status {\n    &::after {\n      position: absolute;\n      content: '';\n      top: 0;\n      right: 0;\n      border: 0 solid transparent;\n      border-bottom-width: 1rem;\n      border-right-width: 1rem;\n    }\n\n    &--alert {\n      &::after {\n        border-right-color: $vbAlertColor;\n      }\n    }\n\n    &--notice {\n      &::after {\n        border-right-color: $vbNoticeColor;\n      }\n    }\n\n    &--success {\n      &::after {\n        border-right-color: $vbAccentColor;\n      }\n    }\n  }\n\n  &--noWrap {\n    white-space: nowrap;\n  }\n\n  // 以下2つは行見出しのための style\n  &--rowHeader {\n    background-color: $vbColumnColor;\n    font-weight: normal;\n  }\n\n  &--fixedRowHeader {\n    position: sticky;\n    left: 0;\n    z-index: 1; // 同じ行の他のセルより手前に置きたいため\n    border-right: none;\n  }\n\n  @for $i from 1 through 70 {\n    &--fixedRowHeaderLeft#{$i} {\n      left: #{$i}rem;\n    }\n  }\n}\n\n.vb-checkBoxCell {\n  @extend %table-cell-base;\n\n  position: relative;\n  border-bottom: 1px solid $vbBaseColor2;\n  box-sizing: border-box;\n  width: ($vbLargeSize + $vbSmallSize);\n  text-align: center;\n\n  + .vb-BorderTableListCell {\n    border-left: 1px solid $vbBaseColor2;\n  }\n\n  &__label {\n    &:not(&--disabled) {\n      cursor: pointer;\n    }\n\n    &--disabled {\n      ::before {\n        position: absolute;\n        content: '';\n        top: 0;\n        left: 0;\n        bottom: 0;\n        right: 0;\n        cursor: not-allowed;\n      }\n    }\n    // クリック可能域をセル全体にするために透明な疑似要素を置く\n    &::before {\n      position: absolute;\n      content: '';\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n    }\n  }\n}\n\n.vb-treeFoldingButtonCell {\n  @extend %table-cell-base;\n\n  position: relative;\n  border-bottom: 1px solid $vbBaseColor2;\n  box-sizing: border-box;\n  width: $vbXLargeSize;\n  text-align: center;\n\n  &__button {\n    cursor: pointer;\n    color: $vbLinkColor;\n    display: inline;\n    border: 0;\n    background: none;\n    padding: 0;\n    // クリック可能域をセル全体にするために透明な疑似要素を置く\n    &::before {\n      position: absolute;\n      content: '';\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n    }\n\n    &:hover {\n      color: darken($vbLinkColor, 12%);\n    }\n  }\n\n  &__icon {\n    width: $vbLargeSize;\n    height: $vbLargeSize;\n  }\n}\n\n.vb-descriptionListHeadCell {\n  @extend %table-cell-base;\n\n  // 見出し側セルを小さくするため、widthを1pxにしている\n  width: $vbMinimum;\n  white-space: nowrap;\n  font: $vbItemNameFont;\n  vertical-align: middle;\n\n  @for $i from 1 through 70 {\n    &--minWidth#{$i} {\n      min-width: #{$i}rem;\n    }\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      &,\n      &:first-child,\n      &:last-child {\n        padding: $vbBasicSize $vbBasicSize $vbXSmallSize;\n      }\n\n      display: block;\n      width: auto;\n    }\n  }\n}\n\n.vb-descriptionListCell {\n  @extend %table-cell-base;\n\n  padding-top: $vbSmallSize;\n  padding-bottom: $vbSmallSize;\n  line-height: 1.5;\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      &,\n      &:first-child,\n      &:last-child {\n        padding: $vbXSmallSize $vbBasicSize $vbBasicSize;\n      }\n\n      display: block;\n      width: auto;\n    }\n  }\n}\n\n.vb-tableListHeadCell {\n  border: none;\n  border-spacing: 0;\n  border-collapse: collapse;\n  box-sizing: border-box;\n  padding: $vbXSmallSize $vbSmallSize;\n  font: $vbItemNameFont;\n  height: 1.875rem;\n  text-align: left;\n  line-height: 1;\n  vertical-align: middle;\n  border-bottom: 1px solid $vbBaseColor2;\n  position: relative;\n  transition-duration: 0.3s;\n  transition-property: background-color;\n\n  &:first-child {\n    padding-left: $vbLargeSize;\n  }\n\n  &:last-child {\n    padding-right: $vbLargeSize;\n  }\n\n  &--alignCenter {\n    text-align: center;\n  }\n\n  &--alignRight {\n    text-align: right;\n  }\n\n  &--clickable {\n    &:hover {\n      background: $vbBaseColor1;\n    }\n  }\n\n  &--fixedRowHeader {\n    position: sticky;\n    left: 0;\n    z-index: 1; // 同じ行の他のセルより手前に置きたいため\n    background-color: $vbColumnColor;\n  }\n\n  @for $i from 1 through 70 {\n    &--width#{$i} {\n      width: #{$i}rem;\n    }\n\n    &--minWidth#{$i} {\n      min-width: #{$i}rem;\n    }\n\n    &--maxWidth#{$i} {\n      max-width: #{$i}rem;\n    }\n\n    &--fixedRowHeaderLeft#{$i} {\n      left: #{$i}rem;\n    }\n  }\n\n  &__clickElement {\n    cursor: pointer;\n\n    &:hover {\n      font-weight: bold;\n    }\n    // クリック可能域をセル全体にするために透明な疑似要素を置く\n    &::before {\n      position: absolute;\n      content: '';\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n    }\n  }\n\n  &--orderAscending,\n  &--orderDescending {\n    font-weight: bold;\n  }\n\n  &__iconWrapper {\n    height: $vbCaptionFontSize;\n    width: $vbBasicSize;\n    display: inline-block;\n  }\n\n  &__headerArrowUp,\n  &__headerArrowDown,\n  &__headerSwapVert {\n    margin-left: $vbSmallSize;\n    vertical-align: middle;\n    height: $vbBasicSize;\n    width: $vbBasicSize;\n    margin-top: $vbCaptionFontSize - $vbBasicSize;\n  }\n\n  &__headerSwapVert {\n    color: $vbColorsS08;\n  }\n\n  &--noWrap {\n    white-space: nowrap;\n  }\n}\n\n.vb-tableListHead {\n  @extend %table-row-base;\n\n  height: 1.875rem; // 30dp\n  background-color: $vbColumnColor;\n\n  &--fixedHeader {\n    position: sticky;\n    top: 0;\n    z-index: 2; // fixedRowHeader の 1 より手前におきたいため\n  }\n}\n\n.vb-tableListRow {\n  @extend %table-row-base;\n\n  &#{&}--clickable {\n    cursor: pointer;\n\n    &:hover,\n    &:nth-child(2n):hover {\n      @extend %table-hover-face;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/margin-option.scss",
    "content": "@each $i in (0.25, 0.5, 1, 1.5, 2, 3) {\n  .vb-ma#{$i * 100} {\n    margin: #{$i}rem;\n  }\n\n  .vb-mt#{$i * 100} {\n    margin-top: #{$i}rem;\n  }\n\n  .vb-mb#{$i * 100} {\n    margin-bottom: #{$i}rem;\n  }\n\n  .vb-ml#{$i * 100} {\n    margin-left: #{$i}rem;\n  }\n\n  .vb-mr#{$i * 100} {\n    margin-right: #{$i}rem;\n  }\n\n  .vb-ma-#{$i * 100} {\n    margin: #{$i * -1}rem;\n  }\n\n  .vb-mt-#{$i * 100} {\n    margin-top: #{$i * -1}rem;\n  }\n\n  .vb-mb-#{$i * 100} {\n    margin-bottom: #{$i * -1}rem;\n  }\n\n  .vb-ml-#{$i * 100} {\n    margin-left: #{$i * -1}rem;\n  }\n\n  .vb-mr-#{$i * 100} {\n    margin-right: #{$i * -1}rem;\n  }\n}\n\n.vb-ma-auto {\n  margin: auto;\n}\n\n.vb-mt-auto {\n  margin-top: auto;\n}\n\n.vb-mb-auto {\n  margin-bottom: auto;\n}\n\n.vb-ml-auto {\n  margin-left: auto;\n}\n\n.vb-mr-auto {\n  margin-right: auto;\n}\n"
  },
  {
    "path": "stylesheets/lv1/message.scss",
    "content": "@use 'sass:math';\n\n.vb-message {\n  display: inline-flex;\n  vertical-align: middle;\n\n  &__icon {\n    flex-shrink: 0;\n  }\n\n  &__content {\n    display: inline-block;\n    font-size: $vbNormalFontSize;\n    line-height: 1.5;\n\n    // $vbLargeSize = 1.5rem = 24px のアイコンと $vbNormalFontSize = 0.875rem = 14px (line-hight 1.5 * 0.875rem = 1.3125rem = 21px) のメッセージ文を並べて中央を揃えたい。\n    // ただしメッセージを2行以上にしたときにアイコンはメッセージ（複数行）の中央ではなく、あくまで1行目の位置に揃えたい。\n    // そのため1.5rem と 1.3125rem の差を 2 で割ったものを計算している\n    padding-top: math.div($vbLargeSize - $vbNormalFontSize * 1.5, 2);\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv1/progress.scss",
    "content": "@use 'sass:math';\n$vbProgressbar__indeterminateBarWidth: 40%;\n\n@keyframes keyframes__vb-progressBar__indeterminateBar {\n  0% {\n    transform: translate(-100%, 0);\n  }\n\n  100% {\n    // 「いちばん右まで行って隠れ切る」をバーの横幅を使って表現すると↓になる\n    transform: translate(\n      #{'#{100 * math.div(100%, $vbProgressbar__indeterminateBarWidth)}%'},\n      0\n    );\n  }\n}\n\n.vb-progressBar {\n  height: 0.5rem;\n  width: 11rem;\n  position: relative;\n  border-radius: $vbFullBorderRadius;\n  display: inline-block;\n  background-color: $vbColorsS03;\n  overflow: hidden;\n\n  &--widthLarge {\n    width: 24rem;\n  }\n\n  &--widthSmall {\n    width: 7rem;\n  }\n\n  &--widthXSmall {\n    width: 4rem;\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  &--progressing {\n    background-color: $vbColorsP02;\n  }\n\n  &__valueBar,\n  &__indeterminateBar {\n    position: absolute;\n    top: 0;\n    left: 0;\n    height: 100%;\n    width: 100%;\n    background-color: $vbColorsP05;\n    border-radius: $vbFullBorderRadius;\n\n    &--complete {\n      background-color: $vbColorsP04;\n    }\n  }\n\n  &__indeterminateBar {\n    width: $vbProgressbar__indeterminateBarWidth;\n    border-radius: $vbFullBorderRadius;\n    animation-name: keyframes__vb-progressBar__indeterminateBar;\n    animation-duration: 1.6s;\n    animation-iteration-count: infinite;\n    animation-direction: normal;\n    animation-timing-function: ease-in-out;\n\n    @at-root {\n      // OSの設定で動きを減らしたときに、indeterminateBarの動きを止める\n      @media (prefers-reduced-motion) {\n        & {\n          animation-name: none;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/accordionPanel.scss",
    "content": "/** @define accordionPanel */\n.vb-accordionPanel {\n  display: block;\n  box-sizing: border-box;\n  position: relative;\n  background-color: #fff;\n  transition-duration: 0.2s;\n\n  &__title {\n    display: block;\n    padding: 1rem 3rem 1rem 1.5rem;\n    margin: 0;\n    font-size: $vbNormalFontSize;\n    line-height: 1;\n    position: relative;\n    cursor: pointer;\n    transition: background-color 0.2s;\n\n    &:hover {\n      background-color: $vbColorsP01;\n    }\n\n    &--responsive {\n      @media (max-width: $vbMobileBoundaryWidth) {\n        padding-left: 1rem;\n        padding-right: 2.5rem;\n      }\n    }\n  }\n\n  &__icon {\n    display: block;\n    width: 1.5rem;\n    height: 1.5rem;\n    position: absolute;\n    top: 50%;\n    right: 1.5rem;\n    transform: translateY(-50%);\n\n    &--responsive {\n      @media (max-width: $vbMobileBoundaryWidth) {\n        right: 1rem;\n      }\n    }\n  }\n\n  &__description {\n    padding: 0.5rem 1.5rem;\n    margin: 0;\n    font-size: $vbNormalFontSize;\n  }\n\n  &--borderBoth {\n    border-width: 1px 0;\n    border-style: solid;\n    border-color: $vbBaseColor2;\n  }\n\n  &--borderBottom {\n    border-bottom: 1px solid $vbBaseColor2;\n  }\n\n  &--borderTop {\n    border-top: 1px solid $vbBaseColor2;\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      padding-left: 1rem;\n      padding-right: 1rem;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/breadcrumbs.scss",
    "content": ".vb-breadcrumbs {\n  &__list {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    margin: 0;\n    padding: 0;\n    line-height: 1;\n  }\n\n  &__item {\n    display: inline-flex;\n    align-items: center;\n    font-size: $vbNormalFontSize;\n  }\n\n  &__divider {\n    font-size: $vbHeadline1FontSize;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/bulletedList.scss",
    "content": "/** @define bulletedList */\n.vb-bulletedList {\n  font-size: $vbNormalFontSize;\n\n  &__list {\n    list-style-type: disc;\n    padding: 0 0 0 1.5em;\n    margin: 0;\n\n    &--decimal {\n      list-style-type: decimal;\n    }\n\n    &__listItem {\n      margin: 0 0 0.5em;\n      line-height: 1.5;\n\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  &--small {\n    font-size: $vbCaptionFontSize;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/buttonGroup.scss",
    "content": ".vb-buttonGroup {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  &__topPair {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    &:not(:last-child) {\n      margin: 0 1rem 0 0;\n    }\n  }\n\n  &--alignLeft {\n    justify-content: flex-start;\n  }\n\n  &__topItem:not(:last-child),\n  &__item:not(:last-child) {\n    margin: 0 1rem 0 0;\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      flex-direction: column;\n      width: 100%;\n\n      .vb-buttonGroup__topPair {\n        flex-direction: column;\n        margin-right: 0;\n\n        &:not(:last-child) {\n          margin-bottom: 0.5rem;\n        }\n      }\n\n      .vb-buttonGroup__topPair--mobileButtonLayoutRow {\n        width: 100%;\n        flex-direction: row;\n        justify-content: space-between;\n\n        &:not(:last-child) {\n          margin-bottom: 0.5rem;\n        }\n      }\n\n      .vb-buttonGroup__topItem--mobileButtonLayoutRow {\n        flex-grow: 1;\n      }\n\n      .vb-buttonGroup__item,\n      .vb-buttonGroup__topItem:not(.vb-buttonGroup__topItem--mobileButtonLayoutRow) {\n        margin: 0 auto 0.5rem;\n        min-width: 10rem;\n        text-align: center;\n\n        &:last-child {\n          margin-bottom: 0;\n        }\n      }\n\n      .vb-button:not(.vb-button--appearanceTertiary) {\n        width: 100%;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/calendar.scss",
    "content": "/** @define calendar */\n\n.vb-calendar {\n  width: 100%;\n  border-collapse: collapse;\n  table-layout: fixed;\n  min-width: 50rem;\n  position: relative;\n\n  &__inner {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n  }\n}\n\n$vbDatePickerCellSize: 2rem;\n\n.vb-datePicker {\n  width: calc((2rem + #{$vbMinimum}) * 7);\n  font-size: $vbNormalFontSize;\n  background: #fff;\n\n  &__header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    box-sizing: border-box;\n    padding: $vbXSmallSize;\n  }\n\n  &__calendar {\n    width: 100%;\n    border-collapse: collapse;\n  }\n\n  &__calendarHead,\n  &__calendarCell {\n    text-align: center;\n    width: $vbDatePickerCellSize;\n    box-sizing: border-box;\n  }\n\n  &__calendarHead {\n    font-size: $vbCaptionFontSize;\n    color: $vbBurntColor;\n  }\n\n  &__calendarCell {\n    position: relative;\n    border-top: $vbMinimum solid $vbBaseColor2;\n    border-right: $vbMinimum solid $vbBaseColor2;\n    box-sizing: border-box;\n    padding: 0;\n    width: $vbDatePickerCellSize;\n    height: $vbDatePickerCellSize;\n    cursor: pointer;\n    transition-duration: 0.2s;\n    transition-property: background-color, color;\n\n    &:last-of-type {\n      border-right: 0;\n    }\n\n    &--disabled {\n      background-color: $vbColumnColor;\n      color: $vbBaseColor3;\n      cursor: not-allowed;\n      outline: none;\n    }\n\n    &--selected {\n      background: $vbPrimaryColor;\n      color: #fff;\n    }\n\n    &--otherMonth {\n      background: $vbColumnColor;\n    }\n\n    &:hover:not(&--disabled):not(&--selected) {\n      background: $vbBaseColor2;\n    }\n  }\n\n  &__dateButton {\n    &::before {\n      // クリック可能域を増やすためのもの\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n    }\n  }\n\n  &__dateNumber {\n    &--today {\n      font-weight: bold;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/cardNavigation.scss",
    "content": ".vb-cardNavigation {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: stretch;\n\n  &__item {\n    margin-bottom: 1rem;\n    margin-right: 1rem;\n\n    &--1 {\n      margin-right: 0;\n    }\n  }\n\n  &__content {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    min-height: 5rem;\n\n    // 段落ち仕様を実現のため、数字指定で実装\n    // VibesのContainerは width=\"normal\" のとき横幅70remになっている\n    // ContentsBaseをContainerの内側に配置して、そのさらに内部にCardNavigationが配置されることを想定\n    // Containerの幅70remから、Contents左右のpadding1.5rem*2を差し引いて、 67remを基準とする\n    // 計算式\n    // ( 標準幅 - item数 * itemのmargin - item数 * cardbaseのpadding ) / item数\n\n    // 4個以上は4個の場合をデフォルトとする\n    // (67rem - 4 item * 1 rem - 4 item * 3 rem) / 4 item = 12.75rem\n    width: calc((67rem - 4 * 1rem - 4 * 3rem) / 4);\n\n    // (67rem - 3 item * 1 rem - 3 item * 3 rem) / 3 item = 18.3333..rem\n    &--3 {\n      width: calc((67rem - 3 * 1rem - 3 * 3rem) / 3);\n    }\n\n    // (67rem - 2 item * 1 rem - 2 item * 3 rem) / 2 item = 29.5rem\n    &--2 {\n      width: calc((67rem - 2 * 1rem - 2 * 3rem) / 2);\n    }\n\n    // (67rem - 1 item * 0 rem - 1 item * 3 rem) / 1 item = 64rem\n    &--1 {\n      width: 64rem;\n    }\n  }\n\n  &__arrow {\n    flex-shrink: 0;\n  }\n\n  &__icon {\n    width: 1.5rem;\n    height: 1.5rem;\n    fill: #285ac8;\n    margin-right: 1rem;\n    flex-shrink: 0;\n  }\n\n  &__title {\n    display: flex;\n    justify-content: flex-start;\n\n    &--text {\n      margin-bottom: 1rem;\n    }\n  }\n\n  &__url {\n    text-decoration: initial;\n    color: initial;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/comboBox.scss",
    "content": ".vb-comboBox {\n  display: inline;\n  position: relative;\n\n  &__listBox {\n    display: none;\n\n    &--open {\n      display: block;\n    }\n\n    &--widthXSmall {\n      width: 4rem + 2 * $vbBasicSize;\n    }\n\n    &--widthSmall {\n      width: 7rem + 2 * $vbBasicSize;\n    }\n\n    &--widthMedium {\n      width: 11rem + 2 * $vbBasicSize;\n    }\n\n    &--widthLarge {\n      width: 24rem + 2 * $vbBasicSize;\n    }\n  }\n\n  &__listOptions {\n    overflow-y: auto;\n  }\n\n  $class: &;\n\n  &__listOption {\n    padding: $vbSmallSize $vbBasicSize;\n    font-size: $vbNormalFontSize;\n    word-break: keep-all;\n    overflow: hidden;\n    transition-duration: 0.2s;\n    transition-property: background-color;\n    display: flex;\n    align-items: baseline;\n    justify-content: space-between;\n\n    &--disabled {\n      background: inherit;\n      opacity: 0.5;\n      cursor: default;\n      pointer-events: none;\n    }\n\n    &--selected:not(&--disabled) {\n      background: $vbColorsP05;\n      color: #fff;\n    }\n\n    &:hover:not(&--selected):not(&--disabled) {\n      background: $vbColumnColor;\n      color: $vbBlackColor;\n      cursor: pointer;\n    }\n  }\n\n  &__listOptionLabel {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    flex: 1 1 fit-content;\n  }\n\n  &__listOptionSubLabel {\n    font: $vbCaptionFont;\n    color: $vbBurntColor;\n    margin-left: $vbSmallSize;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    flex: 1 1 fit-content;\n    text-align: right;\n\n    // キーボードで選択中のときは色反転する\n    @at-root #{$class}__listOption--selected & {\n      color: #fff;\n    }\n  }\n\n  &__emptyMessage {\n    padding: $vbSmallSize $vbSmallSize;\n    text-align: center;\n  }\n\n  &__spinner {\n    padding: $vbBasicSize;\n    text-align: center;\n  }\n\n  &__fixedItem {\n    display: flex;\n    color: $vbLinkColor;\n    font-weight: bold;\n    vertical-align: middle;\n    margin: -0.5rem -1rem;\n    padding: 0.5rem 1rem;\n\n    &--add {\n      border-top: 1px solid $vbBaseColor2;\n    }\n\n    &--selected {\n      background: $vbColorsP05;\n      color: #fff;\n    }\n  }\n\n  &__fixedItemIcon {\n    width: 1.5em;\n    height: 1.5em;\n    margin: -$vbMinimum 0.25rem 0 0;\n  }\n}\n\n.vb-multiComboBox {\n  display: inline-block;\n\n  &--widthXSmall {\n    width: 4rem;\n  }\n\n  &--widthSmall {\n    width: 7rem;\n  }\n\n  &--widthMedium {\n    width: 11rem;\n  }\n\n  &--widthLarge {\n    width: 24rem;\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  &__border {\n    line-height: 1;\n    vertical-align: middle;\n    margin: -1px;\n    display: inline-block;\n    overflow: hidden;\n    border: 1px solid $vbColorsGY02;\n    border-radius: $vbFontBorderRadius;\n    background-color: #fff;\n    transition-duration: 0.2s;\n    transition-property: border-color, background-color, color;\n\n    &--disabled {\n      background-color: $vbBaseColor1;\n      cursor: not-allowed;\n    }\n\n    &--error {\n      border-color: $vbAlertColor;\n    }\n\n    &--widthXSmall {\n      width: 4rem;\n    }\n\n    &--widthSmall {\n      width: 7rem;\n    }\n\n    &--widthMedium {\n      width: 11rem;\n    }\n\n    &--widthLarge {\n      width: 24rem;\n    }\n\n    &--widthFull {\n      width: 100%;\n    }\n  }\n\n  &__flex {\n    width: 100%;\n    display: flex;\n    flex-wrap: wrap;\n    min-height: $vbFormControlHeight;\n  }\n\n  &__field {\n    flex-grow: 1;\n    flex-shrink: 1;\n    flex-basis: 1rem;\n\n    &--maxSelectionCountReached {\n      width: $vbMinimum;\n      height: $vbMinimum;\n      clip: rect(1px 1px 1px 1px);\n      position: absolute;\n      left: 0;\n      top: 0;\n      overflow: hidden;\n    }\n  }\n\n  &__list {\n    flex-grow: 0;\n    flex-shrink: 0;\n    flex-basis: fit-content;\n    max-width: 100%;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n  }\n\n  &__listItem {\n    margin: $vbXSmallSize;\n    max-width: calc(100% - #{$vbXSmallSize * 2});\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/dateInput.scss",
    "content": ".vb-dateInput {\n  display: inline;\n  position: relative;\n\n  &__listbox {\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    &--rightAligned {\n      left: unset;\n      right: 0;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/descriptionList.scss",
    "content": ".vb-descriptionList {\n  &__table {\n    width: 100%;\n    border: none;\n    border-collapse: collapse;\n    border-spacing: 0;\n    background-color: #fff;\n  }\n\n  &__header {\n    // スタイルはVisuallyHiddenと同じなのだが、table要素直下に置く都合でVisuallyHiddenコンポーネントを使わず再定義している\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n    position: absolute;\n    clip: rect(1px 1px 1px 1px);\n  }\n\n  &__row {\n    height: 3.25rem;\n\n    &--spacingCompact {\n      height: 2rem;\n    }\n\n    &:nth-child(2n + 1) {\n      background-color: $vbColumnColor;\n    }\n\n    &:nth-child(2n):last-child {\n      border-bottom: 1px solid $vbBaseColor2;\n    }\n  }\n\n  $base: &;\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      display: block;\n      width: 100%;\n\n      #{$base}__row {\n        height: auto;\n        display: block;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/dialog.scss",
    "content": "// モーダルダイアログが開いているときにページ全体のスクロールを抑止する\n.vb-ReactModal__Body--open {\n  overflow: hidden;\n}\n\n// 開閉トランジションの追加\n.ReactModal__Overlay {\n  opacity: 0;\n  transition: opacity 300ms ease;\n}\n\n.ReactModal__Overlay--after-open {\n  opacity: 1;\n}\n\n.ReactModal__Overlay--before-close {\n  opacity: 0;\n}\n\n.vb-messageDialog {\n  $componentClass: &;\n\n  max-width: 70rem;\n  min-width: 40rem;\n  max-height: calc(100vh - 2 * 1rem);\n\n  &__inner {\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n  }\n\n  &__header,\n  &__footer {\n    padding: 1.5rem;\n  }\n\n  &__body {\n    padding: 0 1.5rem;\n\n    &--alignLeft {\n      text-align: left;\n    }\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      margin: 0 1rem;\n      // 最小幅を20rem = 320pxとして、そこからダイアログ外marginの1remを左右分（*2）引く\n      min-width: 20rem - 1rem * 2;\n\n      #{$componentClass} {\n        &__header,\n        &__footer {\n          padding: 1rem;\n        }\n\n        &__body {\n          padding-left: 1rem;\n          padding-right: 1rem;\n        }\n      }\n    }\n  }\n}\n\n.vb-taskDialog {\n  $componentClass: &;\n\n  max-width: 70rem;\n  min-width: 40rem;\n\n  &__inner {\n    overflow-y: auto;\n  }\n\n  &__flex {\n    display: flex;\n    flex-direction: column;\n    // 上下に1remアキをつくる\n    max-height: calc(100vh - 2 * 1rem); // fallback for safari14\n    max-height: calc(100svh - 2 * 1rem);\n    min-height: 12rem;\n  }\n\n  &__header,\n  &__footer {\n    background-color: #fff;\n    padding: 1.5rem;\n  }\n\n  &__body {\n    border-top: $vbMinimum solid $vbBaseColor2;\n    border-bottom: $vbMinimum solid $vbBaseColor2;\n    margin: 0;\n    padding: 1.5rem;\n    overflow: auto;\n    background-color: #fff;\n    min-height: 3rem;\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      margin: 0 1rem;\n      // 最小幅を20rem = 320pxとして、そこからダイアログ外marginの1remを左右分（*2）引く\n      min-width: 20rem - 1rem * 2;\n\n      #{$componentClass} {\n        &__header,\n        &__footer {\n          padding: 1rem;\n        }\n\n        &__body {\n          padding: 1rem;\n        }\n      }\n    }\n  }\n}\n\n.vb-guideDialog {\n  text-align: center;\n  width: 40rem;\n\n  @media (max-width: 40rem) {\n    margin: 0 1rem;\n    width: auto;\n    min-width: 10rem;\n  }\n\n  &__inner {\n    display: flex;\n    flex-direction: column;\n    // DialogBaseのpadding1.5rem + 1rem = 2.5remとして、上下に1remアキをつくる\n    max-height: calc(100vh - 2 * 2.5rem);\n  }\n\n  &__header {\n    display: flex;\n    justify-content: space-between;\n    flex-direction: row-reverse;\n  }\n\n  &__footer {\n    display: flex;\n    justify-content: space-between;\n  }\n\n  &__body {\n    overflow: auto;\n    background-color: #fff;\n    min-height: 3rem;\n  }\n\n  &__image {\n    width: 320px;\n    height: 240px;\n\n    @media (max-width: $vbMobileBoundaryWidth) {\n      width: 240px;\n      height: 180px;\n    }\n\n    margin-bottom: 1rem;\n  }\n\n  &__buttonBlock {\n    display: flex;\n    justify-content: space-between;\n  }\n\n  &__closeButtonBlock {\n    display: flex;\n    justify-content: space-between;\n    flex-direction: row-reverse;\n  }\n}\n\n.vb-guideStepCount {\n  color: $vbBurntColor;\n\n  &__currentStep {\n    font-weight: bold;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/dialogFooter.scss",
    "content": ".vb-DialogFooter {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      justify-content: center;\n      flex-direction: column;\n    }\n  }\n\n  &__sideContent {\n    &--responsive {\n      @media (max-width: $vbMobileBoundaryWidth) {\n        margin-top: 1rem;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/dropdown.scss",
    "content": "@use 'sass:math';\n\n%button-disabled-face {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n\n  &:hover {\n    cursor: not-allowed;\n  }\n}\n\n.vb-dropdown {\n  position: relative;\n  text-align: left;\n  font-size: $vbNormalFontSize;\n\n  &__body {\n    position: absolute;\n    top: 0;\n    width: auto;\n  }\n\n  &--alignRight {\n    .vb-dropdown__body {\n      right: 0;\n    }\n  }\n\n  &--positionRelative .vb-dropdown__body {\n    position: relative;\n  }\n}\n\n.vb-dropdownMenuContent {\n  &__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    max-height: 60vh;\n    overflow-y: auto;\n    display: flex;\n    flex-direction: column;\n    align-items: stretch;\n\n    li:first-child > *::before {\n      border-top-left-radius: $vbPopupBorderRadius;\n      border-top-right-radius: $vbPopupBorderRadius;\n    }\n\n    li:last-child > *::before {\n      border-bottom-left-radius: $vbPopupBorderRadius;\n      border-bottom-right-radius: $vbPopupBorderRadius;\n    }\n\n    // IEのmax-heightとflexの食い合わせが悪いので、IEのみflexを解除しておく\n    @at-root {\n      @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n        & {\n          display: block;\n        }\n      }\n    }\n  }\n}\n\n.vb-dropdownItem {\n  width: 100%;\n\n  &--selectable:not(&--disabled) {\n    cursor: pointer;\n    transition-duration: 0.2s;\n    transition-property: background-color;\n\n    &:hover {\n      background-color: $vbColumnColor;\n    }\n  }\n\n  &--disabled {\n    @extend %button-disabled-face;\n  }\n\n  &--unread {\n    background-image: linear-gradient(\n      135deg,\n      $vbAlertColor 10px,\n      transparent 0\n    );\n  }\n\n  &--rule {\n    height: 0;\n    min-height: 0;\n    padding: 0;\n    border-top: 1px solid $vbBaseColor2;\n  }\n\n  &__text {\n    font-size: $vbNormalFontSize;\n    line-height: 1.5rem;\n    // 行の高さから line-height * font-size を引き、2で割って上下のpaddingとする\n    padding: math.div(2.25rem - 1.5 * $vbNormalFontSize, 2) $vbBasicSize;\n    width: 100%;\n    display: inline-block;\n    box-sizing: border-box;\n  }\n\n  &__content,\n  &__checkBoxItem {\n    display: block;\n    min-width: 10rem;\n    max-width: 42rem; // for IE\n    max-width: #{'min(42rem, calc(100vw - 6rem))'};\n    width: max-content;\n  }\n\n  &__content--danger {\n    color: $vbAlertColor;\n  }\n\n  &__checkBoxItem {\n    font-size: $vbNormalFontSize;\n    line-height: 1.5rem;\n    // 行の高さから line-height * font-size を引き、2で割って上下のpaddingとする\n    padding: math.div(2.25rem - 1.5 * $vbNormalFontSize, 2) $vbBasicSize;\n  }\n\n  &__selectable {\n    cursor: pointer;\n    background: transparent;\n    // 行の高さから line-height * font-size を引き、2で割って上下のpaddingとする\n    padding: math.div(2.25rem - 1.5 * $vbNormalFontSize, 2) $vbBasicSize;\n    line-height: 1.5;\n    font-size: $vbNormalFontSize;\n    border: 0;\n    text-align: left;\n    width: 100%;\n    color: $vbBlackColor;\n    text-decoration: none;\n    display: block;\n    box-sizing: border-box;\n    position: relative;\n    overflow: hidden;\n\n    &--rightIcon {\n      padding-right: #{$vbLargeSize + $vbBasicSize + $vbSmallSize};\n    }\n\n    &:focus {\n      // フォーカスインジケーターが外側に表示されて見辛くなることがあるので、内側に自前で実装している\n      outline: none;\n\n      &::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        border: $vbMinimum * 2 solid $vbAccentColor;\n      }\n    }\n  }\n\n  &__rightIcon {\n    position: absolute;\n    top: 50%;\n    right: $vbSmallSize;\n    transform: translateY(-50%);\n    height: $vbLargeSize;\n    width: $vbLargeSize;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/dropdownButton.scss",
    "content": ".vb-dropdownButton {\n  display: inline-block;\n}\n"
  },
  {
    "path": "stylesheets/lv2/emptyStates.scss",
    "content": ".vb-noSearchResults,\n.vb-noDataCreated {\n  text-align: center;\n\n  &__image {\n    margin-bottom: 1rem;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/fileDropArea.scss",
    "content": ".vb-fileDropArea {\n  width: auto;\n  height: auto;\n  position: relative;\n\n  &__fade-enter,\n  &__fade-exit {\n    opacity: 0;\n    transition: opacity 0.3s ease;\n  }\n\n  &__fade-enter-active,\n  &__fade-enter-done {\n    opacity: 1;\n    transition: opacity 0.3s ease;\n  }\n\n  &__overlay {\n    z-index: $vbOverlayZIndex;\n    border: dashed 2px $vbColorsP05;\n    transition-duration: 0.2s;\n    transition-property: opacity;\n    background-color: rgba($color: $vbColorsP05, $alpha: 0.1);\n    position: absolute;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    backdrop-filter: blur(1px);\n\n    &--disabled {\n      cursor: not-allowed;\n      border: dashed 2px $vbColorsGY05;\n      background-color: rgba($color: $vbColorsGY05, $alpha: 0.1);\n    }\n  }\n\n  &__icon {\n    fill: $vbColorsP10;\n\n    &--disabled {\n      width: 3rem;\n      height: 3rem;\n      margin-bottom: 1rem;\n      fill: $vbColorsGY05;\n    }\n  }\n\n  &__contentDescription {\n    color: $vbColorsP10;\n    font-weight: bold;\n\n    &--disabled {\n      color: $vbColorsGY05;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/fileUploader.scss",
    "content": ".vb-fileUploader {\n  width: 32.75rem;\n  height: 19.625rem;\n  background-color: $vbColumnColor;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n  position: relative;\n  border-radius: $vbBaseBorderRadius;\n\n  &__content,\n  &__dropMessage,\n  &__errorMessage {\n    text-align: center;\n    position: absolute;\n    width: 100%;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    transition-duration: 0.2s;\n    transition-property: opacity;\n  }\n\n  &__content {\n    opacity: 1;\n\n    &--disabled {\n      cursor: default;\n    }\n  }\n\n  &__dropMessage,\n  &__errorMessage {\n    opacity: 0;\n  }\n\n  &--widthFull {\n    width: 100%;\n    height: 100%;\n  }\n\n  &--typeCompact {\n    .vb-fileUploader__content,\n    .vb-fileUploader__dropMessage {\n      display: flex;\n      align-items: center;\n    }\n\n    .vb-fileUploader__contentIllust {\n      flex: 1;\n      margin: 0;\n    }\n\n    .vb-fileUploader__contentDescription {\n      flex: 1;\n      margin: 0 1rem;\n    }\n  }\n\n  &--active {\n    background-color: $vbBaseColor1;\n\n    .vb-illust--cloudUpload .vb-illust__frame {\n      fill: $vbBaseColor3;\n    }\n\n    .vb-fileUploader__content {\n      opacity: 0;\n    }\n\n    .vb-fileUploader__dropMessage {\n      opacity: 1;\n    }\n  }\n\n  &--error {\n    .vb-fileUploader__content {\n      opacity: 0;\n    }\n\n    .vb-fileUploader__errorMessage {\n      opacity: 1;\n    }\n  }\n\n  &__icon {\n    width: 3rem;\n    height: 3rem;\n    margin-bottom: 1rem;\n    fill: $vbColorsGY05;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/filterTag.scss",
    "content": ".vb-filterTag {\n  &__block {\n    display: flex;\n    align-items: center;\n    box-sizing: border-box;\n    padding: 0 0.5rem;\n    border-radius: $vbCardBorderRadius;\n    height: 1.5rem;\n    cursor: pointer;\n    transition-duration: 0.2s;\n    transition-property: background-color, color, border;\n\n    .vb-filterTag__icon {\n      width: 1rem;\n      height: 1rem;\n      margin-left: 0.5rem;\n      transition-duration: 0.2s;\n      transition-property: fill;\n      fill: $vbColorsS10;\n    }\n\n    // デフォルト時のカラー\n    color: $vbColorsS10;\n    background-color: #fff;\n    border: 1px solid $vbColorsS08;\n\n    // ホバー時のカラー\n    &:hover {\n      background-color: $vbColorsS02;\n    }\n\n    &:active {\n      background-color: $vbColorsS03;\n    }\n\n    // 選択中のカラー\n    &.active {\n      color: $vbColorsP07;\n      background-color: $vbColorsP01;\n      border-color: $vbColorsP07;\n\n      .vb-filterTag__icon {\n        fill: $vbColorsP07;\n      }\n\n      &:hover {\n        background-color: $vbColorsP02;\n      }\n\n      &:active {\n        background-color: $vbColorsP03;\n      }\n    }\n  }\n\n  &__body {\n    font-size: 0.75rem;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/footer.scss",
    "content": ".vb-footer {\n  display: flex;\n  max-width: $vbContainerSize;\n  width: calc(100vw - 3rem);\n  margin-left: auto;\n  margin-right: auto;\n  flex-wrap: nowrap;\n  justify-content: space-between;\n\n  @media (max-width: $vbMobileBoundaryWidth) {\n    width: calc(100vw - 1rem);\n    flex-direction: column;\n  }\n\n  &--widthWide {\n    max-width: 100rem;\n  }\n\n  &--widthNarrow {\n    max-width: 40rem;\n  }\n\n  &Links {\n    display: block;\n    padding: 0;\n    margin: 0 0 $vbBasicSize;\n    list-style: none;\n    overflow: hidden;\n\n    &__item {\n      display: block;\n      margin-right: $vbBasicSize;\n      float: left;\n      line-height: 1;\n\n      &:last-child {\n        margin-right: 0;\n      }\n\n      > a {\n        color: $vbBlackColor;\n        font-size: $vbNormalFontSize;\n        font-weight: normal;\n        text-decoration: underline;\n        transition-duration: 0.2s;\n        transition-property: color;\n\n        &:hover {\n          color: $vbBurntColor;\n        }\n      }\n    }\n  }\n\n  &Copyright {\n    display: block;\n    font-size: $vbCaptionFontSize;\n    font-style: normal;\n    line-height: 1;\n  }\n\n  &Badges {\n    display: block;\n    padding: 0;\n    margin: 0;\n    list-style: none;\n    overflow: hidden;\n\n    @media (max-width: $vbMobileBoundaryWidth) {\n      margin-top: $vbLargeSize;\n    }\n\n    &__item {\n      display: block;\n      margin-right: $vbBasicSize;\n      float: left;\n\n      &:last-child {\n        margin-right: 0;\n      }\n    }\n  }\n\n  &Section {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      margin-top: $vbLargeSize;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/formBlock.scss",
    "content": ".vb-nameField {\n  &--small {\n    margin: 0 0.25rem;\n  }\n\n  &--error {\n    color: $vbAlertColor;\n  }\n\n  &--disabled {\n    color: $vbBaseColor2;\n  }\n}\n\n.vb-phoneNumberField {\n  display: flex;\n  align-items: center;\n\n  & &__hyphen {\n    margin: 0 0.5rem;\n\n    &--small {\n      margin: 0 0.25rem;\n    }\n\n    &--error {\n      color: $vbAlertColor;\n    }\n\n    &--disabled {\n      color: $vbBaseColor2;\n    }\n  }\n}\n\n.vb-dateField {\n  & &__unit {\n    margin: 0 0.5rem;\n    font: $vbNormalFont;\n\n    &--small {\n      margin: 0 0.25rem;\n      font-size: 0.6875rem;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/formField.scss",
    "content": ".vb-amountRangeField {\n  display: inline-flex;\n  align-items: center;\n}\n"
  },
  {
    "path": "stylesheets/lv2/formGroup.scss",
    "content": "/** @define formControlGroup */\n.vb-formControlGroup {\n  display: flex;\n  flex-wrap: wrap;\n\n  &--block {\n    display: block;\n  }\n}\n\n/** @define formControl */\n.vb-formControl {\n  max-width: 100%;\n\n  &__legend {\n    padding: 0;\n  }\n\n  &__labelArea {\n    display: flex;\n    align-items: flex-end;\n    min-height: $vbLargeSize;\n    margin-bottom: $vbXSmallSize;\n  }\n\n  &__fieldset {\n    border: 0;\n    margin: 0;\n    padding: 0;\n    min-inline-size: 0;\n    max-width: 100%;\n  }\n}\n\n.vb-formActions {\n  &--fixed {\n    position: fixed;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    background-color: #fff;\n    z-index: $vbFormActionsZIndex;\n\n    .vb-popupBase {\n      border-radius: initial;\n    }\n  }\n\n  &__inner {\n    box-sizing: border-box;\n    max-width: $vbContainerSize;\n    margin: 0 auto;\n    padding: 0 1.5rem;\n\n    &--widthWide {\n      max-width: 100rem;\n    }\n\n    &--widthNarrow {\n      max-width: 40rem;\n      min-width: 40rem;\n    }\n  }\n\n  &__animation {\n    &-enter,\n    &-exit {\n      transform: translateY(100%);\n      transition: transform 0.3s ease;\n    }\n\n    &-enter-active,\n    &-enter-done {\n      transform: translateY(0);\n      transition: transform 0.3s ease;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/globalNavi.scss",
    "content": ".vb-globalNavi {\n  display: flex;\n  box-sizing: border-box;\n  // 本体サイズ + Container の左右 margin 分\n  min-width: $vbContainerSize + $vbLargeSize * 2;\n  padding: 0 $vbLargeSize;\n  background-color: $vbPrimaryColor;\n\n  @if $use2021Style {\n    box-sizing: border-box;\n    background-color: #fff;\n    border-bottom: $vbMinimum solid $vbColorsP05;\n    height: $vbXXLargeSize;\n  }\n\n  flex-wrap: nowrap;\n  justify-content: space-between;\n  align-items: center;\n\n  &--disableGutters {\n    min-width: $vbContainerSize;\n  }\n\n  &List {\n    display: block;\n    margin: 0;\n    padding: 0;\n    list-style: none;\n\n    &__item {\n      display: block;\n      float: left;\n    }\n\n    &__itemInner {\n      display: block;\n      padding: $vbBasicSize;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/guidanceMessage.scss",
    "content": ".vb-guidanceMessage {\n  position: relative;\n  background-color: $vbColorsP01;\n  color: $vbColorsP10;\n  border-radius: $vbBaseBorderRadius;\n\n  &__content {\n    &--alignMiddle {\n      display: flex;\n      align-items: center;\n    }\n  }\n\n  &--inline {\n    display: inline-block;\n  }\n\n  &--widthFitContent {\n    width: fit-content;\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  &--clickable {\n    border-radius: $vbBaseBorderRadius;\n  }\n\n  &__container {\n    display: grid;\n    display: -ms-grid;\n    grid-template-columns: auto 1fr;\n    -ms-grid-columns: auto 1fr;\n    padding: $vbBasicSize;\n\n    &--responsive {\n      @media (max-width: $vbMobileBoundaryWidth) {\n        padding: $vbSmallSize;\n      }\n    }\n\n    &--alignTop {\n      align-items: flex-start;\n    }\n\n    &--alignMiddle {\n      align-items: center;\n    }\n\n    &--small {\n      padding: $vbXSmallSize $vbSmallSize;\n    }\n  }\n\n  &__icon {\n    grid-column: 1 / 2;\n    -ms-grid-column: 1;\n    margin-right: $vbSmallSize;\n    font-size: $vbLargeSize;\n  }\n\n  &__link,\n  &__button {\n    color: $vbColorsP10;\n    text-decoration: none;\n    display: inline-block;\n    text-align: left;\n    border: 0;\n    background-color: transparent;\n    font-size: $vbNormalFontSize;\n    font-weight: bold;\n    padding: 0;\n    font-family: inherit;\n\n    &::before {\n      // クリッカブル領域をMessage全体に広げる\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      cursor: pointer;\n      transition-duration: 0.2s;\n      transition-property: background-color, color;\n    }\n\n    &:hover {\n      &::before {\n        background-color: rgba($vbPrimaryColor, 0.06);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/guidedContent.scss",
    "content": "/**  @define GuidContent */\n.vb-guidedContent {\n  display: grid;\n  grid-template-columns: auto min-content;\n  grid-template-rows: auto;\n\n  &__title {\n    grid-column: 1/-1;\n  }\n\n  &__guide {\n    grid-column: 3/-1;\n    grid-row: span 2;\n  }\n\n  &--responsive {\n    @media (max-width: $vbMobileBoundaryWidth) {\n      .vb-guidedContent__guide {\n        grid-column: 1/-1;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/header.scss",
    "content": "/** @define Header */\n.vb-header {\n  box-sizing: border-box;\n  // 本体サイズ + Container の左右 margin 分\n  min-width: $vbContainerSize + $vbLargeSize * 2;\n  height: $vbXXLargeSize + $vbBasicSize * 2;\n  padding: $vbBasicSize $vbLargeSize;\n  display: flex;\n  justify-content: space-between;\n  background-color: #fff;\n  font-size: $vbCaptionFontSize;\n\n  @if $use2021Style {\n    padding: ($vbXSmallSize + $vbSmallSize) $vbLargeSize $vbXSmallSize;\n    height: $vbXXLargeSize + $vbSmallSize + $vbXSmallSize * 2;\n  }\n\n  &--disableGutters {\n    min-width: $vbContainerSize;\n  }\n\n  & &__logo {\n    width: fit-content;\n  }\n\n  & &__info {\n    text-align: center;\n    display: flex;\n    align-items: flex-end;\n    width: fit-content;\n  }\n\n  & &__children {\n    display: flex;\n    flex: 1;\n    padding: 0 2rem;\n    align-items: center;\n  }\n\n  & &__plan {\n    display: inline-block;\n    box-sizing: border-box;\n    padding: 0 0.2em;\n    margin-bottom: -0.1em;\n    font-weight: bold;\n    border: 1px solid $vbPrimaryColor;\n    color: $vbPrimaryColor;\n    text-decoration: none;\n  }\n\n  & &__icon {\n    vertical-align: middle;\n    width: $vbBasicSize;\n    height: $vbBasicSize;\n\n    &--notice {\n      color: $vbNoticeColor;\n    }\n\n    &--alert {\n      color: $vbAlertColor;\n    }\n  }\n\n  & &__text {\n    vertical-align: middle;\n  }\n\n  & &__link {\n    color: $vbBlackColor;\n    transition-duration: 0.2s;\n    transition-property: background-color;\n\n    &:hover {\n      background-color: $vbColorsS01;\n    }\n  }\n\n  & &__button {\n    color: $vbBlackColor;\n    display: inline;\n    border: 0;\n    background: transparent;\n    padding: 0;\n    text-decoration: underline;\n    cursor: pointer;\n    font-size: $vbCaptionFontSize;\n    transition-duration: 0.2s;\n    transition-property: background-color;\n\n    &--active {\n      background-color: $vbBaseColor1;\n    }\n\n    &:hover {\n      background-color: $vbColorsS01;\n    }\n  }\n\n  & &__icon + &__text {\n    margin-left: 0.2em;\n  }\n\n  & &__section {\n    position: relative;\n\n    &:not(:last-child) {\n      margin-right: 1em;\n    }\n  }\n\n  & &__dropdownWrapper {\n    padding-bottom: 8px;\n  }\n\n  & &__badge {\n    width: 0.5rem;\n    height: 0.5rem;\n    border-radius: $vbFullBorderRadius;\n    background: $vbAlertColor;\n    display: block;\n    position: absolute;\n    top: 0.25rem;\n    left: 0.5rem;\n    border: solid 1px #ffff;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/headlineArea.scss",
    "content": ".vb-headlineArea {\n  display: block;\n  padding-bottom: $vbXLargeSize;\n  position: relative;\n}\n"
  },
  {
    "path": "stylesheets/lv2/hierarchicalTable.scss",
    "content": ".vb-hierarchicalTable {\n  &__table {\n    width: 100%;\n    border: none;\n    border-collapse: collapse;\n    border-spacing: 0;\n    background-color: #fff;\n  }\n}\n\n.vb-hierarchicalTableRowHeaderCell {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.5rem;\n\n  @for $i from 1 through 5 {\n    &--level#{$i} {\n      margin-left: #{($i - 1) * 2}rem;\n    }\n\n    &--foldable {\n      &--level#{$i} {\n        margin-left: #{$i * 2}rem;\n      }\n    }\n  }\n\n  &__button {\n    cursor: pointer;\n    color: $vbLinkColor;\n    display: inline;\n    border: 0;\n    background: none;\n    padding: 0;\n\n    &:hover {\n      color: darken($vbLinkColor, 12%);\n    }\n  }\n\n  &__icon {\n    width: $vbLargeSize;\n    height: $vbLargeSize;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/indexSearchField.scss",
    "content": "/** @define indexSearchField */\n.vb-indexSearchField {\n  display: inline-block;\n  position: relative;\n  max-width: 100%;\n\n  &--widthFull {\n    width: 100%;\n  }\n\n  & &__icon {\n    display: block;\n    width: 1.5em;\n    height: 1.5em;\n    position: absolute;\n    top: 50%;\n    left: 0.5em;\n    pointer-events: none;\n    transform: translateY(-50%);\n    transition: left 0.3s ease, fill 0.3s ease;\n\n    &--searchAreaClosed {\n      left: 0.375em;\n      pointer-events: none;\n    }\n  }\n\n  & &__input {\n    @extend %form-text-base;\n\n    padding-left: 2.75em;\n    max-width: 100%;\n    transition: width 0.3s ease, background-color 0.3s ease,\n      border-color 0.3s ease;\n\n    &::placeholder {\n      opacity: 1;\n      transition: opacity 0.3s ease;\n    }\n\n    &::-webkit-search-cancel-button {\n      cursor: pointer;\n    }\n\n    + svg {\n      fill: $vbBaseColor2;\n    }\n\n    &--widthXSmall {\n      width: 4rem;\n    }\n\n    &--widthSmall {\n      width: 7rem;\n    }\n\n    &--widthMedium {\n      width: 11rem;\n    }\n\n    &--widthLarge {\n      width: 24rem;\n    }\n\n    &--widthFull {\n      width: 100%;\n    }\n\n    &--searchAreaClosed {\n      width: 2.25rem;\n      padding: 0;\n      cursor: pointer;\n\n      &::placeholder {\n        opacity: 0;\n      }\n    }\n\n    &:not(&--disabled) {\n      &:hover {\n        background-color: $vbColorsP02;\n        border-color: $vbColorsP08;\n\n        & + .vb-indexSearchField__icon {\n          fill: $vbColorsP08;\n        }\n      }\n    }\n  }\n\n  & &__dropdown {\n    position: absolute;\n    top: 100%;\n    left: 0;\n    opacity: 0;\n\n    &--searchAreaOpen {\n      transition: opacity 0.3s 0.3s ease;\n      opacity: 1;\n    }\n  }\n\n  & &__dropdownItem {\n    margin: 0.25em;\n    padding: 0.25em;\n    cursor: pointer;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/lineSeparatedList.scss",
    "content": "/** @define lineSeparatedList */\n.vb-lineSeparatedList {\n  &__list {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n\n    &__listItem {\n      background-color: #fff;\n      border-top: 1px solid $vbBaseColor2;\n      padding: $vbBasicSize;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/listButtonSelector.scss",
    "content": "%button-disabled-face {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n\n  &:hover {\n    cursor: not-allowed;\n  }\n}\n\n.vb-listButtonSelector {\n  position: relative;\n  display: inline-block;\n\n  &__popupWrapper {\n    position: absolute;\n    top: 100%;\n    min-width: 100%;\n  }\n\n  &__button {\n    display: inline-block;\n    padding: $vbBasicSize;\n    padding-right: 3em;\n    background-color: #fff;\n    border: solid 1px $vbPrimaryColor;\n    border-radius: $vbFontBorderRadius;\n    font-size: $vbBasicSize;\n    font-weight: bold;\n    color: $vbPrimaryColor;\n    cursor: pointer;\n    line-height: 1;\n\n    &--disabled {\n      @extend %button-disabled-face;\n    }\n\n    &--isOpen {\n      background-color: $vbBaseColor1;\n    }\n  }\n\n  &__icon {\n    position: absolute;\n    display: inline-block;\n    font-size: 1.5em;\n    right: 0.5em;\n    top: 50%;\n    transform: translateY(-50%);\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/listCard.scss",
    "content": ".vb-listCard {\n  position: relative;\n  background-color: #fff;\n  border-radius: $vbCardBorderRadius;\n  box-shadow: $vbCardShadow;\n  padding: $vbBasicSize;\n\n  &--disabled {\n    opacity: 0.5;\n  }\n\n  &__link,\n  &__button {\n    cursor: pointer;\n    text-decoration: none;\n    color: $vbBlackColor;\n    display: block;\n    text-align: left;\n    padding: 0;\n    border: 0;\n    background-color: #fff;\n\n    &--disabled {\n      cursor: not-allowed;\n    }\n\n    &::before {\n      // クリッカブル領域をカード全体に広げる\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      transition-duration: 0.2s;\n      transition-property: background-color, color;\n      border-radius: $vbCardBorderRadius;\n    }\n\n    &--current {\n      &::after {\n        content: '';\n        height: 100%;\n        width: 4px;\n        background-color: $vbColorsP05;\n        position: absolute;\n        top: 0;\n        left: 0;\n        border-top-left-radius: $vbXSmallSize;\n        border-bottom-left-radius: $vbXSmallSize;\n      }\n    }\n  }\n\n  // FIXME: おそらくlibsassのバグで、:not を複数のセレクタに対して使用することが上手くできない。\n  // そのため __link と __button を別々に書いている。\n  // libsass は deprecated なため、dart-sass等に移行したうえでこの2つを纏められないか確認する必要がある。\n  &__link {\n    &:not(&--disabled) {\n      &:hover {\n        &::before {\n          background-color: mix($vbPrimaryColor, #fff, 6%);\n        }\n      }\n    }\n  }\n\n  &__button {\n    &:not(&--disabled) {\n      &:hover {\n        &::before {\n          background-color: mix($vbPrimaryColor, #fff, 6%);\n        }\n      }\n    }\n  }\n\n  &__content {\n    position: relative;\n    z-index: 1;\n    margin-right: $vbLargeSize;\n    display: flex;\n  }\n\n  &__thumbnail {\n    margin-right: $vbBasicSize;\n    flex-shrink: 0;\n    flex-grow: 0;\n    max-width: 5rem;\n\n    * {\n      max-width: 100%;\n      max-height: 5rem;\n    }\n\n    &--large {\n      margin-right: $vbBasicSize;\n      flex-shrink: 0;\n      flex-grow: 0;\n      max-width: 12rem;\n\n      * {\n        max-width: 100%;\n        max-height: 12rem;\n      }\n\n      @media (max-width: $vbMobileBoundaryWidth) {\n        max-width: 7.2rem;\n\n        * {\n          max-height: 7.2rem;\n        }\n      }\n    }\n\n    @media (max-width: $vbMobileBoundaryWidth) {\n      max-width: 3rem;\n\n      * {\n        max-height: 3rem;\n      }\n    }\n  }\n\n  &__main {\n    flex-shrink: 1;\n    flex-grow: 1;\n  }\n\n  &__icon {\n    position: absolute;\n    z-index: 1;\n    top: 50%;\n    transform: translateY(-50%);\n    right: $vbSmallSize;\n    width: $vbLargeSize;\n    height: $vbLargeSize;\n  }\n\n  &__title {\n    font-size: $vbHeadline2FontSize;\n    font-weight: bold;\n  }\n\n  &__actions {\n    position: relative;\n    z-index: 1;\n    // 誤クリック・タップを防ぐため、paddingでaction周囲に反応しないエリアを作っている\n    // 上方向のみ、titleカード内コンテンツとの兼ねあいで小さくなっている\n    padding: $vbSmallSize $vbBasicSize $vbBasicSize;\n    margin: $vbSmallSize #{-1 * $vbBasicSize} #{-1 * $vbBasicSize};\n    width: fit-content;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/listTable.scss",
    "content": "/** @define listTable */\n\n.vb-listTable,\n.vb-groupedListTable {\n  &__table {\n    width: 100%;\n    border: none;\n    border-collapse: collapse;\n    border-spacing: 0;\n    background-color: #fff;\n\n    // .vb-tableListCell__content をセルに対して縦方向に100%で表示するには\n    // heightを小さくしておく必要がある\n    height: $vbMinimum;\n  }\n\n  &--fitContent {\n    max-width: fit-content;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/messageBlock.scss",
    "content": "@use 'sass:math';\n@use '../container_query' as *;\n\n.vb-messageBlock {\n  container-type: inline-size;\n  width: 100%;\n\n  &--hover {\n    box-shadow: $vbPopupShadow;\n    border-radius: $vbBaseBorderRadius;\n    z-index: $vbFloatingZIndex;\n  }\n\n  &__inner {\n    border: $vbMinimum solid $vbColorsS05;\n    background-color: $vbColorsS01;\n    border-radius: $vbBaseBorderRadius;\n    box-sizing: border-box;\n    display: grid;\n    display: -ms-grid;\n    grid-template-columns: 1fr auto;\n    -ms-grid-columns: 1fr auto;\n    padding: $vbBasicSize;\n\n    &--responsive {\n      @media (max-width: $vbMobileBoundaryWidth) {\n        padding: $vbSmallSize;\n        display: block;\n      }\n    }\n\n    @include at-container('max-width:' $vbMobileBoundaryWidth) {\n      padding: $vbSmallSize;\n      display: block;\n    }\n\n    &--alert {\n      border: $vbMinimum solid $vbAlertColor;\n      background-color: $vbColorsRE02;\n    }\n\n    &--notice {\n      border: $vbMinimum solid $vbNoticeColor;\n      background-color: $vbColorsYE02;\n    }\n\n    &--success,\n    &--assistance,\n    &--discovery {\n      border: $vbMinimum solid $vbPrimaryColor;\n      background-color: $vbColorsP02;\n    }\n  }\n\n  &__message {\n    -ms-grid-column: 1;\n    grid-column: 1 / 2;\n  }\n\n  &__buttons {\n    -ms-grid-column: 2;\n    grid-column: 2 / 3;\n    // ボタンの高さがMessage部分と合わないため、引き算して中央に配置している\n    margin-top: math.div($vbLargeSize - $vbFormControlHeight, 2);\n    height: $vbLargeSize;\n\n    &--responsive {\n      @media (max-width: $vbMobileBoundaryWidth) {\n        margin-top: $vbXSmallSize;\n        margin-left: $vbBasicSize;\n        height: auto;\n      }\n    }\n\n    @include at-container('max-width:' $vbMobileBoundaryWidth) {\n      margin-top: $vbXSmallSize;\n      margin-left: $vbBasicSize;\n      height: auto;\n    }\n  }\n\n  &__linkButton,\n  &__closeButton {\n    display: inline-block;\n    white-space: nowrap;\n    // ボタンの高さがMessage部分と合わないため、引き算して中央に配置している\n    margin-top: math.div($vbLargeSize - $vbFormControlHeight, 2);\n    height: $vbLargeSize;\n  }\n}\n\n.vb-messageBlockInternalMessage {\n  &__inner {\n    display: flex;\n    flex: 1 auto;\n    align-items: flex-start;\n  }\n\n  &__icon {\n    display: inline-block;\n    margin-right: $vbSmallSize;\n    font-size: $vbLargeSize;\n    min-width: $vbLargeSize;\n\n    &--alert {\n      color: $vbAlertColor;\n    }\n\n    &--notice {\n      color: $vbNoticeColor;\n    }\n\n    &--success,\n    &--assistance,\n    &--discovery {\n      color: $vbPrimaryColor;\n    }\n\n    &--explanatory,\n    &--info {\n      color: $vbBaseColor3;\n    }\n  }\n\n  &__content {\n    display: inline-block;\n    font-size: $vbNormalFontSize;\n    line-height: 1.5;\n    // align-items: flex-start;とした際に、アイコンと中央に並んで見えるように調整\n    margin-top: math.div($vbLargeSize - $vbNormalFontSize * 1.5, 2);\n  }\n}\n\n.vb-floatingMessageBlockPortal {\n  position: fixed;\n  top: 2rem;\n  left: 50%;\n  transform: translate(-50%, 0);\n  z-index: $vbFixedMessageZIndex;\n}\n\n.vb-floatingMessageBlock {\n  box-shadow: $vbPopupShadow;\n  border-radius: $vbFloatingBorderRadius;\n  margin: auto;\n  min-width: 16rem;\n  max-width: calc(100vw - 3rem);\n  width: 50rem;\n  transition-property: opacity;\n  transition-duration: 0.3s;\n\n  & .vb-messageBlock__inner {\n    border-radius: $vbFloatingBorderRadius;\n  }\n\n  &__animation {\n    &-enter {\n      opacity: 0;\n    }\n\n    &-enter-active {\n      opacity: 1;\n    }\n\n    &-exit {\n      opacity: 0;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/messageIcon.scss",
    "content": ".vb-messageIcon {\n  position: relative;\n  display: inline-block;\n  width: $vbLargeSize;\n  min-height: 1em;\n\n  &__control {\n    cursor: pointer;\n    width: $vbLargeSize;\n    height: $vbLargeSize;\n    position: absolute;\n    left: 0;\n    top: 50%;\n    transform: translateY(-50%);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  &__icon {\n    width: $vbLargeSize;\n    height: $vbLargeSize;\n    color: $vbBaseColor3;\n    display: inline-block;\n    vertical-align: middle;\n\n    &--error {\n      color: $vbAlertColor;\n    }\n\n    &--notice {\n      color: $vbNoticeColor;\n    }\n\n    &--success {\n      color: $vbPrimaryColor;\n    }\n  }\n\n  &--small {\n    .vb-messageIcon__icon {\n      width: $vbBasicSize;\n      height: $vbBasicSize;\n    }\n  }\n}\n\n.vb-messageIconMessageWrapper {\n  &--hidden {\n    display: none;\n  }\n}\n\n.vb-messageIconMessage {\n  position: relative;\n  width: $vbLargeSize;\n}\n"
  },
  {
    "path": "stylesheets/lv2/modal.scss",
    "content": ".vb-fullScreenModal {\n  z-index: $vbFullScreenZIndex;\n  background-color: #fff;\n\n  &__inner {\n    display: flex;\n    flex-direction: column;\n    width: 100vw;\n    height: 100vh;\n  }\n\n  &__header {\n    padding: 1.5rem;\n    display: flex;\n    justify-content: flex-start;\n    align-items: center;\n    border-bottom: $vbMinimum solid $vbBaseColor2;\n  }\n\n  &__headerInnerContent {\n    flex-grow: 1;\n  }\n\n  &__body {\n    padding: 1.5rem 1.5rem 1.5rem 4.75rem;\n    overflow: auto;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/numericTable.scss",
    "content": ".vb-numericTable {\n  &__table {\n    width: 100%;\n    border: none;\n    border-collapse: collapse;\n    border-spacing: 0;\n    background-color: #fff;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/pageSelector.scss",
    "content": ".vb-pageSelector {\n  display: inline-block;\n\n  &__currentPage {\n    font-weight: bold;\n    font-size: $vbNormalFontSize;\n    padding: 0 $vbSmallSize;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/pager.scss",
    "content": ".vb-pager {\n  text-align: center;\n\n  & &__list {\n    padding: 0;\n    // FIXME: ここにマージンがあるため、commonPropsでつけたマージンが相殺されることがある\n    margin: 1em auto;\n  }\n\n  & &__break {\n    display: inline-block;\n    margin: 0 0.5em 0 -0.5em;\n    vertical-align: middle;\n  }\n\n  & &__icon {\n    &--arrow {\n      transform: scale(1.5);\n      vertical-align: middle;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/personTag.scss",
    "content": "@use 'sass:math';\n\n.vb-personTag {\n  display: inline-block;\n  background-color: #fff;\n  box-sizing: border-box;\n  padding-left: $vbXSmallSize;\n  padding-right: $vbSmallSize;\n  border: $vbMinimum solid $vbBaseColor3;\n  border-radius: $vbFullBorderRadius;\n  height: $vbXLargeSize;\n  line-height: $vbXLargeSize;\n  font-size: $vbXLargeSize;\n\n  &--removable {\n    padding-right: $vbXSmallSize;\n  }\n\n  &--success {\n    border-color: $vbPrimaryColor;\n  }\n\n  &--error {\n    border-color: $vbAlertColor;\n  }\n\n  &__inner {\n    display: flex;\n    align-items: center;\n    margin-top: -$vbMinimum;\n    height: $vbXLargeSize;\n  }\n\n  &__type {\n    display: inline-block;\n    font-size: $vbCaptionFontSize;\n    color: $vbBurntColor;\n    margin-right: $vbSmallSize;\n    white-space: nowrap;\n  }\n\n  &__body {\n    font-size: $vbNormalFontSize;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    &--success {\n      color: $vbPrimaryColor;\n    }\n\n    &--error {\n      color: $vbAlertColor;\n    }\n  }\n\n  &__removeButton {\n    font-size: 0;\n    color: $vbBaseColor3;\n    margin-left: $vbSmallSize;\n    height: $vbLargeSize;\n    width: $vbLargeSize;\n    display: flex;\n    flex-shrink: 0;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    transition-duration: 0.2s;\n    transition-property: color;\n\n    &:hover {\n      color: darken($vbBaseColor3, 12%);\n    }\n\n    &--disabled {\n      opacity: 0.5;\n      cursor: not-allowed;\n      pointer-events: none;\n\n      &:hover {\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  &__removeIcon {\n    font-size: $vbBasicSize;\n    vertical-align: middle;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/popupProgressBar.scss",
    "content": ".vb-popupProgressBar {\n  padding: 0.5rem 1rem;\n  display: flex;\n  align-items: center;\n  min-width: 20rem;\n  max-width: 40rem;\n\n  &__contents {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n  }\n\n  &__message {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n  }\n\n  &__message-block {\n    display: flex;\n    align-items: center;\n  }\n\n  &__icon {\n    flex-shrink: 0;\n    align-self: flex-start;\n  }\n\n  &__close {\n    flex-shrink: 0;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/popupProgressBarPortal.scss",
    "content": ".vb-popupProgressBarPortal {\n  position: fixed;\n  left: 0;\n  bottom: 0;\n  z-index: $vbFixedMessageZIndex;\n\n  &__element {\n    // boxshadowをtransition中に表示するために周りにboxshadow分のpaddingを置く\n    padding: 0.75rem 1rem 0.5rem 1rem;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/propListForm.scss",
    "content": ".vb-propListForm {\n  display: block;\n\n  &__list {\n    display: flex;\n\n    &--wrap {\n      display: flex;\n      flex-wrap: wrap;\n    }\n  }\n\n  &__item {\n    display: flex;\n    border-bottom: solid 1px $vbColorsS03;\n    align-items: flex-start;\n  }\n\n  &__term {\n    display: inline-block;\n    min-height: $vbFormControlHeight;\n    font-size: $vbNormalFontSize;\n    vertical-align: middle;\n    margin-right: 1rem;\n  }\n\n  &__description {\n    margin-left: 0;\n  }\n\n  &__termInner,\n  &__descriptionInner {\n    display: flex;\n    align-items: center;\n    height: 100%;\n    min-height: $vbFormControlHeight;\n    white-space: pre-line;\n  }\n\n  &__termLabel {\n    display: flex;\n    align-items: flex-start;\n  }\n\n  &__termIcons {\n    display: flex;\n    white-space: nowrap;\n    align-items: center;\n  }\n\n  &__field {\n    display: flex;\n    align-items: center;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/selectableButton.scss",
    "content": ".vb-selectableButton {\n  &__button {\n    position: relative;\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n    margin: 0;\n    padding: 0 1rem;\n    text-align: center;\n    text-decoration: none;\n    box-sizing: border-box;\n    border-radius: $vbBaseBorderRadius;\n    border: 0;\n    cursor: pointer;\n    transition-duration: 0.2s;\n    transition-property: background-color, color, box-shadow, border-color;\n    font-family: '-apple-system', BlinkMacSystemFont, 'Helvetica Neue',\n      'ヒラギノ角ゴ ProN', Hiragino Kaku Gothic ProN, Arial, 'メイリオ', Meiryo,\n      sans-serif;\n    font-size: 0.875rem;\n    height: 2.25rem;\n    vertical-align: middle;\n    white-space: nowrap;\n\n    .vb-selectableButton__icon {\n      // 22px\n      width: 1.375rem;\n      height: 1.375rem;\n      fill: $vbColorsP07;\n    }\n\n    // デフォルト時のカラー\n    color: $vbColorsGY07;\n    background-color: $vbColorsS01;\n\n    // ホバー時のカラー\n    &:hover {\n      background-color: $vbColorsS02;\n    }\n\n    &:active {\n      background-color: $vbColorsS03;\n    }\n\n    // 選択時のカラー\n    &.active {\n      background-color: $vbColorsP01;\n\n      .vb-selectableButton__label {\n        color: $vbColorsP07;\n        font-weight: bold;\n      }\n\n      &:hover {\n        background-color: $vbColorsP02;\n      }\n\n      &:active {\n        background-color: $vbColorsP03;\n      }\n\n      &:focus {\n        outline: none;\n        box-shadow: 0 0 0 1px #fff, 0 0 0 3px $vbColorsP05, 0 0 0 4px #fff;\n        background-color: $vbColorsP03;\n      }\n    }\n  }\n\n  &__badge {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    height: 1.25rem;\n    margin-left: -0.25rem;\n    padding: 0 0.625rem;\n    color: $vbColorsGY10;\n    background-color: $vbColorsGY02;\n    border-radius: $vbCardBorderRadius;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/skeleton.scss",
    "content": ".vb-skeltonPageTitle {\n  padding: calc(($vbLineHeight - 1) * $vbHeadline1FontSize / 2) 0;\n  max-height: $vbHeadline1FontSize;\n}\n\n.vb-skeltonSectionTitle {\n  padding: calc(($vbLineHeight - 1) * $vbHeadline2FontSize / 2) 0;\n  max-height: $vbHeadline2FontSize;\n}\n\n.vb-skeltonParagraph {\n  padding: calc(($vbLineHeight - 1) * $vbNormalFontSize / 2) 0;\n  max-height: $vbNormalFontSize;\n}\n\n.vb-skeltonRectangle {\n  max-height: 5rem;\n}\n\n.vb-skeltonBlock {\n  max-height: 2.25rem;\n\n  &--small {\n    max-height: 1.5rem;\n  }\n\n  &--large {\n    max-height: 3rem;\n  }\n}\n\n.vb-skeltonIcon {\n  max-height: 2rem;\n\n  &--small {\n    max-height: 1.5rem;\n  }\n\n  &--large {\n    max-height: 3rem;\n  }\n}\n\n.vb-skeltonCircle {\n  max-height: 2rem;\n\n  &--small {\n    max-height: 1.5rem;\n  }\n\n  &--large {\n    max-height: 3rem;\n  }\n\n  &--xlarge {\n    max-height: 6rem;\n  }\n}\n\n.vb-skeletonInput {\n  align-items: center;\n  background-color: #fff;\n  border-radius: $vbFontBorderRadius;\n  border: 1px solid $vbColorsGY02;\n  box-sizing: border-box;\n  display: inline-flex;\n  height: $vbFormControlHeight;\n  overflow: hidden;\n  padding: 0 $vbSmallSize;\n  vertical-align: inherit;\n\n  &--small {\n    height: $vbFormControlSmallHeight;\n    padding: 0 $vbSmallSize;\n  }\n\n  &--large {\n    height: $vbFormControlLargeHeight;\n    padding: 0 $vbBasicSize;\n  }\n\n  &--widthXSmall {\n    width: 4rem;\n  }\n\n  &--widthSmall {\n    width: 7rem;\n  }\n\n  &--widthMedium {\n    width: 11rem;\n  }\n\n  &--widthLarge {\n    width: 24rem;\n  }\n\n  &--widthFull {\n    width: 100%;\n  }\n}\n\n.vb-skeletonStackedBarChart {\n  height: 1.5rem;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n  padding: 0 0.5rem;\n  background-color: #fff;\n  border: $vbMinimum solid $vbColorsS06;\n  border-radius: $vbFullBorderRadius;\n}\n"
  },
  {
    "path": "stylesheets/lv2/stackedBarChart.scss",
    "content": ".vb-stackedBarChart {\n  &__container {\n    height: 1.5rem;\n    box-sizing: border-box;\n    display: flex;\n    overflow: hidden;\n    background-color: #fff;\n    border: $vbMinimum solid $vbColorsS06;\n    border-radius: $vbFullBorderRadius;\n    // reset ul's user-agent-stylesheet\n    list-style-type: none;\n    padding-inline-start: 0;\n    margin-block: 0;\n  }\n\n  &__item {\n    box-sizing: border-box;\n\n    & + & {\n      border-left: $vbMinimum solid $vbColorsS08;\n    }\n    // WithBalloon を横幅いっぱいに広げる\n    display: flex;\n    flex-direction: column;\n\n    &__button {\n      width: 100%;\n      height: calc(1.5rem - $vbMinimum * 2);\n      border: none;\n      padding: 0 0.5rem;\n      font-size: $vbCaptionFontSize;\n      font-family: $vbFontFamily;\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis;\n\n      &:focus {\n        outline: none;\n        box-shadow: $vbFocusHighlightShadowInset;\n      }\n\n      &--first {\n        border-radius: $vbFullBorderRadius 0 0 $vbFullBorderRadius;\n      }\n\n      &--last {\n        border-radius: 0 $vbFullBorderRadius $vbFullBorderRadius 0;\n      }\n\n      &--RE {\n        background-color: $vbColorsRE02;\n        color: $vbColorsRE10;\n      }\n\n      &--OR {\n        background-color: $vbColorsOR02;\n        color: $vbColorsOR10;\n      }\n\n      &--YE {\n        background-color: $vbColorsYE02;\n        color: $vbColorsYE10;\n      }\n\n      &--YG {\n        background-color: $vbColorsYG02;\n        color: $vbColorsYG10;\n      }\n\n      &--GR {\n        background-color: $vbColorsGR02;\n        color: $vbColorsGR10;\n      }\n\n      &--BG {\n        background-color: $vbColorsBG02;\n        color: $vbColorsBG10;\n      }\n\n      &--PU {\n        background-color: $vbColorsPU02;\n        color: $vbColorsPU10;\n      }\n\n      &--GY {\n        background-color: $vbColorsGY02;\n        color: $vbColorsGY10;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/statusSelector.scss",
    "content": "/** @define statusSelector */\n.vb-statusSelector {\n  @extend %icon-base;\n\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n  border-color: transparent;\n  background-color: transparent;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n\n  &--disabled {\n    opacity: 0.5;\n  }\n\n  &__dropdownIcon {\n    width: $vbBasicSize;\n    height: $vbBasicSize;\n    margin-left: 0.25rem;\n    margin-right: -0.25rem;\n  }\n\n  &--typeDone {\n    @extend %icon-border-face;\n\n    border-color: $vbBaseColor3;\n    color: $vbBurntColor;\n\n    &__dropdownIcon {\n      fill: $vbBurntColor;\n    }\n\n    &:hover {\n      background-color: $vbColorsS02;\n    }\n  }\n\n  &--typeSuccess {\n    @extend %icon-border-face;\n\n    border-color: $vbPrimaryColor;\n    color: $vbPrimaryColor;\n\n    &__dropdownIcon {\n      fill: $vbPrimaryColor;\n    }\n\n    &:hover {\n      background-color: $vbColorsP02;\n    }\n  }\n\n  &--typeProgress {\n    @extend %icon-border-face;\n\n    border-color: $vbNoticeColor;\n    // 文字色のコントラスト比を上げるため、 $vbNoticeColorより濃い色を使用する\n    color: $vbColorsYE10;\n\n    &__dropdownIcon {\n      fill: $vbColorsYE10;\n    }\n\n    &:hover {\n      background-color: $vbColorsYE02;\n    }\n  }\n\n  &--typeRequired {\n    @extend %icon-border-face;\n\n    border-color: $vbAlertColor;\n    color: $vbAlertColor;\n\n    &__dropdownIcon {\n      fill: $vbAlertColor;\n    }\n\n    &:hover {\n      background-color: $vbColorsRE02;\n    }\n  }\n\n  &--typeDisabled {\n    @extend %icon-fill-face;\n\n    background-color: $vbBurntColor;\n    border-width: 0;\n\n    &__dropdownIcon {\n      fill: #fff;\n    }\n\n    &:hover {\n      background-color: darken($vbBurntColor, 12%);\n    }\n  }\n\n  &--typeEmphasis {\n    @extend %icon-fill-face;\n\n    background-color: $vbPrimaryColor;\n    border-width: 0;\n\n    &__dropdownIcon {\n      fill: #fff;\n    }\n\n    &:hover {\n      background-color: darken($vbPrimaryColor, 12%);\n    }\n  }\n\n  &--typeWarning {\n    @extend %icon-fill-face;\n\n    // 文字色のコントラスト比を上げるため、 $vbNoticeColorより濃い色を使用する\n    background-color: $vbColorsYE10;\n    border-width: 0;\n\n    &__dropdownIcon {\n      fill: #fff;\n    }\n\n    &:hover {\n      background-color: darken($vbColorsYE10, 12%);\n    }\n  }\n\n  &--typeError {\n    @extend %icon-fill-face;\n\n    background-color: $vbAlertColor;\n    border-width: 0;\n\n    &__dropdownIcon {\n      fill: #fff;\n    }\n\n    &:hover {\n      background-color: darken($vbAlertColor, 12%);\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/stepper.scss",
    "content": ".vb-stepper {\n  display: flex;\n  flex-wrap: nowrap;\n  justify-content: center;\n  padding: 0;\n  gap: 2rem;\n  $block: &;\n\n  &__listItem {\n    list-style-type: none;\n    width: 4rem;\n    position: relative;\n\n    &:not(:last-child)::after {\n      content: '';\n      width: 3rem;\n      height: 0.25rem;\n      background-color: $vbColorsS09;\n      display: block;\n      position: absolute;\n      left: calc(100% - 0.5rem);\n      top: 1.5rem;\n    }\n  }\n\n  &__listContent {\n    position: relative;\n    z-index: 1;\n    text-align: center;\n  }\n\n  &--small {\n    gap: 1.5rem;\n\n    #{$block}__listItem {\n      width: 3rem;\n\n      &:not(:last-child)::after {\n        width: 2.5rem;\n        top: 1rem;\n      }\n    }\n  }\n}\n\n.vb-verticalSteps {\n  &__number {\n    // StepNumberが入る要素。__titleのほうにVisuallyHiddenで数字を書いているので、コピペ時に数字がダブらないように user-select: none にしてある\n    user-select: none;\n  }\n\n  &__step {\n    display: grid;\n    grid-template-columns: 3rem 1fr;\n    column-gap: 0.5rem;\n    row-gap: 0;\n\n    &:not(:last-child)::after {\n      content: '';\n      background: $vbColorsS09;\n      grid-column: 1 / 2;\n      grid-row: 2 / 3;\n      width: 0.25rem;\n      margin: 0 auto;\n    }\n  }\n\n  &__title {\n    grid-column: 2 / 3;\n    font: $vbHeadlineFont2;\n    color: $vbBlackColor;\n    margin: 0;\n    padding: 0;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n\n    &--future {\n      color: $vbBurntColor;\n      font-weight: normal;\n    }\n  }\n\n  &__content {\n    grid-column: 2 / 3;\n    grid-row: 2 / 3;\n    padding: 0 0 1.5rem;\n  }\n\n  &__actions {\n    margin: 1rem 0 0 0;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/tabbar.scss",
    "content": ".vb-tabBar {\n  border-bottom: 1px solid $vbBaseColor2;\n  padding: 0 $vbLargeSize;\n  background: #fff;\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n\n  &__buttonGroup {\n    margin-left: $vbBasicSize;\n\n    button {\n      margin-left: $vbSmallSize;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/tagBox.scss",
    "content": "@use 'sass:math';\n\n.vb-tagBox {\n  display: inline-block;\n  background-color: #fff;\n  box-sizing: border-box;\n  padding: 0 $vbSmallSize;\n  border: $vbMinimum solid $vbBaseColor3;\n  border-radius: $vbFullBorderRadius;\n  height: $vbLargeSize;\n  line-height: $vbLargeSize;\n  font-size: $vbLargeSize;\n\n  &--removable {\n    padding-right: $vbXSmallSize;\n  }\n\n  &--maxWidthSmall {\n    max-width: 10rem;\n  }\n\n  &--maxWidthMedium {\n    max-width: 20rem;\n  }\n\n  &--maxWidthLarge {\n    max-width: 30rem;\n  }\n\n  &--success {\n    border-color: $vbPrimaryColor;\n  }\n\n  &--error {\n    border-color: $vbAlertColor;\n  }\n\n  &--RE {\n    background-color: $vbColorsRE02;\n    border-color: $vbColorsRE02;\n  }\n\n  &--OR {\n    background-color: $vbColorsOR02;\n    border-color: $vbColorsOR02;\n  }\n\n  &--YE {\n    background-color: $vbColorsYE02;\n    border-color: $vbColorsYE02;\n  }\n\n  &--YG {\n    background-color: $vbColorsYG02;\n    border-color: $vbColorsYG02;\n  }\n\n  &--GR {\n    background-color: $vbColorsGR02;\n    border-color: $vbColorsGR02;\n  }\n\n  &--BG {\n    background-color: $vbColorsBG02;\n    border-color: $vbColorsBG02;\n  }\n\n  &--PU {\n    background-color: $vbColorsPU02;\n    border-color: $vbColorsPU02;\n  }\n\n  &--GY {\n    background-color: $vbColorsGY02;\n    border-color: $vbColorsGY02;\n  }\n\n  &__inner {\n    display: flex;\n    align-items: center;\n    margin-top: -$vbMinimum;\n    height: $vbLargeSize;\n  }\n\n  &__type {\n    display: inline-block;\n    font-size: $vbCaptionFontSize;\n    color: $vbBurntColor;\n    margin-right: $vbSmallSize;\n    white-space: nowrap;\n\n    &--RE {\n      color: $vbColorsRE10;\n    }\n\n    &--OR {\n      color: $vbColorsOR10;\n    }\n\n    &--YE {\n      color: $vbColorsYE10;\n    }\n\n    &--YG {\n      color: $vbColorsYG10;\n    }\n\n    &--GR {\n      color: $vbColorsGR10;\n    }\n\n    &--BG {\n      color: $vbColorsBG10;\n    }\n\n    &--PU {\n      color: $vbColorsPU10;\n    }\n\n    &--GY {\n      color: $vbColorsGY10;\n    }\n  }\n\n  &__body {\n    font-size: $vbNormalFontSize;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n\n    &--success {\n      color: $vbPrimaryColor;\n    }\n\n    &--error {\n      color: $vbAlertColor;\n    }\n\n    &--RE {\n      color: $vbColorsRE10;\n    }\n\n    &--OR {\n      color: $vbColorsOR10;\n    }\n\n    &--YE {\n      color: $vbColorsYE10;\n    }\n\n    &--YG {\n      color: $vbColorsYG10;\n    }\n\n    &--GR {\n      color: $vbColorsGR10;\n    }\n\n    &--BG {\n      color: $vbColorsBG10;\n    }\n\n    &--PU {\n      color: $vbColorsPU10;\n    }\n\n    &--GY {\n      color: $vbColorsGY10;\n    }\n  }\n\n  &__removeButton {\n    font-size: 0;\n    color: $vbBaseColor3;\n    margin-left: $vbSmallSize;\n    height: $vbLargeSize;\n    width: $vbLargeSize;\n    display: flex;\n    flex-shrink: 0;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    transition-duration: 0.2s;\n    transition-property: color;\n\n    &:hover {\n      color: darken($vbBaseColor3, 12%);\n    }\n\n    &--disabled {\n      opacity: 0.5;\n      cursor: not-allowed;\n      pointer-events: none;\n\n      &:hover {\n        cursor: not-allowed;\n      }\n    }\n\n    &--RE {\n      color: $vbColorsRE10;\n    }\n\n    &--OR {\n      color: $vbColorsOR10;\n    }\n\n    &--YE {\n      color: $vbColorsYE10;\n    }\n\n    &--YG {\n      color: $vbColorsYG10;\n    }\n\n    &--GR {\n      color: $vbColorsGR10;\n    }\n\n    &--BG {\n      color: $vbColorsBG10;\n    }\n\n    &--PU {\n      color: $vbColorsPU10;\n    }\n\n    &--GY {\n      color: $vbColorsGY10;\n    }\n  }\n\n  &__removeIcon {\n    // アイコンの縦横サイズ指定\n    font-size: $vbBasicSize;\n    vertical-align: middle;\n  }\n}\n\n.vb-miniTag {\n  display: inline-block;\n  height: 1.25rem;\n  max-width: 100%;\n  box-sizing: border-box;\n  padding: 0 $vbXSmallSize;\n  position: relative;\n  border-radius: $vbMiniPaddingBorderRadius;\n  font-size: $vbNormalFontSize;\n  font-family: $vbFontFamily;\n\n  &--RE {\n    background-color: $vbColorsRE02;\n    color: $vbColorsRE10;\n  }\n\n  &--OR {\n    background-color: $vbColorsOR02;\n    color: $vbColorsOR10;\n  }\n\n  &--YE {\n    background-color: $vbColorsYE02;\n    color: $vbColorsYE10;\n  }\n\n  &--YG {\n    background-color: $vbColorsYG02;\n    color: $vbColorsYG10;\n  }\n\n  &--GR {\n    background-color: $vbColorsGR02;\n    color: $vbColorsGR10;\n  }\n\n  &--BG {\n    background-color: $vbColorsBG02;\n    color: $vbColorsBG10;\n  }\n\n  &--PU {\n    background-color: $vbColorsPU02;\n    color: $vbColorsPU10;\n  }\n\n  &--GY {\n    background-color: $vbColorsGY02;\n    color: $vbColorsGY10;\n  }\n\n  &__inner {\n    display: flex;\n    align-items: center;\n    height: 1.25rem;\n  }\n\n  &__body {\n    line-height: 1;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  &__removeButton {\n    width: $vbBasicSize;\n    height: $vbBasicSize;\n    position: relative;\n    cursor: pointer;\n    border: 0;\n    background-color: transparent;\n    padding: 0;\n    flex-shrink: 0;\n    margin-left: $vbXSmallSize;\n\n    &::before {\n      content: '';\n      position: absolute;\n      width: $vbLargeSize;\n      height: $vbLargeSize;\n      top: math.div($vbBasicSize - $vbLargeSize, 2);\n      right: -$vbXSmallSize;\n    }\n\n    &--disabled {\n      opacity: 0.5;\n      cursor: not-allowed;\n      pointer-events: none;\n\n      &:hover {\n        cursor: not-allowed;\n      }\n    }\n\n    &--RE {\n      color: $vbColorsRE10;\n    }\n\n    &--OR {\n      color: $vbColorsOR10;\n    }\n\n    &--YE {\n      color: $vbColorsYE10;\n    }\n\n    &--YG {\n      color: $vbColorsYG10;\n    }\n\n    &--GR {\n      color: $vbColorsGR10;\n    }\n\n    &--BG {\n      color: $vbColorsBG10;\n    }\n\n    &--PU {\n      color: $vbColorsPU10;\n    }\n\n    &--GY {\n      color: $vbColorsGY10;\n    }\n  }\n\n  &__removeIcon {\n    width: $vbBasicSize;\n    height: $vbBasicSize;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/withAccordionContent.scss",
    "content": ".vb-withAccordionContent {\n  display: inline-block;\n}\n"
  },
  {
    "path": "stylesheets/lv2/withBalloon.scss",
    "content": ".vb-withBalloon {\n  display: inline-block;\n\n  &__contentWrapper {\n    pointer-events: auto;\n  }\n\n  &__balloonWrapper {\n    &--hidden {\n      width: 1px;\n      height: 1px;\n      overflow: hidden;\n      position: absolute;\n      clip: rect(1px 1px 1px 1px);\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/withFilterableDropdown.scss",
    "content": ".vb-withFilterableDropdown {\n  &__popup {\n    min-width: 11rem;\n    padding: 1rem 1rem 0 1rem;\n  }\n\n  &__note {\n    padding-bottom: 1rem;\n  }\n\n  &__footer {\n    border-top: 1px solid $vbBaseColor2;\n    margin: 0 -1rem;\n    padding: 1rem;\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/withPopup.scss",
    "content": ".vb-withPopup {\n  display: inline-block;\n\n  &__contentWrapper {\n    display: block;\n  }\n\n  &__popupWrapper {\n    position: relative;\n    transition-property: opacity;\n    transition-duration: 0.3s;\n  }\n\n  &__popup {\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    &--rightAligned {\n      left: auto;\n      right: 0;\n    }\n  }\n\n  &__animation {\n    &-enter {\n      opacity: 0;\n    }\n\n    &-enter-active {\n      opacity: 1;\n    }\n\n    &-exit {\n      opacity: 0;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/lv2/withTOC.scss",
    "content": ".vb-withTOC {\n  display: flex;\n  gap: 0 1rem;\n\n  &__toc {\n    flex-grow: 0;\n    flex-shrink: 0;\n    width: 11rem;\n\n    &__container {\n      position: sticky;\n      top: 0;\n      overflow-y: auto;\n      max-height: 100vh;\n      margin: -1rem 0 0;\n      padding: 0;\n      list-style: none;\n    }\n\n    &__link {\n      display: block;\n      margin: 1rem 0;\n      padding: 0.25rem 1rem;\n      text-decoration: none;\n      font: $vbHeadlineFont2;\n      color: $vbBlackColor;\n      border-radius: $vbMiniPaddingBorderRadius;\n      cursor: pointer;\n\n      &:hover {\n        background-color: $vbColorsS01;\n      }\n\n      &--current {\n        background-color: $vbColorsP01;\n        color: $vbColorsP05;\n\n        &:hover {\n          background-color: $vbColorsP01;\n        }\n      }\n    }\n  }\n\n  &__contents {\n    flex-grow: 1;\n\n    &__section {\n      // Preventing child margins to pierce through which may confuse scrolling spy.\n      overflow-y: hidden;\n      outline: none;\n    }\n  }\n}\n"
  },
  {
    "path": "stylesheets/vibes_2021.scss",
    "content": "@import './lv0/colors';\n@import './lv0/size';\n@import './lv0/fonts';\n@import './lv0/focus';\n@import './lv1';\n@import './lv2';\n"
  },
  {
    "path": "tsconfig.build.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"typeRoots\": [\"node_modules/@types\", \"src/@types\"],\n    \"removeComments\": false,\n    \"declaration\": true\n  },\n  \"include\": [\"src/**/*\"],\n  \"exclude\": [\"src/**/*.stories.tsx\"]\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"extends\": \"./node_modules/tsconfig-freee/tsconfig\",\n  \"compilerOptions\": {\n    \"resolveJsonModule\": true\n  }\n}\n"
  },
  {
    "path": "utilities.js.flow",
    "content": "// @flow\n\nimport * as React from 'react';\n\ntype MarginSize =\n  | 0.25\n  | 0.5\n  | 1\n  | 1.5\n  | 2\n  | 3\n  | -0.25\n  | -0.5\n  | -1\n  | -1.5\n  | -2\n  | -3\n  | 'auto';\n\ntype CommonProps = {|\n  'data-guide'?: string,\n  'data-test'?: string,\n  'data-tracking'?: string,\n  'data-masking'?: boolean,\n  ma?: MarginSize,\n  mt?: MarginSize,\n  mb?: MarginSize,\n  ml?: MarginSize,\n  mr?: MarginSize,\n|};\n\ntype VibesContextValue = {|\n  responsive: boolean,\n|};\n\ntype getFocusableElements = (el: HTMLElement) => NodeList<Element>;\ntype isFocusableElement = (el: HTMLElement) => boolean;\n\ndeclare module.exports: {\n  CommonProps: CommonProps,\n  convertRemToPixel: (rem: number) => number,\n  pickCommonProps: (props: CommonProps) => CommonProps,\n  VibesContext: React.Context<VibesContextValue>,\n  useResponsive: (responsiveProp?: boolean) => boolean,\n  VibesProvider: ({\n    children: React.Node,\n    fixedLayout?: boolean,\n    portalParent?: HTMLElement,\n    portalParentRef?: React.Ref<HTMLElement>,\n    lang?: 'ja' | 'en',\n  }) => React.Node,\n  getFocusableElements: getFocusableElements,\n  isFocusableElement: isFocusableElement,\n};\n"
  },
  {
    "path": "vibes_2021.css",
    "content": "@charset \"UTF-8\";\n@font-face {\n  font-family: \"freee-logo\";\n  font-style: normal;\n  src: local(\"Noto Sans CJK JP Medium\"), url(//fonts.gstatic.com/ea/notosansjp/v5/NotoSansJP-Medium.woff2) format(\"woff2\"), url(//fonts.gstatic.com/ea/notosansjp/v5/NotoSansJP-Medium.woff) format(\"woff\"), url(//fonts.gstatic.com/ea/notosansjp/v5/NotoSansJP-Medium.otf) format(\"opentype\");\n}\n.vb-loading--block {\n  position: relative;\n}\n.vb-loading--inline {\n  display: inline-block;\n}\n.vb-loading__fade-enter, .vb-loading__fade-exit {\n  opacity: 0;\n  transition: opacity 0.3s ease;\n}\n.vb-loading__fade-enter-active, .vb-loading__fade-enter-done {\n  opacity: 1;\n  transition: opacity 0.3s ease;\n}\n.vb-loading__cover {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background-color: rgba(255, 255, 255, 0.7);\n  z-index: 100;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n}\n.vb-loading__cover--coverAll {\n  position: fixed;\n  z-index: 2147483647;\n}\n.vb-loading__animation {\n  position: relative;\n  width: 3rem;\n  height: 3rem;\n  max-width: 100%;\n  max-height: 100%;\n}\n.vb-loading__animation--coverAll {\n  width: 31.5rem;\n  height: 10.5rem;\n  max-width: 80vw;\n}\n.vb-loading__message {\n  font: normal 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  color: #323232;\n  margin-top: 1.5rem;\n}\n\n/** @define base */\n.vb-cardBase, .vb-dialogBase, .vb-popupBase, .vb-scrimBase, .vb-floatingBase, .vb-columnBase {\n  box-sizing: border-box;\n  padding: 1.5rem;\n  background-color: #f7f5f5;\n}\n\n.vb-marginBase--fitContent {\n  max-width: fit-content;\n}\n\n.vb-columnBase--overflowHidden {\n  overflow: hidden;\n}\n.vb-columnBase--rounded {\n  border-radius: 0.5rem;\n}\n\n.vb-floatingBase {\n  background-color: #fff;\n  box-shadow: 0 0 1.5rem rgba(0, 0, 0, 0.1), 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2);\n  z-index: 500;\n  position: relative;\n  border-radius: 1rem;\n  overflow: hidden;\n}\n.vb-floatingBase--fitContent {\n  max-width: fit-content;\n}\n\n.vb-scrimBase {\n  background-color: rgba(0, 0, 0, 0.5);\n  color: #fff;\n  z-index: 999;\n}\n.vb-scrimBase--small {\n  padding: 1rem;\n}\n\n.vb-popupBase {\n  background-color: #fff;\n  box-shadow: 0 0 2rem rgba(0, 0, 0, 0.1), 0 0.375rem 0.75rem rgba(0, 0, 0, 0.2);\n  z-index: 2000;\n  position: relative;\n  border-radius: 1rem;\n  overflow: hidden;\n}\n.vb-popupBase--fitContent {\n  max-width: fit-content;\n}\n\n.vb-dialogBase {\n  background-color: #fff;\n  z-index: 1000;\n  position: relative;\n  border-radius: 1.5rem;\n  overflow: hidden;\n}\n.vb-dialogBase--message {\n  z-index: 1500;\n}\n\n.vb-cardBase {\n  background-color: #fff;\n  box-shadow: 0 0 1rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2);\n  position: relative;\n  border-radius: 0.75rem;\n}\n.vb-cardBase--overflowHidden {\n  overflow: hidden;\n}\n.vb-cardBase:not(.vb-cardBase--disabled) .vb-cardBase--clickable {\n  border-radius: 0.75rem;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n}\n.vb-cardBase:not(.vb-cardBase--disabled) .vb-cardBase--clickable:hover {\n  background-color: #f2f5fc;\n}\n.vb-cardBase--disabled {\n  background-color: #f0eded;\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n.vb-cardBase__link, .vb-cardBase__button {\n  text-decoration: none;\n  color: #323232;\n  display: block;\n  text-align: left;\n  border: 0;\n  background-color: transparent;\n  font-size: 100%;\n  padding: 0;\n  font-family: inherit;\n  cursor: pointer;\n}\n.vb-cardBase__link::after, .vb-cardBase__button::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  border-radius: 0.75rem;\n}\n.vb-cardBase__link:hover::after, .vb-cardBase__button:hover::after {\n  background-color: #ebf3ff;\n  mix-blend-mode: multiply;\n}\n.vb-cardBase__link--disabled, .vb-cardBase__button--disabled {\n  cursor: not-allowed;\n}\n.vb-cardBase__content {\n  position: relative;\n}\n\n.vb-zebraBase {\n  padding: 1.5rem;\n  background-color: #f7f5f5;\n}\n\n.vb-columnBase--borderDefault,\n.vb-floatingBase--borderDefault,\n.vb-popupBase--borderDefault,\n.vb-dialogBase--borderDefault {\n  border: 1px solid #e9e7e7;\n  background-color: #fff;\n}\n.vb-columnBase--borderAlert,\n.vb-floatingBase--borderAlert,\n.vb-popupBase--borderAlert,\n.vb-dialogBase--borderAlert {\n  border: 1px solid #dc1e32;\n  background-color: #fff;\n}\n.vb-columnBase--borderNotice,\n.vb-floatingBase--borderNotice,\n.vb-popupBase--borderNotice,\n.vb-dialogBase--borderNotice {\n  border: 1px solid #be8c14;\n  background-color: #fff;\n}\n.vb-columnBase--borderSuccess,\n.vb-floatingBase--borderSuccess,\n.vb-popupBase--borderSuccess,\n.vb-dialogBase--borderSuccess {\n  border: 1px solid #285ac8;\n  background-color: #fff;\n}\n\n.vb-columnBase--inline,\n.vb-popupBase--inline,\n.vb-floatingBase--inline,\n.vb-dialogBase--inline,\n.vb-cardBase--inline {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.vb-columnBase--paddingSmall,\n.vb-popupBase--paddingSmall,\n.vb-floatingBase--paddingSmall,\n.vb-dialogBase--paddingSmall,\n.vb-zebraBase--paddingSmall,\n.vb-cardBase--paddingSmall {\n  padding: 1rem;\n}\n.vb-columnBase--paddingLarge,\n.vb-popupBase--paddingLarge,\n.vb-floatingBase--paddingLarge,\n.vb-dialogBase--paddingLarge,\n.vb-zebraBase--paddingLarge,\n.vb-cardBase--paddingLarge {\n  padding: 2rem;\n}\n.vb-columnBase--paddingZero,\n.vb-popupBase--paddingZero,\n.vb-floatingBase--paddingZero,\n.vb-dialogBase--paddingZero,\n.vb-zebraBase--paddingZero,\n.vb-cardBase--paddingZero {\n  padding: 0;\n}\n\n@media (max-width: 48rem) {\n  .vb-columnBase--paddingResponsive,\n.vb-zebraBase--paddingResponsive,\n.vb-cardBase--paddingResponsive {\n    padding: 1.5rem 1rem;\n  }\n}\n\n.vb-zebraBase:nth-child(even) {\n  background-color: #fff;\n}\n\n.vb-balloon::after {\n  content: \"\";\n  display: block;\n  border-top: 0.5rem solid #f7f5f5;\n  border-left: 0.314rem solid transparent;\n  border-right: 0.314rem solid transparent;\n  position: absolute;\n  bottom: -0.5rem;\n  transform: translateX(-50%);\n}\n\n.vb-balloon::before {\n  content: \"\";\n  display: block;\n  border-top: 0.6rem solid #e9e7e7;\n  border-left: 0.414rem solid transparent;\n  border-right: 0.414rem solid transparent;\n  position: absolute;\n  bottom: -0.6rem;\n  transform: translateX(-50%);\n}\n\n.vb-balloon {\n  box-sizing: border-box;\n  width: max-content;\n  min-width: 13rem;\n  min-width: min(13rem, 66vw);\n  max-width: 44rem;\n  max-width: min(44rem, calc(100vw - 5rem), 66vw);\n  padding: 1rem;\n  background-color: #f7f5f5;\n  box-shadow: 0 0 2rem rgba(0, 0, 0, 0.1), 0 0.375rem 0.75rem rgba(0, 0, 0, 0.2);\n  position: absolute;\n  left: 50%;\n  bottom: calc(100% + 0.5rem);\n  transform: translateX(-50%);\n  font-size: 0.75rem;\n  z-index: 3000;\n}\n.vb-balloon::after {\n  left: 50%;\n  transform: translateX(-50%);\n}\n.vb-balloon::before {\n  left: 50%;\n  transform: translateX(-50%);\n}\n.vb-balloon--left {\n  transform: none;\n  left: calc(-50% + 0.414rem + 1px);\n}\n.vb-balloon--left::before, .vb-balloon--left::after {\n  left: calc(1rem - 1px);\n  transform: translateX(-50%);\n}\n.vb-balloon--right {\n  transform: none;\n  left: auto;\n  right: calc(-50% + 0.414rem + 1px);\n}\n.vb-balloon--right::before, .vb-balloon--right::after {\n  left: auto;\n  right: calc(1rem - 1px);\n  transform: translateX(50%);\n}\n.vb-balloon--bottom {\n  bottom: auto;\n  top: 0.5rem;\n}\n.vb-balloon--bottom::after {\n  border-top: 0;\n  border-bottom: 0.5rem solid #f7f5f5;\n  bottom: auto;\n  top: -0.5rem;\n}\n.vb-balloon--bottom::before {\n  border-top: 0;\n  border-bottom: 0.6rem solid #e9e7e7;\n  bottom: auto;\n  top: -0.6rem;\n}\n.vb-balloon--border-default {\n  border: 1px solid #e9e7e7;\n  background-color: #fff;\n}\n.vb-balloon--border-default::after {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.vb-balloon--border-alert {\n  border: 1px solid #dc1e32;\n  background-color: #fff;\n}\n.vb-balloon--border-alert::after {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.vb-balloon--border-alert::before {\n  border-top-color: #dc1e32;\n  border-bottom-color: #dc1e32;\n}\n.vb-balloon--border-notice {\n  border: 1px solid #be8c14;\n  background-color: #fff;\n}\n.vb-balloon--border-notice::after {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.vb-balloon--border-notice::before {\n  border-top-color: #be8c14;\n  border-bottom-color: #be8c14;\n}\n.vb-balloon--border-success {\n  border: 1px solid #285ac8;\n  background-color: #fff;\n}\n.vb-balloon--border-success::after {\n  border-top-color: #fff;\n  border-bottom-color: #fff;\n}\n.vb-balloon--border-success::before {\n  border-top-color: #285ac8;\n  border-bottom-color: #285ac8;\n}\n\n.vb-container {\n  display: block;\n  width: calc(100vw - 3rem);\n  margin: 0 auto;\n  position: relative;\n  box-sizing: border-box;\n  max-width: 70rem;\n  min-width: 70rem;\n}\n.vb-container--widthWide {\n  max-width: 100rem;\n}\n.vb-container--widthNarrow {\n  max-width: 40rem;\n  min-width: 40rem;\n}\n.vb-container--responsive {\n  min-width: 20rem;\n}\n@media (max-width: 48rem) {\n  .vb-container--responsive {\n    width: 100vw;\n  }\n}\n\n.vb-contentsBase {\n  display: block;\n  background-color: #fff;\n  padding: 1.5rem;\n  position: relative;\n  box-sizing: border-box;\n}\n.vb-contentsBase--padding-small {\n  padding: 1rem;\n}\n.vb-contentsBase--padding-large {\n  padding: 2rem;\n}\n@media (max-width: 48rem) {\n  .vb-contentsBase--responsive {\n    padding: 1rem;\n  }\n}\n.vb-contentsBase--responsive + .vb-contentsBase--responsive {\n  margin-top: 1.5rem;\n}\n@media (max-width: 48rem) {\n  .vb-contentsBase--responsive + .vb-contentsBase--responsive {\n    margin-top: 0;\n    border-top: 1px solid #e9e7e7;\n  }\n}\n\n.vb-negativeContentsBase {\n  margin-left: -1.5rem;\n  margin-right: -1.5rem;\n}\n.vb-negativeContentsBase:last-child {\n  margin-bottom: -1.5rem;\n}\n.vb-negativeContentsBase--negativeMarginSmall {\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n.vb-negativeContentsBase--negativeMarginSmall:last-child {\n  margin-bottom: -1.5rem;\n}\n.vb-negativeContentsBase--negativeMarginLarge {\n  margin-left: -2rem;\n  margin-right: -2rem;\n}\n.vb-negativeContentsBase--negativeMarginLarge:last-child {\n  margin-bottom: -2rem;\n}\n@media (max-width: 48rem) {\n  .vb-negativeContentsBase--responsive {\n    margin-left: -1rem;\n    margin-right: -1rem;\n  }\n  .vb-negativeContentsBase--responsive:last-child {\n    margin-bottom: -1rem;\n  }\n}\n\n.vb-negativeMargin--small--top {\n  margin-top: -1rem;\n}\n.vb-negativeMargin--small--left {\n  margin-left: -1rem;\n}\n.vb-negativeMargin--small--right {\n  margin-right: -1rem;\n}\n.vb-negativeMargin--small--bottom {\n  margin-bottom: -1rem;\n}\n.vb-negativeMargin--medium--top {\n  margin-top: -1.5rem;\n}\n.vb-negativeMargin--medium--left {\n  margin-left: -1.5rem;\n}\n.vb-negativeMargin--medium--right {\n  margin-right: -1.5rem;\n}\n.vb-negativeMargin--medium--bottom {\n  margin-bottom: -1.5rem;\n}\n.vb-negativeMargin--large--top {\n  margin-top: -2rem;\n}\n.vb-negativeMargin--large--left {\n  margin-left: -2rem;\n}\n.vb-negativeMargin--large--right {\n  margin-right: -2rem;\n}\n.vb-negativeMargin--large--bottom {\n  margin-bottom: -2rem;\n}\n\n.vb-scrollableBase--scrollableY {\n  overflow-y: auto;\n}\n.vb-scrollableBase--scrollableX {\n  overflow-x: auto;\n}\n\n.vb-listButtonSelector__button--disabled, .vb-dropdownItem--disabled, .vb-iconOnlyButton--disabled, .vb-pagerButton--disabled, .vb-button--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n.vb-listButtonSelector__button--disabled:hover, .vb-dropdownItem--disabled:hover, .vb-iconOnlyButton--disabled:hover, .vb-pagerButton--disabled:hover, .vb-button--disabled:hover {\n  cursor: not-allowed;\n}\n\n.vb-listButton, .vb-tabButton, .vb-button {\n  display: inline-block;\n  margin: 0;\n  padding: 0 1rem;\n  text-align: center;\n  text-decoration: none;\n  box-sizing: border-box;\n  border-radius: 0.5rem;\n  border: 0;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color, box-shadow, border-color;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  font-size: 0.875rem;\n  height: 2.25rem;\n  vertical-align: middle;\n  white-space: nowrap;\n  line-height: calc(2.25rem - 2px);\n}\n.vb-listButton:hover, .vb-tabButton:hover, .vb-button:hover {\n  text-decoration: none;\n}\n.vb-listButton:focus, .vb-tabButton:focus, .vb-button:focus {\n  outline: none;\n  box-shadow: 0 0 0 1px #fff, 0 0 0 3px #2864f0, 0 0 0 4px #fff;\n}\n\n.vb-button--small {\n  height: 1.5rem;\n  padding: 0 0.5rem;\n  font-size: 0.75rem;\n  line-height: calc(1.5rem - 2px);\n}\n\n.vb-button--large {\n  height: 3rem;\n  padding: 0 1rem;\n  font-size: 1rem;\n  line-height: calc(3rem - 2px);\n}\n\n.vb-iconOnlyButton--appearanceSecondary, .vb-pagerButton, .vb-button--appearanceSecondary {\n  background-color: #fff;\n  color: #323232;\n  border: 1px solid #dcdcdc;\n  font-weight: bold;\n}\n.vb-iconOnlyButton--appearanceSecondary:hover, .vb-pagerButton:hover, .vb-button--appearanceSecondary:hover {\n  color: #1e46aa;\n  background-color: #dce8ff;\n  border-color: #1e46aa;\n}\n\n.vb-tabButton {\n  background-color: #f0eded;\n  color: #323232;\n  font-weight: normal;\n}\n.vb-tabButton:hover {\n  background-color: #dbd4d4;\n}\n\n.vb-iconOnlyButton--appearancePrimary, .vb-button--appearancePrimary {\n  border: 0;\n  background-color: #285ac8;\n  color: #fff;\n  font-weight: bold;\n}\n.vb-iconOnlyButton--appearancePrimary:hover, .vb-button--appearancePrimary:hover {\n  background-color: #23418c;\n}\n.vb-iconOnlyButton--appearancePrimary:hover, .vb-button--appearancePrimary:hover, .vb-iconOnlyButton--appearancePrimary:focus, .vb-button--appearancePrimary:focus {\n  color: #fff;\n}\n\n.vb-iconOnlyButton--appearancePrimary.vb-iconOnlyButton--danger, .vb-button--appearancePrimary.vb-button--danger {\n  border: 0;\n  background-color: #dc1e32;\n  color: #fff;\n  font-weight: bold;\n}\n.vb-iconOnlyButton--appearancePrimary.vb-iconOnlyButton--danger:hover, .vb-button--appearancePrimary.vb-button--danger:hover {\n  background-color: #a51428;\n}\n\n.vb-pagerButton.vb-pagerButton--current, .vb-tabButton.vb-tabButton--current {\n  border: 0;\n  background-color: #285ac8;\n  color: #fff;\n  font-weight: bold;\n  cursor: default;\n}\n.vb-pagerButton.vb-pagerButton--current:hover, .vb-tabButton.vb-tabButton--current:hover {\n  background-color: #285ac8;\n}\n\n.vb-button__icon {\n  width: 1.5em;\n  height: 1.5em;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n}\n\n/** @define button */\n.vb-button--leftIcon {\n  padding-left: 2.75em;\n  position: relative;\n  text-align: left;\n}\n.vb-button--rightIcon {\n  padding-right: 2.75em;\n  position: relative;\n  text-align: left;\n}\n.vb-button__icon--left {\n  left: 0.625em;\n}\n.vb-button__icon--right {\n  right: 0.625em;\n}\n.vb-button--appearanceSecondary.vb-button--danger {\n  color: #dc1e32;\n}\n.vb-button--appearanceSecondary.vb-button--danger:hover {\n  border-color: #a51428;\n  color: #a51428;\n  background-color: #fad2d7;\n}\n\n.vb-button--widthFull {\n  width: 100%;\n}\n.vb-button--hasMinWidth {\n  min-width: 6rem;\n}\n.vb-button.vb-button--hasMinWidth.vb-button--small {\n  min-width: 5rem;\n}\n.vb-button.vb-button--hasMinWidth.vb-button--large {\n  min-width: 11rem;\n}\n.vb-button--appearanceTertiary {\n  min-width: auto;\n  background-color: transparent;\n  color: #323232;\n  font-weight: bold;\n  border: 1px solid transparent;\n}\n.vb-button--appearanceTertiary:hover {\n  color: #1e46aa;\n  background-color: rgba(138, 178, 255, 0.3);\n}\n.vb-button--appearanceTertiary.vb-button:not(.vb-button--leftIcon) {\n  padding-left: 0.5rem;\n}\n\n.vb-button--appearanceTertiary.vb-button:not(.vb-button--rightIcon) {\n  padding-right: 0.5rem;\n}\n\n.vb-button--appearanceTertiary.vb-button--danger {\n  color: #dc1e32;\n}\n.vb-button--appearanceTertiary.vb-button--danger:hover {\n  color: #a51428;\n  background-color: rgba(238, 105, 122, 0.3);\n}\n\n/** @define textButton */\n.vb-textButton {\n  display: inline-block;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n.vb-textButton .vb-textButton__icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  margin-right: 0.25rem;\n  fill: #323232;\n  vertical-align: middle;\n}\n.vb-textButton .vb-textButton__icon--right {\n  margin-right: 0;\n  margin-left: 0.25rem;\n}\n.vb-textButton__link {\n  text-decoration: underline;\n  color: #285ac8;\n  font-weight: bold;\n  vertical-align: middle;\n  transition-duration: 0.2s;\n  transition-property: color;\n}\n.vb-textButton__button {\n  text-decoration: underline;\n  color: #285ac8;\n  font-weight: bold;\n  vertical-align: middle;\n  transition-duration: 0.2s;\n  transition-property: color;\n}\n.vb-textButton--noBorder .vb-textButton__link, .vb-textButton--noBorder .vb-textButton__button {\n  text-decoration: none;\n}\n.vb-textButton:not(.vb-textButton--disabled) .vb-textButton__link:hover, .vb-textButton:not(.vb-textButton--disabled) .vb-textButton__button:hover {\n  color: #73a5ff;\n  cursor: pointer;\n}\n.vb-textButton--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n.vb-textButton--small {\n  font-size: 0.75rem;\n}\n\n.vb-globalNaviButton {\n  font-weight: bold;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  text-decoration: none;\n  color: #fff;\n  display: block;\n  padding: 1rem;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  box-sizing: border-box;\n  color: #323232;\n  padding: 0 1rem;\n  height: calc(3rem - 1px);\n  line-height: calc(2.75rem - 1px);\n}\n.vb-globalNaviButton__icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  margin-right: 0.375em;\n  vertical-align: middle;\n}\n.vb-globalNaviButton .vb-globalNaviButton__text {\n  vertical-align: middle;\n}\n.vb-globalNaviButton:not(.vb-globalNaviButton--current):hover {\n  background-color: rgba(255, 255, 255, 0.1);\n  background-color: #ebf3ff;\n  color: #285ac8;\n}\n.vb-globalNaviButton--current {\n  background-color: rgba(0, 0, 0, 0.15);\n  color: #285ac8;\n  background-color: #fff;\n  border-bottom: 0.25rem solid #2864f0;\n}\n\n/** @define jumpButton */\n.vb-jumpButton,\n.vb-backwardButton {\n  display: inline-block;\n  padding: 0;\n}\n\n/** @define tabButton */\n.vb-tabButton {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.vb-tabButton:hover:not(.vb-tabButton--current) {\n  color: #323232;\n}\n.vb-tabButton.vb-tabButton--current {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  cursor: default;\n}\n.vb-tabButton.vb-tabButton--small {\n  min-width: 7rem;\n  padding: 0.5rem;\n  font-size: 0.75rem;\n}\n\n/** @define pagerButton */\n.vb-pagerButton {\n  padding: 0 0.5rem;\n  box-sizing: border-box;\n  min-width: 2rem;\n  height: 2rem;\n  border-radius: 0.5rem;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  font-size: 0.875rem;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n.vb-pagerButton.vb-pagerButton--current {\n  font-size: 1rem;\n  cursor: default;\n  outline: 0;\n}\n.vb-pagerButton.vb-pagerButton--small {\n  height: 1.5rem;\n  min-width: 1.5rem;\n  font-size: 0.75rem;\n}\n/** @define iconOnlyButton */\n.vb-iconOnlyButton {\n  padding: 0;\n  box-sizing: border-box;\n  width: 2.25rem;\n  height: 2.25rem;\n  border-radius: 0.5rem;\n  text-align: center;\n  position: relative;\n  vertical-align: middle;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color, border;\n  font-size: 1.5rem;\n  display: inline-block;\n}\n.vb-iconOnlyButton .vb-iconOnlyButton__icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n.vb-iconOnlyButton--appearancePrimary:hover {\n  color: #fff;\n}\n.vb-iconOnlyButton--appearanceSecondary.vb-iconOnlyButton--danger {\n  color: #dc1e32;\n}\n.vb-iconOnlyButton--appearanceSecondary.vb-iconOnlyButton--danger:hover {\n  border-color: #a51428;\n  color: #a51428;\n  background-color: #fad2d7;\n}\n\n.vb-iconOnlyButton--appearanceTertiary {\n  background-color: transparent;\n  color: #323232;\n  border: 1px solid transparent;\n}\n.vb-iconOnlyButton--appearanceTertiary:hover {\n  color: #1e46aa;\n  background-color: rgba(138, 178, 255, 0.3);\n}\n.vb-iconOnlyButton--appearanceTertiary.vb-iconOnlyButton--danger {\n  color: #dc1e32;\n}\n.vb-iconOnlyButton--appearanceTertiary.vb-iconOnlyButton--danger:hover {\n  background-color: rgba(238, 105, 122, 0.3);\n}\n\n.vb-iconOnlyButton--small {\n  height: 1.5rem;\n  width: 1.5rem;\n  font-size: 1rem;\n}\n.vb-iconOnlyButton--large {\n  height: 3rem;\n  width: 3rem;\n  font-size: 2rem;\n}\n.vb-iconOnlyButton:hover {\n  text-decoration: none;\n}\n.vb-listButton {\n  display: block;\n  width: 100%;\n  border-radius: 0;\n  background-color: #f7f5f5;\n  font-weight: bold;\n  text-align: left;\n  color: inherit;\n  word-break: keep-all;\n}\n.vb-listButton:hover:not([aria-selected]) {\n  background-color: #f0eded;\n}\n.vb-listButton--selected {\n  cursor: default;\n  color: #6e6b6b;\n}\n.vb-listButton--bgTransparent {\n  background-color: transparent;\n}\n.vb-listButton__leftIcon {\n  margin-right: 0.375em;\n}\n.vb-listButton__farRightIcon {\n  float: right;\n}\n\n.vb-inlineLink {\n  transition-duration: 0.2s;\n  transition-property: color, background-color;\n  display: inline;\n  border: 0;\n  padding: 0;\n  background: transparent;\n  font-size: 1em;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  color: #285ac8;\n  cursor: pointer;\n  text-decoration: underline;\n}\n.vb-inlineLink:hover {\n  color: #23418c;\n}\n.vb-inlineLink__iconWrapper {\n  height: 1em;\n  width: 1.5em;\n  vertical-align: middle;\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\n.vb-inlineLink__icon {\n  font-size: 1.5em;\n  position: absolute;\n  left: 0;\n  top: 50%;\n  margin-top: -50%;\n}\n.vb-inlineLink--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.vb-calendarDate {\n  padding: 0;\n  margin: 0;\n  border-bottom: 1px solid #e9e7e7;\n  position: relative;\n  background-color: #fff;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n}\n.vb-calendarDate::before {\n  content: \"\";\n  display: block;\n  padding-top: 100%;\n}\n\n.vb-calendarDate {\n  color: #323232;\n  cursor: pointer;\n}\n.vb-calendarDate:hover {\n  background-color: #f0eded;\n}\n\n.vb-calendarDate--input {\n  background-color: #285ac8;\n  color: #fff;\n  cursor: pointer;\n}\n.vb-calendarDate--input:hover {\n  background-color: #73a5ff;\n}\n\n.vb-calendarDate--secondary-holiday {\n  color: #6e6b6b;\n  cursor: pointer;\n}\n.vb-calendarDate--secondary-holiday:hover {\n  background-color: #f0eded;\n}\n\n.vb-calendarDate--primary-holiday {\n  color: #dc1e32;\n  cursor: pointer;\n}\n.vb-calendarDate--primary-holiday:hover {\n  background-color: #f0eded;\n}\n\n.vb-calendarDate--disabled {\n  background-color: #f7f5f5;\n  color: #8c8989;\n  cursor: not-allowed;\n  outline: none;\n  pointer-events: none;\n}\n\n.vb-calendarDate__number {\n  display: block;\n  font-size: 1.5rem;\n  line-height: 1;\n  position: absolute;\n  top: 1rem;\n  left: 1rem;\n}\n\n.vb-calendarDate__number--today {\n  width: 2em;\n  height: 2em;\n  margin: -0.5em 0 0 -0.5em;\n  border-radius: 99rem;\n  background-color: #285ac8;\n  color: #fff;\n  font-size: 1em;\n  text-align: center;\n  line-height: 2em;\n}\n\n.vb-calendarDate__number--today--input {\n  width: 2em;\n  height: 2em;\n  margin: -0.5em 0 0 -0.5em;\n  border-radius: 99rem;\n  background-color: #fff;\n  color: #285ac8;\n  font-size: 1em;\n  text-align: center;\n  line-height: 2em;\n}\n\n/** @define calendar */\n.vb-calendarDate__inner {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.vb-calendarDate__status--alert {\n  position: relative;\n}\n.vb-calendarDate__status--alert::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0;\n  width: 0;\n  height: 0;\n  border: 0 solid transparent;\n  border-top-width: 0;\n  border-bottom-width: 2.7em;\n  border-right: 2.7em solid #dc1e32;\n}\n.vb-calendarDate__status--notice {\n  position: relative;\n}\n.vb-calendarDate__status--notice::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0;\n  width: 0;\n  height: 0;\n  border: 0 solid transparent;\n  border-top-width: 0;\n  border-bottom-width: 2.7em;\n  border-right: 2.7em solid #be8c14;\n}\n.vb-calendarDate__status--success {\n  position: relative;\n}\n.vb-calendarDate__status--success::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0;\n  width: 0;\n  height: 0;\n  border: 0 solid transparent;\n  border-top-width: 0;\n  border-bottom-width: 2.7em;\n  border-right: 2.7em solid #73a5ff;\n}\n.vb-calendarDate__icon {\n  display: block;\n  position: absolute;\n  color: #fff;\n  top: 0.25em;\n  right: 0.25em;\n}\n.vb-calendarDate--disabled .vb-calendarDate__number--today {\n  color: #fff;\n  background: #8c8989;\n}\n.vb-calendarDate__type {\n  display: block;\n  font-size: 0.75rem;\n  line-height: 1;\n  position: absolute;\n  top: 3rem;\n  left: 1rem;\n}\n.vb-calendarDate__time {\n  display: block;\n  font-size: 0.875rem;\n  text-align: right;\n  line-height: 1;\n  position: absolute;\n  right: 1rem;\n  bottom: 1rem;\n}\n\n.vb-calendarHead {\n  border-bottom: 1px solid #e9e7e7;\n}\n.vb-calendarHead__cell {\n  text-align: left;\n  font-weight: 0.875rem;\n  font-weight: normal;\n  padding: 0 0 1rem 1rem;\n}\n.vb-calendarHead__cell--secondary-holiday {\n  color: #001478;\n}\n.vb-calendarHead__cell--primary-holiday {\n  color: #c7423a;\n}\n\n/** @define iconWrapper */\n.vb-iconWrapper {\n  display: inline-block;\n  margin: 0;\n  padding: 0.5rem;\n  background-color: #fff;\n  line-height: 1;\n}\n\n.vb-focusHighlight {\n  display: block;\n  width: fit-content;\n  position: relative;\n}\n.vb-focusHighlight--inline {\n  display: inline-block;\n}\n.vb-focusHighlight--full {\n  width: 100%;\n}\n.vb-focusHighlight::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  pointer-events: none;\n  overflow: hidden;\n  opacity: 0;\n  transition-duration: 0.2s;\n  transition-property: opacity;\n}\n.vb-focusHighlight--round::after {\n  border-radius: 0.25rem;\n}\n.vb-focusHighlight:focus-within.vb-focusHighlight:after {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 3px #2864f0, 0 0 0 4px #fff;\n  opacity: 1;\n}\n\n.vb-focusHighlight:focus-within.vb-focusHighlight--inset:after {\n  box-shadow: inset 0 0 0 1px #fff, inset 0 0 0 3px #2864f0, inset 0 0 0 4px #fff;\n}\n\n.vb-focusTrap--inline {\n  display: inline-block;\n}\n\n/** @define form */\n.vb-radio,\n.vb-checkbox, .vb-indexSearchField .vb-indexSearchField__input, .vb-textField, .vb-select__body, .vb-searchField .vb-searchField__input, .vb-textarea {\n  display: inline-flex;\n  padding: 0;\n  margin: 0;\n  border: none;\n  box-shadow: none;\n  box-sizing: border-box;\n  font: normal 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  vertical-align: inherit;\n  appearance: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  -ms-appearance: none;\n}\n.vb-radio::-ms-expand,\n.vb-checkbox::-ms-expand, .vb-indexSearchField .vb-indexSearchField__input::-ms-expand, .vb-textField::-ms-expand, .vb-select__body::-ms-expand, .vb-searchField .vb-searchField__input::-ms-expand, .vb-textarea::-ms-expand {\n  display: none;\n}\n\n.vb-indexSearchField .vb-indexSearchField__input, .vb-textField, .vb-select__body, .vb-searchField .vb-searchField__input, .vb-textarea {\n  height: 2.25rem;\n  padding: 0 0.5rem;\n  border: 1px solid #dcdcdc;\n  border-radius: 0.5rem;\n  background-color: #fff;\n  transition-duration: 0.2s;\n  transition-property: border-color, background-color, color;\n}\n.vb-indexSearchField .vb-indexSearchField__input:-ms-input-placeholder, .vb-textField:-ms-input-placeholder, .vb-select__body:-ms-input-placeholder, .vb-searchField .vb-searchField__input:-ms-input-placeholder, .vb-textarea:-ms-input-placeholder {\n  color: #8c8989;\n  transition-duration: 0.3s;\n  transition-property: opacity;\n}\n.vb-indexSearchField .vb-indexSearchField__input::placeholder, .vb-textField::placeholder, .vb-select__body::placeholder, .vb-searchField .vb-searchField__input::placeholder, .vb-textarea::placeholder {\n  color: #8c8989;\n  transition-duration: 0.3s;\n  transition-property: opacity;\n}\n.vb-indexSearchField .vb-indexSearchField__input:focus:-ms-input-placeholder, .vb-textField:focus:-ms-input-placeholder, .vb-select__body:focus:-ms-input-placeholder, .vb-searchField .vb-searchField__input:focus:-ms-input-placeholder, .vb-textarea:focus:-ms-input-placeholder {\n  opacity: 0;\n}\n.vb-indexSearchField .vb-indexSearchField__input:focus::placeholder, .vb-textField:focus::placeholder, .vb-select__body:focus::placeholder, .vb-searchField .vb-searchField__input:focus::placeholder, .vb-textarea:focus::placeholder {\n  opacity: 0;\n}\n.vb-indexSearchField [disabled].vb-indexSearchField__input, [disabled].vb-textField, [disabled].vb-select__body, .vb-searchField [disabled].vb-searchField__input, [disabled].vb-textarea {\n  background-color: #f0eded;\n  cursor: not-allowed;\n  color: revert;\n}\n\n.vb-textField--error, .vb-textarea--error, .vb-select__body--error, .vb-searchField .vb-searchField__input--error {\n  border-color: #dc1e32;\n  color: #dc1e32;\n}\n.vb-textField--error:-ms-input-placeholder, .vb-textarea--error:-ms-input-placeholder, .vb-select__body--error:-ms-input-placeholder, .vb-searchField .vb-searchField__input--error:-ms-input-placeholder {\n  color: #dc1e32;\n}\n.vb-textField--error::placeholder, .vb-textarea--error::placeholder, .vb-select__body--error::placeholder, .vb-searchField .vb-searchField__input--error::placeholder {\n  color: #dc1e32;\n}\n\n.vb-textField--small, .vb-textarea--small, .vb-select__body--small, .vb-searchField .vb-searchField__input--small {\n  height: 1.5rem;\n  padding: 0 0.5rem;\n  font-size: 0.75rem;\n}\n\n.vb-textField--large, .vb-textarea--large, .vb-select__body--large, .vb-searchField .vb-searchField__input--large {\n  height: 3rem;\n  padding: 0 1rem;\n  font-size: 1rem;\n}\n\n.vb-textField--borderless, .vb-searchField .vb-searchField__input--borderless {\n  border: 0;\n  border-radius: 0;\n  outline: none;\n}\n\n.vb-textarea {\n  min-width: 55em;\n  height: 5em;\n  max-width: 100%;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.vb-radio .vb-radio__control,\n.vb-radio .vb-checkbox__control,\n.vb-checkbox .vb-radio__control,\n.vb-checkbox .vb-checkbox__control {\n  cursor: pointer;\n  margin: 0;\n  vertical-align: middle;\n}\n\n.vb-radio .vb-radio__label,\n.vb-radio .vb-checkbox__label,\n.vb-checkbox .vb-radio__label,\n.vb-checkbox .vb-checkbox__label {\n  margin-left: 0.5rem;\n  vertical-align: middle;\n}\n\n.vb-radio--error,\n.vb-checkbox--error {\n  color: #dc1e32;\n}\n\n.vb-radio--small,\n.vb-checkbox--small {\n  font-size: 0.75rem;\n}\n\n/**\n  @define radio\n  @define checkbox\n*/\n.vb-radio,\n.vb-checkbox {\n  align-items: baseline;\n  cursor: pointer;\n}\n.vb-radio .vb-radio__control--disabled,\n.vb-radio .vb-checkbox__control--disabled,\n.vb-checkbox .vb-radio__control--disabled,\n.vb-checkbox .vb-checkbox__control--disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\n.vb-radio--disabled,\n.vb-checkbox--disabled {\n  cursor: not-allowed;\n  opacity: 0.5;\n}\n/** @define searchField */\n.vb-searchField {\n  display: inline-block;\n  position: relative;\n  max-width: 100%;\n  min-width: 4rem;\n}\n.vb-searchField--widthFull {\n  width: 100%;\n}\n.vb-searchField .vb-searchField__input {\n  padding-left: 2.75em;\n  max-width: 100%;\n  min-width: 4rem;\n}\n.vb-searchField .vb-searchField__input::-webkit-search-cancel-button {\n  cursor: pointer;\n}\n.vb-searchField .vb-searchField__input + svg {\n  fill: #e9e7e7;\n}\n.vb-searchField .vb-searchField__input--error + svg {\n  fill: #dc1e32;\n}\n.vb-searchField .vb-searchField__input--small {\n  padding-left: 1.75rem;\n}\n.vb-searchField .vb-searchField__input--widthXSmall {\n  width: 4rem;\n}\n.vb-searchField .vb-searchField__input--widthSmall {\n  width: 7rem;\n}\n.vb-searchField .vb-searchField__input--widthMedium {\n  width: 11rem;\n}\n.vb-searchField .vb-searchField__input--widthLarge {\n  width: 24rem;\n}\n.vb-searchField .vb-searchField__input--widthFull {\n  width: 100%;\n}\n@media (max-width: 48rem) {\n  .vb-searchField .vb-searchField__input--responsive {\n    font-size: 1rem;\n  }\n}\n.vb-searchField .vb-searchField__icon {\n  display: block;\n  width: 1.5em;\n  height: 1.5em;\n  position: absolute;\n  top: 50%;\n  left: 0.75em;\n  transform: translateY(-50%);\n}\n.vb-searchField .vb-searchField__icon--small {\n  display: block;\n  width: 1em;\n  height: 1em;\n  position: absolute;\n  top: 50%;\n  left: 0.5em;\n  transform: translateY(-50%);\n}\n\n/** @define select */\n.vb-select {\n  display: inline-flex;\n  position: relative;\n  min-width: 4rem;\n  max-width: 100%;\n  overflow: hidden;\n  border-radius: 0.5rem;\n}\n.vb-select:focus-within {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 3px #2864f0, 0 0 0 4px #fff;\n}\n.vb-select::before, .vb-select::after {\n  content: \"\";\n  display: block;\n  width: 0;\n  border-left: 0.1875em solid transparent;\n  border-right: 0.1875em solid transparent;\n  position: absolute;\n  right: 0.5em;\n  pointer-events: none;\n  z-index: 1;\n}\n.vb-select::before {\n  border-bottom: 0.315em solid #323232;\n  bottom: 50%;\n  transform: translateY(-0.08em);\n}\n.vb-select::after {\n  border-top: 0.315em solid #323232;\n  top: 50%;\n  transform: translateY(0.08em);\n}\n.vb-select--widthXSmall {\n  width: 4rem;\n}\n.vb-select--widthSmall {\n  width: 7rem;\n}\n.vb-select--widthMedium {\n  width: 11rem;\n}\n.vb-select--widthLarge {\n  width: 24rem;\n}\n.vb-select--widthFull {\n  width: 100%;\n}\n.vb-select--error::before {\n  border-bottom-color: #dc1e32;\n}\n.vb-select--error::after {\n  border-top-color: #dc1e32;\n}\n.vb-select__body {\n  padding-right: 1rem;\n  width: 100%;\n  text-overflow: ellipsis;\n}\n.vb-select__body:focus {\n  outline: none;\n}\n.vb-select__body:not(.vb-select__body--error) {\n  color: #323232;\n}\n.vb-select__body--error optgroup:not(:disabled),\n.vb-select__body--error option:not(:disabled) {\n  color: initial;\n}\n.vb-select__body--alignCenter {\n  text-align: center;\n}\n.vb-select__body--alignRight {\n  text-align: right;\n}\n\n/** @define textarea */\n.vb-textarea {\n  font-family: inherit;\n}\n.vb-textarea--resizeNone {\n  resize: none;\n}\n.vb-textarea--resizeHorizontal {\n  resize: horizontal;\n}\n.vb-textarea--resizeVertical {\n  resize: vertical;\n}\n.vb-textarea--resizeBoth {\n  resize: both;\n}\n.vb-textarea--widthSmall {\n  min-width: 24rem;\n}\n.vb-textarea--widthMedium {\n  min-width: 55rem;\n}\n.vb-textarea--widthLarge {\n  min-width: 67rem;\n}\n.vb-textarea--widthFull {\n  min-width: 100%;\n}\n.vb-textarea--height1 {\n  height: 1rem;\n}\n.vb-textarea--height2 {\n  height: 2rem;\n}\n.vb-textarea--height3 {\n  height: 3rem;\n}\n.vb-textarea--height4 {\n  height: 4rem;\n}\n.vb-textarea--height5 {\n  height: 5rem;\n}\n.vb-textarea--height6 {\n  height: 6rem;\n}\n.vb-textarea--height7 {\n  height: 7rem;\n}\n.vb-textarea--height8 {\n  height: 8rem;\n}\n.vb-textarea--height9 {\n  height: 9rem;\n}\n.vb-textarea--height10 {\n  height: 10rem;\n}\n.vb-textarea--height11 {\n  height: 11rem;\n}\n.vb-textarea--height12 {\n  height: 12rem;\n}\n.vb-textarea--height13 {\n  height: 13rem;\n}\n.vb-textarea--height14 {\n  height: 14rem;\n}\n.vb-textarea--height15 {\n  height: 15rem;\n}\n.vb-textarea--height16 {\n  height: 16rem;\n}\n.vb-textarea--height17 {\n  height: 17rem;\n}\n.vb-textarea--height18 {\n  height: 18rem;\n}\n.vb-textarea--height19 {\n  height: 19rem;\n}\n.vb-textarea--height20 {\n  height: 20rem;\n}\n.vb-textarea--height21 {\n  height: 21rem;\n}\n.vb-textarea--height22 {\n  height: 22rem;\n}\n.vb-textarea--height23 {\n  height: 23rem;\n}\n.vb-textarea--height24 {\n  height: 24rem;\n}\n.vb-textarea--height25 {\n  height: 25rem;\n}\n.vb-textarea--height26 {\n  height: 26rem;\n}\n.vb-textarea--height27 {\n  height: 27rem;\n}\n.vb-textarea--height28 {\n  height: 28rem;\n}\n.vb-textarea--height29 {\n  height: 29rem;\n}\n.vb-textarea--height30 {\n  height: 30rem;\n}\n.vb-textarea--height31 {\n  height: 31rem;\n}\n.vb-textarea--height32 {\n  height: 32rem;\n}\n.vb-textarea--height33 {\n  height: 33rem;\n}\n.vb-textarea--height34 {\n  height: 34rem;\n}\n.vb-textarea--height35 {\n  height: 35rem;\n}\n.vb-textarea--height36 {\n  height: 36rem;\n}\n.vb-textarea--height37 {\n  height: 37rem;\n}\n.vb-textarea--height38 {\n  height: 38rem;\n}\n.vb-textarea--height39 {\n  height: 39rem;\n}\n.vb-textarea--height40 {\n  height: 40rem;\n}\n.vb-textarea--height41 {\n  height: 41rem;\n}\n.vb-textarea--height42 {\n  height: 42rem;\n}\n.vb-textarea--height43 {\n  height: 43rem;\n}\n.vb-textarea--height44 {\n  height: 44rem;\n}\n.vb-textarea--height45 {\n  height: 45rem;\n}\n.vb-textarea--height46 {\n  height: 46rem;\n}\n.vb-textarea--height47 {\n  height: 47rem;\n}\n.vb-textarea--height48 {\n  height: 48rem;\n}\n.vb-textarea--height49 {\n  height: 49rem;\n}\n.vb-textarea--height50 {\n  height: 50rem;\n}\n.vb-textarea--height51 {\n  height: 51rem;\n}\n.vb-textarea--height52 {\n  height: 52rem;\n}\n.vb-textarea--height53 {\n  height: 53rem;\n}\n.vb-textarea--height54 {\n  height: 54rem;\n}\n.vb-textarea--height55 {\n  height: 55rem;\n}\n.vb-textarea--height56 {\n  height: 56rem;\n}\n.vb-textarea--height57 {\n  height: 57rem;\n}\n.vb-textarea--height58 {\n  height: 58rem;\n}\n.vb-textarea--height59 {\n  height: 59rem;\n}\n.vb-textarea--height60 {\n  height: 60rem;\n}\n.vb-textarea--height61 {\n  height: 61rem;\n}\n.vb-textarea--height62 {\n  height: 62rem;\n}\n.vb-textarea--height63 {\n  height: 63rem;\n}\n.vb-textarea--height64 {\n  height: 64rem;\n}\n.vb-textarea--height65 {\n  height: 65rem;\n}\n.vb-textarea--height66 {\n  height: 66rem;\n}\n.vb-textarea--height67 {\n  height: 67rem;\n}\n.vb-textarea--height68 {\n  height: 68rem;\n}\n.vb-textarea--height69 {\n  height: 69rem;\n}\n.vb-textarea--height70 {\n  height: 70rem;\n}\n@media (max-width: 48rem) {\n  .vb-textarea--responsive {\n    font-size: 1rem;\n  }\n}\n\n/** @define textField */\n.vb-textField {\n  min-width: 4rem;\n  max-width: 100%;\n}\n.vb-textField__wrapper {\n  position: relative;\n  display: inline-flex;\n  max-width: 100%;\n  align-items: center;\n}\n.vb-textField__wrapper--widthFull {\n  width: 100%;\n}\n.vb-textField--alignCenter {\n  text-align: center;\n}\n.vb-textField--alignRight {\n  text-align: right;\n}\n.vb-textField--widthXSmall {\n  width: 4rem;\n}\n.vb-textField--widthSmall {\n  width: 7rem;\n}\n.vb-textField--widthMedium {\n  width: 11rem;\n}\n.vb-textField--widthLarge {\n  width: 24rem;\n}\n.vb-textField--widthFull {\n  width: 100%;\n}\n.vb-textField--hideSpinner {\n  -moz-appearance: textfield;\n}\n.vb-textField--hideSpinner::-webkit-outer-spin-button, .vb-textField--hideSpinner::-webkit-inner-spin-button {\n  -webkit-appearance: none;\n  margin: 0;\n}\n.vb-textField--withIcon {\n  padding-right: 1.25rem;\n}\n.vb-textField__suffix {\n  font: normal 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  margin-left: 0.25rem;\n}\n.vb-textField__suffix--small {\n  font-size: 0.75rem;\n}\n.vb-textField__suffix--large {\n  font-size: 1rem;\n}\n.vb-textField__icon, .vb-textField__iconButton {\n  position: absolute;\n  right: 0.25rem;\n  top: 0;\n  bottom: 0;\n  font-size: 1rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  vertical-align: middle;\n  text-align: center;\n  line-height: 1;\n  color: #8c8989;\n  box-sizing: border-box;\n}\n.vb-textField__icon::before, .vb-textField__iconButton::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  right: -0.25rem;\n  width: 1.5rem;\n}\n.vb-textField__icon {\n  pointer-events: none;\n}\n.vb-textField__iconButton {\n  border: 0;\n  background: transparent;\n  padding: 0;\n}\n.vb-textField__iconButton[disabled] {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n.vb-textField__iconButton:not([disabled]):hover {\n  cursor: pointer;\n  color: #285ac8;\n}\n@media (max-width: 48rem) {\n  .vb-textField--responsive {\n    font-size: 1rem;\n  }\n}\n\n.vb-readOnlyField {\n  display: inline-block;\n  min-height: 2.25rem;\n  font-size: 0.875rem;\n  vertical-align: middle;\n}\n.vb-readOnlyField__inner {\n  display: flex;\n  align-items: center;\n  height: 100%;\n  min-height: 2.25rem;\n  white-space: pre-line;\n}\n.vb-readOnlyField--alignRight .vb-readOnlyField__inner {\n  justify-content: flex-end;\n}\n.vb-readOnlyField--small {\n  height: 1.5rem;\n  font-size: 0.75rem;\n}\n.vb-readOnlyField--large {\n  height: 3rem;\n  font-size: 1rem;\n}\n.vb-readOnlyField--widthXSmall {\n  min-width: 4rem;\n}\n.vb-readOnlyField--widthSmall {\n  min-width: 7rem;\n}\n.vb-readOnlyField--widthMedium {\n  min-width: 11rem;\n}\n.vb-readOnlyField--widthLarge {\n  min-width: 24rem;\n}\n.vb-readOnlyField--widthFull {\n  min-width: 100%;\n}\n\n.vb-formControlLabel {\n  display: inline-block;\n}\n.vb-formControlLabel__text {\n  display: inline-block;\n  vertical-align: middle;\n  overflow-wrap: break-word;\n  color: #323232;\n  font: normal 0.75rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n\n.vb-toggleButton {\n  display: inline-block;\n}\n.vb-toggleButton--disabled {\n  opacity: 0.5;\n  pointer-events: none;\n}\n.vb-toggleButton__input {\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  clip: rect(1px 1px 1px 1px);\n}\n.vb-toggleButton__body {\n  display: inline-block;\n  cursor: pointer;\n  font-size: 0.875rem;\n  box-sizing: border-box;\n  transition-duration: 0.2s;\n  transition-property: background-color, color, border-color;\n  height: 2.25rem;\n  line-height: 2.25rem;\n  vertical-align: middle;\n  padding: 0 0.5rem;\n  border: 1px solid #e9e7e7;\n  margin-left: -1px;\n  color: #285ac8;\n  background-color: #fff;\n  position: relative;\n}\n.vb-toggleButton__body:hover {\n  background-color: #f2f5fc;\n}\n.vb-toggleButton__body::before {\n  transition-duration: 0.2s;\n  transition-property: border-color;\n  content: \"\";\n  position: absolute;\n  top: -1px;\n  left: -1px;\n  right: -1px;\n  bottom: -1px;\n  border: 2px solid transparent;\n}\n.vb-toggleButton--small .vb-toggleButton__body {\n  height: 1.5rem;\n  line-height: 1.5rem;\n  font-size: 0.75rem;\n}\n.vb-toggleButton:first-child .vb-toggleButton__body {\n  margin-left: unset;\n  border-top-left-radius: 0.4em;\n  border-bottom-left-radius: 0.4em;\n}\n.vb-toggleButton:first-child .vb-toggleButton__body::before {\n  border-top-left-radius: 0.4em;\n  border-bottom-left-radius: 0.4em;\n}\n.vb-toggleButton:last-child .vb-toggleButton__body {\n  border-top-right-radius: 0.4em;\n  border-bottom-right-radius: 0.4em;\n}\n.vb-toggleButton:last-child .vb-toggleButton__body::before {\n  border-top-right-radius: 0.4em;\n  border-bottom-right-radius: 0.4em;\n}\n.vb-toggleButton .vb-toggleButton__input:focus + .vb-toggleButton__body {\n  z-index: 2;\n}\n.vb-toggleButton .vb-toggleButton__input:focus + .vb-toggleButton__body::before {\n  border-color: #73a5ff;\n}\n.vb-toggleButton__input:checked + .vb-toggleButton__body {\n  background: #f7f5f5;\n  border-color: #8c8989;\n  font-weight: bold;\n  z-index: 1;\n}\n.vb-toggleButton__input:checked + .vb-toggleButton__body:hover {\n  background-color: #f2f5fc;\n}\n.vb-optionButton {\n  border-radius: 0.5rem;\n  box-sizing: border-box;\n  border: 1px solid #d7d2d2;\n  display: inline-block;\n  vertical-align: middle;\n  cursor: pointer;\n  background: #fff;\n  position: relative;\n  transition-duration: 0.2s;\n  transition-property: background-color, border-color, box-shadow;\n}\n.vb-optionButton:hover {\n  background-color: #f2f5fc;\n}\n.vb-optionButton--sizeSmall {\n  min-height: 1.5rem;\n  min-width: 5rem;\n  padding: 0 0.5rem;\n}\n.vb-optionButton--sizeSmall .vb-optionButton__children {\n  min-height: 1.5rem;\n}\n.vb-optionButton--sizeMedium {\n  min-height: 2.25rem;\n  min-width: 6rem;\n  padding: 0 1rem;\n}\n.vb-optionButton--sizeMedium .vb-optionButton__children {\n  min-height: 2.25rem;\n}\n.vb-optionButton--sizeLarge {\n  min-width: 11rem;\n  min-height: 3rem;\n  padding: 0 1rem;\n}\n.vb-optionButton--sizeLarge .vb-optionButton__children {\n  min-height: 3rem;\n}\n.vb-optionButton--widthFull {\n  width: 100%;\n}\n.vb-optionButton--checked {\n  border-color: #2864f0;\n  box-shadow: 0 0 0 1px #2864f0;\n}\n.vb-optionButton__button {\n  position: absolute;\n  inset: 0;\n}\n.vb-optionButton__children {\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-start;\n  align-items: center;\n  height: 100%;\n}\n.vb-optionButton__children__inner {\n  width: 100%;\n}\n\n.vb-gridWrapper {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  align-items: stretch;\n}\n\n.vb-gridBlock {\n  display: flex;\n}\n.vb-gridBlock > * {\n  flex-grow: 1;\n}\n.vb-gridBlock--oneThird {\n  flex-basis: calc((100% - 1.5rem * 2) / 3);\n}\n.vb-gridBlock--twoThirds {\n  flex-basis: calc(\n      (100% - 1.5rem * 2) / 3 * 2 + 1.5rem\n    );\n}\n.vb-gridBlock--half {\n  flex-basis: calc((100% - 1.5rem) / 2);\n}\n.vb-gridBlock--oneQuarter {\n  flex-basis: calc((100% - 1.5rem * 3) / 4);\n}\n.vb-gridBlock--threeQuarters {\n  flex-basis: calc(\n      (100% - 1.5rem * 3) / 4 * 3 + 1.5rem * 2\n    );\n}\n\n.vb-text, .vb-paragraph, .vb-note, .vb-subSectionTitle, .vb-sectionTitle, .vb-pageTitle {\n  margin: 0;\n  padding: 0;\n  font-weight: normal;\n}\n\n.vb-subSectionTitle, .vb-sectionTitle, .vb-pageTitle {\n  display: block;\n  overflow-wrap: break-word;\n  border-radius: 0.25rem;\n}\n.vb-subSectionTitle:focus, .vb-sectionTitle:focus, .vb-pageTitle:focus {\n  outline: none;\n}\n.vb-subSectionTitle:focus:focus-visible, .vb-sectionTitle:focus:focus-visible, .vb-pageTitle:focus:focus-visible {\n  box-shadow: 0 0 0 2px #dce8ff;\n}\n\n.vb-pageTitle {\n  color: #323232;\n  font: bold 1.5rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n@media (max-width: 48rem) {\n  .vb-pageTitle--responsive {\n    font: bold 1rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  }\n}\n\n.vb-sectionTitle {\n  color: #323232;\n  font: bold 1rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n@media (max-width: 48rem) {\n  .vb-sectionTitle--responsive {\n    font: bold 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  }\n}\n\n.vb-subSectionTitle {\n  color: #6e6b6b;\n  font: bold 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n@media (max-width: 48rem) {\n  .vb-subSectionTitle--responsive {\n    font: bold 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  }\n}\n\n/** @define note */\n.vb-note {\n  display: block;\n  color: #6e6b6b;\n  font: normal 0.75rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n\n/** @define paragraph */\n.vb-paragraph {\n  display: block;\n  font: normal 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  color: #323232;\n}\n\n.vb-text {\n  color: #323232;\n  font: normal 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n.vb-text--weightBold {\n  font-weight: bold;\n}\n.vb-text--size0750 {\n  font-size: 0.75rem;\n}\n.vb-text--size1500 {\n  font-size: 1.5rem;\n}\n.vb-text--size1000 {\n  font-size: 1rem;\n}\n.vb-text--colorWhite {\n  color: #fff;\n}\n.vb-text--colorGY7 {\n  color: #323232;\n}\n.vb-text--colorS9 {\n  color: #6e6b6b;\n}\n.vb-text--colorP7 {\n  color: #285ac8;\n}\n.vb-text--colorP5 {\n  color: #2864f0;\n}\n.vb-text--colorRE5 {\n  color: #dc1e32;\n}\n.vb-text--colorYE10 {\n  color: #825a0f;\n}\n.vb-text--ellipsis {\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  max-width: 100%;\n}\n\n.vb-pageTitle--inline,\n.vb-sectionTitle--inline,\n.vb-subSectionTitle--inline,\n.vb-paragraph--inline,\n.vb-note--inline {\n  display: inline-block;\n}\n.vb-pageTitle--alignLeft,\n.vb-sectionTitle--alignLeft,\n.vb-subSectionTitle--alignLeft,\n.vb-paragraph--alignLeft,\n.vb-note--alignLeft {\n  text-align: left;\n}\n.vb-pageTitle--alignRight,\n.vb-sectionTitle--alignRight,\n.vb-subSectionTitle--alignRight,\n.vb-paragraph--alignRight,\n.vb-note--alignRight {\n  text-align: right;\n}\n.vb-pageTitle--alignCenter,\n.vb-sectionTitle--alignCenter,\n.vb-subSectionTitle--alignCenter,\n.vb-paragraph--alignCenter,\n.vb-note--alignCenter {\n  text-align: center;\n}\n\n.vb-paragraph--ellipsis,\n.vb-note--ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  max-width: 100%;\n}\n\n/** @define materialIcon */\n.vb-materialIcon {\n  width: 1.5rem;\n  height: 1.5rem;\n  color: #323232;\n}\n.vb-materialIcon--small {\n  width: 1rem;\n  height: 1rem;\n}\n.vb-materialIcon--pointerEventsNone {\n  pointer-events: none;\n}\n.vb-materialIcon--colorInherit {\n  color: inherit;\n}\n.vb-materialIcon--colorWhite {\n  color: #fff;\n}\n.vb-materialIcon--colorP1 {\n  color: #ebf3ff;\n}\n.vb-materialIcon--colorP2 {\n  color: #dce8ff;\n}\n.vb-materialIcon--colorP3 {\n  color: #aac8ff;\n}\n.vb-materialIcon--colorP4 {\n  color: #73a5ff;\n}\n.vb-materialIcon--colorP5 {\n  color: #2864f0;\n}\n.vb-materialIcon--colorP6 {\n  color: #3264dc;\n}\n.vb-materialIcon--colorP7 {\n  color: #285ac8;\n}\n.vb-materialIcon--colorP8 {\n  color: #1e46aa;\n}\n.vb-materialIcon--colorP9 {\n  color: #23418c;\n}\n.vb-materialIcon--colorP10 {\n  color: #143278;\n}\n.vb-materialIcon--colorS1 {\n  color: #f7f5f5;\n}\n.vb-materialIcon--colorS2 {\n  color: #f0eded;\n}\n.vb-materialIcon--colorS3 {\n  color: #e9e7e7;\n}\n.vb-materialIcon--colorS4 {\n  color: #e1dcdc;\n}\n.vb-materialIcon--colorS5 {\n  color: #d7d2d2;\n}\n.vb-materialIcon--colorS6 {\n  color: #bebaba;\n}\n.vb-materialIcon--colorS7 {\n  color: #aaa7a7;\n}\n.vb-materialIcon--colorS8 {\n  color: #8c8989;\n}\n.vb-materialIcon--colorS9 {\n  color: #6e6b6b;\n}\n.vb-materialIcon--colorS10 {\n  color: #464343;\n}\n.vb-materialIcon--colorRE2 {\n  color: #fad2d7;\n}\n.vb-materialIcon--colorRE4 {\n  color: #f07882;\n}\n.vb-materialIcon--colorRE5 {\n  color: #dc1e32;\n}\n.vb-materialIcon--colorRE7 {\n  color: #a51428;\n}\n.vb-materialIcon--colorRE10 {\n  color: #6e0f19;\n}\n.vb-materialIcon--colorOR2 {\n  color: #ffe1d2;\n}\n.vb-materialIcon--colorOR4 {\n  color: #ffaa78;\n}\n.vb-materialIcon--colorOR5 {\n  color: #fa6414;\n}\n.vb-materialIcon--colorOR7 {\n  color: #be4b0f;\n}\n.vb-materialIcon--colorOR10 {\n  color: #7d320a;\n}\n.vb-materialIcon--colorYE2 {\n  color: #fff0d2;\n}\n.vb-materialIcon--colorYE4 {\n  color: #ffd278;\n}\n.vb-materialIcon--colorYE5 {\n  color: #ffb91e;\n}\n.vb-materialIcon--colorYE7 {\n  color: #be8c14;\n}\n.vb-materialIcon--colorYE10 {\n  color: #825a0f;\n}\n.vb-materialIcon--colorYG2 {\n  color: #e6f0d2;\n}\n.vb-materialIcon--colorYG4 {\n  color: #b4dc7d;\n}\n.vb-materialIcon--colorYG5 {\n  color: #82c31e;\n}\n.vb-materialIcon--colorYG7 {\n  color: #50961e;\n}\n.vb-materialIcon--colorYG10 {\n  color: #3c5f14;\n}\n.vb-materialIcon--colorGR2 {\n  color: #cdebd7;\n}\n.vb-materialIcon--colorGR4 {\n  color: #64be8c;\n}\n.vb-materialIcon--colorGR5 {\n  color: #00963c;\n}\n.vb-materialIcon--colorGR7 {\n  color: #006e2d;\n}\n.vb-materialIcon--colorGR10 {\n  color: #004b1e;\n}\n.vb-materialIcon--colorBG2 {\n  color: #cdf0f0;\n}\n.vb-materialIcon--colorBG4 {\n  color: #64d2d2;\n}\n.vb-materialIcon--colorBG5 {\n  color: #00b9b9;\n}\n.vb-materialIcon--colorBG7 {\n  color: #008c8c;\n}\n.vb-materialIcon--colorBG10 {\n  color: #146464;\n}\n.vb-materialIcon--colorPU2 {\n  color: #e6d7fa;\n}\n.vb-materialIcon--colorPU4 {\n  color: #b482f0;\n}\n.vb-materialIcon--colorPU5 {\n  color: #733ce6;\n}\n.vb-materialIcon--colorPU7 {\n  color: #5a2daa;\n}\n.vb-materialIcon--colorPU10 {\n  color: #3c1e73;\n}\n.vb-materialIcon--colorGY1 {\n  color: #fbfbfb;\n}\n.vb-materialIcon--colorGY2 {\n  color: #dcdcdc;\n}\n.vb-materialIcon--colorGY4 {\n  color: #a0a0a0;\n}\n.vb-materialIcon--colorGY5 {\n  color: #5a5a5a;\n}\n.vb-materialIcon--colorGY7 {\n  color: #323232;\n}\n.vb-materialIcon--colorGY10 {\n  color: #1e1e1e;\n}\n\n.vb-statusSelector, .vb-statusIcon {\n  display: inline-block;\n  min-width: 2.375rem;\n  box-sizing: border-box;\n  padding: 0.2rem 0.5rem;\n  font-size: 0.6875rem;\n  font-weight: bold;\n  text-align: center;\n  line-height: 1;\n  vertical-align: middle;\n  border-radius: 0.25rem;\n}\n\n.vb-statusSelector--typeRequired, .vb-statusSelector--typeProgress, .vb-statusSelector--typeSuccess, .vb-statusSelector--typeDone, .vb-statusIcon--required, .vb-statusIcon--progress, .vb-statusIcon--success, .vb-statusIcon--done {\n  padding-top: 0.125rem;\n  padding-bottom: 0.125rem;\n  border: 1px solid #8c8989;\n  background-color: #fff;\n}\n\n.vb-statusSelector--typeError, .vb-statusSelector--typeWarning, .vb-statusSelector--typeEmphasis, .vb-statusSelector--typeDisabled, .vb-statusIcon--error, .vb-statusIcon--warning, .vb-statusIcon--emphasis, .vb-statusIcon--disabled {\n  color: #fff;\n}\n\n/** @define statusIcon */\n.vb-statusIcon--done {\n  border-color: #8c8989;\n  color: #6e6b6b;\n}\n.vb-statusIcon--success {\n  border-color: #285ac8;\n  color: #285ac8;\n}\n.vb-statusIcon--progress {\n  border-color: #be8c14;\n  color: #825a0f;\n}\n.vb-statusIcon--required {\n  border-color: #dc1e32;\n  color: #dc1e32;\n}\n.vb-statusIcon--disabled {\n  background-color: #6e6b6b;\n}\n.vb-statusIcon--emphasis {\n  background-color: #285ac8;\n}\n.vb-statusIcon--warning {\n  background-color: #825a0f;\n}\n.vb-statusIcon--error {\n  background-color: #dc1e32;\n}\n\n.vb-avatar {\n  width: 2rem;\n  height: 2rem;\n  font-size: 2rem;\n  line-height: 2rem;\n  display: inline-block;\n  box-sizing: border-box;\n}\n.vb-avatar__background {\n  fill: #f0eded;\n}\n.vb-avatar__placeholderIcon {\n  display: block;\n  width: 100%;\n  height: 100%;\n  fill: #8c8989;\n}\n.vb-avatar--small {\n  width: 1.5rem;\n  height: 1.5rem;\n  font-size: 1.5rem;\n  line-height: 1.5rem;\n}\n.vb-avatar--large {\n  width: 3rem;\n  height: 3rem;\n  font-size: 3rem;\n  line-height: 3rem;\n}\n.vb-avatar--xLarge {\n  width: 6rem;\n  height: 6rem;\n  font-size: 6rem;\n  line-height: 6rem;\n}\n\n.vb-requiredIcon {\n  display: inline-block;\n  vertical-align: middle;\n  line-height: 1;\n  box-sizing: border-box;\n  padding-bottom: 0.125em;\n}\n.vb-requiredIcon__content {\n  background-color: #fad2d7;\n  color: #a51428;\n  font-size: 0.625rem;\n  display: block;\n  border-radius: 99rem;\n  padding: 0.125rem 0.25rem;\n  line-height: 1;\n}\n\n.vb-storeBadge, .vb-illust {\n  margin: 0;\n  padding: 0;\n  display: inline-block;\n  line-height: 0;\n}\n\n/** @define logo */\n.vb-logo {\n  margin: 0;\n  padding: 0;\n  fill: #4575b4;\n  display: inline-block;\n  line-height: 0;\n}\n.vb-logo .vb-logo__svg {\n  height: 3rem;\n  text-indent: 0;\n}\n.vb-logo--minpaku .vb-logo__svg {\n  width: 10.9375rem;\n}\n.vb-logo--seal .vb-logo__svg {\n  width: 10.9375rem;\n}\n.vb-logo--sfa .vb-logo__svg {\n  width: 10.75rem;\n}\n.vb-logo--cryptocurrency .vb-logo__svg {\n  width: 9.8125rem;\n}\n\n/** @define illust */\n.vb-illust .vb-illust__svg {\n  height: 12rem;\n}\n.vb-illust .vb-illust__background {\n  fill: #fff;\n}\n.vb-illust .vb-illust__frame {\n  fill: #e9e7e7;\n}\n.vb-illust .vb-illust__border {\n  fill: #f0eded;\n}\n.vb-illust--fileUpload .vb-illust__svg, .vb-illust--imageUpload .vb-illust__svg, .vb-illust--csvUpload .vb-illust__svg, .vb-illust--cloudUpload .vb-illust__svg, .vb-illust--cloudSkeleton .vb-illust__svg {\n  height: 8rem;\n  width: 8rem;\n}\n\n.vb-swallow__svg {\n  display: block;\n  margin: auto;\n}\n\n/** @define storeBadge */\n.vb-storeBadge .vb-storeBadge__svg {\n  height: 2.5rem;\n}\n.vb-storeBadge--googlePlayStore .vb-storeBadge__svg {\n  width: 8.4375rem;\n}\n.vb-storeBadge--appStore .vb-storeBadge__svg {\n  width: 6.8125rem;\n}\n\n.vb-tab {\n  display: inline-block;\n  min-width: 7.25em;\n  height: 2em;\n  padding: 0 0.75rem;\n  margin: 0;\n  background-color: #fff;\n  border: none;\n  box-sizing: border-box;\n  font-size: 1rem;\n  font-weight: bold;\n  text-align: center;\n  line-height: 2em;\n  vertical-align: bottom;\n  position: relative;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  color: #6e6b6b;\n}\n.vb-tab::after {\n  content: \"\";\n  display: block;\n  height: 1px;\n  background-color: #e9e7e7;\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: -1px;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n}\n.vb-tab:focus {\n  color: #323232;\n  z-index: 1;\n}\n.vb-tab:hover:not(.vb-tab--current) {\n  cursor: pointer;\n  background-color: #f2f5fc;\n}\n.vb-tab:hover:not(.vb-tab--current)::after {\n  background-color: #73a5ff;\n}\n.vb-tab--current {\n  color: #285ac8;\n  cursor: default;\n  color: #2864f0;\n}\n.vb-tab--current::after {\n  height: 2px;\n  background-color: #285ac8;\n  background-color: #2864f0;\n}\n.vb-tab--small {\n  font-size: 0.75rem;\n}\n.vb-tab__block {\n  display: inline-block;\n  position: relative;\n}\n.vb-tab__notificationDot {\n  display: inline-block;\n  width: 0.5rem;\n  height: 0.5rem;\n  position: absolute;\n  right: 0;\n  top: 0;\n  background-color: #dc1e32;\n  border-radius: 99rem;\n  z-index: 1;\n}\n\n/** @define segmentControl */\n.vb-segmentControlButton {\n  display: inline-block;\n  height: 2.25rem;\n  line-height: calc(2.25rem - 2px);\n  padding: 0 1rem;\n  border: 1px solid #285ac8;\n  min-width: 3rem;\n  border-right-width: 0;\n  box-sizing: border-box;\n  font-size: 0.875rem;\n  font-weight: bold;\n  vertical-align: middle;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  background-color: #fff;\n  color: #285ac8;\n  cursor: pointer;\n  text-decoration: none;\n}\n.vb-segmentControlButton:hover {\n  background-color: #f7f5f5;\n  text-decoration: none;\n}\n.vb-segmentControlButton:first-child {\n  border-top-left-radius: 0.4em;\n  border-bottom-left-radius: 0.4em;\n}\n.vb-segmentControlButton:last-child {\n  border-top-right-radius: 0.4em;\n  border-bottom-right-radius: 0.4em;\n  border-right-width: 1px;\n}\n.vb-segmentControlButton--large {\n  font-size: 1rem;\n  height: 3rem;\n  line-height: calc(3rem - 2px);\n}\n.vb-segmentControlButton--small {\n  font-size: 0.75rem;\n  height: 1.5rem;\n  line-height: calc(1.5rem - 2px);\n}\n.vb-segmentControlButton--icon {\n  padding-left: 2.75em;\n  position: relative;\n  text-align: left;\n}\n.vb-segmentControlButton__icon {\n  width: 1.5em;\n  height: 1.5em;\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  left: 0.625em;\n}\n.vb-segmentControlButton--current {\n  background-color: #285ac8;\n  color: #fff;\n  cursor: default;\n}\n.vb-segmentControlButton--current:hover {\n  background-color: #285ac8;\n}\n\n.vb-stepNumber {\n  display: inline-flex;\n  flex-direction: row;\n  justify-content: center;\n  align-items: center;\n  box-sizing: border-box;\n  width: 3rem;\n  height: 3rem;\n  border-radius: 99rem;\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #8c8989;\n  color: #6e6b6b;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  font-size: 1.5em;\n}\n.vb-stepNumber__numberCheck {\n  width: 1rem;\n  height: 1rem;\n  margin: 0;\n  border-radius: 99rem;\n  background-color: #8c8989;\n  position: absolute;\n  top: -0.25rem;\n  right: -0.25rem;\n}\n.vb-stepNumber__numberCheckSvg {\n  display: block;\n  width: 0.75rem;\n  height: 0.75rem;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  fill: #fff;\n}\n.vb-stepNumber--current {\n  background-color: #fff;\n  border: 1px solid #2864f0;\n  color: #2864f0;\n}\n.vb-stepNumber--done {\n  background-color: #fff;\n  border: 1px solid #8c8989;\n  color: #6e6b6b;\n}\n.vb-stepNumber--disabled {\n  background-color: #fff;\n  border: 1px dashed #8c8989;\n  color: #6e6b6b;\n}\n.vb-stepNumber--small {\n  font-size: 1rem;\n  width: 2.25rem;\n  height: 2.25rem;\n}\n\n.vb-stepBlock {\n  display: inline-block;\n  width: 4rem;\n  text-align: center;\n}\n.vb-stepBlock__title {\n  display: block;\n  margin-top: 0.5rem;\n  font: normal 0.75rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  color: #6e6b6b;\n}\n.vb-stepBlock--current .vb-stepBlock__title {\n  color: #2864f0;\n}\n.vb-stepBlock--small {\n  font-size: 0.75rem;\n}\n\n.vb-stepBorder {\n  display: inline-block;\n  width: 3em;\n  height: 4px;\n  background-color: #e9e7e7;\n  background-color: #e9e7e7;\n}\n.vb-stepBorder--done {\n  background-color: #285ac8;\n  background-color: #6e6b6b;\n}\n.vb-stepBorder--separator {\n  margin: 1.5em -0.5em 0;\n}\n\n.vb-tableListRow, .vb-tableListHead {\n  border: none;\n  border-collapse: collapse;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  height: 2.5rem;\n}\n\n.vb-descriptionListCell, .vb-descriptionListHeadCell, .vb-treeFoldingButtonCell, .vb-checkBoxCell, .vb-tableListCell,\n.vb-BorderTableListCell {\n  border: none;\n  border-spacing: 0;\n  border-collapse: collapse;\n  font-size: 0.875rem;\n  text-align: left;\n  padding: 0.25rem 0.5rem;\n  line-height: 1;\n  vertical-align: middle;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  word-break: break-all;\n}\n.vb-descriptionListCell:first-child, .vb-descriptionListHeadCell:first-child, .vb-treeFoldingButtonCell:first-child, .vb-checkBoxCell:first-child, .vb-tableListCell:first-child,\n.vb-BorderTableListCell:first-child {\n  padding-left: 1.5rem;\n}\n.vb-descriptionListCell:last-child, .vb-descriptionListHeadCell:last-child, .vb-treeFoldingButtonCell:last-child, .vb-checkBoxCell:last-child, .vb-tableListCell:last-child,\n.vb-BorderTableListCell:last-child {\n  padding-right: 1.5rem;\n}\n\n.vb-BorderTableListCell {\n  border-right: 1px solid #e9e7e7;\n  border-bottom: 1px solid #e9e7e7;\n}\n.vb-BorderTableListCell:last-child {\n  border-right: none;\n}\n\n.vb-tableListRow.vb-tableListRow--clickable:hover, .vb-tableListRow.vb-tableListRow--clickable:nth-child(2n):hover, .vb-BorderTableListCell--clickable:hover {\n  background-color: #f7f5f5;\n}\n\n.vb-tableListCell,\n.vb-BorderTableListCell {\n  position: relative;\n}\n.vb-tableListCell--small,\n.vb-BorderTableListCell--small {\n  font-size: 0.75rem;\n}\n.vb-tableListCell--alignCenter,\n.vb-BorderTableListCell--alignCenter {\n  text-align: center;\n}\n.vb-tableListCell--alignRight,\n.vb-BorderTableListCell--alignRight {\n  text-align: right;\n}\n.vb-tableListCell--alignBottom,\n.vb-BorderTableListCell--alignBottom {\n  vertical-align: bottom;\n}\n.vb-tableListCell--alignTop,\n.vb-BorderTableListCell--alignTop {\n  vertical-align: top;\n}\n.vb-tableListCell--breakWord,\n.vb-BorderTableListCell--breakWord {\n  word-break: normal;\n  overflow-wrap: break-word;\n}\n\n.vb-tableListCell {\n  border-bottom: 1px solid #e9e7e7;\n}\n.vb-tableListCell__link {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.vb-tableListCell__indentContainer {\n  display: flex;\n  flex-direction: row;\n}\n.vb-tableListCell__indent {\n  width: 1rem;\n  flex-shrink: 0;\n}\n.vb-tableListCell__indentedContent {\n  flex-grow: 1;\n  min-width: 0;\n}\n.vb-tableListCell__indentedContent--alignCenter {\n  text-align: center;\n}\n.vb-tableListCell__indentedContent--alignRight {\n  text-align: right;\n}\n.vb-tableListCell__text {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n}\n.vb-tableListCell__text--withLink {\n  pointer-events: none;\n}\n.vb-tableListCell__text--withLink a[href],\n.vb-tableListCell__text--withLink button,\n.vb-tableListCell__text--withLink label,\n.vb-tableListCell__text--withLink input,\n.vb-tableListCell__text--withLink select,\n.vb-tableListCell__text--withLink textarea,\n.vb-tableListCell__text--withLink [role=button] {\n  pointer-events: auto;\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .vb-tableListCell__link {\n    top: -0.25rem;\n    left: -0.5rem;\n    right: -0.5rem;\n    bottom: -0.25rem;\n  }\n\n  .vb-tableListCell:first-child .vb-tableListCell__link {\n    left: -1.5rem;\n  }\n\n  .vb-tableListCell:last-child .vb-tableListCell__link {\n    right: -1.5rem;\n  }\n\n  .vb-tableListCell__indentContainerWrapper {\n    display: table;\n    width: 100%;\n    height: 100%;\n    position: relative;\n  }\n\n  .vb-tableListCell__indentContainer {\n    display: table-row;\n  }\n\n  .vb-tableListCell__indent {\n    display: table-cell;\n  }\n\n  .vb-tableListCell__indentedContent {\n    display: table-cell;\n    vertical-align: middle;\n  }\n\n  .vb-tableListCell--alignTop .vb-tableListCell__indentedContent {\n    vertical-align: top;\n  }\n\n  .vb-tableListCell--alignBottom .vb-tableListCell__indentedContent {\n    vertical-align: bottom;\n  }\n}\n\n.vb-BorderTableListCell--clickable {\n  cursor: pointer;\n}\n.vb-BorderTableListCell__clickElement::before {\n  position: absolute;\n  content: \"\";\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.vb-BorderTableListCell__status::after {\n  position: absolute;\n  content: \"\";\n  top: 0;\n  right: 0;\n  border: 0 solid transparent;\n  border-bottom-width: 1rem;\n  border-right-width: 1rem;\n}\n.vb-BorderTableListCell__status--alert::after {\n  border-right-color: #dc1e32;\n}\n.vb-BorderTableListCell__status--notice::after {\n  border-right-color: #be8c14;\n}\n.vb-BorderTableListCell__status--success::after {\n  border-right-color: #73a5ff;\n}\n.vb-BorderTableListCell--noWrap {\n  white-space: nowrap;\n}\n.vb-BorderTableListCell--rowHeader {\n  background-color: #f7f5f5;\n  font-weight: normal;\n}\n.vb-BorderTableListCell--fixedRowHeader {\n  position: sticky;\n  left: 0;\n  z-index: 1;\n  border-right: none;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft1 {\n  left: 1rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft2 {\n  left: 2rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft3 {\n  left: 3rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft4 {\n  left: 4rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft5 {\n  left: 5rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft6 {\n  left: 6rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft7 {\n  left: 7rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft8 {\n  left: 8rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft9 {\n  left: 9rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft10 {\n  left: 10rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft11 {\n  left: 11rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft12 {\n  left: 12rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft13 {\n  left: 13rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft14 {\n  left: 14rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft15 {\n  left: 15rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft16 {\n  left: 16rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft17 {\n  left: 17rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft18 {\n  left: 18rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft19 {\n  left: 19rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft20 {\n  left: 20rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft21 {\n  left: 21rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft22 {\n  left: 22rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft23 {\n  left: 23rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft24 {\n  left: 24rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft25 {\n  left: 25rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft26 {\n  left: 26rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft27 {\n  left: 27rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft28 {\n  left: 28rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft29 {\n  left: 29rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft30 {\n  left: 30rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft31 {\n  left: 31rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft32 {\n  left: 32rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft33 {\n  left: 33rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft34 {\n  left: 34rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft35 {\n  left: 35rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft36 {\n  left: 36rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft37 {\n  left: 37rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft38 {\n  left: 38rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft39 {\n  left: 39rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft40 {\n  left: 40rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft41 {\n  left: 41rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft42 {\n  left: 42rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft43 {\n  left: 43rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft44 {\n  left: 44rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft45 {\n  left: 45rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft46 {\n  left: 46rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft47 {\n  left: 47rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft48 {\n  left: 48rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft49 {\n  left: 49rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft50 {\n  left: 50rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft51 {\n  left: 51rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft52 {\n  left: 52rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft53 {\n  left: 53rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft54 {\n  left: 54rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft55 {\n  left: 55rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft56 {\n  left: 56rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft57 {\n  left: 57rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft58 {\n  left: 58rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft59 {\n  left: 59rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft60 {\n  left: 60rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft61 {\n  left: 61rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft62 {\n  left: 62rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft63 {\n  left: 63rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft64 {\n  left: 64rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft65 {\n  left: 65rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft66 {\n  left: 66rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft67 {\n  left: 67rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft68 {\n  left: 68rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft69 {\n  left: 69rem;\n}\n.vb-BorderTableListCell--fixedRowHeaderLeft70 {\n  left: 70rem;\n}\n\n.vb-checkBoxCell {\n  position: relative;\n  border-bottom: 1px solid #e9e7e7;\n  box-sizing: border-box;\n  width: 2rem;\n  text-align: center;\n}\n.vb-checkBoxCell + .vb-BorderTableListCell {\n  border-left: 1px solid #e9e7e7;\n}\n.vb-checkBoxCell__label:not(.vb-checkBoxCell__label--disabled) {\n  cursor: pointer;\n}\n.vb-checkBoxCell__label--disabled ::before {\n  position: absolute;\n  content: \"\";\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  cursor: not-allowed;\n}\n.vb-checkBoxCell__label::before {\n  position: absolute;\n  content: \"\";\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n\n.vb-treeFoldingButtonCell {\n  position: relative;\n  border-bottom: 1px solid #e9e7e7;\n  box-sizing: border-box;\n  width: 2rem;\n  text-align: center;\n}\n.vb-treeFoldingButtonCell__button {\n  cursor: pointer;\n  color: #285ac8;\n  display: inline;\n  border: 0;\n  background: none;\n  padding: 0;\n}\n.vb-treeFoldingButtonCell__button::before {\n  position: absolute;\n  content: \"\";\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.vb-treeFoldingButtonCell__button:hover {\n  color: #1e4395;\n}\n.vb-treeFoldingButtonCell__icon {\n  width: 1.5rem;\n  height: 1.5rem;\n}\n\n.vb-descriptionListHeadCell {\n  width: 1px;\n  white-space: nowrap;\n  font: normal 0.75rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  vertical-align: middle;\n}\n.vb-descriptionListHeadCell--minWidth1 {\n  min-width: 1rem;\n}\n.vb-descriptionListHeadCell--minWidth2 {\n  min-width: 2rem;\n}\n.vb-descriptionListHeadCell--minWidth3 {\n  min-width: 3rem;\n}\n.vb-descriptionListHeadCell--minWidth4 {\n  min-width: 4rem;\n}\n.vb-descriptionListHeadCell--minWidth5 {\n  min-width: 5rem;\n}\n.vb-descriptionListHeadCell--minWidth6 {\n  min-width: 6rem;\n}\n.vb-descriptionListHeadCell--minWidth7 {\n  min-width: 7rem;\n}\n.vb-descriptionListHeadCell--minWidth8 {\n  min-width: 8rem;\n}\n.vb-descriptionListHeadCell--minWidth9 {\n  min-width: 9rem;\n}\n.vb-descriptionListHeadCell--minWidth10 {\n  min-width: 10rem;\n}\n.vb-descriptionListHeadCell--minWidth11 {\n  min-width: 11rem;\n}\n.vb-descriptionListHeadCell--minWidth12 {\n  min-width: 12rem;\n}\n.vb-descriptionListHeadCell--minWidth13 {\n  min-width: 13rem;\n}\n.vb-descriptionListHeadCell--minWidth14 {\n  min-width: 14rem;\n}\n.vb-descriptionListHeadCell--minWidth15 {\n  min-width: 15rem;\n}\n.vb-descriptionListHeadCell--minWidth16 {\n  min-width: 16rem;\n}\n.vb-descriptionListHeadCell--minWidth17 {\n  min-width: 17rem;\n}\n.vb-descriptionListHeadCell--minWidth18 {\n  min-width: 18rem;\n}\n.vb-descriptionListHeadCell--minWidth19 {\n  min-width: 19rem;\n}\n.vb-descriptionListHeadCell--minWidth20 {\n  min-width: 20rem;\n}\n.vb-descriptionListHeadCell--minWidth21 {\n  min-width: 21rem;\n}\n.vb-descriptionListHeadCell--minWidth22 {\n  min-width: 22rem;\n}\n.vb-descriptionListHeadCell--minWidth23 {\n  min-width: 23rem;\n}\n.vb-descriptionListHeadCell--minWidth24 {\n  min-width: 24rem;\n}\n.vb-descriptionListHeadCell--minWidth25 {\n  min-width: 25rem;\n}\n.vb-descriptionListHeadCell--minWidth26 {\n  min-width: 26rem;\n}\n.vb-descriptionListHeadCell--minWidth27 {\n  min-width: 27rem;\n}\n.vb-descriptionListHeadCell--minWidth28 {\n  min-width: 28rem;\n}\n.vb-descriptionListHeadCell--minWidth29 {\n  min-width: 29rem;\n}\n.vb-descriptionListHeadCell--minWidth30 {\n  min-width: 30rem;\n}\n.vb-descriptionListHeadCell--minWidth31 {\n  min-width: 31rem;\n}\n.vb-descriptionListHeadCell--minWidth32 {\n  min-width: 32rem;\n}\n.vb-descriptionListHeadCell--minWidth33 {\n  min-width: 33rem;\n}\n.vb-descriptionListHeadCell--minWidth34 {\n  min-width: 34rem;\n}\n.vb-descriptionListHeadCell--minWidth35 {\n  min-width: 35rem;\n}\n.vb-descriptionListHeadCell--minWidth36 {\n  min-width: 36rem;\n}\n.vb-descriptionListHeadCell--minWidth37 {\n  min-width: 37rem;\n}\n.vb-descriptionListHeadCell--minWidth38 {\n  min-width: 38rem;\n}\n.vb-descriptionListHeadCell--minWidth39 {\n  min-width: 39rem;\n}\n.vb-descriptionListHeadCell--minWidth40 {\n  min-width: 40rem;\n}\n.vb-descriptionListHeadCell--minWidth41 {\n  min-width: 41rem;\n}\n.vb-descriptionListHeadCell--minWidth42 {\n  min-width: 42rem;\n}\n.vb-descriptionListHeadCell--minWidth43 {\n  min-width: 43rem;\n}\n.vb-descriptionListHeadCell--minWidth44 {\n  min-width: 44rem;\n}\n.vb-descriptionListHeadCell--minWidth45 {\n  min-width: 45rem;\n}\n.vb-descriptionListHeadCell--minWidth46 {\n  min-width: 46rem;\n}\n.vb-descriptionListHeadCell--minWidth47 {\n  min-width: 47rem;\n}\n.vb-descriptionListHeadCell--minWidth48 {\n  min-width: 48rem;\n}\n.vb-descriptionListHeadCell--minWidth49 {\n  min-width: 49rem;\n}\n.vb-descriptionListHeadCell--minWidth50 {\n  min-width: 50rem;\n}\n.vb-descriptionListHeadCell--minWidth51 {\n  min-width: 51rem;\n}\n.vb-descriptionListHeadCell--minWidth52 {\n  min-width: 52rem;\n}\n.vb-descriptionListHeadCell--minWidth53 {\n  min-width: 53rem;\n}\n.vb-descriptionListHeadCell--minWidth54 {\n  min-width: 54rem;\n}\n.vb-descriptionListHeadCell--minWidth55 {\n  min-width: 55rem;\n}\n.vb-descriptionListHeadCell--minWidth56 {\n  min-width: 56rem;\n}\n.vb-descriptionListHeadCell--minWidth57 {\n  min-width: 57rem;\n}\n.vb-descriptionListHeadCell--minWidth58 {\n  min-width: 58rem;\n}\n.vb-descriptionListHeadCell--minWidth59 {\n  min-width: 59rem;\n}\n.vb-descriptionListHeadCell--minWidth60 {\n  min-width: 60rem;\n}\n.vb-descriptionListHeadCell--minWidth61 {\n  min-width: 61rem;\n}\n.vb-descriptionListHeadCell--minWidth62 {\n  min-width: 62rem;\n}\n.vb-descriptionListHeadCell--minWidth63 {\n  min-width: 63rem;\n}\n.vb-descriptionListHeadCell--minWidth64 {\n  min-width: 64rem;\n}\n.vb-descriptionListHeadCell--minWidth65 {\n  min-width: 65rem;\n}\n.vb-descriptionListHeadCell--minWidth66 {\n  min-width: 66rem;\n}\n.vb-descriptionListHeadCell--minWidth67 {\n  min-width: 67rem;\n}\n.vb-descriptionListHeadCell--minWidth68 {\n  min-width: 68rem;\n}\n.vb-descriptionListHeadCell--minWidth69 {\n  min-width: 69rem;\n}\n.vb-descriptionListHeadCell--minWidth70 {\n  min-width: 70rem;\n}\n@media (max-width: 48rem) {\n  .vb-descriptionListHeadCell--responsive {\n    display: block;\n    width: auto;\n  }\n  .vb-descriptionListHeadCell--responsive, .vb-descriptionListHeadCell--responsive:first-child, .vb-descriptionListHeadCell--responsive:last-child {\n    padding: 1rem 1rem 0.25rem;\n  }\n}\n\n.vb-descriptionListCell {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  line-height: 1.5;\n}\n@media (max-width: 48rem) {\n  .vb-descriptionListCell--responsive {\n    display: block;\n    width: auto;\n  }\n  .vb-descriptionListCell--responsive, .vb-descriptionListCell--responsive:first-child, .vb-descriptionListCell--responsive:last-child {\n    padding: 0.25rem 1rem 1rem;\n  }\n}\n\n.vb-tableListHeadCell {\n  border: none;\n  border-spacing: 0;\n  border-collapse: collapse;\n  box-sizing: border-box;\n  padding: 0.25rem 0.5rem;\n  font: normal 0.75rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  height: 1.875rem;\n  text-align: left;\n  line-height: 1;\n  vertical-align: middle;\n  border-bottom: 1px solid #e9e7e7;\n  position: relative;\n  transition-duration: 0.3s;\n  transition-property: background-color;\n}\n.vb-tableListHeadCell:first-child {\n  padding-left: 1.5rem;\n}\n.vb-tableListHeadCell:last-child {\n  padding-right: 1.5rem;\n}\n.vb-tableListHeadCell--alignCenter {\n  text-align: center;\n}\n.vb-tableListHeadCell--alignRight {\n  text-align: right;\n}\n.vb-tableListHeadCell--clickable:hover {\n  background: #f0eded;\n}\n.vb-tableListHeadCell--fixedRowHeader {\n  position: sticky;\n  left: 0;\n  z-index: 1;\n  background-color: #f7f5f5;\n}\n.vb-tableListHeadCell--width1 {\n  width: 1rem;\n}\n.vb-tableListHeadCell--minWidth1 {\n  min-width: 1rem;\n}\n.vb-tableListHeadCell--maxWidth1 {\n  max-width: 1rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft1 {\n  left: 1rem;\n}\n.vb-tableListHeadCell--width2 {\n  width: 2rem;\n}\n.vb-tableListHeadCell--minWidth2 {\n  min-width: 2rem;\n}\n.vb-tableListHeadCell--maxWidth2 {\n  max-width: 2rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft2 {\n  left: 2rem;\n}\n.vb-tableListHeadCell--width3 {\n  width: 3rem;\n}\n.vb-tableListHeadCell--minWidth3 {\n  min-width: 3rem;\n}\n.vb-tableListHeadCell--maxWidth3 {\n  max-width: 3rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft3 {\n  left: 3rem;\n}\n.vb-tableListHeadCell--width4 {\n  width: 4rem;\n}\n.vb-tableListHeadCell--minWidth4 {\n  min-width: 4rem;\n}\n.vb-tableListHeadCell--maxWidth4 {\n  max-width: 4rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft4 {\n  left: 4rem;\n}\n.vb-tableListHeadCell--width5 {\n  width: 5rem;\n}\n.vb-tableListHeadCell--minWidth5 {\n  min-width: 5rem;\n}\n.vb-tableListHeadCell--maxWidth5 {\n  max-width: 5rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft5 {\n  left: 5rem;\n}\n.vb-tableListHeadCell--width6 {\n  width: 6rem;\n}\n.vb-tableListHeadCell--minWidth6 {\n  min-width: 6rem;\n}\n.vb-tableListHeadCell--maxWidth6 {\n  max-width: 6rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft6 {\n  left: 6rem;\n}\n.vb-tableListHeadCell--width7 {\n  width: 7rem;\n}\n.vb-tableListHeadCell--minWidth7 {\n  min-width: 7rem;\n}\n.vb-tableListHeadCell--maxWidth7 {\n  max-width: 7rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft7 {\n  left: 7rem;\n}\n.vb-tableListHeadCell--width8 {\n  width: 8rem;\n}\n.vb-tableListHeadCell--minWidth8 {\n  min-width: 8rem;\n}\n.vb-tableListHeadCell--maxWidth8 {\n  max-width: 8rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft8 {\n  left: 8rem;\n}\n.vb-tableListHeadCell--width9 {\n  width: 9rem;\n}\n.vb-tableListHeadCell--minWidth9 {\n  min-width: 9rem;\n}\n.vb-tableListHeadCell--maxWidth9 {\n  max-width: 9rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft9 {\n  left: 9rem;\n}\n.vb-tableListHeadCell--width10 {\n  width: 10rem;\n}\n.vb-tableListHeadCell--minWidth10 {\n  min-width: 10rem;\n}\n.vb-tableListHeadCell--maxWidth10 {\n  max-width: 10rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft10 {\n  left: 10rem;\n}\n.vb-tableListHeadCell--width11 {\n  width: 11rem;\n}\n.vb-tableListHeadCell--minWidth11 {\n  min-width: 11rem;\n}\n.vb-tableListHeadCell--maxWidth11 {\n  max-width: 11rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft11 {\n  left: 11rem;\n}\n.vb-tableListHeadCell--width12 {\n  width: 12rem;\n}\n.vb-tableListHeadCell--minWidth12 {\n  min-width: 12rem;\n}\n.vb-tableListHeadCell--maxWidth12 {\n  max-width: 12rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft12 {\n  left: 12rem;\n}\n.vb-tableListHeadCell--width13 {\n  width: 13rem;\n}\n.vb-tableListHeadCell--minWidth13 {\n  min-width: 13rem;\n}\n.vb-tableListHeadCell--maxWidth13 {\n  max-width: 13rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft13 {\n  left: 13rem;\n}\n.vb-tableListHeadCell--width14 {\n  width: 14rem;\n}\n.vb-tableListHeadCell--minWidth14 {\n  min-width: 14rem;\n}\n.vb-tableListHeadCell--maxWidth14 {\n  max-width: 14rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft14 {\n  left: 14rem;\n}\n.vb-tableListHeadCell--width15 {\n  width: 15rem;\n}\n.vb-tableListHeadCell--minWidth15 {\n  min-width: 15rem;\n}\n.vb-tableListHeadCell--maxWidth15 {\n  max-width: 15rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft15 {\n  left: 15rem;\n}\n.vb-tableListHeadCell--width16 {\n  width: 16rem;\n}\n.vb-tableListHeadCell--minWidth16 {\n  min-width: 16rem;\n}\n.vb-tableListHeadCell--maxWidth16 {\n  max-width: 16rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft16 {\n  left: 16rem;\n}\n.vb-tableListHeadCell--width17 {\n  width: 17rem;\n}\n.vb-tableListHeadCell--minWidth17 {\n  min-width: 17rem;\n}\n.vb-tableListHeadCell--maxWidth17 {\n  max-width: 17rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft17 {\n  left: 17rem;\n}\n.vb-tableListHeadCell--width18 {\n  width: 18rem;\n}\n.vb-tableListHeadCell--minWidth18 {\n  min-width: 18rem;\n}\n.vb-tableListHeadCell--maxWidth18 {\n  max-width: 18rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft18 {\n  left: 18rem;\n}\n.vb-tableListHeadCell--width19 {\n  width: 19rem;\n}\n.vb-tableListHeadCell--minWidth19 {\n  min-width: 19rem;\n}\n.vb-tableListHeadCell--maxWidth19 {\n  max-width: 19rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft19 {\n  left: 19rem;\n}\n.vb-tableListHeadCell--width20 {\n  width: 20rem;\n}\n.vb-tableListHeadCell--minWidth20 {\n  min-width: 20rem;\n}\n.vb-tableListHeadCell--maxWidth20 {\n  max-width: 20rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft20 {\n  left: 20rem;\n}\n.vb-tableListHeadCell--width21 {\n  width: 21rem;\n}\n.vb-tableListHeadCell--minWidth21 {\n  min-width: 21rem;\n}\n.vb-tableListHeadCell--maxWidth21 {\n  max-width: 21rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft21 {\n  left: 21rem;\n}\n.vb-tableListHeadCell--width22 {\n  width: 22rem;\n}\n.vb-tableListHeadCell--minWidth22 {\n  min-width: 22rem;\n}\n.vb-tableListHeadCell--maxWidth22 {\n  max-width: 22rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft22 {\n  left: 22rem;\n}\n.vb-tableListHeadCell--width23 {\n  width: 23rem;\n}\n.vb-tableListHeadCell--minWidth23 {\n  min-width: 23rem;\n}\n.vb-tableListHeadCell--maxWidth23 {\n  max-width: 23rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft23 {\n  left: 23rem;\n}\n.vb-tableListHeadCell--width24 {\n  width: 24rem;\n}\n.vb-tableListHeadCell--minWidth24 {\n  min-width: 24rem;\n}\n.vb-tableListHeadCell--maxWidth24 {\n  max-width: 24rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft24 {\n  left: 24rem;\n}\n.vb-tableListHeadCell--width25 {\n  width: 25rem;\n}\n.vb-tableListHeadCell--minWidth25 {\n  min-width: 25rem;\n}\n.vb-tableListHeadCell--maxWidth25 {\n  max-width: 25rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft25 {\n  left: 25rem;\n}\n.vb-tableListHeadCell--width26 {\n  width: 26rem;\n}\n.vb-tableListHeadCell--minWidth26 {\n  min-width: 26rem;\n}\n.vb-tableListHeadCell--maxWidth26 {\n  max-width: 26rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft26 {\n  left: 26rem;\n}\n.vb-tableListHeadCell--width27 {\n  width: 27rem;\n}\n.vb-tableListHeadCell--minWidth27 {\n  min-width: 27rem;\n}\n.vb-tableListHeadCell--maxWidth27 {\n  max-width: 27rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft27 {\n  left: 27rem;\n}\n.vb-tableListHeadCell--width28 {\n  width: 28rem;\n}\n.vb-tableListHeadCell--minWidth28 {\n  min-width: 28rem;\n}\n.vb-tableListHeadCell--maxWidth28 {\n  max-width: 28rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft28 {\n  left: 28rem;\n}\n.vb-tableListHeadCell--width29 {\n  width: 29rem;\n}\n.vb-tableListHeadCell--minWidth29 {\n  min-width: 29rem;\n}\n.vb-tableListHeadCell--maxWidth29 {\n  max-width: 29rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft29 {\n  left: 29rem;\n}\n.vb-tableListHeadCell--width30 {\n  width: 30rem;\n}\n.vb-tableListHeadCell--minWidth30 {\n  min-width: 30rem;\n}\n.vb-tableListHeadCell--maxWidth30 {\n  max-width: 30rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft30 {\n  left: 30rem;\n}\n.vb-tableListHeadCell--width31 {\n  width: 31rem;\n}\n.vb-tableListHeadCell--minWidth31 {\n  min-width: 31rem;\n}\n.vb-tableListHeadCell--maxWidth31 {\n  max-width: 31rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft31 {\n  left: 31rem;\n}\n.vb-tableListHeadCell--width32 {\n  width: 32rem;\n}\n.vb-tableListHeadCell--minWidth32 {\n  min-width: 32rem;\n}\n.vb-tableListHeadCell--maxWidth32 {\n  max-width: 32rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft32 {\n  left: 32rem;\n}\n.vb-tableListHeadCell--width33 {\n  width: 33rem;\n}\n.vb-tableListHeadCell--minWidth33 {\n  min-width: 33rem;\n}\n.vb-tableListHeadCell--maxWidth33 {\n  max-width: 33rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft33 {\n  left: 33rem;\n}\n.vb-tableListHeadCell--width34 {\n  width: 34rem;\n}\n.vb-tableListHeadCell--minWidth34 {\n  min-width: 34rem;\n}\n.vb-tableListHeadCell--maxWidth34 {\n  max-width: 34rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft34 {\n  left: 34rem;\n}\n.vb-tableListHeadCell--width35 {\n  width: 35rem;\n}\n.vb-tableListHeadCell--minWidth35 {\n  min-width: 35rem;\n}\n.vb-tableListHeadCell--maxWidth35 {\n  max-width: 35rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft35 {\n  left: 35rem;\n}\n.vb-tableListHeadCell--width36 {\n  width: 36rem;\n}\n.vb-tableListHeadCell--minWidth36 {\n  min-width: 36rem;\n}\n.vb-tableListHeadCell--maxWidth36 {\n  max-width: 36rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft36 {\n  left: 36rem;\n}\n.vb-tableListHeadCell--width37 {\n  width: 37rem;\n}\n.vb-tableListHeadCell--minWidth37 {\n  min-width: 37rem;\n}\n.vb-tableListHeadCell--maxWidth37 {\n  max-width: 37rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft37 {\n  left: 37rem;\n}\n.vb-tableListHeadCell--width38 {\n  width: 38rem;\n}\n.vb-tableListHeadCell--minWidth38 {\n  min-width: 38rem;\n}\n.vb-tableListHeadCell--maxWidth38 {\n  max-width: 38rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft38 {\n  left: 38rem;\n}\n.vb-tableListHeadCell--width39 {\n  width: 39rem;\n}\n.vb-tableListHeadCell--minWidth39 {\n  min-width: 39rem;\n}\n.vb-tableListHeadCell--maxWidth39 {\n  max-width: 39rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft39 {\n  left: 39rem;\n}\n.vb-tableListHeadCell--width40 {\n  width: 40rem;\n}\n.vb-tableListHeadCell--minWidth40 {\n  min-width: 40rem;\n}\n.vb-tableListHeadCell--maxWidth40 {\n  max-width: 40rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft40 {\n  left: 40rem;\n}\n.vb-tableListHeadCell--width41 {\n  width: 41rem;\n}\n.vb-tableListHeadCell--minWidth41 {\n  min-width: 41rem;\n}\n.vb-tableListHeadCell--maxWidth41 {\n  max-width: 41rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft41 {\n  left: 41rem;\n}\n.vb-tableListHeadCell--width42 {\n  width: 42rem;\n}\n.vb-tableListHeadCell--minWidth42 {\n  min-width: 42rem;\n}\n.vb-tableListHeadCell--maxWidth42 {\n  max-width: 42rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft42 {\n  left: 42rem;\n}\n.vb-tableListHeadCell--width43 {\n  width: 43rem;\n}\n.vb-tableListHeadCell--minWidth43 {\n  min-width: 43rem;\n}\n.vb-tableListHeadCell--maxWidth43 {\n  max-width: 43rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft43 {\n  left: 43rem;\n}\n.vb-tableListHeadCell--width44 {\n  width: 44rem;\n}\n.vb-tableListHeadCell--minWidth44 {\n  min-width: 44rem;\n}\n.vb-tableListHeadCell--maxWidth44 {\n  max-width: 44rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft44 {\n  left: 44rem;\n}\n.vb-tableListHeadCell--width45 {\n  width: 45rem;\n}\n.vb-tableListHeadCell--minWidth45 {\n  min-width: 45rem;\n}\n.vb-tableListHeadCell--maxWidth45 {\n  max-width: 45rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft45 {\n  left: 45rem;\n}\n.vb-tableListHeadCell--width46 {\n  width: 46rem;\n}\n.vb-tableListHeadCell--minWidth46 {\n  min-width: 46rem;\n}\n.vb-tableListHeadCell--maxWidth46 {\n  max-width: 46rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft46 {\n  left: 46rem;\n}\n.vb-tableListHeadCell--width47 {\n  width: 47rem;\n}\n.vb-tableListHeadCell--minWidth47 {\n  min-width: 47rem;\n}\n.vb-tableListHeadCell--maxWidth47 {\n  max-width: 47rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft47 {\n  left: 47rem;\n}\n.vb-tableListHeadCell--width48 {\n  width: 48rem;\n}\n.vb-tableListHeadCell--minWidth48 {\n  min-width: 48rem;\n}\n.vb-tableListHeadCell--maxWidth48 {\n  max-width: 48rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft48 {\n  left: 48rem;\n}\n.vb-tableListHeadCell--width49 {\n  width: 49rem;\n}\n.vb-tableListHeadCell--minWidth49 {\n  min-width: 49rem;\n}\n.vb-tableListHeadCell--maxWidth49 {\n  max-width: 49rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft49 {\n  left: 49rem;\n}\n.vb-tableListHeadCell--width50 {\n  width: 50rem;\n}\n.vb-tableListHeadCell--minWidth50 {\n  min-width: 50rem;\n}\n.vb-tableListHeadCell--maxWidth50 {\n  max-width: 50rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft50 {\n  left: 50rem;\n}\n.vb-tableListHeadCell--width51 {\n  width: 51rem;\n}\n.vb-tableListHeadCell--minWidth51 {\n  min-width: 51rem;\n}\n.vb-tableListHeadCell--maxWidth51 {\n  max-width: 51rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft51 {\n  left: 51rem;\n}\n.vb-tableListHeadCell--width52 {\n  width: 52rem;\n}\n.vb-tableListHeadCell--minWidth52 {\n  min-width: 52rem;\n}\n.vb-tableListHeadCell--maxWidth52 {\n  max-width: 52rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft52 {\n  left: 52rem;\n}\n.vb-tableListHeadCell--width53 {\n  width: 53rem;\n}\n.vb-tableListHeadCell--minWidth53 {\n  min-width: 53rem;\n}\n.vb-tableListHeadCell--maxWidth53 {\n  max-width: 53rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft53 {\n  left: 53rem;\n}\n.vb-tableListHeadCell--width54 {\n  width: 54rem;\n}\n.vb-tableListHeadCell--minWidth54 {\n  min-width: 54rem;\n}\n.vb-tableListHeadCell--maxWidth54 {\n  max-width: 54rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft54 {\n  left: 54rem;\n}\n.vb-tableListHeadCell--width55 {\n  width: 55rem;\n}\n.vb-tableListHeadCell--minWidth55 {\n  min-width: 55rem;\n}\n.vb-tableListHeadCell--maxWidth55 {\n  max-width: 55rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft55 {\n  left: 55rem;\n}\n.vb-tableListHeadCell--width56 {\n  width: 56rem;\n}\n.vb-tableListHeadCell--minWidth56 {\n  min-width: 56rem;\n}\n.vb-tableListHeadCell--maxWidth56 {\n  max-width: 56rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft56 {\n  left: 56rem;\n}\n.vb-tableListHeadCell--width57 {\n  width: 57rem;\n}\n.vb-tableListHeadCell--minWidth57 {\n  min-width: 57rem;\n}\n.vb-tableListHeadCell--maxWidth57 {\n  max-width: 57rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft57 {\n  left: 57rem;\n}\n.vb-tableListHeadCell--width58 {\n  width: 58rem;\n}\n.vb-tableListHeadCell--minWidth58 {\n  min-width: 58rem;\n}\n.vb-tableListHeadCell--maxWidth58 {\n  max-width: 58rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft58 {\n  left: 58rem;\n}\n.vb-tableListHeadCell--width59 {\n  width: 59rem;\n}\n.vb-tableListHeadCell--minWidth59 {\n  min-width: 59rem;\n}\n.vb-tableListHeadCell--maxWidth59 {\n  max-width: 59rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft59 {\n  left: 59rem;\n}\n.vb-tableListHeadCell--width60 {\n  width: 60rem;\n}\n.vb-tableListHeadCell--minWidth60 {\n  min-width: 60rem;\n}\n.vb-tableListHeadCell--maxWidth60 {\n  max-width: 60rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft60 {\n  left: 60rem;\n}\n.vb-tableListHeadCell--width61 {\n  width: 61rem;\n}\n.vb-tableListHeadCell--minWidth61 {\n  min-width: 61rem;\n}\n.vb-tableListHeadCell--maxWidth61 {\n  max-width: 61rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft61 {\n  left: 61rem;\n}\n.vb-tableListHeadCell--width62 {\n  width: 62rem;\n}\n.vb-tableListHeadCell--minWidth62 {\n  min-width: 62rem;\n}\n.vb-tableListHeadCell--maxWidth62 {\n  max-width: 62rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft62 {\n  left: 62rem;\n}\n.vb-tableListHeadCell--width63 {\n  width: 63rem;\n}\n.vb-tableListHeadCell--minWidth63 {\n  min-width: 63rem;\n}\n.vb-tableListHeadCell--maxWidth63 {\n  max-width: 63rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft63 {\n  left: 63rem;\n}\n.vb-tableListHeadCell--width64 {\n  width: 64rem;\n}\n.vb-tableListHeadCell--minWidth64 {\n  min-width: 64rem;\n}\n.vb-tableListHeadCell--maxWidth64 {\n  max-width: 64rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft64 {\n  left: 64rem;\n}\n.vb-tableListHeadCell--width65 {\n  width: 65rem;\n}\n.vb-tableListHeadCell--minWidth65 {\n  min-width: 65rem;\n}\n.vb-tableListHeadCell--maxWidth65 {\n  max-width: 65rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft65 {\n  left: 65rem;\n}\n.vb-tableListHeadCell--width66 {\n  width: 66rem;\n}\n.vb-tableListHeadCell--minWidth66 {\n  min-width: 66rem;\n}\n.vb-tableListHeadCell--maxWidth66 {\n  max-width: 66rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft66 {\n  left: 66rem;\n}\n.vb-tableListHeadCell--width67 {\n  width: 67rem;\n}\n.vb-tableListHeadCell--minWidth67 {\n  min-width: 67rem;\n}\n.vb-tableListHeadCell--maxWidth67 {\n  max-width: 67rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft67 {\n  left: 67rem;\n}\n.vb-tableListHeadCell--width68 {\n  width: 68rem;\n}\n.vb-tableListHeadCell--minWidth68 {\n  min-width: 68rem;\n}\n.vb-tableListHeadCell--maxWidth68 {\n  max-width: 68rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft68 {\n  left: 68rem;\n}\n.vb-tableListHeadCell--width69 {\n  width: 69rem;\n}\n.vb-tableListHeadCell--minWidth69 {\n  min-width: 69rem;\n}\n.vb-tableListHeadCell--maxWidth69 {\n  max-width: 69rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft69 {\n  left: 69rem;\n}\n.vb-tableListHeadCell--width70 {\n  width: 70rem;\n}\n.vb-tableListHeadCell--minWidth70 {\n  min-width: 70rem;\n}\n.vb-tableListHeadCell--maxWidth70 {\n  max-width: 70rem;\n}\n.vb-tableListHeadCell--fixedRowHeaderLeft70 {\n  left: 70rem;\n}\n.vb-tableListHeadCell__clickElement {\n  cursor: pointer;\n}\n.vb-tableListHeadCell__clickElement:hover {\n  font-weight: bold;\n}\n.vb-tableListHeadCell__clickElement::before {\n  position: absolute;\n  content: \"\";\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n.vb-tableListHeadCell--orderAscending, .vb-tableListHeadCell--orderDescending {\n  font-weight: bold;\n}\n.vb-tableListHeadCell__iconWrapper {\n  height: 0.75rem;\n  width: 1rem;\n  display: inline-block;\n}\n.vb-tableListHeadCell__headerArrowUp, .vb-tableListHeadCell__headerArrowDown, .vb-tableListHeadCell__headerSwapVert {\n  margin-left: 0.5rem;\n  vertical-align: middle;\n  height: 1rem;\n  width: 1rem;\n  margin-top: -0.25rem;\n}\n.vb-tableListHeadCell__headerSwapVert {\n  color: #8c8989;\n}\n.vb-tableListHeadCell--noWrap {\n  white-space: nowrap;\n}\n\n.vb-tableListHead {\n  height: 1.875rem;\n  background-color: #f7f5f5;\n}\n.vb-tableListHead--fixedHeader {\n  position: sticky;\n  top: 0;\n  z-index: 2;\n}\n\n.vb-tableListRow.vb-tableListRow--clickable {\n  cursor: pointer;\n}\n.vb-withSideContent {\n  display: flex;\n  justify-content: space-between;\n}\n.vb-withSideContent--alignTop {\n  align-items: flex-start;\n}\n.vb-withSideContent--alignMiddle {\n  align-items: center;\n}\n.vb-withSideContent--alignBottom {\n  align-items: flex-end;\n}\n.vb-withSideContent__content {\n  flex-grow: 1;\n}\n.vb-withSideContent__sideContent {\n  flex-shrink: 0;\n}\n\n.vb-withDescriptionContent {\n  display: flex;\n  flex-direction: column-reverse;\n}\n.vb-withDescriptionContent--horizontal {\n  flex-direction: row-reverse;\n  align-items: center;\n}\n.vb-withDescriptionContent--verticalReverse {\n  flex-direction: column;\n}\n.vb-withDescriptionContent__content {\n  flex-grow: 0;\n}\n.vb-withDescriptionContent__description {\n  flex-grow: 1;\n}\n\n.vb-stack {\n  display: flex;\n}\n.vb-stack > * {\n  flex-shrink: 0;\n}\n.vb-stack--inline {\n  display: inline-flex;\n}\n.vb-stack--directionVertical {\n  flex-direction: column;\n}\n.vb-stack--directionHorizontal {\n  flex-direction: row;\n}\n.vb-stack--directionVerticalReverse {\n  flex-direction: column-reverse;\n}\n.vb-stack--directionHorizontalReverse {\n  flex-direction: row-reverse;\n}\n.vb-stack--gap25 {\n  gap: 0.25rem;\n}\n.vb-stack--gap50 {\n  gap: 0.5rem;\n}\n.vb-stack--gap100 {\n  gap: 1rem;\n}\n.vb-stack--gap150 {\n  gap: 1.5rem;\n}\n.vb-stack--gap200 {\n  gap: 2rem;\n}\n.vb-stack--gap300 {\n  gap: 3rem;\n}\n.vb-stack--justifyContentStart {\n  justify-content: start;\n}\n.vb-stack--justifyContentEnd {\n  justify-content: end;\n}\n.vb-stack--justifyContentCenter {\n  justify-content: center;\n}\n.vb-stack--justifyContentSpaceBetween {\n  justify-content: space-between;\n}\n.vb-stack--alignItemsStrech {\n  align-items: stretch;\n}\n.vb-stack--alignItemsCenter {\n  align-items: center;\n}\n.vb-stack--alignItemsStart {\n  align-items: start;\n}\n.vb-stack--alignItemsEnd {\n  align-items: end;\n}\n.vb-stack--wrapWrap {\n  flex-wrap: wrap;\n}\n.vb-stack--wrapNowrap {\n  flex-wrap: nowrap;\n}\n\n.vb-message {\n  display: inline-flex;\n  vertical-align: middle;\n}\n.vb-message__icon {\n  flex-shrink: 0;\n}\n.vb-message__content {\n  display: inline-block;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  padding-top: 0.09375rem;\n}\n\n.vb-ma25 {\n  margin: 0.25rem;\n}\n\n.vb-mt25 {\n  margin-top: 0.25rem;\n}\n\n.vb-mb25 {\n  margin-bottom: 0.25rem;\n}\n\n.vb-ml25 {\n  margin-left: 0.25rem;\n}\n\n.vb-mr25 {\n  margin-right: 0.25rem;\n}\n\n.vb-ma-25 {\n  margin: -0.25rem;\n}\n\n.vb-mt-25 {\n  margin-top: -0.25rem;\n}\n\n.vb-mb-25 {\n  margin-bottom: -0.25rem;\n}\n\n.vb-ml-25 {\n  margin-left: -0.25rem;\n}\n\n.vb-mr-25 {\n  margin-right: -0.25rem;\n}\n\n.vb-ma50 {\n  margin: 0.5rem;\n}\n\n.vb-mt50 {\n  margin-top: 0.5rem;\n}\n\n.vb-mb50 {\n  margin-bottom: 0.5rem;\n}\n\n.vb-ml50 {\n  margin-left: 0.5rem;\n}\n\n.vb-mr50 {\n  margin-right: 0.5rem;\n}\n\n.vb-ma-50 {\n  margin: -0.5rem;\n}\n\n.vb-mt-50 {\n  margin-top: -0.5rem;\n}\n\n.vb-mb-50 {\n  margin-bottom: -0.5rem;\n}\n\n.vb-ml-50 {\n  margin-left: -0.5rem;\n}\n\n.vb-mr-50 {\n  margin-right: -0.5rem;\n}\n\n.vb-ma100 {\n  margin: 1rem;\n}\n\n.vb-mt100 {\n  margin-top: 1rem;\n}\n\n.vb-mb100 {\n  margin-bottom: 1rem;\n}\n\n.vb-ml100 {\n  margin-left: 1rem;\n}\n\n.vb-mr100 {\n  margin-right: 1rem;\n}\n\n.vb-ma-100 {\n  margin: -1rem;\n}\n\n.vb-mt-100 {\n  margin-top: -1rem;\n}\n\n.vb-mb-100 {\n  margin-bottom: -1rem;\n}\n\n.vb-ml-100 {\n  margin-left: -1rem;\n}\n\n.vb-mr-100 {\n  margin-right: -1rem;\n}\n\n.vb-ma150 {\n  margin: 1.5rem;\n}\n\n.vb-mt150 {\n  margin-top: 1.5rem;\n}\n\n.vb-mb150 {\n  margin-bottom: 1.5rem;\n}\n\n.vb-ml150 {\n  margin-left: 1.5rem;\n}\n\n.vb-mr150 {\n  margin-right: 1.5rem;\n}\n\n.vb-ma-150 {\n  margin: -1.5rem;\n}\n\n.vb-mt-150 {\n  margin-top: -1.5rem;\n}\n\n.vb-mb-150 {\n  margin-bottom: -1.5rem;\n}\n\n.vb-ml-150 {\n  margin-left: -1.5rem;\n}\n\n.vb-mr-150 {\n  margin-right: -1.5rem;\n}\n\n.vb-ma200 {\n  margin: 2rem;\n}\n\n.vb-mt200 {\n  margin-top: 2rem;\n}\n\n.vb-mb200 {\n  margin-bottom: 2rem;\n}\n\n.vb-ml200 {\n  margin-left: 2rem;\n}\n\n.vb-mr200 {\n  margin-right: 2rem;\n}\n\n.vb-ma-200 {\n  margin: -2rem;\n}\n\n.vb-mt-200 {\n  margin-top: -2rem;\n}\n\n.vb-mb-200 {\n  margin-bottom: -2rem;\n}\n\n.vb-ml-200 {\n  margin-left: -2rem;\n}\n\n.vb-mr-200 {\n  margin-right: -2rem;\n}\n\n.vb-ma300 {\n  margin: 3rem;\n}\n\n.vb-mt300 {\n  margin-top: 3rem;\n}\n\n.vb-mb300 {\n  margin-bottom: 3rem;\n}\n\n.vb-ml300 {\n  margin-left: 3rem;\n}\n\n.vb-mr300 {\n  margin-right: 3rem;\n}\n\n.vb-ma-300 {\n  margin: -3rem;\n}\n\n.vb-mt-300 {\n  margin-top: -3rem;\n}\n\n.vb-mb-300 {\n  margin-bottom: -3rem;\n}\n\n.vb-ml-300 {\n  margin-left: -3rem;\n}\n\n.vb-mr-300 {\n  margin-right: -3rem;\n}\n\n.vb-ma-auto {\n  margin: auto;\n}\n\n.vb-mt-auto {\n  margin-top: auto;\n}\n\n.vb-mb-auto {\n  margin-bottom: auto;\n}\n\n.vb-ml-auto {\n  margin-left: auto;\n}\n\n.vb-mr-auto {\n  margin-right: auto;\n}\n\n.vb-spinner {\n  display: inline-block;\n  vertical-align: middle;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  position: relative;\n}\n.vb-spinner--large {\n  width: 1.75rem;\n  height: 1.75rem;\n}\n.vb-spinner__base {\n  position: absolute;\n  top: -0.25rem;\n  left: -0.25rem;\n}\n.vb-spinner__fade-enter-active, .vb-spinner__fade-enter-done {\n  opacity: 1;\n  transition: opacity 0.3s ease;\n}\n.vb-spinner__animation {\n  width: 1.5rem;\n  height: 1.5rem;\n}\n.vb-spinner__animation--large {\n  width: 2.25rem;\n  height: 2.25rem;\n}\n\n@keyframes keyframes__vb-progressBar__indeterminateBar {\n  0% {\n    transform: translate(-100%, 0);\n  }\n  100% {\n    transform: translate(250%, 0);\n  }\n}\n.vb-progressBar {\n  height: 0.5rem;\n  width: 11rem;\n  position: relative;\n  border-radius: 99rem;\n  display: inline-block;\n  background-color: #e9e7e7;\n  overflow: hidden;\n}\n.vb-progressBar--widthLarge {\n  width: 24rem;\n}\n.vb-progressBar--widthSmall {\n  width: 7rem;\n}\n.vb-progressBar--widthXSmall {\n  width: 4rem;\n}\n.vb-progressBar--widthFull {\n  width: 100%;\n}\n.vb-progressBar--progressing {\n  background-color: #dce8ff;\n}\n.vb-progressBar__valueBar, .vb-progressBar__indeterminateBar {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  background-color: #2864f0;\n  border-radius: 99rem;\n}\n.vb-progressBar__valueBar--complete, .vb-progressBar__indeterminateBar--complete {\n  background-color: #73a5ff;\n}\n.vb-progressBar__indeterminateBar {\n  width: 40%;\n  border-radius: 99rem;\n  animation-name: keyframes__vb-progressBar__indeterminateBar;\n  animation-duration: 1.6s;\n  animation-iteration-count: infinite;\n  animation-direction: normal;\n  animation-timing-function: ease-in-out;\n}\n@media (prefers-reduced-motion) {\n  .vb-progressBar__indeterminateBar {\n    animation-name: none;\n  }\n}\n\n/** @define accordionPanel */\n.vb-accordionPanel {\n  display: block;\n  box-sizing: border-box;\n  position: relative;\n  background-color: #fff;\n  transition-duration: 0.2s;\n}\n.vb-accordionPanel__title {\n  display: block;\n  padding: 1rem 3rem 1rem 1.5rem;\n  margin: 0;\n  font-size: 0.875rem;\n  line-height: 1;\n  position: relative;\n  cursor: pointer;\n  transition: background-color 0.2s;\n}\n.vb-accordionPanel__title:hover {\n  background-color: #ebf3ff;\n}\n@media (max-width: 48rem) {\n  .vb-accordionPanel__title--responsive {\n    padding-left: 1rem;\n    padding-right: 2.5rem;\n  }\n}\n.vb-accordionPanel__icon {\n  display: block;\n  width: 1.5rem;\n  height: 1.5rem;\n  position: absolute;\n  top: 50%;\n  right: 1.5rem;\n  transform: translateY(-50%);\n}\n@media (max-width: 48rem) {\n  .vb-accordionPanel__icon--responsive {\n    right: 1rem;\n  }\n}\n.vb-accordionPanel__description {\n  padding: 0.5rem 1.5rem;\n  margin: 0;\n  font-size: 0.875rem;\n}\n.vb-accordionPanel--borderBoth {\n  border-width: 1px 0;\n  border-style: solid;\n  border-color: #e9e7e7;\n}\n.vb-accordionPanel--borderBottom {\n  border-bottom: 1px solid #e9e7e7;\n}\n.vb-accordionPanel--borderTop {\n  border-top: 1px solid #e9e7e7;\n}\n@media (max-width: 48rem) {\n  .vb-accordionPanel--responsive {\n    padding-left: 1rem;\n    padding-right: 1rem;\n  }\n}\n\n/** @define bulletedList */\n.vb-bulletedList {\n  font-size: 0.875rem;\n}\n.vb-bulletedList__list {\n  list-style-type: disc;\n  padding: 0 0 0 1.5em;\n  margin: 0;\n}\n.vb-bulletedList__list--decimal {\n  list-style-type: decimal;\n}\n.vb-bulletedList__list__listItem {\n  margin: 0 0 0.5em;\n  line-height: 1.5;\n}\n.vb-bulletedList__list__listItem:last-child {\n  margin-bottom: 0;\n}\n.vb-bulletedList--small {\n  font-size: 0.75rem;\n}\n\n.vb-buttonGroup {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.vb-buttonGroup__topPair {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n.vb-buttonGroup__topPair:not(:last-child) {\n  margin: 0 1rem 0 0;\n}\n.vb-buttonGroup--alignLeft {\n  justify-content: flex-start;\n}\n.vb-buttonGroup__topItem:not(:last-child), .vb-buttonGroup__item:not(:last-child) {\n  margin: 0 1rem 0 0;\n}\n@media (max-width: 48rem) {\n  .vb-buttonGroup--responsive {\n    flex-direction: column;\n    width: 100%;\n  }\n  .vb-buttonGroup--responsive .vb-buttonGroup__topPair {\n    flex-direction: column;\n    margin-right: 0;\n  }\n  .vb-buttonGroup--responsive .vb-buttonGroup__topPair:not(:last-child) {\n    margin-bottom: 0.5rem;\n  }\n  .vb-buttonGroup--responsive .vb-buttonGroup__topPair--mobileButtonLayoutRow {\n    width: 100%;\n    flex-direction: row;\n    justify-content: space-between;\n  }\n  .vb-buttonGroup--responsive .vb-buttonGroup__topPair--mobileButtonLayoutRow:not(:last-child) {\n    margin-bottom: 0.5rem;\n  }\n  .vb-buttonGroup--responsive .vb-buttonGroup__topItem--mobileButtonLayoutRow {\n    flex-grow: 1;\n  }\n  .vb-buttonGroup--responsive .vb-buttonGroup__item,\n.vb-buttonGroup--responsive .vb-buttonGroup__topItem:not(.vb-buttonGroup__topItem--mobileButtonLayoutRow) {\n    margin: 0 auto 0.5rem;\n    min-width: 10rem;\n    text-align: center;\n  }\n  .vb-buttonGroup--responsive .vb-buttonGroup__item:last-child,\n.vb-buttonGroup--responsive .vb-buttonGroup__topItem:not(.vb-buttonGroup__topItem--mobileButtonLayoutRow):last-child {\n    margin-bottom: 0;\n  }\n  .vb-buttonGroup--responsive .vb-button:not(.vb-button--appearanceTertiary) {\n    width: 100%;\n  }\n}\n\n.vb-breadcrumbs__list {\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  margin: 0;\n  padding: 0;\n  line-height: 1;\n}\n.vb-breadcrumbs__item {\n  display: inline-flex;\n  align-items: center;\n  font-size: 0.875rem;\n}\n.vb-breadcrumbs__divider {\n  font-size: 1.5rem;\n}\n\n/** @define calendar */\n.vb-calendar {\n  width: 100%;\n  border-collapse: collapse;\n  table-layout: fixed;\n  min-width: 50rem;\n  position: relative;\n}\n.vb-calendar__inner {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n\n.vb-datePicker {\n  width: calc((2rem + 1px) * 7);\n  font-size: 0.875rem;\n  background: #fff;\n}\n.vb-datePicker__header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  box-sizing: border-box;\n  padding: 0.25rem;\n}\n.vb-datePicker__calendar {\n  width: 100%;\n  border-collapse: collapse;\n}\n.vb-datePicker__calendarHead, .vb-datePicker__calendarCell {\n  text-align: center;\n  width: 2rem;\n  box-sizing: border-box;\n}\n.vb-datePicker__calendarHead {\n  font-size: 0.75rem;\n  color: #6e6b6b;\n}\n.vb-datePicker__calendarCell {\n  position: relative;\n  border-top: 1px solid #e9e7e7;\n  border-right: 1px solid #e9e7e7;\n  box-sizing: border-box;\n  padding: 0;\n  width: 2rem;\n  height: 2rem;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n}\n.vb-datePicker__calendarCell:last-of-type {\n  border-right: 0;\n}\n.vb-datePicker__calendarCell--disabled {\n  background-color: #f7f5f5;\n  color: #8c8989;\n  cursor: not-allowed;\n  outline: none;\n}\n.vb-datePicker__calendarCell--selected {\n  background: #285ac8;\n  color: #fff;\n}\n.vb-datePicker__calendarCell--otherMonth {\n  background: #f7f5f5;\n}\n.vb-datePicker__calendarCell:hover:not(.vb-datePicker__calendarCell--disabled):not(.vb-datePicker__calendarCell--selected) {\n  background: #e9e7e7;\n}\n.vb-datePicker__dateButton::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n.vb-datePicker__dateNumber--today {\n  font-weight: bold;\n}\n\n.vb-cardNavigation {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n  align-items: stretch;\n}\n.vb-cardNavigation__item {\n  margin-bottom: 1rem;\n  margin-right: 1rem;\n}\n.vb-cardNavigation__item--1 {\n  margin-right: 0;\n}\n.vb-cardNavigation__content {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  min-height: 5rem;\n  width: 12.75rem;\n}\n.vb-cardNavigation__content--3 {\n  width: 18.3333333333rem;\n}\n.vb-cardNavigation__content--2 {\n  width: 29.5rem;\n}\n.vb-cardNavigation__content--1 {\n  width: 64rem;\n}\n.vb-cardNavigation__arrow {\n  flex-shrink: 0;\n}\n.vb-cardNavigation__icon {\n  width: 1.5rem;\n  height: 1.5rem;\n  fill: #285ac8;\n  margin-right: 1rem;\n  flex-shrink: 0;\n}\n.vb-cardNavigation__title {\n  display: flex;\n  justify-content: flex-start;\n}\n.vb-cardNavigation__title--text {\n  margin-bottom: 1rem;\n}\n.vb-cardNavigation__url {\n  text-decoration: initial;\n  color: initial;\n}\n\n.vb-comboBox {\n  display: inline;\n  position: relative;\n}\n.vb-comboBox__listBox {\n  display: none;\n}\n.vb-comboBox__listBox--open {\n  display: block;\n}\n.vb-comboBox__listBox--widthXSmall {\n  width: 6rem;\n}\n.vb-comboBox__listBox--widthSmall {\n  width: 9rem;\n}\n.vb-comboBox__listBox--widthMedium {\n  width: 13rem;\n}\n.vb-comboBox__listBox--widthLarge {\n  width: 26rem;\n}\n.vb-comboBox__listOptions {\n  overflow-y: auto;\n}\n.vb-comboBox__listOption {\n  padding: 0.5rem 1rem;\n  font-size: 0.875rem;\n  word-break: keep-all;\n  overflow: hidden;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n}\n.vb-comboBox__listOption--disabled {\n  background: inherit;\n  opacity: 0.5;\n  cursor: default;\n  pointer-events: none;\n}\n.vb-comboBox__listOption--selected:not(.vb-comboBox__listOption--disabled) {\n  background: #2864f0;\n  color: #fff;\n}\n.vb-comboBox__listOption:hover:not(.vb-comboBox__listOption--selected):not(.vb-comboBox__listOption--disabled) {\n  background: #f7f5f5;\n  color: #323232;\n  cursor: pointer;\n}\n.vb-comboBox__listOptionLabel {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex: 1 1 fit-content;\n}\n.vb-comboBox__listOptionSubLabel {\n  font: normal 0.75rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  color: #6e6b6b;\n  margin-left: 0.5rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex: 1 1 fit-content;\n  text-align: right;\n}\n.vb-comboBox__listOption--selected .vb-comboBox__listOptionSubLabel {\n  color: #fff;\n}\n\n.vb-comboBox__emptyMessage {\n  padding: 0.5rem 0.5rem;\n  text-align: center;\n}\n.vb-comboBox__spinner {\n  padding: 1rem;\n  text-align: center;\n}\n.vb-comboBox__fixedItem {\n  display: flex;\n  color: #285ac8;\n  font-weight: bold;\n  vertical-align: middle;\n  margin: -0.5rem -1rem;\n  padding: 0.5rem 1rem;\n}\n.vb-comboBox__fixedItem--add {\n  border-top: 1px solid #e9e7e7;\n}\n.vb-comboBox__fixedItem--selected {\n  background: #2864f0;\n  color: #fff;\n}\n.vb-comboBox__fixedItemIcon {\n  width: 1.5em;\n  height: 1.5em;\n  margin: -1px 0.25rem 0 0;\n}\n\n.vb-multiComboBox {\n  display: inline-block;\n}\n.vb-multiComboBox--widthXSmall {\n  width: 4rem;\n}\n.vb-multiComboBox--widthSmall {\n  width: 7rem;\n}\n.vb-multiComboBox--widthMedium {\n  width: 11rem;\n}\n.vb-multiComboBox--widthLarge {\n  width: 24rem;\n}\n.vb-multiComboBox--widthFull {\n  width: 100%;\n}\n.vb-multiComboBox__border {\n  line-height: 1;\n  vertical-align: middle;\n  margin: -1px;\n  display: inline-block;\n  overflow: hidden;\n  border: 1px solid #dcdcdc;\n  border-radius: 0.5rem;\n  background-color: #fff;\n  transition-duration: 0.2s;\n  transition-property: border-color, background-color, color;\n}\n.vb-multiComboBox__border--disabled {\n  background-color: #f0eded;\n  cursor: not-allowed;\n}\n.vb-multiComboBox__border--error {\n  border-color: #dc1e32;\n}\n.vb-multiComboBox__border--widthXSmall {\n  width: 4rem;\n}\n.vb-multiComboBox__border--widthSmall {\n  width: 7rem;\n}\n.vb-multiComboBox__border--widthMedium {\n  width: 11rem;\n}\n.vb-multiComboBox__border--widthLarge {\n  width: 24rem;\n}\n.vb-multiComboBox__border--widthFull {\n  width: 100%;\n}\n.vb-multiComboBox__flex {\n  width: 100%;\n  display: flex;\n  flex-wrap: wrap;\n  min-height: 2.25rem;\n}\n.vb-multiComboBox__field {\n  flex-grow: 1;\n  flex-shrink: 1;\n  flex-basis: 1rem;\n}\n.vb-multiComboBox__field--maxSelectionCountReached {\n  width: 1px;\n  height: 1px;\n  clip: rect(1px 1px 1px 1px);\n  position: absolute;\n  left: 0;\n  top: 0;\n  overflow: hidden;\n}\n.vb-multiComboBox__list {\n  flex-grow: 0;\n  flex-shrink: 0;\n  flex-basis: fit-content;\n  max-width: 100%;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n}\n.vb-multiComboBox__listItem {\n  margin: 0.25rem;\n  max-width: calc(100% - 0.5rem);\n}\n\n.vb-descriptionList__table {\n  width: 100%;\n  border: none;\n  border-collapse: collapse;\n  border-spacing: 0;\n  background-color: #fff;\n}\n.vb-descriptionList__header {\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  clip: rect(1px 1px 1px 1px);\n}\n.vb-descriptionList__row {\n  height: 3.25rem;\n}\n.vb-descriptionList__row--spacingCompact {\n  height: 2rem;\n}\n.vb-descriptionList__row:nth-child(2n+1) {\n  background-color: #f7f5f5;\n}\n.vb-descriptionList__row:nth-child(2n):last-child {\n  border-bottom: 1px solid #e9e7e7;\n}\n@media (max-width: 48rem) {\n  .vb-descriptionList--responsive {\n    display: block;\n    width: 100%;\n  }\n  .vb-descriptionList--responsive .vb-descriptionList__row {\n    height: auto;\n    display: block;\n  }\n}\n\n.vb-dateInput {\n  display: inline;\n  position: relative;\n}\n.vb-dateInput__listbox {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n.vb-dateInput__listbox--rightAligned {\n  left: unset;\n  right: 0;\n}\n\n.vb-ReactModal__Body--open {\n  overflow: hidden;\n}\n\n.ReactModal__Overlay {\n  opacity: 0;\n  transition: opacity 300ms ease;\n}\n\n.ReactModal__Overlay--after-open {\n  opacity: 1;\n}\n\n.ReactModal__Overlay--before-close {\n  opacity: 0;\n}\n\n.vb-messageDialog {\n  max-width: 70rem;\n  min-width: 40rem;\n  max-height: calc(100vh - 2rem);\n}\n.vb-messageDialog__inner {\n  text-align: center;\n  display: flex;\n  flex-direction: column;\n}\n.vb-messageDialog__header, .vb-messageDialog__footer {\n  padding: 1.5rem;\n}\n.vb-messageDialog__body {\n  padding: 0 1.5rem;\n}\n.vb-messageDialog__body--alignLeft {\n  text-align: left;\n}\n@media (max-width: 48rem) {\n  .vb-messageDialog--responsive {\n    margin: 0 1rem;\n    min-width: 18rem;\n  }\n  .vb-messageDialog--responsive .vb-messageDialog__header, .vb-messageDialog--responsive .vb-messageDialog__footer {\n    padding: 1rem;\n  }\n  .vb-messageDialog--responsive .vb-messageDialog__body {\n    padding-left: 1rem;\n    padding-right: 1rem;\n  }\n}\n\n.vb-taskDialog {\n  max-width: 70rem;\n  min-width: 40rem;\n}\n.vb-taskDialog__inner {\n  overflow-y: auto;\n}\n.vb-taskDialog__flex {\n  display: flex;\n  flex-direction: column;\n  max-height: calc(100vh - 2rem);\n  max-height: calc(100svh - 2rem);\n  min-height: 12rem;\n}\n.vb-taskDialog__header, .vb-taskDialog__footer {\n  background-color: #fff;\n  padding: 1.5rem;\n}\n.vb-taskDialog__body {\n  border-top: 1px solid #e9e7e7;\n  border-bottom: 1px solid #e9e7e7;\n  margin: 0;\n  padding: 1.5rem;\n  overflow: auto;\n  background-color: #fff;\n  min-height: 3rem;\n}\n@media (max-width: 48rem) {\n  .vb-taskDialog--responsive {\n    margin: 0 1rem;\n    min-width: 18rem;\n  }\n  .vb-taskDialog--responsive .vb-taskDialog__header, .vb-taskDialog--responsive .vb-taskDialog__footer {\n    padding: 1rem;\n  }\n  .vb-taskDialog--responsive .vb-taskDialog__body {\n    padding: 1rem;\n  }\n}\n\n.vb-guideDialog {\n  text-align: center;\n  width: 40rem;\n}\n@media (max-width: 40rem) {\n  .vb-guideDialog {\n    margin: 0 1rem;\n    width: auto;\n    min-width: 10rem;\n  }\n}\n.vb-guideDialog__inner {\n  display: flex;\n  flex-direction: column;\n  max-height: calc(100vh - 5rem);\n}\n.vb-guideDialog__header {\n  display: flex;\n  justify-content: space-between;\n  flex-direction: row-reverse;\n}\n.vb-guideDialog__footer {\n  display: flex;\n  justify-content: space-between;\n}\n.vb-guideDialog__body {\n  overflow: auto;\n  background-color: #fff;\n  min-height: 3rem;\n}\n.vb-guideDialog__image {\n  width: 320px;\n  height: 240px;\n  margin-bottom: 1rem;\n}\n@media (max-width: 48rem) {\n  .vb-guideDialog__image {\n    width: 240px;\n    height: 180px;\n  }\n}\n.vb-guideDialog__buttonBlock {\n  display: flex;\n  justify-content: space-between;\n}\n.vb-guideDialog__closeButtonBlock {\n  display: flex;\n  justify-content: space-between;\n  flex-direction: row-reverse;\n}\n\n.vb-guideStepCount {\n  color: #6e6b6b;\n}\n.vb-guideStepCount__currentStep {\n  font-weight: bold;\n}\n\n.vb-DialogFooter {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n@media (max-width: 48rem) {\n  .vb-DialogFooter--responsive {\n    justify-content: center;\n    flex-direction: column;\n  }\n}\n@media (max-width: 48rem) {\n  .vb-DialogFooter__sideContent--responsive {\n    margin-top: 1rem;\n  }\n}\n\n.vb-listButtonSelector__button--disabled, .vb-dropdownItem--disabled, .vb-button--disabled, .vb-pagerButton--disabled, .vb-iconOnlyButton--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n.vb-listButtonSelector__button--disabled:hover, .vb-dropdownItem--disabled:hover, .vb-button--disabled:hover, .vb-pagerButton--disabled:hover, .vb-iconOnlyButton--disabled:hover {\n  cursor: not-allowed;\n}\n\n.vb-dropdown {\n  position: relative;\n  text-align: left;\n  font-size: 0.875rem;\n}\n.vb-dropdown__body {\n  position: absolute;\n  top: 0;\n  width: auto;\n}\n.vb-dropdown--alignRight .vb-dropdown__body {\n  right: 0;\n}\n.vb-dropdown--positionRelative .vb-dropdown__body {\n  position: relative;\n}\n\n.vb-dropdownMenuContent__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  max-height: 60vh;\n  overflow-y: auto;\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n.vb-dropdownMenuContent__list li:first-child > *::before {\n  border-top-left-radius: 1rem;\n  border-top-right-radius: 1rem;\n}\n.vb-dropdownMenuContent__list li:last-child > *::before {\n  border-bottom-left-radius: 1rem;\n  border-bottom-right-radius: 1rem;\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .vb-dropdownMenuContent__list {\n    display: block;\n  }\n}\n\n.vb-dropdownItem {\n  width: 100%;\n}\n.vb-dropdownItem--selectable:not(.vb-dropdownItem--disabled) {\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n}\n.vb-dropdownItem--selectable:not(.vb-dropdownItem--disabled):hover {\n  background-color: #f7f5f5;\n}\n.vb-dropdownItem--unread {\n  background-image: linear-gradient(135deg, #dc1e32 10px, transparent 0);\n}\n.vb-dropdownItem--rule {\n  height: 0;\n  min-height: 0;\n  padding: 0;\n  border-top: 1px solid #e9e7e7;\n}\n.vb-dropdownItem__text {\n  font-size: 0.875rem;\n  line-height: 1.5rem;\n  padding: 0.46875rem 1rem;\n  width: 100%;\n  display: inline-block;\n  box-sizing: border-box;\n}\n.vb-dropdownItem__content, .vb-dropdownItem__checkBoxItem {\n  display: block;\n  min-width: 10rem;\n  max-width: 42rem;\n  max-width: min(42rem, calc(100vw - 6rem));\n  width: max-content;\n}\n.vb-dropdownItem__content--danger {\n  color: #dc1e32;\n}\n.vb-dropdownItem__checkBoxItem {\n  font-size: 0.875rem;\n  line-height: 1.5rem;\n  padding: 0.46875rem 1rem;\n}\n.vb-dropdownItem__selectable {\n  cursor: pointer;\n  background: transparent;\n  padding: 0.46875rem 1rem;\n  line-height: 1.5;\n  font-size: 0.875rem;\n  border: 0;\n  text-align: left;\n  width: 100%;\n  color: #323232;\n  text-decoration: none;\n  display: block;\n  box-sizing: border-box;\n  position: relative;\n  overflow: hidden;\n}\n.vb-dropdownItem__selectable--rightIcon {\n  padding-right: 3rem;\n}\n.vb-dropdownItem__selectable:focus {\n  outline: none;\n}\n.vb-dropdownItem__selectable:focus::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  border: 2px solid #73a5ff;\n}\n.vb-dropdownItem__rightIcon {\n  position: absolute;\n  top: 50%;\n  right: 0.5rem;\n  transform: translateY(-50%);\n  height: 1.5rem;\n  width: 1.5rem;\n}\n\n.vb-dropdownButton {\n  display: inline-block;\n}\n\n.vb-nameField--small {\n  margin: 0 0.25rem;\n}\n.vb-nameField--error {\n  color: #dc1e32;\n}\n.vb-nameField--disabled {\n  color: #e9e7e7;\n}\n\n.vb-phoneNumberField {\n  display: flex;\n  align-items: center;\n}\n.vb-phoneNumberField .vb-phoneNumberField__hyphen {\n  margin: 0 0.5rem;\n}\n.vb-phoneNumberField .vb-phoneNumberField__hyphen--small {\n  margin: 0 0.25rem;\n}\n.vb-phoneNumberField .vb-phoneNumberField__hyphen--error {\n  color: #dc1e32;\n}\n.vb-phoneNumberField .vb-phoneNumberField__hyphen--disabled {\n  color: #e9e7e7;\n}\n\n.vb-dateField .vb-dateField__unit {\n  margin: 0 0.5rem;\n  font: normal 0.875rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n.vb-dateField .vb-dateField__unit--small {\n  margin: 0 0.25rem;\n  font-size: 0.6875rem;\n}\n\n.vb-amountRangeField {\n  display: inline-flex;\n  align-items: center;\n}\n\n.vb-filterTag__block {\n  display: flex;\n  align-items: center;\n  box-sizing: border-box;\n  padding: 0 0.5rem;\n  border-radius: 0.75rem;\n  height: 1.5rem;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color, border;\n  color: #464343;\n  background-color: #fff;\n  border: 1px solid #8c8989;\n}\n.vb-filterTag__block .vb-filterTag__icon {\n  width: 1rem;\n  height: 1rem;\n  margin-left: 0.5rem;\n  transition-duration: 0.2s;\n  transition-property: fill;\n  fill: #464343;\n}\n.vb-filterTag__block:hover {\n  background-color: #f0eded;\n}\n.vb-filterTag__block:active {\n  background-color: #e9e7e7;\n}\n.vb-filterTag__block.active {\n  color: #285ac8;\n  background-color: #ebf3ff;\n  border-color: #285ac8;\n}\n.vb-filterTag__block.active .vb-filterTag__icon {\n  fill: #285ac8;\n}\n.vb-filterTag__block.active:hover {\n  background-color: #dce8ff;\n}\n.vb-filterTag__block.active:active {\n  background-color: #aac8ff;\n}\n.vb-filterTag__body {\n  font-size: 0.75rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vb-fileUploader {\n  width: 32.75rem;\n  height: 19.625rem;\n  background-color: #f7f5f5;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n  position: relative;\n  border-radius: 0.5rem;\n}\n.vb-fileUploader__content, .vb-fileUploader__dropMessage, .vb-fileUploader__errorMessage {\n  text-align: center;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  transition-duration: 0.2s;\n  transition-property: opacity;\n}\n.vb-fileUploader__content {\n  opacity: 1;\n}\n.vb-fileUploader__content--disabled {\n  cursor: default;\n}\n.vb-fileUploader__dropMessage, .vb-fileUploader__errorMessage {\n  opacity: 0;\n}\n.vb-fileUploader--widthFull {\n  width: 100%;\n  height: 100%;\n}\n.vb-fileUploader--typeCompact .vb-fileUploader__content,\n.vb-fileUploader--typeCompact .vb-fileUploader__dropMessage {\n  display: flex;\n  align-items: center;\n}\n.vb-fileUploader--typeCompact .vb-fileUploader__contentIllust {\n  flex: 1;\n  margin: 0;\n}\n.vb-fileUploader--typeCompact .vb-fileUploader__contentDescription {\n  flex: 1;\n  margin: 0 1rem;\n}\n.vb-fileUploader--active {\n  background-color: #f0eded;\n}\n.vb-fileUploader--active .vb-illust--cloudUpload .vb-illust__frame {\n  fill: #8c8989;\n}\n.vb-fileUploader--active .vb-fileUploader__content {\n  opacity: 0;\n}\n.vb-fileUploader--active .vb-fileUploader__dropMessage {\n  opacity: 1;\n}\n.vb-fileUploader--error .vb-fileUploader__content {\n  opacity: 0;\n}\n.vb-fileUploader--error .vb-fileUploader__errorMessage {\n  opacity: 1;\n}\n.vb-fileUploader__icon {\n  width: 3rem;\n  height: 3rem;\n  margin-bottom: 1rem;\n  fill: #5a5a5a;\n}\n\n.vb-fileDropArea {\n  width: auto;\n  height: auto;\n  position: relative;\n}\n.vb-fileDropArea__fade-enter, .vb-fileDropArea__fade-exit {\n  opacity: 0;\n  transition: opacity 0.3s ease;\n}\n.vb-fileDropArea__fade-enter-active, .vb-fileDropArea__fade-enter-done {\n  opacity: 1;\n  transition: opacity 0.3s ease;\n}\n.vb-fileDropArea__overlay {\n  z-index: 100;\n  border: dashed 2px #2864f0;\n  transition-duration: 0.2s;\n  transition-property: opacity;\n  background-color: rgba(40, 100, 240, 0.1);\n  position: absolute;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  flex-direction: column;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  backdrop-filter: blur(1px);\n}\n.vb-fileDropArea__overlay--disabled {\n  cursor: not-allowed;\n  border: dashed 2px #5a5a5a;\n  background-color: rgba(90, 90, 90, 0.1);\n}\n.vb-fileDropArea__icon {\n  fill: #143278;\n}\n.vb-fileDropArea__icon--disabled {\n  width: 3rem;\n  height: 3rem;\n  margin-bottom: 1rem;\n  fill: #5a5a5a;\n}\n.vb-fileDropArea__contentDescription {\n  color: #143278;\n  font-weight: bold;\n}\n.vb-fileDropArea__contentDescription--disabled {\n  color: #5a5a5a;\n}\n\n.vb-footer {\n  display: flex;\n  max-width: 70rem;\n  width: calc(100vw - 3rem);\n  margin-left: auto;\n  margin-right: auto;\n  flex-wrap: nowrap;\n  justify-content: space-between;\n}\n@media (max-width: 48rem) {\n  .vb-footer {\n    width: calc(100vw - 1rem);\n    flex-direction: column;\n  }\n}\n.vb-footer--widthWide {\n  max-width: 100rem;\n}\n.vb-footer--widthNarrow {\n  max-width: 40rem;\n}\n.vb-footerLinks {\n  display: block;\n  padding: 0;\n  margin: 0 0 1rem;\n  list-style: none;\n  overflow: hidden;\n}\n.vb-footerLinks__item {\n  display: block;\n  margin-right: 1rem;\n  float: left;\n  line-height: 1;\n}\n.vb-footerLinks__item:last-child {\n  margin-right: 0;\n}\n.vb-footerLinks__item > a {\n  color: #323232;\n  font-size: 0.875rem;\n  font-weight: normal;\n  text-decoration: underline;\n  transition-duration: 0.2s;\n  transition-property: color;\n}\n.vb-footerLinks__item > a:hover {\n  color: #6e6b6b;\n}\n.vb-footerCopyright {\n  display: block;\n  font-size: 0.75rem;\n  font-style: normal;\n  line-height: 1;\n}\n.vb-footerBadges {\n  display: block;\n  padding: 0;\n  margin: 0;\n  list-style: none;\n  overflow: hidden;\n}\n@media (max-width: 48rem) {\n  .vb-footerBadges {\n    margin-top: 1.5rem;\n  }\n}\n.vb-footerBadges__item {\n  display: block;\n  margin-right: 1rem;\n  float: left;\n}\n.vb-footerBadges__item:last-child {\n  margin-right: 0;\n}\n@media (max-width: 48rem) {\n  .vb-footerSection {\n    margin-top: 1.5rem;\n  }\n}\n\n/** @define formControlGroup */\n.vb-formControlGroup {\n  display: flex;\n  flex-wrap: wrap;\n}\n.vb-formControlGroup--block {\n  display: block;\n}\n\n/** @define formControl */\n.vb-formControl {\n  max-width: 100%;\n}\n.vb-formControl__legend {\n  padding: 0;\n}\n.vb-formControl__labelArea {\n  display: flex;\n  align-items: flex-end;\n  min-height: 1.5rem;\n  margin-bottom: 0.25rem;\n}\n.vb-formControl__fieldset {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  min-inline-size: 0;\n  max-width: 100%;\n}\n\n.vb-formActions--fixed {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background-color: #fff;\n  z-index: 200;\n}\n.vb-formActions--fixed .vb-popupBase {\n  border-radius: initial;\n}\n.vb-formActions__inner {\n  box-sizing: border-box;\n  max-width: 70rem;\n  margin: 0 auto;\n  padding: 0 1.5rem;\n}\n.vb-formActions__inner--widthWide {\n  max-width: 100rem;\n}\n.vb-formActions__inner--widthNarrow {\n  max-width: 40rem;\n  min-width: 40rem;\n}\n.vb-formActions__animation-enter, .vb-formActions__animation-exit {\n  transform: translateY(100%);\n  transition: transform 0.3s ease;\n}\n.vb-formActions__animation-enter-active, .vb-formActions__animation-enter-done {\n  transform: translateY(0);\n  transition: transform 0.3s ease;\n}\n\n.vb-globalNavi {\n  display: flex;\n  box-sizing: border-box;\n  min-width: 73rem;\n  padding: 0 1.5rem;\n  background-color: #285ac8;\n  box-sizing: border-box;\n  background-color: #fff;\n  border-bottom: 1px solid #2864f0;\n  height: 3rem;\n  flex-wrap: nowrap;\n  justify-content: space-between;\n  align-items: center;\n}\n.vb-globalNavi--disableGutters {\n  min-width: 70rem;\n}\n.vb-globalNaviList {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.vb-globalNaviList__item {\n  display: block;\n  float: left;\n}\n.vb-globalNaviList__itemInner {\n  display: block;\n  padding: 1rem;\n}\n\n.vb-guidanceMessage {\n  position: relative;\n  background-color: #ebf3ff;\n  color: #143278;\n  border-radius: 0.5rem;\n}\n.vb-guidanceMessage__content--alignMiddle {\n  display: flex;\n  align-items: center;\n}\n.vb-guidanceMessage--inline {\n  display: inline-block;\n}\n.vb-guidanceMessage--widthFitContent {\n  width: fit-content;\n}\n.vb-guidanceMessage--widthFull {\n  width: 100%;\n}\n.vb-guidanceMessage--clickable {\n  border-radius: 0.5rem;\n}\n.vb-guidanceMessage__container {\n  display: grid;\n  display: -ms-grid;\n  grid-template-columns: auto 1fr;\n  -ms-grid-columns: auto 1fr;\n  padding: 1rem;\n}\n@media (max-width: 48rem) {\n  .vb-guidanceMessage__container--responsive {\n    padding: 0.5rem;\n  }\n}\n.vb-guidanceMessage__container--alignTop {\n  align-items: flex-start;\n}\n.vb-guidanceMessage__container--alignMiddle {\n  align-items: center;\n}\n.vb-guidanceMessage__container--small {\n  padding: 0.25rem 0.5rem;\n}\n.vb-guidanceMessage__icon {\n  grid-column: 1/2;\n  -ms-grid-column: 1;\n  margin-right: 0.5rem;\n  font-size: 1.5rem;\n}\n.vb-guidanceMessage__link, .vb-guidanceMessage__button {\n  color: #143278;\n  text-decoration: none;\n  display: inline-block;\n  text-align: left;\n  border: 0;\n  background-color: transparent;\n  font-size: 0.875rem;\n  font-weight: bold;\n  padding: 0;\n  font-family: inherit;\n}\n.vb-guidanceMessage__link::before, .vb-guidanceMessage__button::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n}\n.vb-guidanceMessage__link:hover::before, .vb-guidanceMessage__button:hover::before {\n  background-color: rgba(40, 90, 200, 0.06);\n}\n\n/**  @define GuidContent */\n.vb-guidedContent {\n  display: grid;\n  grid-template-columns: auto min-content;\n  grid-template-rows: auto;\n}\n.vb-guidedContent__title {\n  grid-column: 1/-1;\n}\n.vb-guidedContent__guide {\n  grid-column: 3/-1;\n  grid-row: span 2;\n}\n@media (max-width: 48rem) {\n  .vb-guidedContent--responsive .vb-guidedContent__guide {\n    grid-column: 1/-1;\n  }\n}\n\n/** @define Header */\n.vb-header {\n  box-sizing: border-box;\n  min-width: 73rem;\n  height: 5rem;\n  padding: 1rem 1.5rem;\n  display: flex;\n  justify-content: space-between;\n  background-color: #fff;\n  font-size: 0.75rem;\n  padding: 0.75rem 1.5rem 0.25rem;\n  height: 4rem;\n}\n.vb-header--disableGutters {\n  min-width: 70rem;\n}\n.vb-header .vb-header__logo {\n  width: fit-content;\n}\n.vb-header .vb-header__info {\n  text-align: center;\n  display: flex;\n  align-items: flex-end;\n  width: fit-content;\n}\n.vb-header .vb-header__children {\n  display: flex;\n  flex: 1;\n  padding: 0 2rem;\n  align-items: center;\n}\n.vb-header .vb-header__plan {\n  display: inline-block;\n  box-sizing: border-box;\n  padding: 0 0.2em;\n  margin-bottom: -0.1em;\n  font-weight: bold;\n  border: 1px solid #285ac8;\n  color: #285ac8;\n  text-decoration: none;\n}\n.vb-header .vb-header__icon {\n  vertical-align: middle;\n  width: 1rem;\n  height: 1rem;\n}\n.vb-header .vb-header__icon--notice {\n  color: #be8c14;\n}\n.vb-header .vb-header__icon--alert {\n  color: #dc1e32;\n}\n.vb-header .vb-header__text {\n  vertical-align: middle;\n}\n.vb-header .vb-header__link {\n  color: #323232;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n}\n.vb-header .vb-header__link:hover {\n  background-color: #f7f5f5;\n}\n.vb-header .vb-header__button {\n  color: #323232;\n  display: inline;\n  border: 0;\n  background: transparent;\n  padding: 0;\n  text-decoration: underline;\n  cursor: pointer;\n  font-size: 0.75rem;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n}\n.vb-header .vb-header__button--active {\n  background-color: #f0eded;\n}\n.vb-header .vb-header__button:hover {\n  background-color: #f7f5f5;\n}\n.vb-header .vb-header__icon + .vb-header__text {\n  margin-left: 0.2em;\n}\n.vb-header .vb-header__section {\n  position: relative;\n}\n.vb-header .vb-header__section:not(:last-child) {\n  margin-right: 1em;\n}\n.vb-header .vb-header__dropdownWrapper {\n  padding-bottom: 8px;\n}\n.vb-header .vb-header__badge {\n  width: 0.5rem;\n  height: 0.5rem;\n  border-radius: 99rem;\n  background: #dc1e32;\n  display: block;\n  position: absolute;\n  top: 0.25rem;\n  left: 0.5rem;\n  border: solid 1px white;\n}\n\n.vb-headlineArea {\n  display: block;\n  padding-bottom: 2rem;\n  position: relative;\n}\n\n/** @define indexSearchField */\n.vb-indexSearchField {\n  display: inline-block;\n  position: relative;\n  max-width: 100%;\n}\n.vb-indexSearchField--widthFull {\n  width: 100%;\n}\n.vb-indexSearchField .vb-indexSearchField__icon {\n  display: block;\n  width: 1.5em;\n  height: 1.5em;\n  position: absolute;\n  top: 50%;\n  left: 0.5em;\n  pointer-events: none;\n  transform: translateY(-50%);\n  transition: left 0.3s ease, fill 0.3s ease;\n}\n.vb-indexSearchField .vb-indexSearchField__icon--searchAreaClosed {\n  left: 0.375em;\n  pointer-events: none;\n}\n.vb-indexSearchField .vb-indexSearchField__input {\n  padding-left: 2.75em;\n  max-width: 100%;\n  transition: width 0.3s ease, background-color 0.3s ease, border-color 0.3s ease;\n}\n.vb-indexSearchField .vb-indexSearchField__input::placeholder {\n  opacity: 1;\n  transition: opacity 0.3s ease;\n}\n.vb-indexSearchField .vb-indexSearchField__input::-webkit-search-cancel-button {\n  cursor: pointer;\n}\n.vb-indexSearchField .vb-indexSearchField__input + svg {\n  fill: #e9e7e7;\n}\n.vb-indexSearchField .vb-indexSearchField__input--widthXSmall {\n  width: 4rem;\n}\n.vb-indexSearchField .vb-indexSearchField__input--widthSmall {\n  width: 7rem;\n}\n.vb-indexSearchField .vb-indexSearchField__input--widthMedium {\n  width: 11rem;\n}\n.vb-indexSearchField .vb-indexSearchField__input--widthLarge {\n  width: 24rem;\n}\n.vb-indexSearchField .vb-indexSearchField__input--widthFull {\n  width: 100%;\n}\n.vb-indexSearchField .vb-indexSearchField__input--searchAreaClosed {\n  width: 2.25rem;\n  padding: 0;\n  cursor: pointer;\n}\n.vb-indexSearchField .vb-indexSearchField__input--searchAreaClosed::placeholder {\n  opacity: 0;\n}\n.vb-indexSearchField .vb-indexSearchField__input:not(.vb-indexSearchField .vb-indexSearchField__input--disabled):hover {\n  background-color: #dce8ff;\n  border-color: #1e46aa;\n}\n.vb-indexSearchField .vb-indexSearchField__input:not(.vb-indexSearchField .vb-indexSearchField__input--disabled):hover + .vb-indexSearchField__icon {\n  fill: #1e46aa;\n}\n.vb-indexSearchField .vb-indexSearchField__dropdown {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  opacity: 0;\n}\n.vb-indexSearchField .vb-indexSearchField__dropdown--searchAreaOpen {\n  transition: opacity 0.3s 0.3s ease;\n  opacity: 1;\n}\n.vb-indexSearchField .vb-indexSearchField__dropdownItem {\n  margin: 0.25em;\n  padding: 0.25em;\n  cursor: pointer;\n}\n\n/** @define lineSeparatedList */\n.vb-lineSeparatedList__list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.vb-lineSeparatedList__list__listItem {\n  background-color: #fff;\n  border-top: 1px solid #e9e7e7;\n  padding: 1rem;\n}\n\n.vb-listButtonSelector__button--disabled, .vb-button--disabled, .vb-pagerButton--disabled, .vb-iconOnlyButton--disabled, .vb-dropdownItem--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n.vb-listButtonSelector__button--disabled:hover, .vb-button--disabled:hover, .vb-pagerButton--disabled:hover, .vb-iconOnlyButton--disabled:hover, .vb-dropdownItem--disabled:hover {\n  cursor: not-allowed;\n}\n\n.vb-listButtonSelector {\n  position: relative;\n  display: inline-block;\n}\n.vb-listButtonSelector__popupWrapper {\n  position: absolute;\n  top: 100%;\n  min-width: 100%;\n}\n.vb-listButtonSelector__button {\n  display: inline-block;\n  padding: 1rem;\n  padding-right: 3em;\n  background-color: #fff;\n  border: solid 1px #285ac8;\n  border-radius: 0.5rem;\n  font-size: 1rem;\n  font-weight: bold;\n  color: #285ac8;\n  cursor: pointer;\n  line-height: 1;\n}\n.vb-listButtonSelector__button--isOpen {\n  background-color: #f0eded;\n}\n.vb-listButtonSelector__icon {\n  position: absolute;\n  display: inline-block;\n  font-size: 1.5em;\n  right: 0.5em;\n  top: 50%;\n  transform: translateY(-50%);\n}\n\n/** @define listTable */\n.vb-listTable__table,\n.vb-groupedListTable__table {\n  width: 100%;\n  border: none;\n  border-collapse: collapse;\n  border-spacing: 0;\n  background-color: #fff;\n  height: 1px;\n}\n.vb-listTable--fitContent,\n.vb-groupedListTable--fitContent {\n  max-width: fit-content;\n}\n\n.vb-listCard {\n  position: relative;\n  background-color: #fff;\n  border-radius: 0.75rem;\n  box-shadow: 0 0 1rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem rgba(0, 0, 0, 0.2);\n  padding: 1rem;\n}\n.vb-listCard--disabled {\n  opacity: 0.5;\n}\n.vb-listCard__link, .vb-listCard__button {\n  cursor: pointer;\n  text-decoration: none;\n  color: #323232;\n  display: block;\n  text-align: left;\n  padding: 0;\n  border: 0;\n  background-color: #fff;\n}\n.vb-listCard__link--disabled, .vb-listCard__button--disabled {\n  cursor: not-allowed;\n}\n.vb-listCard__link::before, .vb-listCard__button::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  transition-duration: 0.2s;\n  transition-property: background-color, color;\n  border-radius: 0.75rem;\n}\n.vb-listCard__link--current::after, .vb-listCard__button--current::after {\n  content: \"\";\n  height: 100%;\n  width: 4px;\n  background-color: #2864f0;\n  position: absolute;\n  top: 0;\n  left: 0;\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.vb-listCard__link:not(.vb-listCard__link--disabled):hover::before {\n  background-color: #f2f5fc;\n}\n.vb-listCard__button:not(.vb-listCard__button--disabled):hover::before {\n  background-color: #f2f5fc;\n}\n.vb-listCard__content {\n  position: relative;\n  z-index: 1;\n  margin-right: 1.5rem;\n  display: flex;\n}\n.vb-listCard__thumbnail {\n  margin-right: 1rem;\n  flex-shrink: 0;\n  flex-grow: 0;\n  max-width: 5rem;\n}\n.vb-listCard__thumbnail * {\n  max-width: 100%;\n  max-height: 5rem;\n}\n.vb-listCard__thumbnail--large {\n  margin-right: 1rem;\n  flex-shrink: 0;\n  flex-grow: 0;\n  max-width: 12rem;\n}\n.vb-listCard__thumbnail--large * {\n  max-width: 100%;\n  max-height: 12rem;\n}\n@media (max-width: 48rem) {\n  .vb-listCard__thumbnail--large {\n    max-width: 7.2rem;\n  }\n  .vb-listCard__thumbnail--large * {\n    max-height: 7.2rem;\n  }\n}\n@media (max-width: 48rem) {\n  .vb-listCard__thumbnail {\n    max-width: 3rem;\n  }\n  .vb-listCard__thumbnail * {\n    max-height: 3rem;\n  }\n}\n.vb-listCard__main {\n  flex-shrink: 1;\n  flex-grow: 1;\n}\n.vb-listCard__icon {\n  position: absolute;\n  z-index: 1;\n  top: 50%;\n  transform: translateY(-50%);\n  right: 0.5rem;\n  width: 1.5rem;\n  height: 1.5rem;\n}\n.vb-listCard__title {\n  font-size: 1rem;\n  font-weight: bold;\n}\n.vb-listCard__actions {\n  position: relative;\n  z-index: 1;\n  padding: 0.5rem 1rem 1rem;\n  margin: 0.5rem -1rem -1rem;\n  width: fit-content;\n}\n\n.vb-messageBlock {\n  container-type: inline-size;\n  width: 100%;\n}\n.vb-messageBlock--hover {\n  box-shadow: 0 0 2rem rgba(0, 0, 0, 0.1), 0 0.375rem 0.75rem rgba(0, 0, 0, 0.2);\n  border-radius: 0.5rem;\n  z-index: 500;\n}\n.vb-messageBlock__inner {\n  border: 1px solid #d7d2d2;\n  background-color: #f7f5f5;\n  border-radius: 0.5rem;\n  box-sizing: border-box;\n  display: grid;\n  display: -ms-grid;\n  grid-template-columns: 1fr auto;\n  -ms-grid-columns: 1fr auto;\n  padding: 1rem;\n}\n@media (max-width: 48rem) {\n  .vb-messageBlock__inner--responsive {\n    padding: 0.5rem;\n    display: block;\n  }\n}\n@container (max-width: 48rem) {\n  .vb-messageBlock__inner {\n    padding: 0.5rem;\n    display: block;\n  }\n}\n.vb-messageBlock__inner--alert {\n  border: 1px solid #dc1e32;\n  background-color: #fad2d7;\n}\n.vb-messageBlock__inner--notice {\n  border: 1px solid #be8c14;\n  background-color: #fff0d2;\n}\n.vb-messageBlock__inner--success, .vb-messageBlock__inner--assistance, .vb-messageBlock__inner--discovery {\n  border: 1px solid #285ac8;\n  background-color: #dce8ff;\n}\n.vb-messageBlock__message {\n  -ms-grid-column: 1;\n  grid-column: 1/2;\n}\n.vb-messageBlock__buttons {\n  -ms-grid-column: 2;\n  grid-column: 2/3;\n  margin-top: -0.375rem;\n  height: 1.5rem;\n}\n@media (max-width: 48rem) {\n  .vb-messageBlock__buttons--responsive {\n    margin-top: 0.25rem;\n    margin-left: 1rem;\n    height: auto;\n  }\n}\n@container (max-width: 48rem) {\n  .vb-messageBlock__buttons {\n    margin-top: 0.25rem;\n    margin-left: 1rem;\n    height: auto;\n  }\n}\n.vb-messageBlock__linkButton, .vb-messageBlock__closeButton {\n  display: inline-block;\n  white-space: nowrap;\n  margin-top: -0.375rem;\n  height: 1.5rem;\n}\n\n.vb-messageBlockInternalMessage__inner {\n  display: flex;\n  flex: 1 auto;\n  align-items: flex-start;\n}\n.vb-messageBlockInternalMessage__icon {\n  display: inline-block;\n  margin-right: 0.5rem;\n  font-size: 1.5rem;\n  min-width: 1.5rem;\n}\n.vb-messageBlockInternalMessage__icon--alert {\n  color: #dc1e32;\n}\n.vb-messageBlockInternalMessage__icon--notice {\n  color: #be8c14;\n}\n.vb-messageBlockInternalMessage__icon--success, .vb-messageBlockInternalMessage__icon--assistance, .vb-messageBlockInternalMessage__icon--discovery {\n  color: #285ac8;\n}\n.vb-messageBlockInternalMessage__icon--explanatory, .vb-messageBlockInternalMessage__icon--info {\n  color: #8c8989;\n}\n.vb-messageBlockInternalMessage__content {\n  display: inline-block;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  margin-top: 0.09375rem;\n}\n\n.vb-floatingMessageBlockPortal {\n  position: fixed;\n  top: 2rem;\n  left: 50%;\n  transform: translate(-50%, 0);\n  z-index: 4000;\n}\n\n.vb-floatingMessageBlock {\n  box-shadow: 0 0 2rem rgba(0, 0, 0, 0.1), 0 0.375rem 0.75rem rgba(0, 0, 0, 0.2);\n  border-radius: 1rem;\n  margin: auto;\n  min-width: 16rem;\n  max-width: calc(100vw - 3rem);\n  width: 50rem;\n  transition-property: opacity;\n  transition-duration: 0.3s;\n}\n.vb-floatingMessageBlock .vb-messageBlock__inner {\n  border-radius: 1rem;\n}\n.vb-floatingMessageBlock__animation-enter {\n  opacity: 0;\n}\n.vb-floatingMessageBlock__animation-enter-active {\n  opacity: 1;\n}\n.vb-floatingMessageBlock__animation-exit {\n  opacity: 0;\n}\n\n.vb-pageSelector {\n  display: inline-block;\n}\n.vb-pageSelector__currentPage {\n  font-weight: bold;\n  font-size: 0.875rem;\n  padding: 0 0.5rem;\n}\n\n.vb-messageIcon {\n  position: relative;\n  display: inline-block;\n  width: 1.5rem;\n  min-height: 1em;\n}\n.vb-messageIcon__control {\n  cursor: pointer;\n  width: 1.5rem;\n  height: 1.5rem;\n  position: absolute;\n  left: 0;\n  top: 50%;\n  transform: translateY(-50%);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.vb-messageIcon__icon {\n  width: 1.5rem;\n  height: 1.5rem;\n  color: #8c8989;\n  display: inline-block;\n  vertical-align: middle;\n}\n.vb-messageIcon__icon--error {\n  color: #dc1e32;\n}\n.vb-messageIcon__icon--notice {\n  color: #be8c14;\n}\n.vb-messageIcon__icon--success {\n  color: #285ac8;\n}\n.vb-messageIcon--small .vb-messageIcon__icon {\n  width: 1rem;\n  height: 1rem;\n}\n\n.vb-messageIconMessageWrapper--hidden {\n  display: none;\n}\n\n.vb-messageIconMessage {\n  position: relative;\n  width: 1.5rem;\n}\n\n.vb-fullScreenModal {\n  z-index: 700;\n  background-color: #fff;\n}\n.vb-fullScreenModal__inner {\n  display: flex;\n  flex-direction: column;\n  width: 100vw;\n  height: 100vh;\n}\n.vb-fullScreenModal__header {\n  padding: 1.5rem;\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n  border-bottom: 1px solid #e9e7e7;\n}\n.vb-fullScreenModal__headerInnerContent {\n  flex-grow: 1;\n}\n.vb-fullScreenModal__body {\n  padding: 1.5rem 1.5rem 1.5rem 4.75rem;\n  overflow: auto;\n}\n\n.vb-numericTable__table {\n  width: 100%;\n  border: none;\n  border-collapse: collapse;\n  border-spacing: 0;\n  background-color: #fff;\n}\n\n.vb-noSearchResults,\n.vb-noDataCreated {\n  text-align: center;\n}\n.vb-noSearchResults__image,\n.vb-noDataCreated__image {\n  margin-bottom: 1rem;\n}\n\n.vb-pager {\n  text-align: center;\n}\n.vb-pager .vb-pager__list {\n  padding: 0;\n  margin: 1em auto;\n}\n.vb-pager .vb-pager__break {\n  display: inline-block;\n  margin: 0 0.5em 0 -0.5em;\n  vertical-align: middle;\n}\n.vb-pager .vb-pager__icon--arrow {\n  transform: scale(1.5);\n  vertical-align: middle;\n}\n\n.vb-selectableButton__button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n  margin: 0;\n  padding: 0 1rem;\n  text-align: center;\n  text-decoration: none;\n  box-sizing: border-box;\n  border-radius: 0.5rem;\n  border: 0;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: background-color, color, box-shadow, border-color;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  font-size: 0.875rem;\n  height: 2.25rem;\n  vertical-align: middle;\n  white-space: nowrap;\n  color: #323232;\n  background-color: #f7f5f5;\n}\n.vb-selectableButton__button .vb-selectableButton__icon {\n  width: 1.375rem;\n  height: 1.375rem;\n  fill: #285ac8;\n}\n.vb-selectableButton__button:hover {\n  background-color: #f0eded;\n}\n.vb-selectableButton__button:active {\n  background-color: #e9e7e7;\n}\n.vb-selectableButton__button.active {\n  background-color: #ebf3ff;\n}\n.vb-selectableButton__button.active .vb-selectableButton__label {\n  color: #285ac8;\n  font-weight: bold;\n}\n.vb-selectableButton__button.active:hover {\n  background-color: #dce8ff;\n}\n.vb-selectableButton__button.active:active {\n  background-color: #aac8ff;\n}\n.vb-selectableButton__button.active:focus {\n  outline: none;\n  box-shadow: 0 0 0 1px #fff, 0 0 0 3px #2864f0, 0 0 0 4px #fff;\n  background-color: #aac8ff;\n}\n.vb-selectableButton__badge {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 1.25rem;\n  margin-left: -0.25rem;\n  padding: 0 0.625rem;\n  color: #1e1e1e;\n  background-color: #dcdcdc;\n  border-radius: 0.75rem;\n}\n\n.vb-stackedBarChart__container {\n  height: 1.5rem;\n  box-sizing: border-box;\n  display: flex;\n  overflow: hidden;\n  background-color: #fff;\n  border: 1px solid #bebaba;\n  border-radius: 99rem;\n  list-style-type: none;\n  padding-inline-start: 0;\n  margin-block: 0;\n}\n.vb-stackedBarChart__item {\n  box-sizing: border-box;\n  display: flex;\n  flex-direction: column;\n}\n.vb-stackedBarChart__item + .vb-stackedBarChart__item {\n  border-left: 1px solid #8c8989;\n}\n.vb-stackedBarChart__item__button {\n  width: 100%;\n  height: calc(1.5rem - 2px);\n  border: none;\n  padding: 0 0.5rem;\n  font-size: 0.75rem;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.vb-stackedBarChart__item__button:focus {\n  outline: none;\n  box-shadow: inset 0 0 0 1px #fff, inset 0 0 0 3px #2864f0, inset 0 0 0 4px #fff;\n}\n.vb-stackedBarChart__item__button--first {\n  border-radius: 99rem 0 0 99rem;\n}\n.vb-stackedBarChart__item__button--last {\n  border-radius: 0 99rem 99rem 0;\n}\n.vb-stackedBarChart__item__button--RE {\n  background-color: #fad2d7;\n  color: #6e0f19;\n}\n.vb-stackedBarChart__item__button--OR {\n  background-color: #ffe1d2;\n  color: #7d320a;\n}\n.vb-stackedBarChart__item__button--YE {\n  background-color: #fff0d2;\n  color: #825a0f;\n}\n.vb-stackedBarChart__item__button--YG {\n  background-color: #e6f0d2;\n  color: #3c5f14;\n}\n.vb-stackedBarChart__item__button--GR {\n  background-color: #cdebd7;\n  color: #004b1e;\n}\n.vb-stackedBarChart__item__button--BG {\n  background-color: #cdf0f0;\n  color: #146464;\n}\n.vb-stackedBarChart__item__button--PU {\n  background-color: #e6d7fa;\n  color: #3c1e73;\n}\n.vb-stackedBarChart__item__button--GY {\n  background-color: #dcdcdc;\n  color: #1e1e1e;\n}\n\n/** @define statusSelector */\n.vb-statusSelector {\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n  border-color: transparent;\n  background-color: transparent;\n  transition-duration: 0.2s;\n  transition-property: background-color;\n}\n.vb-statusSelector--disabled {\n  opacity: 0.5;\n}\n.vb-statusSelector__dropdownIcon {\n  width: 1rem;\n  height: 1rem;\n  margin-left: 0.25rem;\n  margin-right: -0.25rem;\n}\n.vb-statusSelector--typeDone {\n  border-color: #8c8989;\n  color: #6e6b6b;\n}\n.vb-statusSelector--typeDone__dropdownIcon {\n  fill: #6e6b6b;\n}\n.vb-statusSelector--typeDone:hover {\n  background-color: #f0eded;\n}\n.vb-statusSelector--typeSuccess {\n  border-color: #285ac8;\n  color: #285ac8;\n}\n.vb-statusSelector--typeSuccess__dropdownIcon {\n  fill: #285ac8;\n}\n.vb-statusSelector--typeSuccess:hover {\n  background-color: #dce8ff;\n}\n.vb-statusSelector--typeProgress {\n  border-color: #be8c14;\n  color: #825a0f;\n}\n.vb-statusSelector--typeProgress__dropdownIcon {\n  fill: #825a0f;\n}\n.vb-statusSelector--typeProgress:hover {\n  background-color: #fff0d2;\n}\n.vb-statusSelector--typeRequired {\n  border-color: #dc1e32;\n  color: #dc1e32;\n}\n.vb-statusSelector--typeRequired__dropdownIcon {\n  fill: #dc1e32;\n}\n.vb-statusSelector--typeRequired:hover {\n  background-color: #fad2d7;\n}\n.vb-statusSelector--typeDisabled {\n  background-color: #6e6b6b;\n  border-width: 0;\n}\n.vb-statusSelector--typeDisabled__dropdownIcon {\n  fill: #fff;\n}\n.vb-statusSelector--typeDisabled:hover {\n  background-color: #4f4d4d;\n}\n.vb-statusSelector--typeEmphasis {\n  background-color: #285ac8;\n  border-width: 0;\n}\n.vb-statusSelector--typeEmphasis__dropdownIcon {\n  fill: #fff;\n}\n.vb-statusSelector--typeEmphasis:hover {\n  background-color: #1e4395;\n}\n.vb-statusSelector--typeWarning {\n  background-color: #825a0f;\n  border-width: 0;\n}\n.vb-statusSelector--typeWarning__dropdownIcon {\n  fill: #fff;\n}\n.vb-statusSelector--typeWarning:hover {\n  background-color: #4b3409;\n}\n.vb-statusSelector--typeError {\n  background-color: #dc1e32;\n  border-width: 0;\n}\n.vb-statusSelector--typeError__dropdownIcon {\n  fill: #fff;\n}\n.vb-statusSelector--typeError:hover {\n  background-color: #a61726;\n}\n\n.vb-stepper {\n  display: flex;\n  flex-wrap: nowrap;\n  justify-content: center;\n  padding: 0;\n  gap: 2rem;\n}\n.vb-stepper__listItem {\n  list-style-type: none;\n  width: 4rem;\n  position: relative;\n}\n.vb-stepper__listItem:not(:last-child)::after {\n  content: \"\";\n  width: 3rem;\n  height: 0.25rem;\n  background-color: #6e6b6b;\n  display: block;\n  position: absolute;\n  left: calc(100% - 0.5rem);\n  top: 1.5rem;\n}\n.vb-stepper__listContent {\n  position: relative;\n  z-index: 1;\n  text-align: center;\n}\n.vb-stepper--small {\n  gap: 1.5rem;\n}\n.vb-stepper--small .vb-stepper__listItem {\n  width: 3rem;\n}\n.vb-stepper--small .vb-stepper__listItem:not(:last-child)::after {\n  width: 2.5rem;\n  top: 1rem;\n}\n\n.vb-verticalSteps__number {\n  user-select: none;\n}\n.vb-verticalSteps__step {\n  display: grid;\n  grid-template-columns: 3rem 1fr;\n  column-gap: 0.5rem;\n  row-gap: 0;\n}\n.vb-verticalSteps__step:not(:last-child)::after {\n  content: \"\";\n  background: #6e6b6b;\n  grid-column: 1/2;\n  grid-row: 2/3;\n  width: 0.25rem;\n  margin: 0 auto;\n}\n.vb-verticalSteps__title {\n  grid-column: 2/3;\n  font: bold 1rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  color: #323232;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.vb-verticalSteps__title--future {\n  color: #6e6b6b;\n  font-weight: normal;\n}\n.vb-verticalSteps__content {\n  grid-column: 2/3;\n  grid-row: 2/3;\n  padding: 0 0 1.5rem;\n}\n.vb-verticalSteps__actions {\n  margin: 1rem 0 0 0;\n}\n\n.vb-tabBar {\n  border-bottom: 1px solid #e9e7e7;\n  padding: 0 1.5rem;\n  background: #fff;\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n}\n.vb-tabBar__buttonGroup {\n  margin-left: 1rem;\n}\n.vb-tabBar__buttonGroup button {\n  margin-left: 0.5rem;\n}\n\n.vb-tagBox {\n  display: inline-block;\n  background-color: #fff;\n  box-sizing: border-box;\n  padding: 0 0.5rem;\n  border: 1px solid #8c8989;\n  border-radius: 99rem;\n  height: 1.5rem;\n  line-height: 1.5rem;\n  font-size: 1.5rem;\n}\n.vb-tagBox--removable {\n  padding-right: 0.25rem;\n}\n.vb-tagBox--maxWidthSmall {\n  max-width: 10rem;\n}\n.vb-tagBox--maxWidthMedium {\n  max-width: 20rem;\n}\n.vb-tagBox--maxWidthLarge {\n  max-width: 30rem;\n}\n.vb-tagBox--success {\n  border-color: #285ac8;\n}\n.vb-tagBox--error {\n  border-color: #dc1e32;\n}\n.vb-tagBox--RE {\n  background-color: #fad2d7;\n  border-color: #fad2d7;\n}\n.vb-tagBox--OR {\n  background-color: #ffe1d2;\n  border-color: #ffe1d2;\n}\n.vb-tagBox--YE {\n  background-color: #fff0d2;\n  border-color: #fff0d2;\n}\n.vb-tagBox--YG {\n  background-color: #e6f0d2;\n  border-color: #e6f0d2;\n}\n.vb-tagBox--GR {\n  background-color: #cdebd7;\n  border-color: #cdebd7;\n}\n.vb-tagBox--BG {\n  background-color: #cdf0f0;\n  border-color: #cdf0f0;\n}\n.vb-tagBox--PU {\n  background-color: #e6d7fa;\n  border-color: #e6d7fa;\n}\n.vb-tagBox--GY {\n  background-color: #dcdcdc;\n  border-color: #dcdcdc;\n}\n.vb-tagBox__inner {\n  display: flex;\n  align-items: center;\n  margin-top: -1px;\n  height: 1.5rem;\n}\n.vb-tagBox__type {\n  display: inline-block;\n  font-size: 0.75rem;\n  color: #6e6b6b;\n  margin-right: 0.5rem;\n  white-space: nowrap;\n}\n.vb-tagBox__type--RE {\n  color: #6e0f19;\n}\n.vb-tagBox__type--OR {\n  color: #7d320a;\n}\n.vb-tagBox__type--YE {\n  color: #825a0f;\n}\n.vb-tagBox__type--YG {\n  color: #3c5f14;\n}\n.vb-tagBox__type--GR {\n  color: #004b1e;\n}\n.vb-tagBox__type--BG {\n  color: #146464;\n}\n.vb-tagBox__type--PU {\n  color: #3c1e73;\n}\n.vb-tagBox__type--GY {\n  color: #1e1e1e;\n}\n.vb-tagBox__body {\n  font-size: 0.875rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.vb-tagBox__body--success {\n  color: #285ac8;\n}\n.vb-tagBox__body--error {\n  color: #dc1e32;\n}\n.vb-tagBox__body--RE {\n  color: #6e0f19;\n}\n.vb-tagBox__body--OR {\n  color: #7d320a;\n}\n.vb-tagBox__body--YE {\n  color: #825a0f;\n}\n.vb-tagBox__body--YG {\n  color: #3c5f14;\n}\n.vb-tagBox__body--GR {\n  color: #004b1e;\n}\n.vb-tagBox__body--BG {\n  color: #146464;\n}\n.vb-tagBox__body--PU {\n  color: #3c1e73;\n}\n.vb-tagBox__body--GY {\n  color: #1e1e1e;\n}\n.vb-tagBox__removeButton {\n  font-size: 0;\n  color: #8c8989;\n  margin-left: 0.5rem;\n  height: 1.5rem;\n  width: 1.5rem;\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: color;\n}\n.vb-tagBox__removeButton:hover {\n  color: #6d6b6b;\n}\n.vb-tagBox__removeButton--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n.vb-tagBox__removeButton--disabled:hover {\n  cursor: not-allowed;\n}\n.vb-tagBox__removeButton--RE {\n  color: #6e0f19;\n}\n.vb-tagBox__removeButton--OR {\n  color: #7d320a;\n}\n.vb-tagBox__removeButton--YE {\n  color: #825a0f;\n}\n.vb-tagBox__removeButton--YG {\n  color: #3c5f14;\n}\n.vb-tagBox__removeButton--GR {\n  color: #004b1e;\n}\n.vb-tagBox__removeButton--BG {\n  color: #146464;\n}\n.vb-tagBox__removeButton--PU {\n  color: #3c1e73;\n}\n.vb-tagBox__removeButton--GY {\n  color: #1e1e1e;\n}\n.vb-tagBox__removeIcon {\n  font-size: 1rem;\n  vertical-align: middle;\n}\n\n.vb-miniTag {\n  display: inline-block;\n  height: 1.25rem;\n  max-width: 100%;\n  box-sizing: border-box;\n  padding: 0 0.25rem;\n  position: relative;\n  border-radius: 0.25rem;\n  font-size: 0.875rem;\n  font-family: \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n}\n.vb-miniTag--RE {\n  background-color: #fad2d7;\n  color: #6e0f19;\n}\n.vb-miniTag--OR {\n  background-color: #ffe1d2;\n  color: #7d320a;\n}\n.vb-miniTag--YE {\n  background-color: #fff0d2;\n  color: #825a0f;\n}\n.vb-miniTag--YG {\n  background-color: #e6f0d2;\n  color: #3c5f14;\n}\n.vb-miniTag--GR {\n  background-color: #cdebd7;\n  color: #004b1e;\n}\n.vb-miniTag--BG {\n  background-color: #cdf0f0;\n  color: #146464;\n}\n.vb-miniTag--PU {\n  background-color: #e6d7fa;\n  color: #3c1e73;\n}\n.vb-miniTag--GY {\n  background-color: #dcdcdc;\n  color: #1e1e1e;\n}\n.vb-miniTag__inner {\n  display: flex;\n  align-items: center;\n  height: 1.25rem;\n}\n.vb-miniTag__body {\n  line-height: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.vb-miniTag__removeButton {\n  width: 1rem;\n  height: 1rem;\n  position: relative;\n  cursor: pointer;\n  border: 0;\n  background-color: transparent;\n  padding: 0;\n  flex-shrink: 0;\n  margin-left: 0.25rem;\n}\n.vb-miniTag__removeButton::before {\n  content: \"\";\n  position: absolute;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: -0.25rem;\n  right: -0.25rem;\n}\n.vb-miniTag__removeButton--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n.vb-miniTag__removeButton--disabled:hover {\n  cursor: not-allowed;\n}\n.vb-miniTag__removeButton--RE {\n  color: #6e0f19;\n}\n.vb-miniTag__removeButton--OR {\n  color: #7d320a;\n}\n.vb-miniTag__removeButton--YE {\n  color: #825a0f;\n}\n.vb-miniTag__removeButton--YG {\n  color: #3c5f14;\n}\n.vb-miniTag__removeButton--GR {\n  color: #004b1e;\n}\n.vb-miniTag__removeButton--BG {\n  color: #146464;\n}\n.vb-miniTag__removeButton--PU {\n  color: #3c1e73;\n}\n.vb-miniTag__removeButton--GY {\n  color: #1e1e1e;\n}\n.vb-miniTag__removeIcon {\n  width: 1rem;\n  height: 1rem;\n}\n\n.vb-withAccordionContent {\n  display: inline-block;\n}\n\n.vb-withBalloon {\n  display: inline-block;\n}\n.vb-withBalloon__contentWrapper {\n  pointer-events: auto;\n}\n.vb-withBalloon__balloonWrapper--hidden {\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n  position: absolute;\n  clip: rect(1px 1px 1px 1px);\n}\n\n.vb-withPopup {\n  display: inline-block;\n}\n.vb-withPopup__contentWrapper {\n  display: block;\n}\n.vb-withPopup__popupWrapper {\n  position: relative;\n  transition-property: opacity;\n  transition-duration: 0.3s;\n}\n.vb-withPopup__popup {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n.vb-withPopup__popup--rightAligned {\n  left: auto;\n  right: 0;\n}\n.vb-withPopup__animation-enter {\n  opacity: 0;\n}\n.vb-withPopup__animation-enter-active {\n  opacity: 1;\n}\n.vb-withPopup__animation-exit {\n  opacity: 0;\n}\n\n.vb-withTOC {\n  display: flex;\n  gap: 0 1rem;\n}\n.vb-withTOC__toc {\n  flex-grow: 0;\n  flex-shrink: 0;\n  width: 11rem;\n}\n.vb-withTOC__toc__container {\n  position: sticky;\n  top: 0;\n  overflow-y: auto;\n  max-height: 100vh;\n  margin: -1rem 0 0;\n  padding: 0;\n  list-style: none;\n}\n.vb-withTOC__toc__link {\n  display: block;\n  margin: 1rem 0;\n  padding: 0.25rem 1rem;\n  text-decoration: none;\n  font: bold 1rem/1.5 \"-apple-system\", BlinkMacSystemFont, \"Helvetica Neue\", \"ヒラギノ角ゴ ProN\", Hiragino Kaku Gothic ProN, Arial, \"メイリオ\", Meiryo, sans-serif;\n  color: #323232;\n  border-radius: 0.25rem;\n  cursor: pointer;\n}\n.vb-withTOC__toc__link:hover {\n  background-color: #f7f5f5;\n}\n.vb-withTOC__toc__link--current {\n  background-color: #ebf3ff;\n  color: #2864f0;\n}\n.vb-withTOC__toc__link--current:hover {\n  background-color: #ebf3ff;\n}\n.vb-withTOC__contents {\n  flex-grow: 1;\n}\n.vb-withTOC__contents__section {\n  overflow-y: hidden;\n  outline: none;\n}\n\n.vb-withFilterableDropdown__popup {\n  min-width: 11rem;\n  padding: 1rem 1rem 0 1rem;\n}\n.vb-withFilterableDropdown__note {\n  padding-bottom: 1rem;\n}\n.vb-withFilterableDropdown__footer {\n  border-top: 1px solid #e9e7e7;\n  margin: 0 -1rem;\n  padding: 1rem;\n}\n\n.vb-personTag {\n  display: inline-block;\n  background-color: #fff;\n  box-sizing: border-box;\n  padding-left: 0.25rem;\n  padding-right: 0.5rem;\n  border: 1px solid #8c8989;\n  border-radius: 99rem;\n  height: 2rem;\n  line-height: 2rem;\n  font-size: 2rem;\n}\n.vb-personTag--removable {\n  padding-right: 0.25rem;\n}\n.vb-personTag--success {\n  border-color: #285ac8;\n}\n.vb-personTag--error {\n  border-color: #dc1e32;\n}\n.vb-personTag__inner {\n  display: flex;\n  align-items: center;\n  margin-top: -1px;\n  height: 2rem;\n}\n.vb-personTag__type {\n  display: inline-block;\n  font-size: 0.75rem;\n  color: #6e6b6b;\n  margin-right: 0.5rem;\n  white-space: nowrap;\n}\n.vb-personTag__body {\n  font-size: 0.875rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.vb-personTag__body--success {\n  color: #285ac8;\n}\n.vb-personTag__body--error {\n  color: #dc1e32;\n}\n.vb-personTag__removeButton {\n  font-size: 0;\n  color: #8c8989;\n  margin-left: 0.5rem;\n  height: 1.5rem;\n  width: 1.5rem;\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  transition-duration: 0.2s;\n  transition-property: color;\n}\n.vb-personTag__removeButton:hover {\n  color: #6d6b6b;\n}\n.vb-personTag__removeButton--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n.vb-personTag__removeButton--disabled:hover {\n  cursor: not-allowed;\n}\n.vb-personTag__removeIcon {\n  font-size: 1rem;\n  vertical-align: middle;\n}\n\n.vb-popupProgressBar {\n  padding: 0.5rem 1rem;\n  display: flex;\n  align-items: center;\n  min-width: 20rem;\n  max-width: 40rem;\n}\n.vb-popupProgressBar__contents {\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n}\n.vb-popupProgressBar__message {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n.vb-popupProgressBar__message-block {\n  display: flex;\n  align-items: center;\n}\n.vb-popupProgressBar__icon {\n  flex-shrink: 0;\n  align-self: flex-start;\n}\n.vb-popupProgressBar__close {\n  flex-shrink: 0;\n}\n\n.vb-popupProgressBarPortal {\n  position: fixed;\n  left: 0;\n  bottom: 0;\n  z-index: 4000;\n}\n.vb-popupProgressBarPortal__element {\n  padding: 0.75rem 1rem 0.5rem 1rem;\n}\n\n.vb-skeltonPageTitle {\n  padding: 0.375rem 0;\n  max-height: 1.5rem;\n}\n\n.vb-skeltonSectionTitle {\n  padding: 0.25rem 0;\n  max-height: 1rem;\n}\n\n.vb-skeltonParagraph {\n  padding: 0.21875rem 0;\n  max-height: 0.875rem;\n}\n\n.vb-skeltonRectangle {\n  max-height: 5rem;\n}\n\n.vb-skeltonBlock {\n  max-height: 2.25rem;\n}\n.vb-skeltonBlock--small {\n  max-height: 1.5rem;\n}\n.vb-skeltonBlock--large {\n  max-height: 3rem;\n}\n\n.vb-skeltonIcon {\n  max-height: 2rem;\n}\n.vb-skeltonIcon--small {\n  max-height: 1.5rem;\n}\n.vb-skeltonIcon--large {\n  max-height: 3rem;\n}\n\n.vb-skeltonCircle {\n  max-height: 2rem;\n}\n.vb-skeltonCircle--small {\n  max-height: 1.5rem;\n}\n.vb-skeltonCircle--large {\n  max-height: 3rem;\n}\n.vb-skeltonCircle--xlarge {\n  max-height: 6rem;\n}\n\n.vb-skeletonInput {\n  align-items: center;\n  background-color: #fff;\n  border-radius: 0.5rem;\n  border: 1px solid #dcdcdc;\n  box-sizing: border-box;\n  display: inline-flex;\n  height: 2.25rem;\n  overflow: hidden;\n  padding: 0 0.5rem;\n  vertical-align: inherit;\n}\n.vb-skeletonInput--small {\n  height: 1.5rem;\n  padding: 0 0.5rem;\n}\n.vb-skeletonInput--large {\n  height: 3rem;\n  padding: 0 1rem;\n}\n.vb-skeletonInput--widthXSmall {\n  width: 4rem;\n}\n.vb-skeletonInput--widthSmall {\n  width: 7rem;\n}\n.vb-skeletonInput--widthMedium {\n  width: 11rem;\n}\n.vb-skeletonInput--widthLarge {\n  width: 24rem;\n}\n.vb-skeletonInput--widthFull {\n  width: 100%;\n}\n\n.vb-skeletonStackedBarChart {\n  height: 1.5rem;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n  padding: 0 0.5rem;\n  background-color: #fff;\n  border: 1px solid #bebaba;\n  border-radius: 99rem;\n}\n\n.vb-hierarchicalTable__table {\n  width: 100%;\n  border: none;\n  border-collapse: collapse;\n  border-spacing: 0;\n  background-color: #fff;\n}\n\n.vb-hierarchicalTableRowHeaderCell {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n.vb-hierarchicalTableRowHeaderCell--level1 {\n  margin-left: 0rem;\n}\n.vb-hierarchicalTableRowHeaderCell--foldable--level1 {\n  margin-left: 2rem;\n}\n.vb-hierarchicalTableRowHeaderCell--level2 {\n  margin-left: 2rem;\n}\n.vb-hierarchicalTableRowHeaderCell--foldable--level2 {\n  margin-left: 4rem;\n}\n.vb-hierarchicalTableRowHeaderCell--level3 {\n  margin-left: 4rem;\n}\n.vb-hierarchicalTableRowHeaderCell--foldable--level3 {\n  margin-left: 6rem;\n}\n.vb-hierarchicalTableRowHeaderCell--level4 {\n  margin-left: 6rem;\n}\n.vb-hierarchicalTableRowHeaderCell--foldable--level4 {\n  margin-left: 8rem;\n}\n.vb-hierarchicalTableRowHeaderCell--level5 {\n  margin-left: 8rem;\n}\n.vb-hierarchicalTableRowHeaderCell--foldable--level5 {\n  margin-left: 10rem;\n}\n.vb-hierarchicalTableRowHeaderCell__button {\n  cursor: pointer;\n  color: #285ac8;\n  display: inline;\n  border: 0;\n  background: none;\n  padding: 0;\n}\n.vb-hierarchicalTableRowHeaderCell__button:hover {\n  color: #1e4395;\n}\n.vb-hierarchicalTableRowHeaderCell__icon {\n  width: 1.5rem;\n  height: 1.5rem;\n}\n\n.vb-propListForm {\n  display: block;\n}\n.vb-propListForm__list {\n  display: flex;\n}\n.vb-propListForm__list--wrap {\n  display: flex;\n  flex-wrap: wrap;\n}\n.vb-propListForm__item {\n  display: flex;\n  border-bottom: solid 1px #e9e7e7;\n  align-items: flex-start;\n}\n.vb-propListForm__term {\n  display: inline-block;\n  min-height: 2.25rem;\n  font-size: 0.875rem;\n  vertical-align: middle;\n  margin-right: 1rem;\n}\n.vb-propListForm__description {\n  margin-left: 0;\n}\n.vb-propListForm__termInner, .vb-propListForm__descriptionInner {\n  display: flex;\n  align-items: center;\n  height: 100%;\n  min-height: 2.25rem;\n  white-space: pre-line;\n}\n.vb-propListForm__termLabel {\n  display: flex;\n  align-items: flex-start;\n}\n.vb-propListForm__termIcons {\n  display: flex;\n  white-space: nowrap;\n  align-items: center;\n}\n.vb-propListForm__field {\n  display: flex;\n  align-items: center;\n}\n"
  }
]