diff --git a/application/client/babel.config.js b/application/client/babel.config.js index c3c574591a..69e6fcd0ea 100644 --- a/application/client/babel.config.js +++ b/application/client/babel.config.js @@ -4,16 +4,15 @@ module.exports = { [ "@babel/preset-env", { - targets: "ie 11", - corejs: "3", - modules: "commonjs", + targets: { chrome: "130" }, + modules: false, useBuiltIns: false, }, ], [ "@babel/preset-react", { - development: true, + development: false, runtime: "automatic", }, ], diff --git a/application/client/package.json b/application/client/package.json index 9f8e80a6a8..9ab723b714 100644 --- a/application/client/package.json +++ b/application/client/package.json @@ -5,7 +5,7 @@ "license": "MPL-2.0", "author": "CyberAgent, Inc.", "scripts": { - "build": "NODE_ENV=development webpack", + "build": "NODE_ENV=production webpack", "typecheck": "tsc" }, "dependencies": { @@ -15,27 +15,17 @@ "@mlc-ai/web-llm": "0.2.80", "@web-speed-hackathon-2026/client": "workspace:*", "bayesian-bm25": "0.4.0", - "bluebird": "3.7.2", - "buffer": "6.0.3", "classnames": "2.5.1", "common-tags": "1.8.2", - "core-js": "3.45.1", "encoding-japanese": "2.2.0", "fast-average-color": "9.5.0", - "gifler": "github:themadcreator/gifler#v0.3.0", "image-size": "2.0.2", - "jquery": "3.7.1", - "jquery-binarytransport": "1.0.0", "json-repair-js": "1.0.0", "katex": "0.16.25", "kuromoji": "0.1.2", "langs": "2.0.0", - "lodash": "4.17.21", - "moment": "2.30.1", "negaposi-analyzer-ja": "1.0.1", "normalize.css": "8.0.1", - "omggif": "1.0.10", - "pako": "2.1.0", "piexifjs": "1.0.6", "react": "19.2.0", "react-dom": "19.2.0", @@ -45,11 +35,9 @@ "react-syntax-highlighter": "16.1.0", "redux": "5.0.1", "redux-form": "8.3.10", - "regenerator-runtime": "0.14.1", "rehype-katex": "7.0.1", "remark-gfm": "4.0.1", "remark-math": "6.0.0", - "standardized-audio-context": "25.3.77", "tiny-invariant": "1.3.3" }, "devDependencies": { @@ -57,17 +45,13 @@ "@babel/preset-env": "7.28.3", "@babel/preset-react": "7.27.1", "@babel/preset-typescript": "7.27.1", + "@tailwindcss/postcss": "4.1.13", "@tsconfig/strictest": "2.0.8", - "@types/bluebird": "3.5.42", "@types/common-tags": "1.8.4", "@types/encoding-japanese": "2.2.1", - "@types/jquery": "3.5.33", "@types/kuromoji": "0.1.3", "@types/langs": "2.0.5", - "@types/lodash": "4.17.20", "@types/node": "22.18.8", - "@types/omggif": "1.0.5", - "@types/pako": "2.0.4", "@types/piexifjs": "1.0.0", "@types/react": "19.2.2", "@types/react-dom": "19.2.1", @@ -83,6 +67,7 @@ "postcss-loader": "8.2.0", "postcss-preset-env": "10.4.0", "react-markdown": "10.1.0", + "tailwindcss": "4.1.13", "typescript": "5.9.3", "webpack": "5.102.1", "webpack-cli": "6.0.1", diff --git a/application/client/postcss.config.js b/application/client/postcss.config.js index d7ee920b94..0c9798a8d8 100644 --- a/application/client/postcss.config.js +++ b/application/client/postcss.config.js @@ -1,9 +1,11 @@ const postcssImport = require("postcss-import"); const postcssPresetEnv = require("postcss-preset-env"); +const tailwindcss = require("@tailwindcss/postcss"); module.exports = { plugins: [ postcssImport(), + tailwindcss(), postcssPresetEnv({ stage: 3, }), diff --git a/application/client/src/components/application/SearchPage.tsx b/application/client/src/components/application/SearchPage.tsx index e99045de45..68fb1e083f 100644 --- a/application/client/src/components/application/SearchPage.tsx +++ b/application/client/src/components/application/SearchPage.tsx @@ -1,4 +1,4 @@ -import { useEffect, useMemo, useState } from "react"; +import { FormEventHandler, useCallback, useEffect, useMemo, useState } from "react"; import { useNavigate } from "react-router"; import { Field, InjectedFormProps, reduxForm, WrappedFieldProps } from "redux-form"; @@ -13,36 +13,43 @@ import { analyzeSentiment } from "@web-speed-hackathon-2026/client/src/utils/neg import { Button } from "../foundation/Button"; +const SEARCH_INPUT_LABEL = "検索 (例: キーワード since:2025-01-01 until:2025-12-31)"; + interface Props { query: string; results: Models.Post[]; } -const SearchInput = ({ input, meta }: WrappedFieldProps) => ( -