diff --git a/src/index.css b/src/index.css index 77bed34..ef92db3 100644 --- a/src/index.css +++ b/src/index.css @@ -1,88 +1,443 @@ +@import "tailwindcss"; +@tailwind base; +@tailwind components; +@tailwind utilities; + body { - margin: 0; - padding: 0; - background-color: rgba(251, 251, 251, 0.6); + margin: 0; + padding: 0; + background-color: rgba(251, 251, 251, 0.6); } * { - box-sizing: border-box; + box-sizing: border-box; } + .datepicker { - margin-bottom: 5px !important; + margin-bottom: 5px !important; } + .tabs .tab a:hover, .tabs .tab a.active { - background-color: transparent; - color: #3f51b5; + background-color: transparent; + color: #3f51b5; } + .tabs { - background-color: transparent; + background-color: transparent; } + .tabs .tab a { - color: #3f51b5; + color: #3f51b5; } + .tabs .indicator { - background-color: #3f51b5; + background-color: #3f51b5; } -.switch label input[type="checkbox"]:checked + .lever { - background-color: #3f51b5; + +.switch label input[type="checkbox"]:checked+.lever { + background-color: #3f51b5; } -.switch label input[type="checkbox"]:checked + .lever:after { - background-color: #fcfcfc; - left: 24px; + +.switch label input[type="checkbox"]:checked+.lever:after { + background-color: #fcfcfc; + left: 24px; } -[type="checkbox"].filled-in:checked + label:after { - border: 2px solid #3f51b5; - background-color: #3f51b5; + +[type="checkbox"].filled-in:checked+label:after { + border: 2px solid #3f51b5; + background-color: #3f51b5; } + .btn:hover, .btn-large:hover { - background-color: #3f51b5; + background-color: #3f51b5; } + a { - color: #3f51b5; + color: #3f51b5; } + .btn, .btn-large { - background-color: #3f51b5; + background-color: #3f51b5; } + li { - list-style-type: disc !important; - margin-left: 1rem; + list-style-type: disc !important; + margin-left: 1rem; } -.selectedLabel { - font-weight: 400; - color: #333333; + +body, +input, +div, +h3, +h4, +p, +label, +hr, +#scrumReport { + transition: all 0.3s ease-in-out; +} + +.dark-mode { + background: #1a1a1a !important; + color: #ffffff !important; + transition: background-color 0.3s ease-in-out, color 0.3s ease-in-out; } -.unselectedLabel { - font-weight: 300; - color: #666666; +.dark-mode .bg-white { + background-color: #2d2d2d !important; + border-color: #404040 !important; + transition: background-color 0.3s ease-in-out, color 0.3s ease-in-out; } -.selectedLabel, .unselectedLabel { - transition: color 0.3s ease-in-out, font-weight 0.3s ease-in-out; +.dark-mode input[type="text"], +.dark-mode input[type="date"], +.dark-mode #scrumReport { + background-color: #404040 !important; + border-color: #505050 !important; + color: #ffffff !important; + transition: background-color 0.3s ease-in-out, color 0.3s ease-in-out; +} + +.dark-mode h3, +.dark-mode h4, +.dark-mode p, +.dark-mode label { + color: #ffffff !important; + transition: color 0.3s ease-in-out; +} + +.dark-mode hr { + border-color: #505050 !important; + transition: border-color 0.3s ease-in-out; } #scrumReport { - border: 1px solid #ccc; - padding: 10px; - min-height: 200px; - max-height: 400px; - overflow-y: auto; - background-color: white; + font-size: 13px !important; + line-height: 1.5 !important; +} + +#scrumReport b { + font-size: 13px !important; +} + +#scrumReport li { + font-size: 13px !important; + margin-bottom: 4px !important; +} + +.dark-mode #scrumReport { + font-size: 13px !important; +} + +.dark-mode #scrumReport b { + font-size: 13px !important; +} + +.dark-mode #scrumReport li { + font-size: 13px !important; +} + +.dark-mode a { + color: #00b7ff !important; } -#scrumReport:focus { +#refreshCache { + background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%); + border: none; + box-shadow: 0 2px 4px rgba(59, 130, 246, 0.2); + transition: all 0.2s ease; +} + +#refreshCache:hover { + background: linear-gradient(135deg, #2563eb 0%, #1e40af 100%); + box-shadow: 0 4px 8px rgba(59, 130, 246, 0.3); + transform: translateY(-1px); +} + +#refreshCache:active { + transform: translateY(0); + box-shadow: 0 2px 4px rgba(59, 130, 246, 0.2); +} + +#refreshCache i { + animation: spin 0s linear infinite; +} + +#refreshCache.loading i { + animation: spin 1s linear infinite; +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +/* Disabled state styling */ +.disabled-content { + opacity: 0.5 !important; + pointer-events: none !important; + user-select: none !important; +} + +.disabled-content input, +.disabled-content button, +.disabled-content [contenteditable] { + cursor: not-allowed !important; +} + +/* Dark mode disabled state */ +.dark-mode .disabled-content { + opacity: 0.4 !important; +} + +.cache-info { + font-size: 11px; + color: #6b7280; + text-align: center; + margin-top: 8px; + line-height: 1.3; +} + +.cache-info i { + margin-right: 4px; + font-size: 10px; +} + +/* Dark mode for cache info */ +.dark-mode .cache-info { + color: #9ca3af; +} + +#cacheInput { + transition: border-color 0.2s ease; +} + +#cacheInput:focus { outline: none; - border-color: #26a69a; + border-color: #3b82f6; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); +} + +/* Update the settings button styles: */ +#settingsToggle { + transition: all 0.2s ease; + border: none; + cursor: pointer; + background: none !important; +} + +#settingsToggle:hover { + transform: scale(1.05); + background: none !important; } -#scrumReport a { - color: #26a69a; - text-decoration: none; +#settingsToggle:active { + transform: scale(0.95); } -#scrumReport a:hover { +#settingsToggle img { + transition: transform 0.2s ease; + filter: brightness(0.9); +} + +#settingsToggle.active img { + transform: rotate(45deg); + filter: brightness(1); +} + +.dark-mode #settingsToggle { + background: none !important; +} + +.dark-mode #settingsToggle:hover { + background: none !important; +} + +.dark-mode #settingsToggle img { + filter: brightness(0.9); +} + +.dark-mode #settingsToggle.active img { + filter: brightness(1); +} + +.tooltip-container { + position: relative; + display: inline-block; + margin-left: 4px; +} + +.question-icon { + color: #6b7280; + font-size: 14px; + cursor: help; + transition: color 0.2s ease; +} + +.question-icon:hover { + color: #3b82f6; +} + +.tooltip-bubble { + position: fixed !important; + z-index: 9999; + background: #f9fafb; + color: #222; + border-radius: 10px; + border: 1px solid #e5e7eb; + box-shadow: 0 4px 24px 0 rgba(0, 0, 0, 0.12), 0 1.5px 4px 0 rgba(0, 0, 0, 0.08); + padding: 14px 18px; + font-size: 13px; + line-height: 1.5; + min-width: 220px; + max-width: 320px; + white-space: normal; + opacity: 0; + pointer-events: none; + transition: opacity 0.18s; +} + +.tooltip-container:hover .tooltip-bubble, +.tooltip-container:focus-within .tooltip-bubble { + opacity: 1; + pointer-events: auto; +} + +.tooltip-bubble a { + color: #2563eb; text-decoration: underline; } + +.tooltip-bubble::after { + content: ""; + position: absolute; + width: 0; + height: 0; + border-style: solid; +} + + +.dark-mode .tooltip-bubble { + background: #f3f4f6; + color: #222; + border: 1px solid #374151; +} + +.dark-mode .tooltip-bubble::after { + border-color: #374151 transparent transparent transparent; +} + +.dark-mode .tooltip-container.tooltip-bottom .tooltip-bubble::after { + border-color: transparent transparent #374151 transparent; +} + +.dark-mode .tooltip-container.tooltip-right .tooltip-bubble::after { + border-color: transparent #374151 transparent transparent; +} + +#toggleTokenVisibility { + background: none; + border: none; + cursor: pointer; + margin-left: 8px; + padding: 0; + line-height: 1; +} + +#tokenEyeIcon { + font-size: 18px; + vertical-align: middle; +} + +@keyframes eye-rotate { + 0% { + transform: rotate(0deg); + } + + 60% { + transform: rotate(180deg); + } + + 100% { + transform: rotate(180deg); + } +} + +.eye-animating { + animation: eye-rotate 0.4s cubic-bezier(0.4, 0, 0.2, 1); +} + +.token-animating { + transition: box-shadow 0.3s, background-color 0.3s, color 0.3s, opacity 0.3s, transform 0.3s; + box-shadow: 0 0 0 2px #3b82f6; + opacity: 0.7; + transform: translateX(8px) scale(1.03); +} + +.dark-mode #githubToken, +.dark-mode .token-preview-char { + background: #404040 !important; + border-color: #505050 !important; + color: #fff !important; +} + +.dark-mode .token-preview-dot { + background: #9ca3af !important; +} + +.dark-mode .tooltip-container.tooltip-right .tooltip-bubble::after { + border-color: transparent #374151 transparent transparent; +} + +#homeButton { + background: none; + border: none; + outline: none; + cursor: pointer; + display: flex; + align-items: center; + font-size: 1.5rem; +} + +#homeButton:active { + background: #e5e7eb; +} + +.dark-mode #homeButton:active { + background: #374151; +} + +.dark-mode .token-preview-char { + box-shadow: 0 1px 4px rgba(0,0,0,0.18); +} + +.popup-commit-list { + margin: 8px 0 8px 18px; + padding-left: 0; + border-left: 2px solid #e0e7ff; + background: #f8fafc; + border-radius: 6px; +} +.popup-commit-list li { + list-style: none; + margin: 8px 0 8px 0; + padding-left: 0; +} +.popup-commit-list .commit-meta { + color: #64748b; + font-size: 11px; + margin-left: 8px; +} +.popup-commit-list a { + color: #2563eb; + font-weight: 500; + text-decoration: underline; +} \ No newline at end of file diff --git a/src/manifest.json b/src/manifest.json index 32710b4..cc5be11 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,11 +1,12 @@ + { "manifest_version": 3, - "name": "Scrum Helper Extension", + "name": "Scrum Helper", "version": "1.0", - "description": "This extension helps in writing Scrums in Google Groups, particularly related to FOSSASIA.", + "description": "This extension simplifies writing development reports by auto-filling content based on your Git activity.", "action": { "default_popup": "popup.html", - "default_title": "SCRUM Helper" + "default_title": "Scrum Helper" }, "icons": { "96": "icons/icon.png", @@ -17,20 +18,28 @@ "content_scripts": [ { "matches": [ - "*://groups.google.com/forum/*", + "*://groups.google.com/forum/*", "*://groups.google.com/g/*", + "*://groups.google.com/u/*/g/*", "*://mail.google.com/*", "*://outlook.live.com/*", "*://outlook.office.com/*", - "*://mail.yahoo.com/*" + "*://mail.yahoo.com/*" ], - "js": ["scripts/jquery-3.2.1.min.js", "scripts/scrumHelper.js", "scripts/emailClientAdapter.js"] + "js": ["scripts/jquery-3.2.1.min.js", "scripts/emailClientAdapter.js", "scripts/scrumHelper.js"] } ], "content_security_policy": { "extension_pages": "script-src 'self'; object-src 'self';" }, + "web_accessible_resources": [{ + "resources": [ + "/icons/night-mode.png", + "icons/night-mode.png" + ], + "matches": [""] + }], "permissions": [ "tabs", "storage", @@ -38,7 +47,6 @@ "notifications" ], "host_permissions": [ - "", "*://*.google.com/*", "*://*.outlook.live.com/*", "*://*.office.com/*", diff --git a/src/popup.html b/src/popup.html index 7a924f2..bf0f1c6 100644 --- a/src/popup.html +++ b/src/popup.html @@ -1,119 +1,303 @@ + - + + html, + body { + width: 375px !important; + height: 600px !important; + max-height: 600px !important; + overflow-y: scroll; + background: #eae4e4; + } + + -
-

SCRUM Helper

-
- SCRUM helper prefills the Scrums in google groups, with your FOSSASIA's contributions. -
-
-
-
-