diff --git a/BUILDING.md b/BUILDING.md index a1bb026e..ba981a8d 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -2716,6 +2716,33 @@ configuration files in the repository. --- +### 2025-08-21 - Commitlint Configuration Refinement + +#### Commit Message Validation Improvements +- **Modified**: Commitlint configuration moved from `package.json` to dedicated `commitlint.config.js` +- **Enhanced**: Strict validation rules downgraded from errors to warnings + - **Before**: `subject-case` and `subject-full-stop` rules caused red error messages + - **After**: Same rules now show yellow warnings without blocking commits +- **Benefit**: Eliminates confusing red error messages while maintaining commit quality guidance + +#### Configuration Structure +- **File**: `commitlint.config.js` - Dedicated commitlint configuration +- **Extends**: `@commitlint/config-conventional` - Standard conventional commit rules +- **Custom Rules**: + - `subject-case: [1, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']]` + - `subject-full-stop: [1, 'never', '.']` +- **Levels**: + - `0` = Disabled, `1` = Warning, `2` = Error + - Current: Problematic rules set to warning level (1) + +#### User Experience Impact +- **Before**: Red error messages on every push with strict commit rules +- **After**: Yellow warning messages that provide guidance without disruption +- **Workflow**: Commits and pushes continue to work while maintaining quality standards +- **Feedback**: Developers still receive helpful commit message guidance + +--- + **Note**: This documentation is maintained alongside the build system. For the most up-to-date information, refer to the actual script files and Vite configuration files in the repository. diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index ec740be6..e1e9924e 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -13,6 +13,7 @@ dependencies { implementation project(':capacitor-mlkit-barcode-scanning') implementation project(':capacitor-app') implementation project(':capacitor-camera') + implementation project(':capacitor-clipboard') implementation project(':capacitor-filesystem') implementation project(':capacitor-share') implementation project(':capawesome-capacitor-file-picker') diff --git a/android/app/src/main/assets/capacitor.plugins.json b/android/app/src/main/assets/capacitor.plugins.json index a95bd42f..6f389366 100644 --- a/android/app/src/main/assets/capacitor.plugins.json +++ b/android/app/src/main/assets/capacitor.plugins.json @@ -15,6 +15,10 @@ "pkg": "@capacitor/camera", "classpath": "com.capacitorjs.plugins.camera.CameraPlugin" }, + { + "pkg": "@capacitor/clipboard", + "classpath": "com.capacitorjs.plugins.clipboard.ClipboardPlugin" + }, { "pkg": "@capacitor/filesystem", "classpath": "com.capacitorjs.plugins.filesystem.FilesystemPlugin" diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index 3c06dfe7..188fdd40 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -14,6 +14,9 @@ project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/ include ':capacitor-camera' project(':capacitor-camera').projectDir = new File('../node_modules/@capacitor/camera/android') +include ':capacitor-clipboard' +project(':capacitor-clipboard').projectDir = new File('../node_modules/@capacitor/clipboard/android') + include ':capacitor-filesystem' project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android') diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..89dec502 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,9 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + // Downgrade strict case rules to warnings (level 1) instead of errors (level 2) + // This eliminates red error messages while maintaining helpful guidance + 'subject-case': [1, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']], + 'subject-full-stop': [1, 'never', '.'], + } +}; diff --git a/doc/z-index-guide.md b/doc/z-index-guide.md new file mode 100644 index 00000000..49a5733a --- /dev/null +++ b/doc/z-index-guide.md @@ -0,0 +1,69 @@ +# Z-Index Guide — TimeSafari + +**Author**: Development Team +**Date**: 2025-08-25T19:38:09-08:00 +**Status**: 🎯 **ACTIVE** - Z-index layering standards + +## Objective +Establish consistent z-index values across the TimeSafari application to ensure proper layering of UI elements. + +## Result +This document defines the z-index hierarchy for all UI components. + +## Use/Run +Reference these values when implementing new components or modifying existing ones to maintain consistent layering. + +## Z-Index Hierarchy + +| Component | Z-Index | Usage | +|-----------|---------|-------| +| **Map** | `40` | Base map layer and map-related overlays | +| **QuickNav** | `50` | Quick navigation bottom bar | +| **Dialogs and Modals** | `100` | Modal dialogs, popups, and overlay content | +| **Notifications and Toasts** | `120` | System notifications, alerts, and toast messages | + +## Best Practices + +1. **Never exceed 120** - Keep the highest z-index reserved for critical notifications +2. **Use increments of 10** - Leave room for future additions between layers +3. **Document exceptions** - If you need a z-index outside this range, document the reason +4. **Test layering** - Verify z-index behavior across different screen sizes and devices + +## Common Pitfalls + +- **Avoid arbitrary values** - Don't use random z-index numbers +- **Don't nest high z-index** - Keep child elements within their parent's z-index range +- **Consider stacking context** - Remember that `position: relative` creates new stacking contexts + +## Next Steps + +| Owner | Task | Exit Criteria | Target Date | +|-------|------|---------------|-------------| +| Dev Team | Apply z-index classes to existing components | All components use defined z-index values | 2025-09-01 | + +## Competence Hooks + +- **Why this works**: Creates predictable layering hierarchy that prevents UI conflicts +- **Common pitfalls**: Using arbitrary z-index values or exceeding the defined range +- **Next skill unlock**: Learn about CSS stacking contexts and their impact on z-index +- **Teach-back**: Explain the z-index hierarchy to a team member without referencing this guide + +## Collaboration Hooks + +- **Reviewers**: Frontend team, UI/UX designers +- **Sign-off checklist**: + - [ ] All new components follow z-index guidelines + - [ ] Existing components updated to use defined values + - [ ] Cross-browser testing completed + - [ ] Mobile responsiveness verified + +## Assumptions & Limits + +- Assumes modern browser support for z-index +- Limited to 4 defined layers (expandable if needed) +- Requires team discipline to maintain consistency + +## References + +- [MDN Z-Index Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/z-index) +- [CSS Stacking Context Guide](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context) diff --git a/ios/App/Podfile b/ios/App/Podfile index da98dfe6..5c94c24a 100644 --- a/ios/App/Podfile +++ b/ios/App/Podfile @@ -15,6 +15,7 @@ def capacitor_pods pod 'CapacitorMlkitBarcodeScanning', :path => '../../node_modules/@capacitor-mlkit/barcode-scanning' pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app' pod 'CapacitorCamera', :path => '../../node_modules/@capacitor/camera' + pod 'CapacitorClipboard', :path => '../../node_modules/@capacitor/clipboard' pod 'CapacitorFilesystem', :path => '../../node_modules/@capacitor/filesystem' pod 'CapacitorShare', :path => '../../node_modules/@capacitor/share' pod 'CapawesomeCapacitorFilePicker', :path => '../../node_modules/@capawesome/capacitor-file-picker' diff --git a/ios/App/Podfile.lock b/ios/App/Podfile.lock index fdd82e86..eb9dd861 100644 --- a/ios/App/Podfile.lock +++ b/ios/App/Podfile.lock @@ -5,6 +5,8 @@ PODS: - Capacitor - CapacitorCamera (6.1.2): - Capacitor + - CapacitorClipboard (6.0.2): + - Capacitor - CapacitorCommunitySqlite (6.0.2): - Capacitor - SQLCipher @@ -88,6 +90,7 @@ DEPENDENCIES: - "Capacitor (from `../../node_modules/@capacitor/ios`)" - "CapacitorApp (from `../../node_modules/@capacitor/app`)" - "CapacitorCamera (from `../../node_modules/@capacitor/camera`)" + - "CapacitorClipboard (from `../../node_modules/@capacitor/clipboard`)" - "CapacitorCommunitySqlite (from `../../node_modules/@capacitor-community/sqlite`)" - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" - "CapacitorFilesystem (from `../../node_modules/@capacitor/filesystem`)" @@ -119,6 +122,8 @@ EXTERNAL SOURCES: :path: "../../node_modules/@capacitor/app" CapacitorCamera: :path: "../../node_modules/@capacitor/camera" + CapacitorClipboard: + :path: "../../node_modules/@capacitor/clipboard" CapacitorCommunitySqlite: :path: "../../node_modules/@capacitor-community/sqlite" CapacitorCordova: @@ -136,6 +141,7 @@ SPEC CHECKSUMS: Capacitor: c95400d761e376be9da6be5a05f226c0e865cebf CapacitorApp: e1e6b7d05e444d593ca16fd6d76f2b7c48b5aea7 CapacitorCamera: 9bc7b005d0e6f1d5f525b8137045b60cffffce79 + CapacitorClipboard: 4443c3cdb7c77b1533dfe3ff0f9f7756aa8579df CapacitorCommunitySqlite: 0299d20f4b00c2e6aa485a1d8932656753937b9b CapacitorCordova: 8d93e14982f440181be7304aa9559ca631d77fff CapacitorFilesystem: 59270a63c60836248812671aa3b15df673fbaf74 @@ -157,6 +163,6 @@ SPEC CHECKSUMS: SQLCipher: 31878d8ebd27e5c96db0b7cb695c96e9f8ad77da ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c -PODFILE CHECKSUM: f987510f7383b04a1b09ea8472bdadcd88b6c924 +PODFILE CHECKSUM: 60f54b19c5a7a07343ab5ba9e5db49019fd86aa0 COCOAPODS: 1.16.2 diff --git a/package-lock.json b/package-lock.json index fea161a9..48ffb61d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@capacitor/app": "^6.0.0", "@capacitor/camera": "^6.0.0", "@capacitor/cli": "^6.2.0", + "@capacitor/clipboard": "^6.0.2", "@capacitor/core": "^6.2.0", "@capacitor/filesystem": "^6.0.0", "@capacitor/ios": "^6.2.0", @@ -2301,6 +2302,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@capacitor/clipboard": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/clipboard/-/clipboard-6.0.2.tgz", + "integrity": "sha512-jQ6UeFra5NP58THNZNb7HtzOZU7cHsjgrbQGVuMTgsK1uTILZpNeh+pfqHbKggba6KaNh5DAsJvEVQGpIR1VBA==", + "peerDependencies": { + "@capacitor/core": "^6.0.0" + } + }, "node_modules/@capacitor/core": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.1.tgz", diff --git a/package.json b/package.json index 78226938..55357be2 100644 --- a/package.json +++ b/package.json @@ -136,11 +136,7 @@ "*.{js,ts,vue,css,json,yml,yaml}": "eslint --fix || true", "*.{md,markdown,mdc}": "markdownlint-cli2 --fix" }, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] - }, + "dependencies": { "@capacitor-community/electron": "^5.0.1", "@capacitor-community/sqlite": "6.0.2", @@ -149,6 +145,7 @@ "@capacitor/app": "^6.0.0", "@capacitor/camera": "^6.0.0", "@capacitor/cli": "^6.2.0", + "@capacitor/clipboard": "^6.0.2", "@capacitor/core": "^6.2.0", "@capacitor/filesystem": "^6.0.0", "@capacitor/ios": "^6.2.0", diff --git a/src/App.vue b/src/App.vue index 8bd39b52..fd1cc9aa 100644 --- a/src/App.vue +++ b/src/App.vue @@ -4,7 +4,7 @@