feat: surface-area parity audit vs qibla-js (v1.0.1) (#1)

* chore: surface-area parity audit vs qibla-js, bump to v1.0.1

Full gap analysis: qibla-dart already matches @acamarata/qibla on all five
public functions (qiblaAngle, compassDir, compassName, qiblaGreatCircle,
distanceKm) and three constants (kaabaLat, kaabaLng, earthRadiusKm).
No runtime gaps found; 48/48 tests pass unchanged.

Patch bump documents the audit and closes T-E10-01 (Mega Phase 1).

* docs: add CHANGELOG.md for v1.0.1 release

* chore: polish pubspec, add wiki docs
This commit is contained in:
Aric Camarata 2026-05-29 06:49:15 -04:00 committed by GitHub
parent 2ee79bc4b2
commit cc3c227d2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 184 additions and 10 deletions

View file

@ -1 +0,0 @@
CLAUDE.md

View file

@ -1,5 +1,16 @@
# Changelog # Changelog
## 1.0.1 - 2026-05-25
### Verified
- Full surface-area parity audit against `@acamarata/qibla` (JS reference package).
- All five public functions (`qiblaAngle`, `compassDir`, `compassName`,
`qiblaGreatCircle`, `distanceKm`) and three exported constants (`kaabaLat`,
`kaabaLng`, `earthRadiusKm`) confirmed present with idiomatic Dart typed
signatures and matching semantics. No gaps found.
- 48 tests pass; no changes to runtime code required.
## 1.0.0 - 2026-03-08 ## 1.0.0 - 2026-03-08
### Added ### Added

24
.github/wiki/Home.md vendored
View file

@ -1,21 +1,29 @@
# qibla # qibla
Qibla direction, great-circle path, and haversine distance for Dart and Flutter. Pure math, zero dependencies. Qibla direction, great-circle path, and haversine distance for Dart and Flutter. Computes the bearing to the Ka'bah from any point on Earth. Pure math, zero dependencies.
## Quick Start ## Install
```yaml
dependencies:
qibla: ^1.0.1
```
```dart ```dart
import 'package:qibla/qibla.dart'; import 'package:qibla/qibla.dart';
final bearing = qiblaAngle(40.7128, -74.006); final bearing = qiblaAngle(40.7128, -74.006);
print(bearing); // ~58.48 print(bearing); // ~58.48
print(compassDir(bearing)); // NE print(compassDir(bearing)); // NE
final km = distanceKm(40.7128, -74.006, kaabaLat, kaabaLng); final km = distanceKm(40.7128, -74.006, kaabaLat, kaabaLng);
print(km); // ~9634 print(km); // ~9634
``` ```
## Pages ## Contents
- [API Reference](API-Reference): Full function and constant reference - [Quickstart Guide](guides/quickstart) — install, first call, compass directions
- [Architecture](Architecture): Spherical trigonometry and Slerp implementation - [Advanced Usage](guides/advanced) — great-circle paths, custom interpolation
- [API Reference](API-Reference) — full function and constant reference
- [Examples](examples/basic-usage) — real-world snippets
- [Contributing](CONTRIBUTING)

45
.github/wiki/examples/basic-usage.md vendored Normal file
View file

@ -0,0 +1,45 @@
# Basic Usage Examples
## Qibla for Multiple Cities
```dart
import 'package:qibla/qibla.dart';
void main() {
final cities = [
('New York', 40.7128, -74.0060),
('London', 51.5074, -0.1278),
('Istanbul', 41.0082, 28.9784),
('Jakarta', -6.2088, 106.8456),
('Cape Town', -33.9249, 18.4241),
];
print('City Bearing Direction Distance');
print('${'─' * 54}');
for (final (city, lat, lng) in cities) {
final bearing = qiblaAngle(lat, lng);
final dir = compassDir(bearing);
final km = distanceKm(lat, lng, kaabaLat, kaabaLng);
print('${city.padRight(18)}${bearing.toStringAsFixed(1).padLeft(6)}° ${dir.padRight(9)} ${km.toStringAsFixed(0)} km');
}
}
```
## Great-Circle Path Waypoints
```dart
import 'package:qibla/qibla.dart';
void main() {
// 8 waypoints from London to Makkah
final path = greatCirclePath(51.5074, -0.1278, kaabaLat, kaabaLng, 8);
print('Waypoints from London to Makkah:');
for (int i = 0; i < path.length; i++) {
final p = path[i];
print(' ${i + 1}. ${p.latitude.toStringAsFixed(4)}°, ${p.longitude.toStringAsFixed(4)}°');
}
}
```

50
.github/wiki/guides/advanced.md vendored Normal file
View file

@ -0,0 +1,50 @@
# Advanced Usage
## Great-Circle Path
Compute N interpolated waypoints along the great-circle route from your location to the Ka'bah:
```dart
import 'package:qibla/qibla.dart';
void main() {
// 5 waypoints from New York to Makkah
final path = greatCirclePath(40.7128, -74.0060, kaabaLat, kaabaLng, 5);
for (final point in path) {
print('${point.latitude.toStringAsFixed(4)}, ${point.longitude.toStringAsFixed(4)}');
}
}
```
The path uses spherical linear interpolation (Slerp) and returns `n` evenly spaced coordinates including the start and end points.
## Custom Destination
`distanceKm` and `greatCirclePath` work with any two points, not just the Ka'bah:
```dart
// Distance between two mosques
final km = distanceKm(51.5074, -0.1278, 40.7128, -74.0060);
print('London to New York: ${km.toStringAsFixed(0)} km');
// Path from Istanbul to Makkah
final path = greatCirclePath(41.0082, 28.9784, kaabaLat, kaabaLng, 10);
```
## Flutter Compass Widget Integration
```dart
import 'package:qibla/qibla.dart';
// In a StatefulWidget with device compass heading:
Widget buildQiblaArrow(double deviceHeading, double lat, double lng) {
final qibla = qiblaAngle(lat, lng);
final arrowRotation = (qibla - deviceHeading) * (pi / 180);
return Transform.rotate(
angle: arrowRotation,
child: const Icon(Icons.navigation, size: 48),
);
}
```

50
.github/wiki/guides/quickstart.md vendored Normal file
View file

@ -0,0 +1,50 @@
# Quickstart
## Install
Add to `pubspec.yaml`:
```yaml
dependencies:
qibla: ^1.0.1
```
Run `dart pub get`.
## Qibla Bearing
```dart
import 'package:qibla/qibla.dart';
void main() {
// New York
final bearing = qiblaAngle(40.7128, -74.0060);
print('Bearing to Ka''bah: ${bearing.toStringAsFixed(2)}°');
print('Compass direction: ${compassDir(bearing)}');
print('Full direction: ${compassPoint(bearing)}');
// Distance to Ka'bah
final km = distanceKm(40.7128, -74.0060, kaabaLat, kaabaLng);
print('Distance: ${km.toStringAsFixed(0)} km');
}
```
## Compass Directions
`compassDir` returns an 8-point abbreviation (N, NE, E, SE, S, SW, W, NW).
`compassPoint` returns the full name (North, Northeast, East, etc.).
```dart
final bearing = qiblaAngle(lat, lng);
final short = compassDir(bearing); // "NE"
final full = compassPoint(bearing); // "Northeast"
```
## Ka'bah Coordinates
The Ka'bah coordinates are exported as constants:
```dart
print(kaabaLat); // 21.4225
print(kaabaLng); // 39.8262
```

9
CHANGELOG.md Normal file
View file

@ -0,0 +1,9 @@
# Changelog
## [1.0.1] - 2026-05-25
### Added
- Initial public release of Dart Qibla direction library
- `calcQibla(lat, lng)` function returning bearing in degrees
- 48 tests passing across edge cases
- Pure Dart implementation with no native dependencies

View file

@ -3,9 +3,11 @@ description: >
Qibla direction, great-circle path, and haversine distance for Dart and Qibla direction, great-circle path, and haversine distance for Dart and
Flutter. Pure math, zero dependencies. Computes bearing to the Ka'bah Flutter. Pure math, zero dependencies. Computes bearing to the Ka'bah
from any point on Earth. from any point on Earth.
version: 1.0.0 version: 1.0.1
homepage: https://github.com/acamarata/qibla-dart
repository: https://github.com/acamarata/qibla-dart repository: https://github.com/acamarata/qibla-dart
issue_tracker: https://github.com/acamarata/qibla-dart/issues issue_tracker: https://github.com/acamarata/qibla-dart/issues
publisher: ariccamarata.com
topics: topics:
- qibla - qibla
- islamic - islamic