@lcsng/tools v0.0.3
π¦ LCS Tools (JavaScript Utilities)
A powerful frontend JavaScript toolkit by LCS β utilities for building faster, cleaner, and more interactive web apps.
LCS Tools is a collection of ready-to-use JavaScript tools designed to enhance UX in web apps. These utilities offer common UI enhancements such as OTP input handling, password visibility toggling, and geolocation with reverse geocoding β all implemented in a lightweight, dependency-free manner.
π Features
- β Easy-to-use utility functions and classes
- π οΈ Tools for DOM handling, events, and user interaction
- π Location detection
- π€ File upload helper (coming soon)
- π Password toggle
- π Lightweight and modular
- π§© Browser-friendly (
<script>) or Node-compatible (require/import) - π Obfuscated for production use via Webpack
π¦ Installation
CDN (Browser)
<script src="https://unpkg.com/lcs_tools@latest/dist/lt.min.js"></script>
<script>
// Access via global namespace
lcsTools.getCurrentLocation().then(console.log);
</script>β When using via CDN, all exports are available under the
lcsToolsglobal object.
NPM (Node / Build Tools)
npm install lcs_toolsThen in your code:
// ESModule
import { getCurrentLocation } from 'lcs_tools';
// CommonJS
const { getCurrentLocation } = require('lcs_tools');π Usage Examples
π getCurrentLocation()
Fetch the current browser location with graceful fallback:
lcsTools.getCurrentLocation()
.then((locationText) => {
console.log('Your location:', locationText);
})
.catch((err) => {
console.warn('Location error:', err);
});Returns a promise that resolves to:
12 Yemi Car Wash Off Freedom Way, Itedo, Lekki Phase I, Lagos State, Nigeriaπ’ OTP Input Validation
Purpose:
Manages OTP (One-Time Password) inputs with seamless auto-focus and input aggregation.
Features:
- Supports digit-only input
- Automatically jumps to the next field on valid input
- Moves to the previous input field on backspace
- Aggregates all inputs into a hidden field for submission
Expected HTML Structure:
<div class="_otp_block">
<div class="_otp_inputs">
<input type="text" maxlength="1" />
<input type="text" maxlength="1" />
<input type="text" maxlength="1" />
<input type="text" maxlength="1" />
</div>
<input type="hidden" name="otp" />
</div>Notes:
- The final OTP string is automatically inserted into the hidden input field.
π Password Visibility Toggle
Purpose:
Allows toggling of password fields between text and password, improving user experience during login or sign-up.
Features:
- Click to show/hide password
- Dynamically changes the toggle button text (
Show/Hide)
Expected HTML Structure:
<div class="_form_password_wrapper">
<input type="password" class="_password_input" />
<button type="button" class="_show_hide_password">Show</button>
</div>Notes:
- The button label updates automatically.
- Works on dynamically added elements too.
π Geolocation + Reverse Geocoding
Purpose:
Fetches the user's current location, converts it to a human-readable address using OpenStreetMapβs Nominatim API, and inserts it into a specified field.
Key Features:
- Fully custom modal alert for user interaction
- Geolocation permission awareness
- Reverse geocoding to address string
- Compatible with both
inputfields andcontentEditableelements - Input fallback on failure
Expected HTML Structure:
<input type="text" id="locationInput" placeholder="Your location will appear here">
<button class="lcsGetCurrentLocation" data-get_value="locationInput">Get Location</button>Usage Flow:
1. User clicks the button with class lcsGetCurrentLocation.
2. A custom modal appears asking for permission (if required).
3. On approval, the location is fetched and resolved to a readable address.
4. The address is inserted into the targeted input or editable field.
Permissions Handling:
- Detects if permission is already granted, denied, or needs to be asked.
- Displays custom prompts accordingly.
APIs Used:
navigator.geolocationfor coordinates- OpenStreetMap's Nominatim Reverse Geocoding API for address resolution
Failure Scenarios:
- Geolocation unsupported
- Permission denied or dismissed
- No internet connection
- Input field target not found
Fallback: If the address can't be fetched, the input is reset to its previous value.
π‘ Best Practices
- Make sure each tool is wrapped in appropriate HTML structure.
- These tools rely on event delegation, so dynamic elements are supported out of the box.
- Use minimal styling overrides to ensure visual consistency if customizing the modals.
π§© Integration Example
<!-- OTP -->
<div class="_otp_block">
<div class="_otp_inputs">
<input type="text" maxlength="1">
<input type="text" maxlength="1">
<input type="text" maxlength="1">
<input type="text" maxlength="1">
</div>
<input type="hidden" name="otp">
</div>
<!-- Password -->
<div class="_form_password_wrapper">
<input type="password" class="_password_input" />
<button class="_show_hide_password">Show</button>
</div>
<!-- Location -->
<input type="text" id="locationInput">
<button class="lcsGetCurrentLocation" data-get_value="locationInput">Get Location</button>π€ lcsUploadFile(...) (coming soon)
Will support file upload with:
- progress tracking
- size/format validations
- server endpoint options
Stay tuned.
π Project Structure
lcs_tools/
βββ dist/ # Bundled, obfuscated output
β βββ lt.min.js
βββ src/ # Source modules
β βββ index.js # Main export entry
β βββ location.js # Location utility
β βββ password.js # Password toggle
β βββ ...more coming
βββ webpack.config.js # Build + Obfuscation
βββ jsdoc.json # Auto documentation
βββ package.json
βββ README.mdπ§βπ» Contributing
Want to add a utility or improve one?
git clone https://github.com/lcsnigeria/lcs_tools.git
cd lcs_tools
npm install
npm run buildAll source files live in /src. Just export any new functions or classes from index.js to include them in the final build.
β Contributions should be modular and documented using JSDoc comments.
π Documentation
Auto-generated from source using JSDoc. Build with:
npm run buildThis will generate the HTML docs in a docs/ folder (optionally host via GitHub Pages later).
π Versioning
Versioned using standard-version:
npm run releaseThis will:
- Bump the version (based on commit types)
- Tag the commit
- Generate a changelog
- Push and publish the release
π License
MIT License
π¨βπ» Author
Chinonso Frewen Justice β JCFuniverse
Founder & CEO, Loaded Channel Solutions (LCS)
Β© 2025 - π https://lcs.ng | π§ justicefrewen@gmail.com
π Links
- π§° GitHub Repo: lcsnigeria/lcs_tools
- π§ͺ NPM Package: npmjs.com/package/lcs_tools
- π Docs: Coming soon...