@amir83nasr/map 1.0.4 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -25
- package/dist/core/defaults.test.d.ts +1 -0
- package/dist/core/format.test.d.ts +1 -0
- package/dist/{emitter.d.ts → engine/emitter.d.ts} +1 -1
- package/dist/engine/engine.test.d.ts +1 -0
- package/dist/{picker.d.ts → engine/picker.d.ts} +4 -1
- package/dist/index.cjs +88 -0
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -18
- package/dist/{qompick-react.js → index.js} +286 -246
- package/dist/react/LocationPickerView.d.ts +16 -0
- package/dist/react/react.test.d.ts +1 -0
- package/dist/style/style.test.d.ts +1 -0
- package/dist/{qompick-react.css → styles.css} +1 -1
- package/package.json +18 -10
- package/dist/qompick-react.cjs +0 -76
- /package/dist/{defaults.d.ts → core/defaults.d.ts} +0 -0
- /package/dist/{format.d.ts → core/format.d.ts} +0 -0
- /package/dist/{geocode.d.ts → core/geocode.d.ts} +0 -0
- /package/dist/{i18n.d.ts → core/i18n.d.ts} +0 -0
- /package/dist/{icons.d.ts → core/icons.d.ts} +0 -0
- /package/dist/{types.d.ts → core/types.d.ts} +0 -0
- /package/dist/{snap.d.ts → engine/snap.d.ts} +0 -0
- /package/dist/{colors.d.ts → style/colors.d.ts} +0 -0
- /package/dist/{map-style.d.ts → style/map-style.d.ts} +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/0-255.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/1024-1279.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/10240-10495.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/10496-10751.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/10752-11007.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/11008-11263.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/11264-11519.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/11520-11775.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/11776-12031.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/12032-12287.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/12288-12543.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/12544-12799.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/1280-1535.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/12800-13055.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/13056-13311.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/13312-13567.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/13568-13823.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/13824-14079.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/14080-14335.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/14336-14591.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/14592-14847.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/14848-15103.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/15104-15359.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/1536-1791.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/15360-15615.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/15616-15871.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/15872-16127.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/16128-16383.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/16384-16639.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/16640-16895.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/16896-17151.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/17152-17407.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/17408-17663.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/17664-17919.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/1792-2047.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/17920-18175.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/18176-18431.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/18432-18687.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/18688-18943.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/18944-19199.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/19200-19455.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/19456-19711.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/19712-19967.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/19968-20223.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/20224-20479.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/2048-2303.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/20480-20735.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/20736-20991.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/20992-21247.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/21248-21503.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/21504-21759.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/21760-22015.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/22016-22271.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/22272-22527.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/22528-22783.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/22784-23039.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/2304-2559.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/23040-23295.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/23296-23551.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/23552-23807.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/23808-24063.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/24064-24319.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/24320-24575.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/24576-24831.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/24832-25087.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/25088-25343.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/25344-25599.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/256-511.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/2560-2815.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/25600-25855.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/25856-26111.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/26112-26367.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/26368-26623.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/26624-26879.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/26880-27135.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/27136-27391.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/27392-27647.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/27648-27903.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/27904-28159.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/2816-3071.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/28160-28415.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/28416-28671.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/28672-28927.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/28928-29183.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/29184-29439.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/29440-29695.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/29696-29951.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/29952-30207.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/30208-30463.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/30464-30719.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/3072-3327.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/30720-30975.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/30976-31231.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/31232-31487.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/31488-31743.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/31744-31999.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/32000-32255.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/32256-32511.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/32512-32767.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/32768-33023.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/33024-33279.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/3328-3583.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/33280-33535.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/33536-33791.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/33792-34047.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/34048-34303.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/34304-34559.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/34560-34815.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/34816-35071.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/35072-35327.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/35328-35583.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/35584-35839.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/3584-3839.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/35840-36095.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/36096-36351.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/36352-36607.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/36608-36863.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/36864-37119.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/37120-37375.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/37376-37631.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/37632-37887.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/37888-38143.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/38144-38399.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/3840-4095.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/38400-38655.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/38656-38911.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/38912-39167.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/39168-39423.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/39424-39679.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/39680-39935.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/39936-40191.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/40192-40447.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/40448-40703.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/40704-40959.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/4096-4351.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/40960-41215.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/41216-41471.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/41472-41727.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/41728-41983.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/41984-42239.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/42240-42495.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/42496-42751.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/42752-43007.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/43008-43263.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/43264-43519.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/4352-4607.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/43520-43775.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/43776-44031.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/44032-44287.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/44288-44543.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/44544-44799.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/44800-45055.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/45056-45311.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/45312-45567.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/45568-45823.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/45824-46079.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/4608-4863.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/46080-46335.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/46336-46591.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/46592-46847.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/46848-47103.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/47104-47359.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/47360-47615.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/47616-47871.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/47872-48127.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/48128-48383.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/48384-48639.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/4864-5119.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/48640-48895.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/48896-49151.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/49152-49407.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/49408-49663.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/49664-49919.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/49920-50175.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/50176-50431.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/50432-50687.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/50688-50943.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/50944-51199.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/512-767.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/5120-5375.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/51200-51455.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/51456-51711.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/51712-51967.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/51968-52223.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/52224-52479.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/52480-52735.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/52736-52991.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/52992-53247.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/53248-53503.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/53504-53759.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/5376-5631.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/53760-54015.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/54016-54271.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/54272-54527.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/54528-54783.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/54784-55039.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/55040-55295.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/55296-55551.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/55552-55807.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/55808-56063.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/56064-56319.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/5632-5887.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/56320-56575.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/56576-56831.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/56832-57087.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/57088-57343.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/57344-57599.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/57600-57855.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/57856-58111.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/58112-58367.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/58368-58623.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/58624-58879.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/5888-6143.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/58880-59135.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/59136-59391.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/59392-59647.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/59648-59903.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/59904-60159.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/60160-60415.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/60416-60671.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/60672-60927.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/60928-61183.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/61184-61439.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/6144-6399.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/61440-61695.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/61696-61951.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/61952-62207.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/62208-62463.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/62464-62719.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/62720-62975.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/62976-63231.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/63232-63487.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/63488-63743.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/63744-63999.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/6400-6655.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/64000-64255.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/64256-64511.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/64512-64767.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/64768-65023.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/65024-65279.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/65280-65535.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/6656-6911.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/6912-7167.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/7168-7423.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/7424-7679.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/768-1023.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/7680-7935.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/7936-8191.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/8192-8447.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/8448-8703.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/8704-8959.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/8960-9215.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/9216-9471.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/9472-9727.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/9728-9983.pbf +0 -0
- /package/fonts/{IRANYekanX Regular → IRANYekanX}/9984-10239.pbf +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var d = (
|
|
4
|
-
import { jsx as
|
|
1
|
+
var se = Object.defineProperty;
|
|
2
|
+
var ne = (a, e, t) => e in a ? se(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
|
|
3
|
+
var d = (a, e, t) => ne(a, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import { jsx as le } from "react/jsx-runtime";
|
|
5
5
|
import { useRef as Z, useEffect as B } from "react";
|
|
6
|
-
import { Map as
|
|
7
|
-
const
|
|
6
|
+
import { Map as ce, Marker as U, Popup as de, setWorkerUrl as pe } from "maplibre-gl";
|
|
7
|
+
const he = {
|
|
8
8
|
searchPlaceholder: "جستوجوی موقعیت...",
|
|
9
9
|
searchTitle: "جستجوی موقعیت",
|
|
10
10
|
suggestedPlaces: "مکانهای پیشنهادی",
|
|
@@ -34,62 +34,73 @@ const ue = {
|
|
|
34
34
|
copy: "کپی",
|
|
35
35
|
copied: "کپی شد",
|
|
36
36
|
submitting: "در حال ثبت..."
|
|
37
|
-
},
|
|
38
|
-
{ name: "۱۹
|
|
39
|
-
{ name: "
|
|
40
|
-
{ name: "
|
|
41
|
-
{ name: "
|
|
42
|
-
{ name: "
|
|
43
|
-
{ name: "
|
|
44
|
-
{ name: "
|
|
45
|
-
{ name: "
|
|
46
|
-
{ name: "
|
|
47
|
-
{ name: "
|
|
48
|
-
{ name: "
|
|
49
|
-
{ name: "
|
|
50
|
-
{ name: "
|
|
51
|
-
{ name: "
|
|
52
|
-
{ name: "
|
|
53
|
-
{ name: "
|
|
54
|
-
{ name: "
|
|
55
|
-
{ name: "
|
|
56
|
-
{ name: "
|
|
57
|
-
{ name: "
|
|
58
|
-
{ name: "
|
|
59
|
-
{ name: "
|
|
60
|
-
{ name: "
|
|
61
|
-
{ name: "
|
|
62
|
-
{ name: "
|
|
63
|
-
{ name: "
|
|
64
|
-
{ name: "
|
|
65
|
-
{ name: "
|
|
66
|
-
{ name: "
|
|
67
|
-
{ name: "
|
|
68
|
-
{ name: "
|
|
69
|
-
{ name: "
|
|
70
|
-
{ name: "
|
|
71
|
-
{ name: "
|
|
72
|
-
{ name: "
|
|
73
|
-
{ name: "
|
|
74
|
-
{ name: "
|
|
75
|
-
{ name: "
|
|
76
|
-
{ name: "
|
|
77
|
-
{ name: "
|
|
78
|
-
{ name: "
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
37
|
+
}, ue = [
|
|
38
|
+
{ name: "۱۹ دی", addr: "شهر قم، خیابان ۱۹ دی", lat: 34.6457, lng: 50.8851 },
|
|
39
|
+
{ name: "۷۲ تن", addr: "شهر قم، میدان ۷۲ تن", lat: 34.6753, lng: 50.8922 },
|
|
40
|
+
{ name: "آبشار", addr: "شهر قم، بوستان آبشار", lat: 34.6869, lng: 50.8899 },
|
|
41
|
+
{ name: "آذر", addr: "شهر قم، بوستان شهدای آذر", lat: 34.6341, lng: 50.906 },
|
|
42
|
+
{ name: "ارم", addr: "شهر قم، محله ارم", lat: 34.6424, lng: 50.8804 },
|
|
43
|
+
{ name: "امام حسین", addr: "شهر قم، میدان امام حسین", lat: 34.6426, lng: 50.8491 },
|
|
44
|
+
{ name: "امام خمینی", addr: "شهر قم، خیابان امام خمینی", lat: 34.6633, lng: 50.8759 },
|
|
45
|
+
{ name: "انسجام", addr: "شهر قم، محله انسجام", lat: 34.6081, lng: 50.8783 },
|
|
46
|
+
{ name: "انقلاب", addr: "شهر قم، خیابان انقلاب", lat: 34.6354, lng: 50.8906 },
|
|
47
|
+
{ name: "باجک", addr: "شهر قم، محله باجک", lat: 34.6496, lng: 50.8906 },
|
|
48
|
+
{ name: "بلوار امین", addr: "شهر قم، بلوار امین", lat: 34.6335, lng: 50.8676 },
|
|
49
|
+
{ name: "بلوار الغدیر", addr: "شهر قم، بلوار الغدیر", lat: 34.5956, lng: 50.8209 },
|
|
50
|
+
{ name: "بلوار جمهوری اسلامی", addr: "شهر قم، بلوار جمهوری اسلامی", lat: 34.6056, lng: 50.8866 },
|
|
51
|
+
{ name: "بلوار پیامبر اعظم", addr: "شهر قم، بلوار پیامبر اعظم", lat: 34.6113, lng: 50.8973 },
|
|
52
|
+
{ name: "بنیاد", addr: "شهر قم، محله بنیاد", lat: 34.5944, lng: 50.8768 },
|
|
53
|
+
{ name: "پردیسان", addr: "شهر قم، شهرک پردیسان", lat: 34.5588, lng: 50.8331 },
|
|
54
|
+
{ name: "توحید", addr: "شهر قم، میدان توحید", lat: 34.6436, lng: 50.8628 },
|
|
55
|
+
{ name: "جمکران", addr: "شهر قم، مسجد مقدس جمکران", lat: 34.5841, lng: 50.9146 },
|
|
56
|
+
{ name: "چهارمردان", addr: "شهر قم، محله چهارمردان", lat: 34.6335, lng: 50.889 },
|
|
57
|
+
{ name: "حافظ", addr: "شهر قم، خیابان حافظ", lat: 34.6494, lng: 50.8611 },
|
|
58
|
+
{ name: "حرم", addr: "شهر قم، حرم حضرت معصومه", lat: 34.6419, lng: 50.8787 },
|
|
59
|
+
{ name: "خاکفرج", addr: "شهر قم، محله خاکفرج", lat: 34.6517, lng: 50.8853 },
|
|
60
|
+
{ name: "دروازه ری", addr: "شهر قم، محله دروازه ری", lat: 34.6446, lng: 50.9023 },
|
|
61
|
+
{ name: "دورشهر", addr: "شهر قم، محله دورشهر", lat: 34.6296, lng: 50.8705 },
|
|
62
|
+
{ name: "زاویه", addr: "شهر قم، محله زاویه", lat: 34.6214, lng: 50.9078 },
|
|
63
|
+
{ name: "زنبیلآباد", addr: "شهر قم، محله زنبیلآباد", lat: 34.6075, lng: 50.862 },
|
|
64
|
+
{ name: "سالاریه", addr: "شهر قم، محله سالاریه", lat: 34.6116, lng: 50.8471 },
|
|
65
|
+
{ name: "سعیدی", addr: "شهر قم، میدان سعیدی", lat: 34.65, lng: 50.878 },
|
|
66
|
+
{ name: "سمیه", addr: "شهر قم، خیابان سمیه", lat: 34.632, lng: 50.8826 },
|
|
67
|
+
{ name: "شهدا", addr: "شهر قم، خیابان شهدا", lat: 34.6362, lng: 50.872 },
|
|
68
|
+
{ name: "شهرک امام حسن", addr: "شهر قم، شهرک امام حسن", lat: 34.6782, lng: 50.88 },
|
|
69
|
+
{ name: "شهرک صنعتی شکوهیه", addr: "شهر قم، شهرک صنعتی شکوهیه", lat: 34.7956, lng: 50.8177 },
|
|
70
|
+
{ name: "شهرک فاطمیه", addr: "شهر قم، شهرک فاطمیه", lat: 34.6746, lng: 50.8521 },
|
|
71
|
+
{ name: "شهرک قدس", addr: "شهر قم، شهرک قدس", lat: 34.5969, lng: 50.8426 },
|
|
72
|
+
{ name: "شهرک مهدیه", addr: "شهر قم، شهرک مهدیه", lat: 34.5823, lng: 50.8238 },
|
|
73
|
+
{ name: "شیخآباد", addr: "شهر قم، محله شیخآباد", lat: 34.6474, lng: 50.8344 },
|
|
74
|
+
{ name: "صدوق", addr: "شهر قم، محله صدوق", lat: 34.6313, lng: 50.8743 },
|
|
75
|
+
{ name: "صفائیه", addr: "شهر قم، محله صفائیه", lat: 34.6362, lng: 50.8721 },
|
|
76
|
+
{ name: "طالقانی", addr: "شهر قم، خیابان طالقانی", lat: 34.6734, lng: 50.8704 },
|
|
77
|
+
{ name: "عطاران", addr: "شهر قم، محله عطاران", lat: 34.624, lng: 50.8714 },
|
|
78
|
+
{ name: "علیبنجعفر", addr: "شهر قم، آستان علیبنجعفر", lat: 34.6313, lng: 50.8973 },
|
|
79
|
+
{ name: "فرهنگیان", addr: "شهر قم، محله فرهنگیان", lat: 34.6682, lng: 50.8984 },
|
|
80
|
+
{ name: "کشاورز", addr: "شهر قم، خیابان کشاورز", lat: 34.656, lng: 50.8446 },
|
|
81
|
+
{ name: "کلهری", addr: "شهر قم، منطقه کلهری", lat: 34.6257, lng: 50.9034 },
|
|
82
|
+
{ name: "کیوانفر", addr: "شهر قم، بلوار شهید کیوانفر", lat: 34.6582, lng: 50.8821 },
|
|
83
|
+
{ name: "مطهری", addr: "شهر قم، خیابان مطهری", lat: 34.646, lng: 50.8486 },
|
|
84
|
+
{ name: "معلم", addr: "شهر قم، میدان معلم", lat: 34.6328, lng: 50.8848 },
|
|
85
|
+
{ name: "نوبهار", addr: "شهر قم، محله نوبهار", lat: 34.6409, lng: 50.9053 },
|
|
86
|
+
{ name: "نیروگاه", addr: "شهر قم، محله نیروگاه", lat: 34.6487, lng: 50.8587 },
|
|
87
|
+
{ name: "هفتتیر", addr: "شهر قم، خیابان هفتتیر", lat: 34.6571, lng: 50.8848 },
|
|
88
|
+
{ name: "هنرستان", addr: "شهر قم، محله هنرستان", lat: 34.628, lng: 50.8878 },
|
|
89
|
+
{ name: "یزدانشهر", addr: "شهر قم، محله یزدانشهر", lat: 34.6154, lng: 50.8824 }
|
|
90
|
+
], z = { lat: 34.6416, lng: 50.8764 }, me = 14;
|
|
91
|
+
function ge(a) {
|
|
92
|
+
return { ...he, ...(a == null ? void 0 : a.labels) ?? {} };
|
|
82
93
|
}
|
|
83
|
-
function
|
|
94
|
+
function ye() {
|
|
84
95
|
return "rtl";
|
|
85
96
|
}
|
|
86
|
-
function
|
|
87
|
-
const e =
|
|
97
|
+
function fe(a) {
|
|
98
|
+
const e = a ?? {};
|
|
88
99
|
return {
|
|
89
100
|
container: e.container,
|
|
90
101
|
map: {
|
|
91
102
|
center: { ...z },
|
|
92
|
-
zoom:
|
|
103
|
+
zoom: me,
|
|
93
104
|
minZoom: 11,
|
|
94
105
|
maxZoom: 19,
|
|
95
106
|
bounds: [
|
|
@@ -107,7 +118,7 @@ function be(s) {
|
|
|
107
118
|
},
|
|
108
119
|
search: {
|
|
109
120
|
enabled: !0,
|
|
110
|
-
suggestions:
|
|
121
|
+
suggestions: ue,
|
|
111
122
|
minLength: 3,
|
|
112
123
|
debounceMs: 350,
|
|
113
124
|
limit: 5,
|
|
@@ -124,17 +135,17 @@ function be(s) {
|
|
|
124
135
|
locateZoom: 18,
|
|
125
136
|
...e.behavior ?? {}
|
|
126
137
|
},
|
|
127
|
-
i18n: { labels:
|
|
138
|
+
i18n: { labels: ge(e.i18n) },
|
|
128
139
|
markers: e.markers ?? []
|
|
129
140
|
};
|
|
130
141
|
}
|
|
131
|
-
const
|
|
142
|
+
const be = "#e9ebee", ve = "#e9ebee", V = "#a9e29b", we = "#9ed894", qe = "#b5e8a6", xe = "#d3ddd0", ke = "#e9dfc0", Se = "#b9d9f2", Le = "#cfe4f7", D = "#a9cdf0", G = "#4e6e94", H = "#dfe3e9", Ee = "#e9ebee", $ = "#ffffff", Te = "#d9dde2", x = "#ffffff", A = "#d5dae0", Me = "#cdbfa8", Re = "#e9ebee", Q = "#c6ccd4", I = "#b9bdc4", Y = "#a7aab3", X = "#5b6067", _ = "#2f3338", f = "#f7f8f9", P = "#565b62", Ae = [
|
|
132
143
|
"coalesce",
|
|
133
144
|
["get", "name:fa"],
|
|
134
145
|
["get", "name:nonlatin"],
|
|
135
146
|
["get", "name"],
|
|
136
147
|
["get", "name:latin"]
|
|
137
|
-
],
|
|
148
|
+
], _e = [
|
|
138
149
|
"0",
|
|
139
150
|
"۰",
|
|
140
151
|
"1",
|
|
@@ -176,17 +187,17 @@ const ve = "#e9ebee", we = "#e9ebee", G = "#a9e29b", qe = "#9ed894", xe = "#b5e8
|
|
|
176
187
|
"٩",
|
|
177
188
|
"۹"
|
|
178
189
|
];
|
|
179
|
-
function
|
|
180
|
-
const t = ["coalesce",
|
|
181
|
-
for (let
|
|
182
|
-
const n = ["at",
|
|
183
|
-
i.push(["case", [">", r,
|
|
190
|
+
function Ce(a, e = 40) {
|
|
191
|
+
const t = ["coalesce", a, ""], o = ["split", ["to-string", t], ""], r = ["length", o], i = [];
|
|
192
|
+
for (let s = 0; s < e; s++) {
|
|
193
|
+
const n = ["at", s, o];
|
|
194
|
+
i.push(["case", [">", r, s], ["match", n, ..._e, n], ""]);
|
|
184
195
|
}
|
|
185
196
|
return i.push(["slice", ["to-string", t], e]), ["format", ["concat", ...i], {}];
|
|
186
197
|
}
|
|
187
|
-
const b =
|
|
188
|
-
function y(
|
|
189
|
-
return ["interpolate", ["exponential", 1.2], ["zoom"], ...
|
|
198
|
+
const b = Ce(Ae), k = ["IRANYekanX"], O = ["IRANYekanX"], q = ["LineString", "MultiLineString"], ze = ["MultiPoint", "Point"];
|
|
199
|
+
function y(a) {
|
|
200
|
+
return ["interpolate", ["exponential", 1.2], ["zoom"], ...a];
|
|
190
201
|
}
|
|
191
202
|
const K = [
|
|
192
203
|
"interpolate",
|
|
@@ -200,7 +211,7 @@ const K = [
|
|
|
200
211
|
2.5,
|
|
201
212
|
20,
|
|
202
213
|
11.5
|
|
203
|
-
],
|
|
214
|
+
], $e = [
|
|
204
215
|
"interpolate",
|
|
205
216
|
["exponential", 1.2],
|
|
206
217
|
["zoom"],
|
|
@@ -212,9 +223,9 @@ const K = [
|
|
|
212
223
|
4,
|
|
213
224
|
20,
|
|
214
225
|
15
|
|
215
|
-
],
|
|
226
|
+
], Pe = [
|
|
216
227
|
// ── BACKGROUND ──────────────────────────────────────────
|
|
217
|
-
{ id: "background", type: "background", paint: { "background-color":
|
|
228
|
+
{ id: "background", type: "background", paint: { "background-color": be } },
|
|
218
229
|
// ── LANDUSE / LANDCOVER ─────────────────────────────────
|
|
219
230
|
{
|
|
220
231
|
id: "landuse-residential",
|
|
@@ -222,7 +233,7 @@ const K = [
|
|
|
222
233
|
source: "openmaptiles",
|
|
223
234
|
"source-layer": "landuse",
|
|
224
235
|
filter: ["match", ["get", "class"], ["neighbourhood", "residential"], !0, !1],
|
|
225
|
-
paint: { "fill-color":
|
|
236
|
+
paint: { "fill-color": ve }
|
|
226
237
|
},
|
|
227
238
|
{
|
|
228
239
|
id: "landuse-cemetery",
|
|
@@ -230,7 +241,7 @@ const K = [
|
|
|
230
241
|
source: "openmaptiles",
|
|
231
242
|
"source-layer": "landuse",
|
|
232
243
|
filter: ["==", ["get", "class"], "cemetery"],
|
|
233
|
-
paint: { "fill-color":
|
|
244
|
+
paint: { "fill-color": xe }
|
|
234
245
|
},
|
|
235
246
|
{
|
|
236
247
|
id: "landcover-wood",
|
|
@@ -238,7 +249,7 @@ const K = [
|
|
|
238
249
|
source: "openmaptiles",
|
|
239
250
|
"source-layer": "landcover",
|
|
240
251
|
filter: ["==", ["get", "class"], "wood"],
|
|
241
|
-
paint: { "fill-color":
|
|
252
|
+
paint: { "fill-color": we }
|
|
242
253
|
},
|
|
243
254
|
{
|
|
244
255
|
id: "landcover-grass",
|
|
@@ -246,14 +257,14 @@ const K = [
|
|
|
246
257
|
source: "openmaptiles",
|
|
247
258
|
"source-layer": "landcover",
|
|
248
259
|
filter: ["==", ["get", "class"], "grass"],
|
|
249
|
-
paint: { "fill-color":
|
|
260
|
+
paint: { "fill-color": qe }
|
|
250
261
|
},
|
|
251
262
|
{
|
|
252
263
|
id: "landcover-grass-park",
|
|
253
264
|
type: "fill",
|
|
254
265
|
source: "openmaptiles",
|
|
255
266
|
"source-layer": "park",
|
|
256
|
-
paint: { "fill-color":
|
|
267
|
+
paint: { "fill-color": V }
|
|
257
268
|
},
|
|
258
269
|
{
|
|
259
270
|
id: "park",
|
|
@@ -261,7 +272,7 @@ const K = [
|
|
|
261
272
|
source: "openmaptiles",
|
|
262
273
|
"source-layer": "park",
|
|
263
274
|
filter: ["match", ["geometry-type"], ["MultiPolygon", "Polygon"], !0, !1],
|
|
264
|
-
paint: { "fill-color":
|
|
275
|
+
paint: { "fill-color": V }
|
|
265
276
|
},
|
|
266
277
|
{
|
|
267
278
|
id: "landcover-sand",
|
|
@@ -269,7 +280,7 @@ const K = [
|
|
|
269
280
|
source: "openmaptiles",
|
|
270
281
|
"source-layer": "landcover",
|
|
271
282
|
filter: ["==", ["get", "class"], "sand"],
|
|
272
|
-
paint: { "fill-color":
|
|
283
|
+
paint: { "fill-color": ke }
|
|
273
284
|
},
|
|
274
285
|
// ── WATER ───────────────────────────────────────────────
|
|
275
286
|
{
|
|
@@ -278,7 +289,7 @@ const K = [
|
|
|
278
289
|
source: "openmaptiles",
|
|
279
290
|
"source-layer": "water",
|
|
280
291
|
filter: ["all", ["!=", ["get", "intermittent"], 1], ["!=", ["get", "brunnel"], "tunnel"]],
|
|
281
|
-
paint: { "fill-color":
|
|
292
|
+
paint: { "fill-color": Se }
|
|
282
293
|
},
|
|
283
294
|
{
|
|
284
295
|
id: "water-intermittent",
|
|
@@ -286,7 +297,7 @@ const K = [
|
|
|
286
297
|
source: "openmaptiles",
|
|
287
298
|
"source-layer": "water",
|
|
288
299
|
filter: ["all", ["==", ["get", "intermittent"], 1], ["!=", ["get", "brunnel"], "tunnel"]],
|
|
289
|
-
paint: { "fill-color":
|
|
300
|
+
paint: { "fill-color": Le, "fill-opacity": 0.8 }
|
|
290
301
|
},
|
|
291
302
|
{
|
|
292
303
|
id: "waterway-other",
|
|
@@ -299,7 +310,7 @@ const K = [
|
|
|
299
310
|
["==", ["get", "intermittent"], 0]
|
|
300
311
|
],
|
|
301
312
|
paint: {
|
|
302
|
-
"line-color":
|
|
313
|
+
"line-color": D,
|
|
303
314
|
"line-width": ["interpolate", ["exponential", 1.3], ["zoom"], 13, 0.5, 20, 2]
|
|
304
315
|
}
|
|
305
316
|
},
|
|
@@ -315,7 +326,7 @@ const K = [
|
|
|
315
326
|
["==", ["get", "intermittent"], 0]
|
|
316
327
|
],
|
|
317
328
|
paint: {
|
|
318
|
-
"line-color":
|
|
329
|
+
"line-color": D,
|
|
319
330
|
"line-width": ["interpolate", ["exponential", 1.3], ["zoom"], 13, 0.5, 20, 6]
|
|
320
331
|
}
|
|
321
332
|
},
|
|
@@ -331,7 +342,7 @@ const K = [
|
|
|
331
342
|
["!=", ["get", "intermittent"], 1]
|
|
332
343
|
],
|
|
333
344
|
paint: {
|
|
334
|
-
"line-color":
|
|
345
|
+
"line-color": D,
|
|
335
346
|
"line-width": ["interpolate", ["exponential", 1.2], ["zoom"], 10, 0.8, 20, 6]
|
|
336
347
|
}
|
|
337
348
|
},
|
|
@@ -341,7 +352,7 @@ const K = [
|
|
|
341
352
|
type: "fill",
|
|
342
353
|
source: "openmaptiles",
|
|
343
354
|
"source-layer": "building",
|
|
344
|
-
paint: { "fill-antialias": !0, "fill-color":
|
|
355
|
+
paint: { "fill-antialias": !0, "fill-color": H }
|
|
345
356
|
},
|
|
346
357
|
{
|
|
347
358
|
id: "building-top",
|
|
@@ -349,9 +360,9 @@ const K = [
|
|
|
349
360
|
source: "openmaptiles",
|
|
350
361
|
"source-layer": "building",
|
|
351
362
|
paint: {
|
|
352
|
-
"fill-color":
|
|
363
|
+
"fill-color": Ee,
|
|
353
364
|
"fill-opacity": ["interpolate", ["linear"], ["zoom"], 13, 0, 16, 1],
|
|
354
|
-
"fill-outline-color":
|
|
365
|
+
"fill-outline-color": H,
|
|
355
366
|
"fill-translate": [
|
|
356
367
|
"interpolate",
|
|
357
368
|
["linear"],
|
|
@@ -370,7 +381,7 @@ const K = [
|
|
|
370
381
|
source: "openmaptiles",
|
|
371
382
|
"source-layer": "aeroway",
|
|
372
383
|
paint: {
|
|
373
|
-
"fill-color":
|
|
384
|
+
"fill-color": Re,
|
|
374
385
|
"fill-opacity": ["interpolate", ["linear"], ["zoom"], 13, 0, 14, 1]
|
|
375
386
|
}
|
|
376
387
|
},
|
|
@@ -436,9 +447,9 @@ const K = [
|
|
|
436
447
|
],
|
|
437
448
|
layout: { "line-cap": "round", "line-join": "round" },
|
|
438
449
|
paint: {
|
|
439
|
-
"line-color":
|
|
450
|
+
"line-color": Te,
|
|
440
451
|
"line-opacity": ["interpolate", ["linear"], ["zoom"], 12, 0, 12.5, 1],
|
|
441
|
-
"line-width":
|
|
452
|
+
"line-width": $e
|
|
442
453
|
}
|
|
443
454
|
},
|
|
444
455
|
{
|
|
@@ -543,7 +554,7 @@ const K = [
|
|
|
543
554
|
["==", ["get", "class"], "path"]
|
|
544
555
|
],
|
|
545
556
|
paint: {
|
|
546
|
-
"line-color":
|
|
557
|
+
"line-color": Me,
|
|
547
558
|
"line-dasharray": [1.5, 0.75],
|
|
548
559
|
"line-width": y([15, 1.2, 20, 4])
|
|
549
560
|
}
|
|
@@ -811,7 +822,7 @@ const K = [
|
|
|
811
822
|
"text-font": k,
|
|
812
823
|
"text-size": 13
|
|
813
824
|
},
|
|
814
|
-
paint: { "text-color":
|
|
825
|
+
paint: { "text-color": G, "text-halo-color": f, "text-halo-width": 1.5 }
|
|
815
826
|
},
|
|
816
827
|
{
|
|
817
828
|
id: "water_name_label",
|
|
@@ -819,7 +830,7 @@ const K = [
|
|
|
819
830
|
source: "openmaptiles",
|
|
820
831
|
"source-layer": "water_name",
|
|
821
832
|
layout: { "text-field": b, "text-font": k, "text-max-width": 8, "text-size": 12 },
|
|
822
|
-
paint: { "text-color":
|
|
833
|
+
paint: { "text-color": G, "text-halo-color": f, "text-halo-width": 1.5 }
|
|
823
834
|
},
|
|
824
835
|
// ── POI (Snapp density: worship/education/medical/shops) ──
|
|
825
836
|
{
|
|
@@ -914,7 +925,7 @@ const K = [
|
|
|
914
925
|
minzoom: 16,
|
|
915
926
|
filter: [
|
|
916
927
|
"all",
|
|
917
|
-
["match", ["geometry-type"],
|
|
928
|
+
["match", ["geometry-type"], ze, !0, !1],
|
|
918
929
|
[">=", ["get", "rank"], 1],
|
|
919
930
|
["<", ["get", "rank"], 7]
|
|
920
931
|
],
|
|
@@ -1080,7 +1091,7 @@ const K = [
|
|
|
1080
1091
|
},
|
|
1081
1092
|
paint: { "text-color": _, "text-halo-color": f, "text-halo-width": 1.5 }
|
|
1082
1093
|
}
|
|
1083
|
-
],
|
|
1094
|
+
], Oe = "https://tiles.openfreemap.org/planet", De = {
|
|
1084
1095
|
version: 8,
|
|
1085
1096
|
name: "snapp-like",
|
|
1086
1097
|
// Absolute CDN URL of the PBFs shipped in this package (files: fonts/) —
|
|
@@ -1090,9 +1101,9 @@ const K = [
|
|
|
1090
1101
|
glyphs: "https://cdn.jsdelivr.net/npm/@amir83nasr/map@1/fonts/{fontstack}/{range}.pbf",
|
|
1091
1102
|
sprite: "https://tiles.openfreemap.org/sprites/ofm_f384/ofm",
|
|
1092
1103
|
sources: {
|
|
1093
|
-
openmaptiles: { type: "vector", url:
|
|
1104
|
+
openmaptiles: { type: "vector", url: Oe }
|
|
1094
1105
|
},
|
|
1095
|
-
layers:
|
|
1106
|
+
layers: Pe
|
|
1096
1107
|
};
|
|
1097
1108
|
class Ie {
|
|
1098
1109
|
constructor() {
|
|
@@ -1114,8 +1125,8 @@ class Ie {
|
|
|
1114
1125
|
}
|
|
1115
1126
|
}
|
|
1116
1127
|
}
|
|
1117
|
-
function C(
|
|
1118
|
-
return `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${
|
|
1128
|
+
function C(a) {
|
|
1129
|
+
return `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${a}</svg>`;
|
|
1119
1130
|
}
|
|
1120
1131
|
const v = {
|
|
1121
1132
|
locate: C(
|
|
@@ -1130,51 +1141,51 @@ const v = {
|
|
|
1130
1141
|
),
|
|
1131
1142
|
x: C('<path d="M18 6 6 18"/><path d="m6 6 12 12"/>')
|
|
1132
1143
|
}, J = "۰۱۲۳۴۵۶۷۸۹";
|
|
1133
|
-
function S(
|
|
1134
|
-
return String(
|
|
1144
|
+
function S(a) {
|
|
1145
|
+
return String(a).replace(/\d/g, (e) => J[Number(e)]).replace(/[٠-٩]/g, (e) => J["٠١٢٣٤٥٦٧٨٩".indexOf(e)]);
|
|
1135
1146
|
}
|
|
1136
|
-
function ee(
|
|
1137
|
-
return S(Number(
|
|
1147
|
+
function ee(a, e = 5) {
|
|
1148
|
+
return S(Number(a).toFixed(e));
|
|
1138
1149
|
}
|
|
1139
|
-
function M(
|
|
1140
|
-
return String(
|
|
1150
|
+
function M(a) {
|
|
1151
|
+
return String(a).replace(/[۰-۹]/g, (e) => String("۰۱۲۳۴۵۶۷۸۹".indexOf(e))).replace(/[٠-٩]/g, (e) => String("٠١٢٣٤٥٦٧٨٩".indexOf(e)));
|
|
1141
1152
|
}
|
|
1142
|
-
function te(
|
|
1143
|
-
if (!
|
|
1144
|
-
const e = String(
|
|
1153
|
+
function te(a) {
|
|
1154
|
+
if (!a) return "";
|
|
1155
|
+
const e = String(a).split(",").map((o) => o.trim()).filter(Boolean), t = (o) => !!(/^(ایران|Iran)$/i.test(o) || /^استان\b/.test(o) || /^شهرستان\b/.test(o) || /^بخش\b/.test(o) || /^[\d\s\-–—]+$/.test(M(o)));
|
|
1145
1156
|
return e.filter((o) => !t(o)).slice(0, 4).reverse().join(", ");
|
|
1146
1157
|
}
|
|
1147
|
-
function Ne(
|
|
1148
|
-
return Number.isFinite(
|
|
1158
|
+
function Ne(a, e) {
|
|
1159
|
+
return Number.isFinite(a) && Number.isFinite(e) && a >= -90 && a <= 90 && e >= -180 && e <= 180;
|
|
1149
1160
|
}
|
|
1150
|
-
const
|
|
1151
|
-
function
|
|
1152
|
-
|
|
1161
|
+
const je = "50.35,35.05,51.45,34.15", N = /* @__PURE__ */ new Map(), j = /* @__PURE__ */ new Map();
|
|
1162
|
+
function ie(a, e) {
|
|
1163
|
+
a.size > e && a.delete(a.keys().next().value);
|
|
1153
1164
|
}
|
|
1154
|
-
async function We(
|
|
1155
|
-
const o = `${
|
|
1165
|
+
async function We(a, e, t) {
|
|
1166
|
+
const o = `${a.toFixed(4)},${e.toFixed(4)}`, r = N.get(o);
|
|
1156
1167
|
if (r) return r;
|
|
1157
1168
|
const i = await fetch(
|
|
1158
|
-
`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${
|
|
1169
|
+
`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${a}&lon=${e}&accept-language=fa`,
|
|
1159
1170
|
{ headers: { Accept: "application/json" }, signal: t == null ? void 0 : t.signal }
|
|
1160
1171
|
);
|
|
1161
1172
|
if (!i.ok) throw new Error(`http ${i.status}`);
|
|
1162
|
-
const
|
|
1163
|
-
if (!
|
|
1164
|
-
return N.set(o,
|
|
1173
|
+
const s = await i.json();
|
|
1174
|
+
if (!s.display_name) throw new Error("empty result");
|
|
1175
|
+
return N.set(o, s.display_name), ie(N, 200), s.display_name;
|
|
1165
1176
|
}
|
|
1166
|
-
async function
|
|
1167
|
-
const o = `${M(
|
|
1177
|
+
async function Fe(a, e = 5, t) {
|
|
1178
|
+
const o = `${M(a).trim().toLowerCase()}|${e}`, r = j.get(o);
|
|
1168
1179
|
if (r) return r;
|
|
1169
1180
|
const i = await fetch(
|
|
1170
|
-
`https://nominatim.openstreetmap.org/search?format=jsonv2&accept-language=fa&limit=${e}&viewbox=${
|
|
1181
|
+
`https://nominatim.openstreetmap.org/search?format=jsonv2&accept-language=fa&limit=${e}&viewbox=${je}&bounded=1&q=${encodeURIComponent(M(a))}`,
|
|
1171
1182
|
{ headers: { Accept: "application/json" }, signal: t == null ? void 0 : t.signal }
|
|
1172
1183
|
);
|
|
1173
1184
|
if (!i.ok) throw new Error(`http ${i.status}`);
|
|
1174
|
-
const
|
|
1175
|
-
return
|
|
1185
|
+
const s = await i.json();
|
|
1186
|
+
return j.set(o, s), ie(j, 50), s;
|
|
1176
1187
|
}
|
|
1177
|
-
const
|
|
1188
|
+
const Ze = [
|
|
1178
1189
|
"highway-minor",
|
|
1179
1190
|
"highway-link",
|
|
1180
1191
|
"highway-secondary-tertiary",
|
|
@@ -1186,53 +1197,53 @@ const Be = [
|
|
|
1186
1197
|
"bridge-secondary-tertiary",
|
|
1187
1198
|
"bridge-trunk-primary",
|
|
1188
1199
|
"bridge-motorway"
|
|
1189
|
-
], T = 64,
|
|
1190
|
-
function
|
|
1191
|
-
const
|
|
1192
|
-
return { x: p, y: h, d2: (
|
|
1200
|
+
], T = 64, Be = 15, oe = 2;
|
|
1201
|
+
function Ue(a, e, t, o, r, i) {
|
|
1202
|
+
const s = r - t, n = i - o, l = s * s + n * n, g = l === 0 ? 0 : ((a - t) * s + (e - o) * n) / l, m = Math.max(0, Math.min(1, g)), p = t + m * s, h = o + m * n;
|
|
1203
|
+
return { x: p, y: h, d2: (a - p) * (a - p) + (e - h) * (e - h) };
|
|
1193
1204
|
}
|
|
1194
|
-
function
|
|
1195
|
-
if (
|
|
1196
|
-
const o =
|
|
1205
|
+
function Ve(a, e, t) {
|
|
1206
|
+
if (a.getZoom() < Be) return null;
|
|
1207
|
+
const o = a.project([t, e]);
|
|
1197
1208
|
let r;
|
|
1198
1209
|
try {
|
|
1199
1210
|
const l = [
|
|
1200
1211
|
[o.x - T, o.y - T],
|
|
1201
1212
|
[o.x + T, o.y + T]
|
|
1202
1213
|
];
|
|
1203
|
-
r =
|
|
1214
|
+
r = a.queryRenderedFeatures(l, { layers: Ze });
|
|
1204
1215
|
} catch {
|
|
1205
1216
|
return null;
|
|
1206
1217
|
}
|
|
1207
|
-
let i = null,
|
|
1218
|
+
let i = null, s = T * T;
|
|
1208
1219
|
for (const l of r) {
|
|
1209
1220
|
const g = l.geometry, m = g.type === "LineString" ? [g.coordinates] : g.type === "MultiLineString" ? g.coordinates : [];
|
|
1210
1221
|
for (const p of m) {
|
|
1211
1222
|
let h = null;
|
|
1212
1223
|
for (const L of p) {
|
|
1213
|
-
const c =
|
|
1224
|
+
const c = a.project(L);
|
|
1214
1225
|
if (h) {
|
|
1215
|
-
const u =
|
|
1216
|
-
u.d2 <
|
|
1226
|
+
const u = Ue(o.x, o.y, h.x, h.y, c.x, c.y);
|
|
1227
|
+
u.d2 < s && (s = u.d2, i = { x: u.x, y: u.y });
|
|
1217
1228
|
}
|
|
1218
1229
|
h = { x: c.x, y: c.y };
|
|
1219
1230
|
}
|
|
1220
1231
|
}
|
|
1221
1232
|
}
|
|
1222
|
-
if (!i ||
|
|
1223
|
-
const n =
|
|
1233
|
+
if (!i || s < oe * oe) return null;
|
|
1234
|
+
const n = a.unproject([i.x, i.y]);
|
|
1224
1235
|
return { lat: n.lat, lng: n.lng };
|
|
1225
1236
|
}
|
|
1226
|
-
const re = 3,
|
|
1237
|
+
const re = 3, Ge = "Vite: import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url'; سپس setupQomPickWorker(workerUrl) را قبل از mount صدا بزنید. Next.js/webpack: هر دو فایل worker و shared را کپی کنید.", He = "qompick: MapLibre worker failed to load. Call setupQomPickWorker(workerUrl) from @amir83nasr/map before mounting LocationPickerView. Vite: use maplibre-gl-worker.mjs?worker&url. Next.js/webpack: copy maplibre-gl-worker.mjs and maplibre-gl-shared.mjs.";
|
|
1227
1238
|
let W = !1;
|
|
1228
|
-
function
|
|
1239
|
+
function Qe(a) {
|
|
1229
1240
|
const e = globalThis.Worker;
|
|
1230
1241
|
if (typeof e != "function") return () => {
|
|
1231
1242
|
};
|
|
1232
1243
|
class t extends e {
|
|
1233
1244
|
constructor(r, i) {
|
|
1234
1245
|
super(r, i), W = !1, this.addEventListener("error", () => {
|
|
1235
|
-
W = !0,
|
|
1246
|
+
W = !0, a();
|
|
1236
1247
|
});
|
|
1237
1248
|
}
|
|
1238
1249
|
}
|
|
@@ -1240,17 +1251,17 @@ function Ye(s) {
|
|
|
1240
1251
|
globalThis.Worker = e;
|
|
1241
1252
|
};
|
|
1242
1253
|
}
|
|
1243
|
-
function
|
|
1244
|
-
const e =
|
|
1254
|
+
function Ye(a) {
|
|
1255
|
+
const e = a, t = [e == null ? void 0 : e.message, e == null ? void 0 : e.filename, e == null ? void 0 : e.url, a].filter((o) => typeof o == "string").join(" ").toLowerCase();
|
|
1245
1256
|
return /maplibre-gl-(worker|shared)(?:-dev)?\.mjs/.test(t) || /failed to fetch worker script/.test(t) || /worker/.test(t) && /failed to load|cannot load|dynamically imported module/.test(t);
|
|
1246
1257
|
}
|
|
1247
|
-
const
|
|
1248
|
-
zero:
|
|
1258
|
+
const F = "من میخواهم با پکیج قمپیک (@amir83nasr/map) یک نقشه انتخاب موقعیت (LocationPickerView) از صفر در پروژه React/Next.js بسازم. این پکیج کاملاً متنباز و رایگان است و روی MapLibre GL ساخته شده و فقط نسخه React دارد. لطفاً قدمبهقدم و به ترتیب راهنماییام کن: ۱) نصب — دستور نصب @amir83nasr/map و maplibre-gl نسخه ۶ (که peer dependency است و باید جدا نصب شود)؛ ۲) راهاندازی پایه — ایمپورت @amir83nasr/map/styles.css (شامل CSS مپلایبر، فقط یک import CSS) و رندر کامپوننت LocationPickerView با ارتفاع مشخص (مثلاً 480px، چون بدون ارتفاع نقشه خالی دیده میشود) و center و zoom اولیه؛ ۳) جستجو — استفاده از پیشنهادهای پیشفرض محلههای قم، یا جایگزینی آنها با search.suggestions شامل name و addr و lat و lng؛۴) مارکرها — نمایش مارکر مکانها با markers؛ ۵) دریافت نتیجه — گرفتن مختصات و آدرس تاییدشده کاربر با onConfirm؛ ۶) پاکسازی — کامپوننت LocationPickerView خودش destroy را در cleanup صدا میزند. کد کامل و قابل اجرا بده شامل همه importها و cssها، بگو هر بخش چه میکند، و در پایان خروجی مورد انتظار را توصیف کن: نقشه فارسی راستچین (RTL) و موبایلفرست با پین وسط، دکمه GPS، جستجو و دکمه تایید موقعیت. اگر چیزی از پروژه من لازم داری (نسخه React/Next.js، نسخه پکیجها) اول بپرس.", ae = "پروژه React/Next.js من از قبل وجود دارد و میخواهم نقشه انتخاب موقعیت قمپیک (@amir83nasr/map) را به آن اضافه کنم بدون اینکه چیز دیگری خراب شود. این پکیج کاملاً متنباز و رایگان است و روی MapLibre GL ساخته شده و فقط نسخه React دارد. لطفاً قدمبهقدم و به ترتیب راهنماییام کن: ۱) نصب — دستور نصب @amir83nasr/map و maplibre-gl نسخه ۶ (که peer dependency است و باید جدا نصب شود)، با توجه به اینکه بقیه dependencyهای پروژه نباید بههم بخورد؛ ۲) ایمپورت css — اضافه کردن @amir83nasr/map/styles.css (شامل CSS مپلایبر؛ فقط یک import CSS) طوری که با استایلهای فعلی پروژه تداخل نکند (همه کلاسها و متغیرهای قمپیک با qp- شروع میشوند)؛ ۳) کانتینر — رندر LocationPickerView با ارتفاع مشخص (مثلاً 480px، چون بدون ارتفاع نقشه خالی دیده میشود) در جای مناسب صفحه فعلی؛ ۴) اتصال — دادن center و zoom، استفاده یا جایگزینی پیشنهادهای پیشفرض search، نمایش markers، و گرفتن مختصات و آدرس تاییدشده با onConfirm؛۵) پاکسازی — کامپوننت LocationPickerView خودش destroy را در cleanup صدا میزند. کد کامل و قابل اجرا بده شامل همه importها، بگو هر بخش چه میکند، و در پایان خروجی مورد انتظار را توصیف کن: نقشه فارسی راستچین (RTL) و موبایلفرست با پین وسط، دکمه GPS، جستجو و دکمه تایید موقعیت. اگر چیزی از پروژه من لازم داری (نسخه React/Next.js، نسخه پکیجها، ساختار فایلها) اول بپرس.", Xe = {
|
|
1259
|
+
zero: F,
|
|
1249
1260
|
existing: ae
|
|
1250
1261
|
};
|
|
1251
|
-
function w(
|
|
1262
|
+
function w(a) {
|
|
1252
1263
|
const e = document.createElement("template");
|
|
1253
|
-
return e.innerHTML =
|
|
1264
|
+
return e.innerHTML = a.trim(), e.content.firstElementChild;
|
|
1254
1265
|
}
|
|
1255
1266
|
class Ke {
|
|
1256
1267
|
constructor(e) {
|
|
@@ -1286,8 +1297,8 @@ class Ke {
|
|
|
1286
1297
|
var o, r;
|
|
1287
1298
|
const t = typeof e.container == "string" ? document.querySelector(e.container) : e.container;
|
|
1288
1299
|
if (!t) throw new Error("qompick: container not found");
|
|
1289
|
-
this.opts =
|
|
1290
|
-
for (const [i,
|
|
1300
|
+
this.opts = fe(e);
|
|
1301
|
+
for (const [i, s] of [
|
|
1291
1302
|
["onLocationChange", "locationChange"],
|
|
1292
1303
|
["onAddressResolved", "addressResolved"],
|
|
1293
1304
|
["onSearchResults", "searchResults"],
|
|
@@ -1297,7 +1308,7 @@ class Ke {
|
|
|
1297
1308
|
["onError", "error"]
|
|
1298
1309
|
]) {
|
|
1299
1310
|
const n = e[i];
|
|
1300
|
-
typeof n == "function" && this.emitter.on(
|
|
1311
|
+
typeof n == "function" && this.emitter.on(s, n);
|
|
1301
1312
|
}
|
|
1302
1313
|
this.build(t), this.initMap(), this.opts.markers.length && this.addVenues(this.opts.markers), this.setLocation(
|
|
1303
1314
|
((o = this.opts.map.center) == null ? void 0 : o.lat) ?? z.lat,
|
|
@@ -1377,7 +1388,7 @@ class Ke {
|
|
|
1377
1388
|
return this.opts.i18n.labels[e];
|
|
1378
1389
|
}
|
|
1379
1390
|
build(e) {
|
|
1380
|
-
const t = this.opts, o =
|
|
1391
|
+
const t = this.opts, o = ye(), r = (t.search.placeholder ?? this.t("searchPlaceholder")).replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
1381
1392
|
this.root = w(`<div class="qp qp-app" dir="${o}"></div>`);
|
|
1382
1393
|
const i = '<div class="qp-pin" aria-hidden="true"><div class="qp-pin-body"><div class="qp-pin-head"><div class="qp-pin-hole"></div></div><div class="qp-pin-stem"></div><div class="qp-pin-foot"></div></div><div class="qp-pin-shadow"></div></div>';
|
|
1383
1394
|
this.root.innerHTML = `
|
|
@@ -1405,8 +1416,8 @@ class Ke {
|
|
|
1405
1416
|
<div class="qp-toast" role="status"></div>`, e.appendChild(this.root), this.labelEl = this.root.querySelector(".qp-search-label") ?? w("<span></span>"), this.toastEl = this.root.querySelector(".qp-toast"), this.overlay = this.root.querySelector(".qp-overlay") ?? w("<div></div>"), this.wire(), requestAnimationFrame(() => this.root.classList.add("is-ready"));
|
|
1406
1417
|
}
|
|
1407
1418
|
wire() {
|
|
1408
|
-
var o, r, i,
|
|
1409
|
-
(o = this.root.querySelector(".qp-gps")) == null || o.addEventListener("click", () => this.locate()), (r = this.root.querySelector(".qp-search-trigger")) == null || r.addEventListener("click", () => this.openSearch()), (i = this.root.querySelector(".qp-ov-close")) == null || i.addEventListener("click", () => this.closeSearch()), (
|
|
1419
|
+
var o, r, i, s, n, l, g, m, p, h, L;
|
|
1420
|
+
(o = this.root.querySelector(".qp-gps")) == null || o.addEventListener("click", () => this.locate()), (r = this.root.querySelector(".qp-search-trigger")) == null || r.addEventListener("click", () => this.openSearch()), (i = this.root.querySelector(".qp-ov-close")) == null || i.addEventListener("click", () => this.closeSearch()), (s = this.root.querySelector(".qp-cta")) == null || s.addEventListener("click", () => this.openConfirm()), (n = this.root.querySelector(".qp-final")) == null || n.addEventListener("click", () => this.finishConfirm()), (l = this.root.querySelector(".qp-edit")) == null || l.addEventListener("click", () => this.closeModal("qp-confirm")), (g = this.root.querySelector(".qp-geo-retry")) == null || g.addEventListener("click", () => {
|
|
1410
1421
|
this.closeModal("qp-geo"), this.locate();
|
|
1411
1422
|
}), this.root.querySelectorAll(".qp-modal").forEach(
|
|
1412
1423
|
(c) => c.addEventListener("click", (u) => {
|
|
@@ -1423,6 +1434,10 @@ class Ke {
|
|
|
1423
1434
|
(c) => c.addEventListener("click", (u) => {
|
|
1424
1435
|
this.copyPrompt(u.currentTarget);
|
|
1425
1436
|
})
|
|
1437
|
+
), this.root.querySelectorAll(".qp-code-copy").forEach(
|
|
1438
|
+
(c) => c.addEventListener("click", (u) => {
|
|
1439
|
+
this.copyCode(u.currentTarget);
|
|
1440
|
+
})
|
|
1426
1441
|
);
|
|
1427
1442
|
const e = this.root.querySelector(".qp-overlay .qp-field input");
|
|
1428
1443
|
if (e) {
|
|
@@ -1453,14 +1468,14 @@ class Ke {
|
|
|
1453
1468
|
}
|
|
1454
1469
|
// ── MAP ──
|
|
1455
1470
|
initMap() {
|
|
1456
|
-
const e = this.opts, t = this.root.querySelector(".qp-map"), o = typeof e.map.style == "object" && e.map.style !== null ? { ...e.map.style } : { ...
|
|
1471
|
+
const e = this.opts, t = this.root.querySelector(".qp-map"), o = typeof e.map.style == "object" && e.map.style !== null ? { ...e.map.style } : { ...De }, r = e.map.glyphs ? { ...o, glyphs: e.map.glyphs } : o;
|
|
1457
1472
|
if (typeof r.glyphs == "string" && !/^(https?:|data:|blob:|\/)/.test(r.glyphs)) {
|
|
1458
1473
|
const p = document.baseURI, h = p.endsWith("/") ? p : p.slice(0, p.lastIndexOf("/") + 1);
|
|
1459
1474
|
r.glyphs = h + r.glyphs;
|
|
1460
1475
|
}
|
|
1461
|
-
const i = e.map.bounds,
|
|
1476
|
+
const i = e.map.bounds, s = Qe(() => this.showWorkerError());
|
|
1462
1477
|
try {
|
|
1463
|
-
this.map = new
|
|
1478
|
+
this.map = new ce({
|
|
1464
1479
|
container: t,
|
|
1465
1480
|
style: r,
|
|
1466
1481
|
center: [e.map.center.lng, e.map.center.lat],
|
|
@@ -1476,16 +1491,20 @@ class Ke {
|
|
|
1476
1491
|
dragRotate: !1,
|
|
1477
1492
|
touchPitch: !1,
|
|
1478
1493
|
clickTolerance: 5,
|
|
1494
|
+
// Fullscreen dialogs on hiDPI (DPR 2-3) exceed MapLibre's 4096
|
|
1495
|
+
// default: canvas CSS size × DPR > 4096px warns and drops pixel
|
|
1496
|
+
// ratio. 8192 fits typical MAX_TEXTURE_SIZE, keeps full res.
|
|
1497
|
+
maxCanvasSize: [8192, 8192],
|
|
1479
1498
|
maxBounds: [
|
|
1480
1499
|
[i[0][1], i[0][0]],
|
|
1481
1500
|
[i[1][1], i[1][0]]
|
|
1482
1501
|
]
|
|
1483
1502
|
});
|
|
1484
1503
|
} finally {
|
|
1485
|
-
|
|
1504
|
+
s();
|
|
1486
1505
|
}
|
|
1487
1506
|
W && this.showWorkerError(), this.map.on("error", (p) => {
|
|
1488
|
-
if (
|
|
1507
|
+
if (Ye(p.error)) {
|
|
1489
1508
|
this.showWorkerError();
|
|
1490
1509
|
return;
|
|
1491
1510
|
}
|
|
@@ -1514,7 +1533,7 @@ class Ke {
|
|
|
1514
1533
|
if (!this.destroyed) {
|
|
1515
1534
|
if (this.opts.behavior.snapToRoad && !u)
|
|
1516
1535
|
try {
|
|
1517
|
-
const E =
|
|
1536
|
+
const E = Ve(this.map, h.lat, h.lng);
|
|
1518
1537
|
if (E) {
|
|
1519
1538
|
l = E, this.map.easeTo({ center: [E.lng, E.lat], duration: 400 }), this.setLocation(E.lat, E.lng);
|
|
1520
1539
|
return;
|
|
@@ -1527,17 +1546,17 @@ class Ke {
|
|
|
1527
1546
|
});
|
|
1528
1547
|
}
|
|
1529
1548
|
showWorkerError() {
|
|
1530
|
-
var
|
|
1549
|
+
var s;
|
|
1531
1550
|
if (this.destroyed || this.workerFailed) return;
|
|
1532
1551
|
this.workerFailed = !0;
|
|
1533
|
-
const e = new Error(
|
|
1552
|
+
const e = new Error(He);
|
|
1534
1553
|
console.warn(e.message), this.fail(e);
|
|
1535
1554
|
const t = w('<div class="qp-err qp-map-err" role="alert"></div>'), o = w("<strong></strong>");
|
|
1536
1555
|
o.textContent = "ورکر MapLibre بارگذاری نشد؛ نقشه قابل استفاده نیست.";
|
|
1537
1556
|
const r = w("<span></span>");
|
|
1538
1557
|
r.textContent = "راهحل: ";
|
|
1539
1558
|
const i = w('<code dir="ltr"></code>');
|
|
1540
|
-
i.textContent =
|
|
1559
|
+
i.textContent = Ge, r.appendChild(i), t.append(o, r), (s = this.root.querySelector(".qp-map-wrap")) == null || s.appendChild(t);
|
|
1541
1560
|
}
|
|
1542
1561
|
showMyPos(e, t) {
|
|
1543
1562
|
if (this.myMarker) {
|
|
@@ -1545,7 +1564,7 @@ class Ke {
|
|
|
1545
1564
|
return;
|
|
1546
1565
|
}
|
|
1547
1566
|
const o = w('<div class="qp-my-wrap"><div class="qp-my-dot"></div></div>');
|
|
1548
|
-
this.myMarker = new
|
|
1567
|
+
this.myMarker = new U({ element: o }).setLngLat([t, e]).addTo(this.map);
|
|
1549
1568
|
}
|
|
1550
1569
|
addVenues(e) {
|
|
1551
1570
|
for (const t of e) {
|
|
@@ -1557,16 +1576,16 @@ class Ke {
|
|
|
1557
1576
|
'<div class="qp-venue-pop"><span class="qp-venue-dot"></span><span></span></div>'
|
|
1558
1577
|
);
|
|
1559
1578
|
r.lastElementChild.textContent = t.name;
|
|
1560
|
-
const i = new
|
|
1579
|
+
const i = new de({
|
|
1561
1580
|
offset: 26,
|
|
1562
1581
|
anchor: "top",
|
|
1563
1582
|
closeButton: !1,
|
|
1564
1583
|
className: "qp-venue-pop-wrap"
|
|
1565
|
-
}).setDOMContent(r),
|
|
1584
|
+
}).setDOMContent(r), s = new U({ element: o }).setLngLat([t.lng, t.lat]).setPopup(i).addTo(this.map);
|
|
1566
1585
|
let n = 0;
|
|
1567
1586
|
i.on("open", () => {
|
|
1568
1587
|
window.clearTimeout(n), n = window.setTimeout(() => i.remove(), 4e3), this.venueT.push(n);
|
|
1569
|
-
}), i.on("close", () => window.clearTimeout(n)), this.venueMarkers.push(
|
|
1588
|
+
}), i.on("close", () => window.clearTimeout(n)), this.venueMarkers.push(s);
|
|
1570
1589
|
}
|
|
1571
1590
|
}
|
|
1572
1591
|
// ── ADDRESS ──
|
|
@@ -1597,58 +1616,71 @@ class Ke {
|
|
|
1597
1616
|
}
|
|
1598
1617
|
// ── DEVELOPERS DOCS ──
|
|
1599
1618
|
devDocsHtml() {
|
|
1619
|
+
const e = this.t("copy"), t = (o) => `<div class="qp-code" dir="ltr"><pre>${o}</pre><button class="qp-ghost qp-code-copy" type="button">${e}</button></div>`;
|
|
1600
1620
|
return `<div class="qp-docs" hidden><div class="qp-docs-card">
|
|
1601
1621
|
<div class="qp-modal-head"><h2>${this.t("developers")}</h2><button class="qp-x" type="button" aria-label="${this.t("close")}">${v.x}</button></div>
|
|
1602
|
-
<
|
|
1603
|
-
<
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
<
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
onConfirm={(loc) => console.log(loc)}
|
|
1612
|
-
/>
|
|
1613
|
-
<p class="qp-note">نکته: CSS مپلایبر
|
|
1614
|
-
<p class="qp-note">نکته: فونت فارسی IRANYekanX داخل خود پکیج است (با همین import CSS لود میشود) و لیبلهای فارسی نقشه هم از PBFهای داخل پکیج میآیند — بدون تنظیم اضافه.</p>
|
|
1615
|
-
<p class="qp-note">نکته: کامپوننت خودش init و destroy را در lifecycle (useEffect) انجام میدهد — بدون init/destroy دستی. تنظیمات engine فقط موقع mount اعمال میشوند؛ برای تنظیمات جدید با <code dir="ltr">key</code> ریمانت کنید (فقط callbackها زنده میمانند).</p>
|
|
1616
|
-
<p class="qp-note">ورکر MapLibre را قبل از mount تنظیم کنید: در Vite فایل <code dir="ltr">maplibre-gl-worker.mjs?worker&url</code> را import و به <code dir="ltr">setupQomPickWorker()</code> بدهید؛ در Next.js/webpack هر دو فایل worker و shared را کپی کنید. خطای ورکر در <code dir="ltr">onError</code>، کنسول و <code dir="ltr">.qp-err</code> نمایش داده میشود.</p>
|
|
1622
|
+
<p class="qp-note">قمپیک (@amir83nasr/map) — نقشه انتخاب موقعیت روی MapLibre، فقط React، کاملاً متنباز و رایگان. نقشه همیشه VECTOR است (نه raster)؛ فارسی راستچین (RTL) و موبایلفرست.</p>
|
|
1623
|
+
<nav class="qp-docs-nav">
|
|
1624
|
+
<a href="#qp-d-install">نصب</a><a href="#qp-d-quick">شروع سریع</a><a href="#qp-d-worker">ورکر</a><a href="#qp-d-props">تنظیمات</a><a href="#qp-d-cb">کالبکها</a><a href="#qp-d-style">ظاهر</a><a href="#qp-d-faq">خطاها</a><a href="#qp-d-prompts">پرامپتها</a>
|
|
1625
|
+
</nav>
|
|
1626
|
+
<section id="qp-d-install"><h3>۱) نصب</h3>${t("pnpm add @amir83nasr/map maplibre-gl")}
|
|
1627
|
+
<p class="qp-note">نکته: maplibre-gl نسخه ۶ و react/react-dom peer dependency هستند و باید جدا نصب شوند.</p></section>
|
|
1628
|
+
<section id="qp-d-quick"><h3>۲) شروع سریع — ۲ خط</h3>${t(`import '@amir83nasr/map/styles.css';
|
|
1629
|
+
import { LocationPickerView } from '@amir83nasr/map';`)}${t(`<LocationPickerView
|
|
1630
|
+
style={{ height: 480 }}
|
|
1631
|
+
onConfirm={(loc) => console.log(loc.lat, loc.lng, loc.address)}
|
|
1632
|
+
/>;`)}
|
|
1633
|
+
<p class="qp-note">نکته: همین یک import کافی است (CSS مپلایبر + فونت IRANYekanX داخلش است). بدون <code dir="ltr">height</code> نقشه خالی دیده میشود (پیشفرض <code dir="ltr">480px</code>). کامپوننت خودش init/destroy میکند — دستی صدا نزنید.</p>
|
|
1617
1634
|
<p class="qp-note">نکته Next.js App Router: کامپوننت client است؛ با <code dir="ltr">dynamic(..., { ssr: false })</code> لود کنید.</p></section>
|
|
1618
|
-
<section
|
|
1619
|
-
<
|
|
1620
|
-
<
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
<
|
|
1624
|
-
<
|
|
1625
|
-
<li>
|
|
1626
|
-
<
|
|
1635
|
+
<section id="qp-d-worker"><h3>۳) ورکر MapLibre — قبل از mount (اجباری)</h3>
|
|
1636
|
+
<p class="qp-note">پکیج نمیتواند ورکر را برای شما باندل کند. علامت خرابی: نقشه خاکستری + باکس <code dir="ltr">.qp-map-err</code> + یک <code dir="ltr">console.warn</code> + کال <code dir="ltr">onError</code>.</p>
|
|
1637
|
+
<p class="qp-note">Vite:</p>${t(`import { setupQomPickWorker } from '@amir83nasr/map';
|
|
1638
|
+
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';
|
|
1639
|
+
setupQomPickWorker(workerUrl);`)}
|
|
1640
|
+
<p class="qp-note">Next.js/webpack: هر دو فایل <code dir="ltr">maplibre-gl-worker.mjs</code> و <code dir="ltr">maplibre-gl-shared.mjs</code> را در خروجی public کپی کنید و URL عمومی ورکر را به <code dir="ltr">setupQomPickWorker()</code> بدهید (الیاس <code dir="ltr">setupMapWorker</code> یکسان است).</p></section>
|
|
1641
|
+
<section id="qp-d-props"><h3>۴) تنظیمات مهم</h3><ul class="qp-list">
|
|
1642
|
+
<li><code dir="ltr">map</code> — مرکز/زوم/محدوده (<code dir="ltr">center / zoom / minZoom / maxZoom / bounds</code>)؛ پیشفرض قم <code dir="ltr">34.6416,50.8764</code> زوم ۱۴. استایل سفارشی فقط برداری (<code dir="ltr">style</code>)؛ <code dir="ltr">glyphs</code> برای self-host فونت نقشه.</li>
|
|
1643
|
+
<li><code dir="ltr">search</code> — پیشفرض ۵۲ محله قم (همه نمایش، بدون سقف): <code dir="ltr">enabled / placeholder / suggestions / minLength(3) / debounceMs(350) / limit(5)</code>. آرایه سفارشی جایگزین میشود؛ <code dir="ltr">[]</code> غیرفعال میکند. <code dir="ltr">limit</code> فقط نتایج ریموت (Nominatim) است.</li>
|
|
1644
|
+
<li><code dir="ltr">markers</code> — پینها با <code dir="ltr">name / lat / lng</code>؛ کلیک → پرواز تا <code dir="ltr">pickZoom</code> + کال <code dir="ltr">onPick</code>.</li>
|
|
1645
|
+
<li><code dir="ltr">controls</code> — <code dir="ltr">gps / confirmButton / searchTrigger / developers</code>.</li>
|
|
1646
|
+
<li><code dir="ltr">behavior</code> — <code dir="ltr">snapToRoad / resolveOnMove / resolveDelayMs(400) / settleDelayMs(250) / snapDelayMs(900) / pickZoom(15) / locateZoom(18)</code>. اسنپ فقط حرکت دستی، زوم ≥ ۱۵؛ پینچزوم و حرکات کد هرگز اسنپ نمیشوند.</li>
|
|
1647
|
+
<li><code dir="ltr">i18n.labels</code> — بازنویسی متنها؛ چیدمان همیشه RTL است.</li></ul>
|
|
1648
|
+
${t(`<LocationPickerView
|
|
1627
1649
|
map={{ center: { lat: 34.64, lng: 50.87 }, zoom: 15 }}
|
|
1628
1650
|
search={{ minLength: 3, limit: 5 }}
|
|
1651
|
+
markers={[{ name: 'فروشگاه', lat: 34.63, lng: 50.87 }]}
|
|
1629
1652
|
controls={{ gps: true, developers: true }}
|
|
1630
1653
|
onConfirm={(loc) => console.log(loc)}
|
|
1631
|
-
/>
|
|
1632
|
-
<
|
|
1633
|
-
<
|
|
1634
|
-
<li><code dir="ltr">
|
|
1635
|
-
<li><code dir="ltr">
|
|
1636
|
-
<li><code dir="ltr">
|
|
1637
|
-
<li><code dir="ltr">
|
|
1638
|
-
<li><code dir="ltr">
|
|
1639
|
-
<
|
|
1640
|
-
<
|
|
1641
|
-
|
|
1654
|
+
/>;`)}
|
|
1655
|
+
<p class="qp-note">تنظیمات engine فقط موقع mount اعمال میشوند؛ برای اعمال جدید با <code dir="ltr">key</code> ریمانت کنید — فقط کالبکها زنده میمانند: <code dir="ltr"><LocationPickerView key={cityId} ... /></code>.</p></section>
|
|
1656
|
+
<section id="qp-d-cb"><h3>۵) کالبکها — کدام برای چه</h3><ul class="qp-list">
|
|
1657
|
+
<li><code dir="ltr">onConfirm</code> — دکمه تایید در مودال → <b>ذخیره نتیجه</b> (فرم/سرور).</li>
|
|
1658
|
+
<li><code dir="ltr">onPick</code> — کلیک پین/پیشنهاد → واکنش، نه ذخیره.</li>
|
|
1659
|
+
<li><code dir="ltr">onLocationChange</code> — هر حرکت مرکز (پرتکرار).</li>
|
|
1660
|
+
<li><code dir="ltr">onAddressResolved</code> — پایان ژئوکد معکوس.</li>
|
|
1661
|
+
<li><code dir="ltr">onSearchResults</code> — پایان جستجوی ریموت.</li>
|
|
1662
|
+
<li><code dir="ltr">onLocate</code> — موفقیت GPS. <code dir="ltr">onError</code> — هر خطا از جمله ورکر.</li></ul></section>
|
|
1663
|
+
<section id="qp-d-style"><h3>۶) سفارشیسازی ظاهر</h3><p class="qp-note">prop تم نیست؛ همه کلاسها/متغیرها با <code dir="ltr">qp-</code> شروع میشوند و با پروژه تداخل نمیکنند:</p>
|
|
1664
|
+
${t(".qp { --qp-brand: #16a34a; --qp-ink: #111; --qp-radius: 16px; }")}
|
|
1665
|
+
<p class="qp-note">متغیرها: <code dir="ltr">--qp-brand --qp-brand-dark --qp-bg --qp-card --qp-ink --qp-muted --qp-line --qp-radius --qp-shadow --qp-font</code>.</p></section>
|
|
1666
|
+
<section><h3>۷) ساختار پروژه</h3><ul class="qp-list">
|
|
1667
|
+
<li><code dir="ltr">package/src/index.tsx</code> — API عمومی (re-export از <code dir="ltr">react/ + core/</code>).</li>
|
|
1668
|
+
<li><code dir="ltr">package/src/react/</code> — کامپوننت <code dir="ltr">LocationPickerView</code> + هلپر <code dir="ltr">setupQomPickWorker</code>.</li>
|
|
1669
|
+
<li><code dir="ltr">package/src/engine/</code> — engine داخلی (<code dir="ltr">picker</code>، در exports عمومی نیست).</li>
|
|
1670
|
+
<li><code dir="ltr">package/src/core/ + style/</code> — تایپها و helperها + استایل و basemap.</li>
|
|
1671
|
+
<li><code dir="ltr">dist/styles.css</code> — ایمپورت: <code dir="ltr">@amir83nasr/map/styles.css</code>.</li>
|
|
1672
|
+
<li><code dir="ltr">package/fonts/</code> — فونت IRANYekanX (woff2) و PBFهای glyph نقشه؛ داخل tarball منتشر میشود.</li></ul></section>
|
|
1673
|
+
<section id="qp-d-faq"><h3>۸) سوالات پرتکرار</h3><ul class="qp-list">
|
|
1674
|
+
<li>نقشه خالی/خاکستری بدون خطا؟ ارتفاع بدهید (<code dir="ltr">style={{ height: 480 }}</code>).</li>
|
|
1675
|
+
<li>باکس قرمز ورکر؟ بخش ۳ (ورکر) — نه چیز دیگر.</li>
|
|
1676
|
+
<li>لیبل فارسی نقشه نیست؟ CDN glyph مسدود است؛ <code dir="ltr">map.glyphs</code> را به کپی محلی <code dir="ltr">fonts/</code> بدهید.</li>
|
|
1677
|
+
<li>پراپ جدید اثر ندارد؟ mount-only است؛ <code dir="ltr">key</code> بدهید.</li>
|
|
1678
|
+
<li>کرش Next.js (<code dir="ltr">window/document</code>)؟ <code dir="ltr">'use client' + ssr: false</code>.</li>
|
|
1679
|
+
<li>کدام نسخه maplibre؟ ۶ (peer). رایگان؟ بله، متنباز.</li></ul></section>
|
|
1680
|
+
<section id="qp-d-prompts"><h3>پرامپت شروع از صفر</h3><div class="qp-prompt">${F}</div>
|
|
1642
1681
|
<div class="qp-modal-row"><button class="qp-ghost qp-copy" type="button" data-prompt="zero">${this.t("copy")}</button></div></section>
|
|
1643
1682
|
<section><h3>پرامپت افزودن به پروژه موجود</h3><div class="qp-prompt">${ae}</div>
|
|
1644
1683
|
<div class="qp-modal-row"><button class="qp-ghost qp-copy" type="button" data-prompt="existing">${this.t("copy")}</button></div></section>
|
|
1645
|
-
<section><h3>سوالات پرتکرار</h3><ul class="qp-list">
|
|
1646
|
-
<li>نقشه خالی است؟ به کامپوننت ارتفاع بدهید (مثلاً <code dir="ltr">style={{ height: 480 }}</code>)؛ بدون ارتفاع نقشه دیده نمیشود.</li>
|
|
1647
|
-
<li>لیبلهای فارسی نقشه نمایش داده نمیشود؟ glyphهای پیشفرض از CDN پکیج میآیند؛ برای self-host کردن، <code dir="ltr">map.glyphs</code> را به مسیر فونتهای پکیج (مثلاً <code dir="ltr">/fonts/{fontstack}/{range}.pbf</code> بعد از کپی <code dir="ltr">node_modules/@amir83nasr/map/fonts</code>) تنظیم کنید.</li>
|
|
1648
|
-
<li>پیام خطای ورکر روی نقشه میبینید؟ در Vite، <code dir="ltr">maplibre-gl-worker.mjs?worker&url</code> را import و قبل از mount به <code dir="ltr">setupQomPickWorker()</code> بدهید؛ در Next.js/webpack هر دو فایل <code dir="ltr">maplibre-gl-worker.mjs</code> و <code dir="ltr">maplibre-gl-shared.mjs</code> را کپی کنید. پکیج همین خطا را یکبار به <code dir="ltr">onError</code> و کنسول هم میفرستد.</li>
|
|
1649
|
-
<li>کدام نسخه maplibre؟ نسخه ۶؛ چون peer dependency است باید جدا نصب شود.</li>
|
|
1650
|
-
<li>در Next.js App Router؟ کامپوننت client است؛ با <code dir="ltr">dynamic(..., { ssr: false })</code> لود کنید.</li>
|
|
1651
|
-
<li>رایگان است؟ بله، قمپیک کاملاً متنباز و رایگان است.</li></ul></section>
|
|
1652
1684
|
<div class="qp-modal-row"><button class="qp-cta qp-back" type="button">${this.t("backToMap")}</button></div>
|
|
1653
1685
|
</div></div>`;
|
|
1654
1686
|
}
|
|
@@ -1660,21 +1692,29 @@ import { LocationPickerView } from '@amir83nasr/map';
|
|
|
1660
1692
|
const e = this.root.querySelector(".qp-docs");
|
|
1661
1693
|
e && (e.hidden = !0);
|
|
1662
1694
|
}
|
|
1663
|
-
|
|
1695
|
+
copyDone(e) {
|
|
1696
|
+
const t = e.textContent ?? "";
|
|
1697
|
+
e.textContent = this.t("copied"), window.setTimeout(() => {
|
|
1698
|
+
e.textContent = t;
|
|
1699
|
+
}, 1500);
|
|
1700
|
+
}
|
|
1701
|
+
copyText(e, t) {
|
|
1664
1702
|
var r;
|
|
1665
|
-
const
|
|
1666
|
-
const i = e.textContent ?? "";
|
|
1667
|
-
e.textContent = this.t("copied"), window.setTimeout(() => {
|
|
1668
|
-
e.textContent = i;
|
|
1669
|
-
}, 1500);
|
|
1670
|
-
};
|
|
1703
|
+
const o = () => this.copyDone(t);
|
|
1671
1704
|
if ((r = navigator.clipboard) != null && r.writeText) {
|
|
1672
|
-
|
|
1673
|
-
navigator.clipboard.writeText(a).then(t, () => this.fallbackCopy(a, t));
|
|
1705
|
+
navigator.clipboard.writeText(e).then(o, () => this.fallbackCopy(e, o));
|
|
1674
1706
|
return;
|
|
1675
1707
|
}
|
|
1676
|
-
|
|
1677
|
-
|
|
1708
|
+
this.fallbackCopy(e, o);
|
|
1709
|
+
}
|
|
1710
|
+
copyPrompt(e) {
|
|
1711
|
+
const t = e.dataset.prompt ?? "zero";
|
|
1712
|
+
this.copyText(Xe[t] ?? F, e);
|
|
1713
|
+
}
|
|
1714
|
+
copyCode(e) {
|
|
1715
|
+
var o;
|
|
1716
|
+
const t = (o = e.closest(".qp-code")) == null ? void 0 : o.querySelector("pre");
|
|
1717
|
+
t && this.copyText(t.textContent ?? "", e);
|
|
1678
1718
|
}
|
|
1679
1719
|
fallbackCopy(e, t) {
|
|
1680
1720
|
const o = document.createElement("textarea");
|
|
@@ -1720,10 +1760,10 @@ import { LocationPickerView } from '@amir83nasr/map';
|
|
|
1720
1760
|
return r.querySelector("b").textContent = S(String(e).split(",")[0]), r.querySelector("small").textContent = S(te(e)), r.addEventListener("click", () => this.pickResult(t, o)), r;
|
|
1721
1761
|
}
|
|
1722
1762
|
filteredSuggestions(e) {
|
|
1723
|
-
const t = M(e).trim()
|
|
1763
|
+
const t = M(e).trim();
|
|
1724
1764
|
return this.suggestions().filter(
|
|
1725
|
-
(
|
|
1726
|
-
).sort((
|
|
1765
|
+
(o) => !t || M(o.name).includes(t) || M(o.addr).includes(t)
|
|
1766
|
+
).sort((o, r) => o.name.localeCompare(r.name, "fa"));
|
|
1727
1767
|
}
|
|
1728
1768
|
suggestions() {
|
|
1729
1769
|
return this.opts.search.suggestions ?? [];
|
|
@@ -1757,12 +1797,12 @@ import { LocationPickerView } from '@amir83nasr/map';
|
|
|
1757
1797
|
this.searchSeq++;
|
|
1758
1798
|
const r = this.searchSeq;
|
|
1759
1799
|
window.clearTimeout(this.searchT);
|
|
1760
|
-
const i = e.trim(),
|
|
1800
|
+
const i = e.trim(), s = this.opts.search.minLength ?? re;
|
|
1761
1801
|
if (i.length < 1) {
|
|
1762
1802
|
t("");
|
|
1763
1803
|
return;
|
|
1764
1804
|
}
|
|
1765
|
-
if (i.length <
|
|
1805
|
+
if (i.length < s) {
|
|
1766
1806
|
t(i);
|
|
1767
1807
|
return;
|
|
1768
1808
|
}
|
|
@@ -1782,7 +1822,7 @@ import { LocationPickerView } from '@amir83nasr/map';
|
|
|
1782
1822
|
}
|
|
1783
1823
|
async runRemoteSearch(e, t, o) {
|
|
1784
1824
|
var g;
|
|
1785
|
-
const r = e.trim(), i = this.root.querySelector(t),
|
|
1825
|
+
const r = e.trim(), i = this.root.querySelector(t), s = this.root.querySelector(o);
|
|
1786
1826
|
if (!i) return;
|
|
1787
1827
|
if (!r) {
|
|
1788
1828
|
t.includes("desk") ? this.renderDeskSuggest("") : this.renderSuggest("");
|
|
@@ -1794,9 +1834,9 @@ import { LocationPickerView } from '@amir83nasr/map';
|
|
|
1794
1834
|
return;
|
|
1795
1835
|
}
|
|
1796
1836
|
const l = ++this.searchSeq;
|
|
1797
|
-
(g = this.searchAbort) == null || g.abort(), this.searchAbort = new AbortController(),
|
|
1837
|
+
(g = this.searchAbort) == null || g.abort(), this.searchAbort = new AbortController(), s && (s.hidden = !0), i.innerHTML = `<div class="qp-err">${this.t("searching")}</div>`;
|
|
1798
1838
|
try {
|
|
1799
|
-
const m = await
|
|
1839
|
+
const m = await Fe(r, this.opts.search.limit ?? 5, {
|
|
1800
1840
|
signal: this.searchAbort.signal
|
|
1801
1841
|
});
|
|
1802
1842
|
if (l !== this.searchSeq) return;
|
|
@@ -1844,11 +1884,11 @@ import { LocationPickerView } from '@amir83nasr/map';
|
|
|
1844
1884
|
this.emitter.emit("error", t);
|
|
1845
1885
|
}
|
|
1846
1886
|
}
|
|
1847
|
-
function Je(
|
|
1848
|
-
|
|
1887
|
+
function Je(a) {
|
|
1888
|
+
pe(a);
|
|
1849
1889
|
}
|
|
1850
1890
|
const it = Je;
|
|
1851
|
-
function
|
|
1891
|
+
function at({ className: a, style: e, ...t }) {
|
|
1852
1892
|
const o = Z(null), r = Z(t);
|
|
1853
1893
|
return B(() => {
|
|
1854
1894
|
r.current = t;
|
|
@@ -1857,41 +1897,41 @@ function st({ className: s, style: e, ...t }) {
|
|
|
1857
1897
|
const i = new Ke({
|
|
1858
1898
|
...r.current,
|
|
1859
1899
|
container: o.current,
|
|
1860
|
-
onLocationChange: (
|
|
1900
|
+
onLocationChange: (s) => {
|
|
1861
1901
|
var n, l;
|
|
1862
|
-
return (l = (n = r.current).onLocationChange) == null ? void 0 : l.call(n,
|
|
1902
|
+
return (l = (n = r.current).onLocationChange) == null ? void 0 : l.call(n, s);
|
|
1863
1903
|
},
|
|
1864
|
-
onAddressResolved: (
|
|
1904
|
+
onAddressResolved: (s) => {
|
|
1865
1905
|
var n, l;
|
|
1866
|
-
return (l = (n = r.current).onAddressResolved) == null ? void 0 : l.call(n,
|
|
1906
|
+
return (l = (n = r.current).onAddressResolved) == null ? void 0 : l.call(n, s);
|
|
1867
1907
|
},
|
|
1868
|
-
onSearchResults: (
|
|
1908
|
+
onSearchResults: (s) => {
|
|
1869
1909
|
var n, l;
|
|
1870
|
-
return (l = (n = r.current).onSearchResults) == null ? void 0 : l.call(n,
|
|
1910
|
+
return (l = (n = r.current).onSearchResults) == null ? void 0 : l.call(n, s);
|
|
1871
1911
|
},
|
|
1872
|
-
onPick: (
|
|
1912
|
+
onPick: (s) => {
|
|
1873
1913
|
var n, l;
|
|
1874
|
-
return (l = (n = r.current).onPick) == null ? void 0 : l.call(n,
|
|
1914
|
+
return (l = (n = r.current).onPick) == null ? void 0 : l.call(n, s);
|
|
1875
1915
|
},
|
|
1876
|
-
onConfirm: (
|
|
1916
|
+
onConfirm: (s) => {
|
|
1877
1917
|
var n, l;
|
|
1878
|
-
return (l = (n = r.current).onConfirm) == null ? void 0 : l.call(n,
|
|
1918
|
+
return (l = (n = r.current).onConfirm) == null ? void 0 : l.call(n, s);
|
|
1879
1919
|
},
|
|
1880
|
-
onLocate: (
|
|
1920
|
+
onLocate: (s) => {
|
|
1881
1921
|
var n, l;
|
|
1882
|
-
return (l = (n = r.current).onLocate) == null ? void 0 : l.call(n,
|
|
1922
|
+
return (l = (n = r.current).onLocate) == null ? void 0 : l.call(n, s);
|
|
1883
1923
|
},
|
|
1884
|
-
onError: (
|
|
1924
|
+
onError: (s) => {
|
|
1885
1925
|
var n, l;
|
|
1886
|
-
return (l = (n = r.current).onError) == null ? void 0 : l.call(n,
|
|
1926
|
+
return (l = (n = r.current).onError) == null ? void 0 : l.call(n, s);
|
|
1887
1927
|
}
|
|
1888
1928
|
});
|
|
1889
1929
|
return () => i.destroy();
|
|
1890
|
-
}, []), /* @__PURE__ */
|
|
1930
|
+
}, []), /* @__PURE__ */ le("div", { ref: o, className: a, style: { height: 480, ...e } });
|
|
1891
1931
|
}
|
|
1892
1932
|
export {
|
|
1893
|
-
|
|
1894
|
-
|
|
1933
|
+
at as LocationPickerView,
|
|
1934
|
+
ue as QOM_SUGGESTIONS,
|
|
1895
1935
|
it as setupMapWorker,
|
|
1896
1936
|
Je as setupQomPickWorker
|
|
1897
1937
|
};
|