tlp-icons 0.4.0 → 0.5.0
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/NOTICE.md +25 -7
- package/README.md +55 -34
- package/dist/anims.js +2 -0
- package/dist/core.js +2 -2
- package/dist/core.js.map +3 -3
- package/dist/element.js +1 -1
- package/dist/element.js.map +1 -1
- package/dist/icons/0.js +2 -0
- package/dist/icons/1.js +2 -0
- package/dist/icons/10.js +2 -0
- package/dist/icons/100.js +2 -0
- package/dist/icons/101.js +2 -0
- package/dist/icons/102.js +2 -0
- package/dist/icons/103.js +2 -0
- package/dist/icons/104.js +2 -0
- package/dist/icons/105.js +2 -0
- package/dist/icons/106.js +2 -0
- package/dist/icons/107.js +2 -0
- package/dist/icons/108.js +2 -0
- package/dist/icons/109.js +2 -0
- package/dist/icons/11.js +2 -0
- package/dist/icons/110.js +2 -0
- package/dist/icons/111.js +2 -0
- package/dist/icons/112.js +2 -0
- package/dist/icons/113.js +2 -0
- package/dist/icons/114.js +2 -0
- package/dist/icons/115.js +2 -0
- package/dist/icons/116.js +2 -0
- package/dist/icons/117.js +2 -0
- package/dist/icons/118.js +2 -0
- package/dist/icons/119.js +2 -0
- package/dist/icons/12.js +2 -0
- package/dist/icons/120.js +2 -0
- package/dist/icons/121.js +2 -0
- package/dist/icons/122.js +2 -0
- package/dist/icons/123.js +2 -0
- package/dist/icons/124.js +2 -0
- package/dist/icons/125.js +2 -0
- package/dist/icons/126.js +2 -0
- package/dist/icons/127.js +2 -0
- package/dist/icons/128.js +2 -0
- package/dist/icons/129.js +2 -0
- package/dist/icons/13.js +2 -0
- package/dist/icons/130.js +2 -0
- package/dist/icons/131.js +2 -0
- package/dist/icons/132.js +2 -0
- package/dist/icons/133.js +2 -0
- package/dist/icons/134.js +2 -0
- package/dist/icons/135.js +2 -0
- package/dist/icons/136.js +2 -0
- package/dist/icons/137.js +2 -0
- package/dist/icons/138.js +2 -0
- package/dist/icons/139.js +2 -0
- package/dist/icons/14.js +2 -0
- package/dist/icons/140.js +2 -0
- package/dist/icons/141.js +2 -0
- package/dist/icons/142.js +2 -0
- package/dist/icons/143.js +2 -0
- package/dist/icons/144.js +2 -0
- package/dist/icons/145.js +2 -0
- package/dist/icons/146.js +2 -0
- package/dist/icons/147.js +2 -0
- package/dist/icons/148.js +2 -0
- package/dist/icons/149.js +2 -0
- package/dist/icons/15.js +2 -0
- package/dist/icons/150.js +2 -0
- package/dist/icons/151.js +2 -0
- package/dist/icons/152.js +2 -0
- package/dist/icons/153.js +2 -0
- package/dist/icons/154.js +2 -0
- package/dist/icons/155.js +2 -0
- package/dist/icons/156.js +2 -0
- package/dist/icons/157.js +2 -0
- package/dist/icons/158.js +2 -0
- package/dist/icons/159.js +2 -0
- package/dist/icons/16.js +2 -0
- package/dist/icons/160.js +2 -0
- package/dist/icons/161.js +2 -0
- package/dist/icons/162.js +2 -0
- package/dist/icons/163.js +2 -0
- package/dist/icons/164.js +2 -0
- package/dist/icons/165.js +2 -0
- package/dist/icons/166.js +2 -0
- package/dist/icons/167.js +2 -0
- package/dist/icons/168.js +2 -0
- package/dist/icons/169.js +2 -0
- package/dist/icons/17.js +2 -0
- package/dist/icons/170.js +2 -0
- package/dist/icons/171.js +2 -0
- package/dist/icons/172.js +2 -0
- package/dist/icons/173.js +2 -0
- package/dist/icons/174.js +2 -0
- package/dist/icons/175.js +2 -0
- package/dist/icons/176.js +2 -0
- package/dist/icons/177.js +2 -0
- package/dist/icons/178.js +2 -0
- package/dist/icons/179.js +2 -0
- package/dist/icons/18.js +2 -0
- package/dist/icons/180.js +2 -0
- package/dist/icons/181.js +2 -0
- package/dist/icons/182.js +2 -0
- package/dist/icons/183.js +2 -0
- package/dist/icons/184.js +2 -0
- package/dist/icons/185.js +2 -0
- package/dist/icons/186.js +2 -0
- package/dist/icons/187.js +2 -0
- package/dist/icons/188.js +2 -0
- package/dist/icons/189.js +2 -0
- package/dist/icons/19.js +2 -0
- package/dist/icons/190.js +2 -0
- package/dist/icons/191.js +2 -0
- package/dist/icons/192.js +2 -0
- package/dist/icons/193.js +2 -0
- package/dist/icons/194.js +2 -0
- package/dist/icons/195.js +2 -0
- package/dist/icons/196.js +2 -0
- package/dist/icons/197.js +2 -0
- package/dist/icons/198.js +2 -0
- package/dist/icons/199.js +2 -0
- package/dist/icons/2.js +2 -0
- package/dist/icons/20.js +2 -0
- package/dist/icons/200.js +2 -0
- package/dist/icons/201.js +2 -0
- package/dist/icons/202.js +2 -0
- package/dist/icons/203.js +2 -0
- package/dist/icons/204.js +2 -0
- package/dist/icons/205.js +2 -0
- package/dist/icons/206.js +2 -0
- package/dist/icons/207.js +2 -0
- package/dist/icons/208.js +2 -0
- package/dist/icons/209.js +2 -0
- package/dist/icons/21.js +2 -0
- package/dist/icons/210.js +2 -0
- package/dist/icons/211.js +2 -0
- package/dist/icons/212.js +2 -0
- package/dist/icons/213.js +2 -0
- package/dist/icons/214.js +2 -0
- package/dist/icons/215.js +2 -0
- package/dist/icons/216.js +2 -0
- package/dist/icons/217.js +2 -0
- package/dist/icons/218.js +2 -0
- package/dist/icons/219.js +2 -0
- package/dist/icons/22.js +2 -0
- package/dist/icons/220.js +2 -0
- package/dist/icons/221.js +2 -0
- package/dist/icons/222.js +2 -0
- package/dist/icons/223.js +2 -0
- package/dist/icons/224.js +2 -0
- package/dist/icons/225.js +2 -0
- package/dist/icons/226.js +2 -0
- package/dist/icons/227.js +2 -0
- package/dist/icons/228.js +2 -0
- package/dist/icons/229.js +2 -0
- package/dist/icons/23.js +2 -0
- package/dist/icons/230.js +2 -0
- package/dist/icons/231.js +2 -0
- package/dist/icons/232.js +2 -0
- package/dist/icons/233.js +2 -0
- package/dist/icons/234.js +2 -0
- package/dist/icons/235.js +2 -0
- package/dist/icons/236.js +2 -0
- package/dist/icons/237.js +2 -0
- package/dist/icons/238.js +2 -0
- package/dist/icons/239.js +2 -0
- package/dist/icons/24.js +2 -0
- package/dist/icons/240.js +2 -0
- package/dist/icons/241.js +2 -0
- package/dist/icons/242.js +2 -0
- package/dist/icons/243.js +2 -0
- package/dist/icons/244.js +2 -0
- package/dist/icons/245.js +2 -0
- package/dist/icons/246.js +2 -0
- package/dist/icons/247.js +2 -0
- package/dist/icons/248.js +2 -0
- package/dist/icons/249.js +2 -0
- package/dist/icons/25.js +2 -0
- package/dist/icons/250.js +2 -0
- package/dist/icons/251.js +2 -0
- package/dist/icons/252.js +2 -0
- package/dist/icons/253.js +2 -0
- package/dist/icons/254.js +2 -0
- package/dist/icons/255.js +2 -0
- package/dist/icons/256.js +2 -0
- package/dist/icons/257.js +2 -0
- package/dist/icons/258.js +2 -0
- package/dist/icons/259.js +2 -0
- package/dist/icons/26.js +2 -0
- package/dist/icons/260.js +2 -0
- package/dist/icons/261.js +2 -0
- package/dist/icons/262.js +2 -0
- package/dist/icons/263.js +2 -0
- package/dist/icons/264.js +2 -0
- package/dist/icons/265.js +2 -0
- package/dist/icons/266.js +2 -0
- package/dist/icons/267.js +2 -0
- package/dist/icons/268.js +2 -0
- package/dist/icons/269.js +2 -0
- package/dist/icons/27.js +2 -0
- package/dist/icons/270.js +2 -0
- package/dist/icons/271.js +2 -0
- package/dist/icons/272.js +2 -0
- package/dist/icons/273.js +2 -0
- package/dist/icons/274.js +2 -0
- package/dist/icons/275.js +2 -0
- package/dist/icons/276.js +2 -0
- package/dist/icons/277.js +2 -0
- package/dist/icons/278.js +2 -0
- package/dist/icons/279.js +2 -0
- package/dist/icons/28.js +2 -0
- package/dist/icons/280.js +2 -0
- package/dist/icons/281.js +2 -0
- package/dist/icons/282.js +2 -0
- package/dist/icons/283.js +2 -0
- package/dist/icons/284.js +2 -0
- package/dist/icons/285.js +2 -0
- package/dist/icons/286.js +2 -0
- package/dist/icons/287.js +2 -0
- package/dist/icons/288.js +2 -0
- package/dist/icons/289.js +2 -0
- package/dist/icons/29.js +2 -0
- package/dist/icons/290.js +2 -0
- package/dist/icons/291.js +2 -0
- package/dist/icons/292.js +2 -0
- package/dist/icons/293.js +2 -0
- package/dist/icons/294.js +2 -0
- package/dist/icons/295.js +2 -0
- package/dist/icons/296.js +2 -0
- package/dist/icons/297.js +2 -0
- package/dist/icons/298.js +2 -0
- package/dist/icons/299.js +2 -0
- package/dist/icons/3.js +2 -0
- package/dist/icons/30.js +2 -0
- package/dist/icons/300.js +2 -0
- package/dist/icons/301.js +2 -0
- package/dist/icons/302.js +2 -0
- package/dist/icons/303.js +2 -0
- package/dist/icons/304.js +2 -0
- package/dist/icons/305.js +2 -0
- package/dist/icons/306.js +2 -0
- package/dist/icons/307.js +2 -0
- package/dist/icons/308.js +2 -0
- package/dist/icons/309.js +2 -0
- package/dist/icons/31.js +2 -0
- package/dist/icons/310.js +2 -0
- package/dist/icons/311.js +2 -0
- package/dist/icons/312.js +2 -0
- package/dist/icons/313.js +2 -0
- package/dist/icons/314.js +2 -0
- package/dist/icons/315.js +2 -0
- package/dist/icons/316.js +2 -0
- package/dist/icons/317.js +2 -0
- package/dist/icons/318.js +2 -0
- package/dist/icons/319.js +2 -0
- package/dist/icons/32.js +2 -0
- package/dist/icons/320.js +2 -0
- package/dist/icons/321.js +2 -0
- package/dist/icons/322.js +2 -0
- package/dist/icons/323.js +2 -0
- package/dist/icons/324.js +2 -0
- package/dist/icons/325.js +2 -0
- package/dist/icons/326.js +2 -0
- package/dist/icons/327.js +2 -0
- package/dist/icons/328.js +2 -0
- package/dist/icons/329.js +2 -0
- package/dist/icons/33.js +2 -0
- package/dist/icons/330.js +2 -0
- package/dist/icons/331.js +2 -0
- package/dist/icons/332.js +2 -0
- package/dist/icons/333.js +2 -0
- package/dist/icons/334.js +2 -0
- package/dist/icons/335.js +2 -0
- package/dist/icons/336.js +2 -0
- package/dist/icons/337.js +2 -0
- package/dist/icons/338.js +2 -0
- package/dist/icons/339.js +2 -0
- package/dist/icons/34.js +2 -0
- package/dist/icons/340.js +2 -0
- package/dist/icons/341.js +2 -0
- package/dist/icons/342.js +2 -0
- package/dist/icons/343.js +2 -0
- package/dist/icons/344.js +2 -0
- package/dist/icons/345.js +2 -0
- package/dist/icons/346.js +2 -0
- package/dist/icons/347.js +2 -0
- package/dist/icons/348.js +2 -0
- package/dist/icons/349.js +2 -0
- package/dist/icons/35.js +2 -0
- package/dist/icons/350.js +2 -0
- package/dist/icons/351.js +2 -0
- package/dist/icons/352.js +2 -0
- package/dist/icons/353.js +2 -0
- package/dist/icons/354.js +2 -0
- package/dist/icons/355.js +2 -0
- package/dist/icons/356.js +2 -0
- package/dist/icons/357.js +2 -0
- package/dist/icons/358.js +2 -0
- package/dist/icons/359.js +2 -0
- package/dist/icons/36.js +2 -0
- package/dist/icons/360.js +2 -0
- package/dist/icons/361.js +2 -0
- package/dist/icons/362.js +2 -0
- package/dist/icons/363.js +2 -0
- package/dist/icons/364.js +2 -0
- package/dist/icons/365.js +2 -0
- package/dist/icons/366.js +2 -0
- package/dist/icons/367.js +2 -0
- package/dist/icons/368.js +2 -0
- package/dist/icons/369.js +2 -0
- package/dist/icons/37.js +2 -0
- package/dist/icons/370.js +2 -0
- package/dist/icons/371.js +2 -0
- package/dist/icons/372.js +2 -0
- package/dist/icons/373.js +2 -0
- package/dist/icons/374.js +2 -0
- package/dist/icons/375.js +2 -0
- package/dist/icons/376.js +2 -0
- package/dist/icons/377.js +2 -0
- package/dist/icons/378.js +2 -0
- package/dist/icons/379.js +2 -0
- package/dist/icons/38.js +2 -0
- package/dist/icons/380.js +2 -0
- package/dist/icons/381.js +2 -0
- package/dist/icons/382.js +2 -0
- package/dist/icons/383.js +2 -0
- package/dist/icons/384.js +2 -0
- package/dist/icons/385.js +2 -0
- package/dist/icons/386.js +2 -0
- package/dist/icons/387.js +2 -0
- package/dist/icons/388.js +2 -0
- package/dist/icons/389.js +2 -0
- package/dist/icons/39.js +2 -0
- package/dist/icons/390.js +2 -0
- package/dist/icons/391.js +2 -0
- package/dist/icons/392.js +2 -0
- package/dist/icons/393.js +2 -0
- package/dist/icons/394.js +2 -0
- package/dist/icons/395.js +2 -0
- package/dist/icons/396.js +2 -0
- package/dist/icons/397.js +2 -0
- package/dist/icons/398.js +2 -0
- package/dist/icons/399.js +2 -0
- package/dist/icons/4.js +2 -0
- package/dist/icons/40.js +2 -0
- package/dist/icons/400.js +2 -0
- package/dist/icons/401.js +2 -0
- package/dist/icons/402.js +2 -0
- package/dist/icons/403.js +2 -0
- package/dist/icons/404.js +2 -0
- package/dist/icons/405.js +2 -0
- package/dist/icons/406.js +2 -0
- package/dist/icons/407.js +2 -0
- package/dist/icons/408.js +2 -0
- package/dist/icons/409.js +2 -0
- package/dist/icons/41.js +2 -0
- package/dist/icons/410.js +2 -0
- package/dist/icons/411.js +2 -0
- package/dist/icons/412.js +2 -0
- package/dist/icons/413.js +2 -0
- package/dist/icons/414.js +2 -0
- package/dist/icons/415.js +2 -0
- package/dist/icons/416.js +2 -0
- package/dist/icons/417.js +2 -0
- package/dist/icons/418.js +2 -0
- package/dist/icons/419.js +2 -0
- package/dist/icons/42.js +2 -0
- package/dist/icons/420.js +2 -0
- package/dist/icons/421.js +2 -0
- package/dist/icons/422.js +2 -0
- package/dist/icons/423.js +2 -0
- package/dist/icons/424.js +2 -0
- package/dist/icons/425.js +2 -0
- package/dist/icons/426.js +2 -0
- package/dist/icons/427.js +2 -0
- package/dist/icons/428.js +2 -0
- package/dist/icons/429.js +2 -0
- package/dist/icons/43.js +2 -0
- package/dist/icons/430.js +2 -0
- package/dist/icons/431.js +2 -0
- package/dist/icons/432.js +2 -0
- package/dist/icons/433.js +2 -0
- package/dist/icons/434.js +2 -0
- package/dist/icons/435.js +2 -0
- package/dist/icons/436.js +2 -0
- package/dist/icons/437.js +2 -0
- package/dist/icons/438.js +2 -0
- package/dist/icons/439.js +2 -0
- package/dist/icons/44.js +2 -0
- package/dist/icons/440.js +2 -0
- package/dist/icons/441.js +2 -0
- package/dist/icons/442.js +2 -0
- package/dist/icons/443.js +2 -0
- package/dist/icons/444.js +2 -0
- package/dist/icons/445.js +2 -0
- package/dist/icons/446.js +2 -0
- package/dist/icons/447.js +2 -0
- package/dist/icons/448.js +2 -0
- package/dist/icons/449.js +2 -0
- package/dist/icons/45.js +2 -0
- package/dist/icons/450.js +2 -0
- package/dist/icons/451.js +2 -0
- package/dist/icons/452.js +2 -0
- package/dist/icons/453.js +2 -0
- package/dist/icons/454.js +2 -0
- package/dist/icons/455.js +2 -0
- package/dist/icons/456.js +2 -0
- package/dist/icons/457.js +2 -0
- package/dist/icons/458.js +2 -0
- package/dist/icons/459.js +2 -0
- package/dist/icons/46.js +2 -0
- package/dist/icons/460.js +2 -0
- package/dist/icons/461.js +2 -0
- package/dist/icons/462.js +2 -0
- package/dist/icons/463.js +2 -0
- package/dist/icons/464.js +2 -0
- package/dist/icons/465.js +2 -0
- package/dist/icons/466.js +2 -0
- package/dist/icons/467.js +2 -0
- package/dist/icons/468.js +2 -0
- package/dist/icons/47.js +2 -0
- package/dist/icons/48.js +2 -0
- package/dist/icons/49.js +2 -0
- package/dist/icons/5.js +2 -0
- package/dist/icons/50.js +2 -0
- package/dist/icons/51.js +2 -0
- package/dist/icons/52.js +2 -0
- package/dist/icons/53.js +2 -0
- package/dist/icons/54.js +2 -0
- package/dist/icons/55.js +2 -0
- package/dist/icons/56.js +2 -0
- package/dist/icons/57.js +2 -0
- package/dist/icons/58.js +2 -0
- package/dist/icons/59.js +2 -0
- package/dist/icons/6.js +2 -0
- package/dist/icons/60.js +2 -0
- package/dist/icons/61.js +2 -0
- package/dist/icons/62.js +2 -0
- package/dist/icons/63.js +2 -0
- package/dist/icons/64.js +2 -0
- package/dist/icons/65.js +2 -0
- package/dist/icons/66.js +2 -0
- package/dist/icons/67.js +2 -0
- package/dist/icons/68.js +2 -0
- package/dist/icons/69.js +2 -0
- package/dist/icons/7.js +2 -0
- package/dist/icons/70.js +2 -0
- package/dist/icons/71.js +2 -0
- package/dist/icons/72.js +2 -0
- package/dist/icons/73.js +2 -0
- package/dist/icons/74.js +2 -0
- package/dist/icons/75.js +2 -0
- package/dist/icons/76.js +2 -0
- package/dist/icons/77.js +2 -0
- package/dist/icons/78.js +2 -0
- package/dist/icons/79.js +2 -0
- package/dist/icons/8.js +2 -0
- package/dist/icons/80.js +2 -0
- package/dist/icons/81.js +2 -0
- package/dist/icons/82.js +2 -0
- package/dist/icons/83.js +2 -0
- package/dist/icons/84.js +2 -0
- package/dist/icons/85.js +2 -0
- package/dist/icons/86.js +2 -0
- package/dist/icons/87.js +2 -0
- package/dist/icons/88.js +2 -0
- package/dist/icons/89.js +2 -0
- package/dist/icons/9.js +2 -0
- package/dist/icons/90.js +2 -0
- package/dist/icons/91.js +2 -0
- package/dist/icons/92.js +2 -0
- package/dist/icons/93.js +2 -0
- package/dist/icons/94.js +2 -0
- package/dist/icons/95.js +2 -0
- package/dist/icons/96.js +2 -0
- package/dist/icons/97.js +2 -0
- package/dist/icons/98.js +2 -0
- package/dist/icons/99.js +2 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +3 -3
- package/dist/jsx.js +1 -1
- package/dist/manifest.js +2 -2
- package/dist/manifest.js.map +2 -2
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/stats.json +35 -35
- package/dist/tlp-icon.d.ts +2 -0
- package/dist/tlp-icon.js +2 -2
- package/dist/tlp-icon.js.map +3 -3
- package/dist/tlp-icons.css +2 -2
- package/dist/tlp-icons.runtime.js +2 -2
- package/dist/tlp-icons.runtime.js.map +3 -3
- package/package.json +2 -3
- package/dist/icons/arrows.js +0 -2
- package/dist/icons/brands.js +0 -2
- package/dist/icons/buildings.js +0 -2
- package/dist/icons/charts.js +0 -2
- package/dist/icons/commerce.js +0 -2
- package/dist/icons/communication.js +0 -2
- package/dist/icons/connectivity.js +0 -2
- package/dist/icons/design.js +0 -2
- package/dist/icons/development.js +0 -2
- package/dist/icons/devices.js +0 -2
- package/dist/icons/emoji.js +0 -2
- package/dist/icons/files.js +0 -2
- package/dist/icons/finance.js +0 -2
- package/dist/icons/food.js +0 -2
- package/dist/icons/health.js +0 -2
- package/dist/icons/home.js +0 -2
- package/dist/icons/interface.js +0 -2
- package/dist/icons/layout.js +0 -2
- package/dist/icons/legal.js +0 -2
- package/dist/icons/maps.js +0 -2
- package/dist/icons/math.js +0 -2
- package/dist/icons/media.js +0 -2
- package/dist/icons/nature.js +0 -2
- package/dist/icons/notifications.js +0 -2
- package/dist/icons/people.js +0 -2
- package/dist/icons/photography.js +0 -2
- package/dist/icons/science.js +0 -2
- package/dist/icons/security.js +0 -2
- package/dist/icons/shapes.js +0 -2
- package/dist/icons/sport.js +0 -2
- package/dist/icons/text.js +0 -2
- package/dist/icons/time.js +0 -2
- package/dist/icons/tools.js +0 -2
- package/dist/icons/vehicles.js +0 -2
- package/dist/icons/weather.js +0 -2
package/NOTICE.md
CHANGED
|
@@ -1,21 +1,39 @@
|
|
|
1
1
|
# Notice
|
|
2
2
|
|
|
3
3
|
tlp-icons is released under the MIT License (see `LICENSE`). It contains icon geometry from the following
|
|
4
|
-
open-source projects. Their license texts
|
|
4
|
+
open-source projects. Their full license texts ship in `licenses/` (in both npm packages) and on the website at
|
|
5
|
+
https://tlp-icons.netlify.app/licenses/.
|
|
5
6
|
|
|
6
|
-
| Source | License | Copyright | Website |
|
|
7
|
-
| --- | --- | --- | --- |
|
|
8
|
-
| Lucide | ISC | Copyright (c) 2026 Lucide Icons and Contributors | https://lucide.dev |
|
|
9
|
-
| Tabler Icons | MIT | Copyright (c) 2020-2026 Paweł Kuna | https://tabler.io/icons |
|
|
10
|
-
| tlp-icons originals | MIT | Copyright (c) 2026 tlp-icons contributors | https://github.com/Tamer-Mansour/tlp-icons |
|
|
7
|
+
| Source | License | Copyright | Website | Icons |
|
|
8
|
+
| --- | --- | --- | --- | --- |
|
|
9
|
+
| Lucide | ISC | Copyright (c) 2026 Lucide Icons and Contributors (icons derived from Feather: MIT, Copyright (c) 2013-present Cole Bemis) | https://lucide.dev | icons with `source: "lucide"` |
|
|
10
|
+
| Tabler Icons | MIT | Copyright (c) 2020-2026 Paweł Kuna | https://tabler.io/icons | icons with `source: "tabler"` |
|
|
11
|
+
| tlp-icons originals | MIT | Copyright (c) 2026 tlp-icons contributors | https://github.com/Tamer-Mansour/tlp-icons | icons with `source: "tlp"` |
|
|
12
|
+
|
|
13
|
+
Every icon's source is recorded in the dataset (`tlp-icons-data`, field `source`) and shown on its page on the
|
|
14
|
+
website, so you can always tell which license applies to which icon. All three licenses allow commercial use,
|
|
15
|
+
modification and redistribution; keep this notice and the license texts when you redistribute the package.
|
|
11
16
|
|
|
12
17
|
What tlp-icons adds on top of the upstream geometry: the curated category taxonomy, the motion choreographies
|
|
13
18
|
(hand-made overrides and the rule engine output), part tagging of the SVG elements, the runtime, and the
|
|
14
19
|
"tlp-icons originals" (icons drawn for this project, in `originals/`).
|
|
15
20
|
|
|
21
|
+
## What is not included
|
|
22
|
+
|
|
23
|
+
tlp-icons does **not** contain icons, fonts or artwork from Font Awesome, Material Design Icons / Material Symbols,
|
|
24
|
+
Heroicons, Ionicons, Bootstrap Icons, Phosphor, Iconoir, Simple Icons or any other icon set besides the sources listed
|
|
25
|
+
above. The tlp originals are drawn from scratch for this project on our own 24×24 grid; they are not traced from or
|
|
26
|
+
derived from other icon sets. No icon fonts and no font files are shipped. Any similarity in subject (a bell is a
|
|
27
|
+
bell) follows from the subject, not from copying.
|
|
28
|
+
|
|
29
|
+
If you believe an icon infringes your rights, open an issue at https://github.com/Tamer-Mansour/tlp-icons/issues
|
|
30
|
+
and it will be reviewed and, where justified, removed in the next release.
|
|
31
|
+
|
|
16
32
|
## Trademarks
|
|
17
33
|
|
|
18
34
|
The **Brands** category (icons named `brand-*`, from Tabler Icons) shows logos that are trademarks of their
|
|
19
35
|
respective owners (for example Facebook, Instagram and WhatsApp are trademarks of Meta Platforms, Inc.).
|
|
20
36
|
They are included only to identify those products and services. Their inclusion does not imply any
|
|
21
|
-
affiliation with or endorsement by the trademark owners. Follow each owner's brand guidelines when you use them
|
|
37
|
+
affiliation with or endorsement by the trademark owners. Follow each owner's brand guidelines when you use them;
|
|
38
|
+
some guidelines do not allow logos to be altered or animated, so use `animated="false"` for those.
|
|
39
|
+
The tlp originals contain no company names, logos or trademarks.
|
package/README.md
CHANGED
|
@@ -17,14 +17,14 @@
|
|
|
17
17
|
<p align="center">
|
|
18
18
|
<a href="https://www.npmjs.com/package/tlp-icons"><img alt="npm version" src="https://img.shields.io/npm/v/tlp-icons?color=4f46e5"></a>
|
|
19
19
|
<a href="https://www.npmjs.com/package/tlp-icons"><img alt="npm downloads" src="https://img.shields.io/npm/dm/tlp-icons?color=4f46e5"></a>
|
|
20
|
-
<a href="#bundle-size"><img alt="element size" src="https://img.shields.io/badge/element-7.
|
|
20
|
+
<a href="#bundle-size"><img alt="element size" src="https://img.shields.io/badge/element-7.1%20KB%20gzip-16a34a"></a>
|
|
21
21
|
<a href="https://github.com/Tamer-Mansour/tlp-icons/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Tamer-Mansour/tlp-icons/actions/workflows/ci.yml/badge.svg"></a>
|
|
22
22
|
<a href="https://github.com/Tamer-Mansour/tlp-icons/blob/main/LICENSE"><img alt="license" src="https://img.shields.io/npm/l/tlp-icons?color=16a34a"></a>
|
|
23
|
-
<img alt="icons" src="https://img.shields.io/badge/icons-
|
|
23
|
+
<img alt="icons" src="https://img.shields.io/badge/icons-26%2C278-4f46e5">
|
|
24
24
|
</p>
|
|
25
25
|
<!-- badges:end -->
|
|
26
26
|
|
|
27
|
-
A free, open-source (MIT) library of <!--s:icons-->
|
|
27
|
+
A free, open-source (MIT) library of <!--s:icons-->26,278<!--/s--> stroke icons, built from the best free sets (Lucide and Tabler) plus
|
|
28
28
|
our own **tlp originals**, sorted into <!--s:categories-->35<!--/s--> hand-curated categories, including **<!--s:brands-->376<!--/s--> brand logos** (Facebook,
|
|
29
29
|
Instagram, WhatsApp, X, TikTok, YouTube...). Every single one moves on hover: clock hands sweep around the face,
|
|
30
30
|
gears spin on their axle, bells swing from the top, trash lids lift, arrows move the way they point.
|
|
@@ -35,34 +35,47 @@ gears spin on their axle, bells swing from the top, trash lids lift, arrows move
|
|
|
35
35
|
<td align="center"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/media/loop.gif" width="420" alt="Loaders with trigger=loop"><br><sub><code>trigger="loop"</code></sub></td>
|
|
36
36
|
</tr>
|
|
37
37
|
<tr>
|
|
38
|
-
<td align="center"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/media/
|
|
38
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/media/hold.gif" width="420" alt="trigger=hold: the icon animates, stays while hovered and returns on leave"><br><sub><code>trigger="hold"</code> stays at its peak while hovered</sub></td>
|
|
39
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/media/animations.gif" width="420" alt="New animations: buzz, beat, flicker, sway, flutter, drive, wave, drip"><br><sub><!--s:animations-->100<!--/s--> animations, each picked for what the icon is</sub></td>
|
|
40
|
+
</tr>
|
|
41
|
+
<tr>
|
|
42
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/media/fields.gif" width="420" alt="New health, finance, commerce and maps icons"><br><sub>Deep fields: legal, health, finance, commerce, maps</sub></td>
|
|
39
43
|
<td align="center"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/media/duotone.gif" width="420" alt="Icons without and with duotone"><br><sub><code>duotone</code> adds a soft tinted body</sub></td>
|
|
40
44
|
</tr>
|
|
45
|
+
<tr>
|
|
46
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/media/rtl.gif" width="420" alt="The same arrow in LTR and RTL with flip=rtl"><br><sub><code>flip="rtl"</code> mirrors the icon and its motion</sub></td>
|
|
47
|
+
<td></td>
|
|
48
|
+
</tr>
|
|
41
49
|
</table>
|
|
42
50
|
|
|
43
51
|
[](https://tlp-icons.netlify.app)
|
|
44
52
|
|
|
45
53
|
<table><tr>
|
|
46
|
-
<td><a href="https://tlp-icons.netlify.app/categories/
|
|
47
|
-
<td><a href="https://tlp-icons.netlify.app/icons/
|
|
54
|
+
<td><a href="https://tlp-icons.netlify.app/categories/health/"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/category.png" alt="Health category page"></a></td>
|
|
55
|
+
<td><a href="https://tlp-icons.netlify.app/icons/ambulance-siren/"><img src="https://raw.githubusercontent.com/Tamer-Mansour/tlp-icons/main/docs/icon-page.png" alt="Icon page with live playground and code"></a></td>
|
|
48
56
|
</tr><tr>
|
|
49
|
-
<td align="center">Category pages (
|
|
57
|
+
<td align="center">Category pages (health: <!--s:cat.health-->1,200<!--/s--> icons)</td>
|
|
50
58
|
<td align="center">One page per icon: playground + code</td>
|
|
51
59
|
</tr></table>
|
|
52
60
|
|
|
53
61
|
<details>
|
|
54
|
-
<summary>Motion frames (each row is one hover animation frozen at
|
|
62
|
+
<summary>Motion frames (each row is one hover animation frozen at 8 points)</summary>
|
|
55
63
|
|
|
56
64
|

|
|
57
65
|
</details>
|
|
58
66
|
|
|
59
|
-
- **<!--s:icons-->
|
|
60
|
-
- **100% animated**: <!--s:handmade-->
|
|
61
|
-
- **Deep fields**: we draw our own icons where the free sets stop
|
|
62
|
-
|
|
67
|
+
- **<!--s:icons-->26,278<!--/s--> icons**: 24×24 grid, 2px stroke, round caps, `currentColor`. One consistent style.
|
|
68
|
+
- **100% animated**: <!--s:handmade-->20,097<!--/s--> hand-made choreographies, plus a motion engine that reads each icon's geometry.
|
|
69
|
+
- **Deep fields**: we draw our own icons where the free sets stop (<!--s:originals-->19,835<!--/s--> tlp originals). Legal
|
|
70
|
+
(<!--s:cat.legal-->1,180<!--/s-->), health (<!--s:cat.health-->1,200<!--/s-->), finance (<!--s:cat.finance-->1,100<!--/s-->), commerce (<!--s:cat.commerce-->1,001<!--/s-->) and maps (<!--s:cat.maps-->1,000<!--/s-->) are at their
|
|
71
|
+
targets; the [roadmap](https://github.com/Tamer-Mansour/tlp-icons/blob/main/ROADMAP.md) takes the whole library to 26,000.
|
|
72
|
+
- **<!--s:animations-->100<!--/s--> animations**: draw, pop, swing, spin... plus beat for hearts, sway for plants, flutter for flags,
|
|
73
|
+
drive for vehicles, wave for hands, drip for drops: each icon gets the motion that fits what it is.
|
|
74
|
+
- **Hover and hold**: `trigger="hold"` animates to the peak on hover and stays there, then returns when the mouse leaves.
|
|
75
|
+
`animated="false"` (or `config.animated = false`) makes icons static.
|
|
63
76
|
- **Brand logos**: <!--s:brands-->376<!--/s--> brands in the same outline style, animated (trademarks of their owners, see `NOTICE.md`).
|
|
64
77
|
- **Tiny runtime**: one custom element, `<tlp-icon>`. Works in plain HTML, React, Angular, Vue, Svelte...
|
|
65
|
-
- **Lazy**: icons load per category, so a page that uses 10 icons doesn't download all <!--s:icons-->
|
|
78
|
+
- **Lazy**: icons load per category, so a page that uses 10 icons doesn't download all <!--s:icons-->26,278<!--/s-->.
|
|
66
79
|
- **Polite motion**: plays once to the end, never animates a whole card at once, respects `prefers-reduced-motion`.
|
|
67
80
|
- **Works offline**: one classic script with every icon (in `tlp-icons-data`) runs from `file://`, and the build never needs the network.
|
|
68
81
|
|
|
@@ -79,8 +92,8 @@ Or with no build step, from a CDN:
|
|
|
79
92
|
<tlp-icon name="bell"></tlp-icon>
|
|
80
93
|
```
|
|
81
94
|
|
|
82
|
-
Offline / no modules (for example opened from `file://`): one classic script with every icon inside (about
|
|
83
|
-
|
|
95
|
+
Offline / no modules (for example opened from `file://`): one classic script with every icon inside (about
|
|
96
|
+
<!--s:size.4.raw-->17.0 KB<!--/s-->, <!--s:size.4.gzip-->3.2 KB<!--/s--> gzip). Since 0.2.0 it ships in the [`tlp-icons-data`](packages/tlp-icons-data) package:
|
|
84
97
|
|
|
85
98
|
```html
|
|
86
99
|
<script src="node_modules/tlp-icons-data/tlp-icons.all.js"></script>
|
|
@@ -316,14 +329,15 @@ getSvg('bell', { animated: true }); // SVG with the motion baked in (
|
|
|
316
329
|
icons.bell; // { svg, m: [[part, anim, dur, delay, origin?], ...] }
|
|
317
330
|
```
|
|
318
331
|
|
|
319
|
-
Importing `icons` pulls in the whole set. For pages, use `<tlp-icon>`, which loads
|
|
332
|
+
Importing `icons` pulls in the whole set. For pages, use `<tlp-icon>`, which loads only small buckets of about 40
|
|
333
|
+
icons for the names on the page.
|
|
320
334
|
|
|
321
|
-
**One category only:** import a category
|
|
335
|
+
**One category only:** import a category module from `tlp-icons-data` and register it:
|
|
322
336
|
|
|
323
337
|
```js
|
|
324
|
-
import legal from 'tlp-icons/icons/legal.js'; // { 'courthouse': { svg, m }, ... }
|
|
338
|
+
import legal from 'tlp-icons-data/icons/legal.js'; // { 'courthouse': { svg, m }, ... }
|
|
325
339
|
import { register } from 'tlp-icons/element';
|
|
326
|
-
register(legal);
|
|
340
|
+
register(legal); // <tlp-icon name="courthouse"> renders with no extra request
|
|
327
341
|
```
|
|
328
342
|
|
|
329
343
|
### Full dataset: `tlp-icons-data`
|
|
@@ -345,23 +359,26 @@ It replaces the old `tlp-icons/data` export (removed in 0.2.0). Typed (`TlpIcons
|
|
|
345
359
|
## Bundle size
|
|
346
360
|
|
|
347
361
|
Measured on every build (minified, gzip level 9) and written to `dist/size-report.json`. The build fails if the
|
|
348
|
-
element core goes over 8 KB gzip
|
|
362
|
+
element core goes over 8 KB gzip.
|
|
349
363
|
|
|
350
364
|
<!-- sizes:start -->
|
|
351
365
|
| What | Minified | Gzip |
|
|
352
366
|
| --- | ---: | ---: |
|
|
353
|
-
| element core (tlp-icon + core + element) |
|
|
354
|
-
| manifest |
|
|
355
|
-
| smallest
|
|
356
|
-
| largest
|
|
357
|
-
|
|
|
358
|
-
|
|
|
367
|
+
| element core (tlp-icon + core + element) | 27.3 KB | **7.1 KB** |
|
|
368
|
+
| manifest (optional: categoryOf, CATEGORIES, ALIASES) | 53.6 KB | **30.2 KB** |
|
|
369
|
+
| smallest icon bucket (icons/273.js) | 9.7 KB | **3.0 KB** |
|
|
370
|
+
| largest icon bucket (icons/459.js) | 22.2 KB | **5.7 KB** |
|
|
371
|
+
| keyframes (anims.js, loaded with the first icon) | 17.0 KB | **3.2 KB** |
|
|
372
|
+
| all icons, offline bundle (tlp-icons.all.js) | 7185.0 KB | **1386.7 KB** |
|
|
373
|
+
| stylesheet (tlp-icons.css) | 16.6 KB | **3.2 KB** |
|
|
359
374
|
<!-- sizes:end -->
|
|
360
375
|
|
|
361
|
-
What a page actually downloads: the element core, the
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
376
|
+
What a page actually downloads: the element core, the keyframes once, then **one small bucket per icon name** (the
|
|
377
|
+
bucket is computed from the name, so there is no lookup table to download). A page with one icon loads about
|
|
378
|
+
<!--s:size.0.gzip-->7.1 KB<!--/s--> + <!--s:size.4.gzip-->3.2 KB<!--/s--> + one bucket of
|
|
379
|
+
<!--s:size.2.gzip-->3.0 KB<!--/s-->–<!--s:size.3.gzip-->5.7 KB<!--/s-->, no matter how big the library grows. No icon font,
|
|
380
|
+
no CSS per icon, nothing for icons you don't use. The stylesheet is injected by the element; `tlp-icons/css` is there
|
|
381
|
+
if you prefer a `<link>`.
|
|
365
382
|
|
|
366
383
|
## Website
|
|
367
384
|
|
|
@@ -373,7 +390,7 @@ pre-rendered static HTML for search engines, and the whole site is about 45 MB:
|
|
|
373
390
|
| --- | --- |
|
|
374
391
|
| Home | `/` |
|
|
375
392
|
| Icon gallery (search, filters, size / stroke / color / duotone) | `/icons/` |
|
|
376
|
-
| One page per icon: preview, sizes, buttons, code for React / HTML / Angular / Vue / SVG, related icons | `/icons/<name>/` (<!--s:icons-->
|
|
393
|
+
| One page per icon: preview, sizes, buttons, code for React / HTML / Angular / Vue / SVG, related icons | `/icons/<name>/` (<!--s:icons-->26,278<!--/s--> pages) |
|
|
377
394
|
| Categories, one page each, including Brands | `/categories/`, `/categories/<id>/` |
|
|
378
395
|
| Documentation with live examples and the animation library | `/docs/` |
|
|
379
396
|
| Roadmap with live progress | `/roadmap/` |
|
|
@@ -413,7 +430,7 @@ npm run test:browser optional Playwright tests + frame strips (npm run setup:b
|
|
|
413
430
|
- `scripts/adapters/`: one adapter per icon source (`latest`, `fetch`, `load`). Add a set by adding an adapter.
|
|
414
431
|
- `scripts/engine/`: SVG parsing, geometry, the motion engine and serialisation.
|
|
415
432
|
- `src/runtime/`: `core.js` (registry, baking, run engine, hover rule), `element.js` (`<tlp-icon>`) and
|
|
416
|
-
`tlp-icons.css` (the <!--s:animations-->
|
|
433
|
+
`tlp-icons.css` (the <!--s:animations-->100<!--/s--> `tlp-` keyframes).
|
|
417
434
|
|
|
418
435
|
**Motion engine.** Every icon is split into atoms (one per element or sub-path) and measured. Then:
|
|
419
436
|
|
|
@@ -449,11 +466,15 @@ what changed in each version.
|
|
|
449
466
|
## License
|
|
450
467
|
|
|
451
468
|
MIT © tlp-icons contributors. Icon geometry from [Lucide](https://lucide.dev) (ISC) and
|
|
452
|
-
[Tabler Icons](https://tabler.io/icons) (MIT), plus tlp originals (MIT). See [NOTICE.md](https://github.com/Tamer-Mansour/tlp-icons/blob/main/NOTICE.md)
|
|
469
|
+
[Tabler Icons](https://tabler.io/icons) (MIT), plus tlp originals (MIT). See [NOTICE.md](https://github.com/Tamer-Mansour/tlp-icons/blob/main/NOTICE.md), `licenses/`
|
|
470
|
+
and the [licenses page](https://tlp-icons.netlify.app/licenses/). Every icon's source is recorded in the dataset and
|
|
471
|
+
shown on its page. No icons, fonts or artwork from Font Awesome, Material, Heroicons or any other set are included;
|
|
472
|
+
the tlp originals are drawn from scratch.
|
|
453
473
|
|
|
454
474
|
### Trademarks
|
|
455
475
|
|
|
456
476
|
The <!--s:brands-->376<!--/s--> brand icons (the Brands category, names starting with `brand-`) are provided for
|
|
457
477
|
referential, nominative use only: to identify a product or service, for example a "Sign in with GitHub" button or a
|
|
458
478
|
list of supported platforms. The logos remain the property of their respective owners, and their inclusion does not
|
|
459
|
-
imply any affiliation with or endorsement by those owners. Follow each owner's brand guidelines when you use them
|
|
479
|
+
imply any affiliation with or endorsement by those owners. Follow each owner's brand guidelines when you use them;
|
|
480
|
+
some do not allow altered or animated logos, so use `animated="false"` for those.
|
package/dist/anims.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/* tlp-icons 0.5.0 - MIT. Icons from Lucide 1.55.0 (ISC), Tabler Icons 3.49.0 (MIT). Generated file, do not edit. */
|
|
2
|
+
var a={draw:"@keyframes tlp-draw{0%{stroke-dasharray:1;stroke-dashoffset:1}100%{stroke-dasharray:1;stroke-dashoffset:0}}",fillIn:"@keyframes tlp-fillIn{0%{fill-opacity:0}100%{fill-opacity:var(--tlp-duo,0)}}",popIn:"@keyframes tlp-popIn{0%{opacity:0;transform:scale(.4)}55%{opacity:1;transform:scale(1.08)}78%{transform:scale(.98)}100%{opacity:1;transform:scale(1)}}",fadeIn:"@keyframes tlp-fadeIn{0%{opacity:0}100%{opacity:1}}",slideIn:"@keyframes tlp-slideIn{0%{opacity:0;transform:translateX(-4px)}100%{opacity:1;transform:translateX(0)}}",riseIn:"@keyframes tlp-riseIn{0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:translateY(0)}}",dropIn:"@keyframes tlp-dropIn{0%{opacity:0;transform:translateY(-5px)}60%{opacity:1;transform:translateY(.8px)}80%{transform:translateY(-.3px)}100%{opacity:1;transform:translateY(0)}}",grow:"@keyframes tlp-grow{0%{transform:scaleY(0)}70%{transform:scaleY(1.06)}100%{transform:scaleY(1)}}",growX:"@keyframes tlp-growX{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}",pop:"@keyframes tlp-pop{0%,100%{transform:scale(1)}40%{transform:scale(1.14)}68%{transform:scale(.97)}86%{transform:scale(1.02)}}",breathe:"@keyframes tlp-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}",jelly:"@keyframes tlp-jelly{0%,100%{transform:scale(1,1)}30%{transform:scale(1.1,.9)}50%{transform:scale(.94,1.06)}70%{transform:scale(1.03,.97)}85%{transform:scale(.99,1.01)}}",swing:"@keyframes tlp-swing{0%,100%{transform:rotate(0)}15%{transform:rotate(13deg)}32%{transform:rotate(-10deg)}50%{transform:rotate(6deg)}68%{transform:rotate(-3deg)}84%{transform:rotate(1deg)}}",wiggle:"@keyframes tlp-wiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-8deg)}45%{transform:rotate(6deg)}68%{transform:rotate(-3deg)}86%{transform:rotate(1deg)}}",tilt:"@keyframes tlp-tilt{0%,100%{transform:rotate(0)}40%{transform:rotate(-12deg)}72%{transform:rotate(3deg)}88%{transform:rotate(-1deg)}}",nod:"@keyframes tlp-nod{0%,100%{transform:rotate(0)}45%{transform:rotate(7deg)}75%{transform:rotate(-1.5deg)}}",strike:"@keyframes tlp-strike{0%,100%{transform:rotate(0)}38%{transform:rotate(-24deg)}56%{transform:rotate(7deg)}70%{transform:rotate(-2deg)}84%{transform:rotate(.6deg)}}",hop:"@keyframes tlp-hop{0%,100%{transform:translateY(0) scale(1,1)}10%{transform:translateY(0) scale(1.04,.95)}40%{transform:translateY(-3px) scale(.97,1.04)}68%{transform:translateY(0) scale(1.04,.96)}84%{transform:translateY(0) scale(.99,1.01)}}",lift:"@keyframes tlp-lift{0%,100%{transform:translateY(0)}45%{transform:translateY(-2.5px)}75%{transform:translateY(.4px)}}",sink:"@keyframes tlp-sink{0%,100%{transform:translateY(0)}45%{transform:translateY(2.5px)}75%{transform:translateY(-.4px)}}",nudge:"@keyframes tlp-nudge{0%,100%{transform:translateX(0)}45%{transform:translateX(2.6px)}75%{transform:translateX(-.4px)}}",nudgeBack:"@keyframes tlp-nudgeBack{0%,100%{transform:translateX(0)}45%{transform:translateX(-2.6px)}75%{transform:translateX(.4px)}}",float:"@keyframes tlp-float{0%,100%{transform:translateY(0)}25%{transform:translateY(-2px)}50%{transform:translateY(0)}75%{transform:translateY(-1.2px)}}",flip:"@keyframes tlp-flip{0%,100%{transform:scaleX(1)}50%{transform:scaleX(-1)}}",spin:"@keyframes tlp-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}",spinBack:"@keyframes tlp-spinBack{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}",spinHalf:"@keyframes tlp-spinHalf{0%{transform:rotate(0)}80%{transform:rotate(188deg)}100%{transform:rotate(180deg)}}",sweep:"@keyframes tlp-sweep{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}",sweepHour:"@keyframes tlp-sweepHour{0%{transform:rotate(var(--h0,0deg))}100%{transform:rotate(calc(var(--h0,0deg) + 30deg))}}",blink:"@keyframes tlp-blink{0%,100%{transform:scaleY(1)}35%{transform:scaleY(.08)}60%{transform:scaleY(1)}}",shake:"@keyframes tlp-shake{0%,100%{transform:translateX(0)}18%{transform:translateX(-1.6px)}36%{transform:translateX(1.4px)}54%{transform:translateX(-1px)}72%{transform:translateX(.6px)}88%{transform:translateX(-.2px)}}",pulseRing:"@keyframes tlp-pulseRing{0%,100%{opacity:1;transform:scale(1)}55%{opacity:0;transform:scale(1.5)}56%{opacity:0;transform:scale(.6)}}",orbit:"@keyframes tlp-orbit{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}",stretch:"@keyframes tlp-stretch{0%,100%{transform:scaleX(1)}45%{transform:scaleX(1.12)}75%{transform:scaleX(.98)}}",buzz:"@keyframes tlp-buzz{0%,100%{transform:translate(0,0) rotate(0)}8%{transform:translate(-.9px,.4px) rotate(-3deg)}16%{transform:translate(.9px,-.4px) rotate(3deg)}24%{transform:translate(-.8px,.4px) rotate(-2.6deg)}32%{transform:translate(.8px,-.3px) rotate(2.6deg)}40%{transform:translate(-.6px,.3px) rotate(-2deg)}48%{transform:translate(.6px,-.2px) rotate(2deg)}58%{transform:translate(-.4px,.2px) rotate(-1.2deg)}68%{transform:translate(.3px,-.1px) rotate(1deg)}80%{transform:translate(-.15px,0) rotate(-.4deg)}}",tap:"@keyframes tlp-tap{0%,100%{transform:translateY(0) scale(1)}16%{transform:translateY(1.8px) scale(.94)}30%{transform:translateY(-.3px) scale(1.02)}44%{transform:translateY(0) scale(1)}60%{transform:translateY(1.8px) scale(.94)}78%{transform:translateY(-.4px) scale(1.02)}90%{transform:translateY(.1px) scale(.995)}}",press:"@keyframes tlp-press{0%,100%{transform:scale(1)}20%{transform:scale(.88)}42%{transform:scale(.88)}62%{transform:scale(1.07)}80%{transform:scale(.98)}91%{transform:scale(1.01)}}",beat:"@keyframes tlp-beat{0%,100%{transform:scale(1)}14%{transform:scale(1.16)}28%{transform:scale(.98)}42%{transform:scale(1.09)}58%{transform:scale(1)}}",flicker:"@keyframes tlp-flicker{0%,100%{opacity:1;transform:scale(1)}8%{opacity:.55;transform:scale(.97)}16%{opacity:.95;transform:scale(1.02)}26%{opacity:.4;transform:scale(.96)}38%{opacity:1;transform:scale(1.03)}50%{opacity:.7;transform:scale(.99)}62%{opacity:1;transform:scale(1.015)}78%{opacity:.85;transform:scale(1)}}",twinkle:"@keyframes tlp-twinkle{0%,100%{transform:scale(1) rotate(0)}30%{transform:scale(.8) rotate(-14deg)}60%{transform:scale(1.18) rotate(8deg)}80%{transform:scale(.97) rotate(-2deg)}}",sway:"@keyframes tlp-sway{0%,100%{transform:rotate(0)}24%{transform:rotate(6deg)}48%{transform:rotate(-4.5deg)}70%{transform:rotate(2.5deg)}86%{transform:rotate(-1deg)}}",flutter:"@keyframes tlp-flutter{0%,100%{transform:scale(1,1)}20%{transform:skewY(-7deg) scaleX(.95)}42%{transform:skewY(6deg) scaleX(1.03)}62%{transform:skewY(-3.5deg) scaleX(.98)}82%{transform:skewY(1.5deg) scaleX(1.01)}}",bob:"@keyframes tlp-bob{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-1.8px) rotate(-5deg)}52%{transform:translateY(1.2px) rotate(4deg)}76%{transform:translateY(-.8px) rotate(-2deg)}}",drive:"@keyframes tlp-drive{0%,100%{transform:translateX(0) rotate(0)}22%{transform:translateX(-1px) rotate(-3.5deg)}55%{transform:translateX(2.4px) rotate(1.2deg)}78%{transform:translateX(-.3px) rotate(-.4deg)}}",launch:"@keyframes tlp-launch{0%,100%{opacity:1;transform:translate(0,0)}14%{opacity:1;transform:translate(-.8px,.8px)}42%{opacity:0;transform:translate(5px,-5px)}43%{opacity:0;transform:translate(-5px,5px)}72%{opacity:1;transform:translate(.5px,-.5px)}}",roll:"@keyframes tlp-roll{0%{transform:rotate(0) translateX(0)}50%{transform:rotate(180deg) translateX(1.2px)}100%{transform:rotate(360deg) translateX(0)}}",zoomIn:"@keyframes tlp-zoomIn{0%{opacity:0;transform:scale(1.35)}55%{opacity:1;transform:scale(.96)}78%{transform:scale(1.02)}100%{opacity:1;transform:scale(1)}}",spiralIn:"@keyframes tlp-spiralIn{0%{opacity:0;transform:rotate(-120deg) scale(0)}55%{opacity:1;transform:rotate(7deg) scale(1.1)}78%{transform:rotate(-2deg) scale(.98)}100%{opacity:1;transform:rotate(0) scale(1)}}",swingIn:"@keyframes tlp-swingIn{0%{opacity:0;transform:rotate(-25deg)}30%{opacity:1;transform:rotate(9deg)}55%{transform:rotate(-4deg)}78%{transform:rotate(1.5deg)}100%{opacity:1;transform:rotate(0)}}",flipIn:"@keyframes tlp-flipIn{0%{opacity:0;transform:scaleX(0)}50%{opacity:1;transform:scaleX(1.1)}75%{transform:scaleX(.96)}100%{opacity:1;transform:scaleX(1)}}",focusIn:"@keyframes tlp-focusIn{0%{opacity:.15;filter:blur(1.6px);transform:scale(1.12)}60%{opacity:1;filter:blur(.5px);transform:scale(.98)}100%{opacity:1;filter:blur(0);transform:scale(1)}}",bloom:"@keyframes tlp-bloom{0%{opacity:0;transform:rotate(-45deg) scale(0)}55%{opacity:1;transform:rotate(8deg) scale(1.12)}78%{transform:rotate(-2deg) scale(.98)}100%{opacity:1;transform:rotate(0) scale(1)}}",rollIn:"@keyframes tlp-rollIn{0%{opacity:0;transform:translateX(-5px) rotate(-180deg)}70%{opacity:1;transform:translateX(.6px) rotate(8deg)}100%{opacity:1;transform:translateX(0) rotate(0)}}",tada:"@keyframes tlp-tada{0%,100%{transform:scale(1) rotate(0)}10%,20%{transform:scale(.92) rotate(-3deg)}30%,50%,70%{transform:scale(1.1) rotate(3deg)}40%,60%{transform:scale(1.1) rotate(-3deg)}82%{transform:scale(1.02) rotate(0)}}",rubber:"@keyframes tlp-rubber{0%,100%{transform:scale(1,1)}30%{transform:scale(1.2,.8)}45%{transform:scale(.85,1.15)}62%{transform:scale(1.08,.92)}78%{transform:scale(.97,1.03)}90%{transform:scale(1.01,.99)}}",rattle:"@keyframes tlp-rattle{0%,100%{transform:rotate(0)}10%{transform:rotate(-9deg)}22%{transform:rotate(8deg)}34%{transform:rotate(-7deg)}46%{transform:rotate(6deg)}58%{transform:rotate(-4deg)}70%{transform:rotate(3deg)}82%{transform:rotate(-1.5deg)}92%{transform:rotate(.6deg)}}",spring:"@keyframes tlp-spring{0%,100%{transform:translateY(0) scale(1,1)}16%{transform:translateY(0) scale(1.08,.82)}40%{transform:translateY(-3px) scale(.94,1.12)}62%{transform:translateY(0) scale(1.05,.94)}80%{transform:translateY(0) scale(.99,1.02)}}",knock:"@keyframes tlp-knock{0%,100%{transform:translateX(0) scale(1,1)}14%{transform:translateX(1.9px) scale(.96,1)}28%{transform:translateX(0) scale(1,1)}42%{transform:translateX(1.9px) scale(.96,1)}58%{transform:translateX(0) scale(1,1)}72%{transform:translateX(.5px) scale(.99,1)}}",wave:"@keyframes tlp-wave{0%,100%{transform:rotate(0)}18%{transform:rotate(15deg)}36%{transform:rotate(-13deg)}54%{transform:rotate(10deg)}70%{transform:rotate(-6deg)}85%{transform:rotate(2deg)}}",pendulum:"@keyframes tlp-pendulum{0%,100%{transform:rotate(0)}20%{transform:rotate(22deg)}42%{transform:rotate(-16deg)}62%{transform:rotate(9deg)}80%{transform:rotate(-4deg)}92%{transform:rotate(1.5deg)}}",twirl:"@keyframes tlp-twirl{0%{transform:rotate(0) scale(1)}50%{transform:rotate(180deg) scale(.82)}100%{transform:rotate(360deg) scale(1)}}",flipY:"@keyframes tlp-flipY{0%,100%{transform:scaleY(1)}38%{transform:scaleY(-1.08)}52%{transform:scaleY(-1)}66%{transform:scaleY(-1.05)}}",drip:"@keyframes tlp-drip{0%,100%{opacity:1;transform:translateY(0) scale(1)}34%{opacity:0;transform:translateY(3px) scale(.82)}35%{opacity:0;transform:translateY(-3px) scale(.82)}68%{opacity:1;transform:translateY(.6px) scale(1.04)}84%{opacity:1;transform:translateY(-.2px) scale(1)}}",fall:"@keyframes tlp-fall{0%,100%{opacity:1;transform:translateY(0)}38%{opacity:0;transform:translateY(3.5px)}39%{opacity:0;transform:translateY(-3.5px)}72%{opacity:1;transform:translateY(.7px)}86%{opacity:1;transform:translateY(-.2px)}}",retrace:"@keyframes tlp-retrace{0%,100%{opacity:1;stroke-dasharray:1;stroke-dashoffset:0}30%{opacity:1;stroke-dasharray:1;stroke-dashoffset:.96}33%{opacity:0;stroke-dasharray:1;stroke-dashoffset:1}40%{opacity:0;stroke-dasharray:1;stroke-dashoffset:1}41%{opacity:1;stroke-dasharray:1;stroke-dashoffset:1}}",peek:"@keyframes tlp-peek{0%,100%{transform:translateY(0)}28%{transform:translateY(2px)}62%{transform:translateY(-1.1px)}82%{transform:translateY(.3px)}}",slideInBack:"@keyframes tlp-slideInBack{0%{opacity:0;transform:translateX(4px)}100%{opacity:1;transform:translateX(0)}}",unfold:"@keyframes tlp-unfold{0%{opacity:0;transform:scaleY(0)}40%{opacity:1}68%{transform:scaleY(1.08)}86%{transform:scaleY(.97)}100%{opacity:1;transform:scaleY(1)}}",stampIn:"@keyframes tlp-stampIn{0%{opacity:0;transform:scale(1.6)}45%{opacity:1;transform:scale(.9)}70%{transform:scale(1.04)}100%{opacity:1;transform:scale(1)}}",bounceIn:"@keyframes tlp-bounceIn{0%{opacity:0;transform:translateY(-7px)}35%{opacity:1;transform:translateY(0)}55%{transform:translateY(-2.2px)}72%{transform:translateY(0)}86%{transform:translateY(-.6px)}100%{opacity:1;transform:translateY(0)}}",whooshIn:"@keyframes tlp-whooshIn{0%{opacity:0;transform:translateX(-5px) skewX(-20deg)}60%{opacity:1;transform:translateX(.6px) skewX(6deg)}82%{transform:translateX(-.2px) skewX(-2deg)}100%{opacity:1;transform:translateX(0)}}",elasticIn:"@keyframes tlp-elasticIn{0%{transform:scale(0)}40%{transform:scale(1.18)}58%{transform:scale(.9)}74%{transform:scale(1.05)}88%{transform:scale(.98)}100%{transform:scale(1)}}",typeIn:"@keyframes tlp-typeIn{0%,15%{stroke-dasharray:1;stroke-dashoffset:1}16%,35%{stroke-dasharray:1;stroke-dashoffset:.75}36%,55%{stroke-dasharray:1;stroke-dashoffset:.5}56%,75%{stroke-dasharray:1;stroke-dashoffset:.25}76%,100%{stroke-dasharray:1;stroke-dashoffset:0}}",drawReverse:"@keyframes tlp-drawReverse{0%{stroke-dasharray:1;stroke-dashoffset:-1}100%{stroke-dasharray:1;stroke-dashoffset:0}}",slideDown:"@keyframes tlp-slideDown{0%{opacity:0;transform:translateY(-4px)}100%{opacity:1;transform:translateY(0)}}",emerge:"@keyframes tlp-emerge{0%{opacity:0;transform:translateY(3px) scale(.6)}65%{opacity:1;transform:translateY(-.4px) scale(1.04)}100%{opacity:1;transform:translateY(0) scale(1)}}",jump:"@keyframes tlp-jump{0%,100%{transform:translateY(0) scale(1,1)}12%{transform:translateY(0) scale(1.08,.9)}42%{transform:translateY(-5px) scale(.95,1.06)}66%{transform:translateY(0) scale(1.08,.92)}82%{transform:translateY(-.8px) scale(1,1)}}",scan:"@keyframes tlp-scan{0%,100%{transform:translateY(0)}30%{transform:translateY(3.5px)}70%{transform:translateY(-3.5px)}}",scanX:"@keyframes tlp-scanX{0%,100%{transform:translateX(0)}30%{transform:translateX(3.5px)}70%{transform:translateX(-3.5px)}}",glow:"@keyframes tlp-glow{0%,100%{opacity:1;transform:scale(1)}30%{opacity:.35;transform:scale(.96)}60%{opacity:1;transform:scale(1.06)}80%{opacity:.8;transform:scale(1)}}",dim:"@keyframes tlp-dim{0%,100%{opacity:1}45%,65%{opacity:.15}}",inhale:"@keyframes tlp-inhale{0%,100%{transform:scale(1,1)}45%,60%{transform:scale(1.06,1.1)}}",squeeze:"@keyframes tlp-squeeze{0%,100%{transform:scale(1,1)}35%{transform:scale(.82,1.06)}60%{transform:scale(1.05,.98)}80%{transform:scale(.98,1)}}",pump:"@keyframes tlp-pump{0%,100%{transform:translateY(0)}25%{transform:translateY(2px)}45%{transform:translateY(-.5px)}62%{transform:translateY(2px)}82%{transform:translateY(-.3px)}}",shuttle:"@keyframes tlp-shuttle{0%,100%{transform:translateX(0)}25%{transform:translateX(2.5px)}62%{transform:translateX(-2.5px)}85%{transform:translateX(.5px)}}",dash:"@keyframes tlp-dash{0%,100%{transform:translateX(0) scaleX(1)}20%{transform:translateX(-1px) scaleX(.94)}45%{transform:translateX(3px) scaleX(1.08)}70%{transform:translateX(-.5px) scaleX(.99)}}",recoil:"@keyframes tlp-recoil{0%,100%{transform:translateX(0) rotate(0)}12%{transform:translateX(-2.2px) rotate(-6deg)}40%{transform:translateX(.4px) rotate(1deg)}65%{transform:translateX(-.2px) rotate(-.3deg)}}",throb:"@keyframes tlp-throb{0%,100%{opacity:1;transform:scale(1)}20%,60%{opacity:.75;transform:scale(1.1)}40%,80%{opacity:1;transform:scale(1)}}",refill:"@keyframes tlp-refill{0%,100%{transform:scaleX(1)}30%,45%{transform:scaleX(.15)}85%{transform:scaleX(1.03)}}",equalize:"@keyframes tlp-equalize{0%,100%{transform:scaleY(1)}20%{transform:scaleY(.4)}40%{transform:scaleY(1.15)}60%{transform:scaleY(.65)}80%{transform:scaleY(1.05)}}",blip:"@keyframes tlp-blip{0%,100%{transform:scale(1)}35%{transform:scale(1.4)}60%{transform:scale(.92)}80%{transform:scale(1.03)}}",dig:"@keyframes tlp-dig{0%,100%{transform:translate(0,0) rotate(0)}30%{transform:translate(-.5px,-1.5px) rotate(-10deg)}55%{transform:translate(.6px,1.6px) rotate(8deg)}78%{transform:translate(0,0) rotate(-2deg)}}",stir:"@keyframes tlp-stir{0%,100%{transform:translate(0,0)}12%{transform:translate(1.2px,0)}24%{transform:translate(.85px,.85px)}36%{transform:translate(0,1.2px)}48%{transform:translate(-.85px,.85px)}60%{transform:translate(-1.2px,0)}72%{transform:translate(-.85px,-.85px)}84%{transform:translate(0,-1.2px)}}",stamp:"@keyframes tlp-stamp{0%,100%{transform:translateY(0) scale(1,1)}35%{transform:translateY(-3px) scale(1,1)}50%{transform:translateY(.6px) scale(1.08,.88)}66%{transform:translateY(0) scale(.98,1.03)}82%{transform:translateY(0) scale(1,1)}}",pour:"@keyframes tlp-pour{0%,100%{transform:rotate(0)}30%,65%{transform:rotate(-32deg)}85%{transform:rotate(3deg)}}",magnify:"@keyframes tlp-magnify{0%,100%{transform:scale(1)}35%,65%{transform:scale(1.22)}85%{transform:scale(.97)}}",spinFast:"@keyframes tlp-spinFast{0%{transform:rotate(0)}100%{transform:rotate(720deg)}}",windUp:"@keyframes tlp-windUp{0%{transform:rotate(0)}22%{transform:rotate(-25deg)}85%{transform:rotate(372deg)}100%{transform:rotate(360deg)}}",tumble:"@keyframes tlp-tumble{0%{transform:rotate(0) translateY(0)}50%{transform:rotate(180deg) translateY(-2.5px)}100%{transform:rotate(360deg) translateY(0)}}",halfBack:"@keyframes tlp-halfBack{0%{transform:rotate(0)}80%{transform:rotate(-188deg)}100%{transform:rotate(-180deg)}}"};export{a as default};
|
package/dist/core.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/* tlp-icons 0.
|
|
2
|
-
const x={speed:.6,trigger:"hover",animated:!0},m="cubic-bezier(.22,1,.36,1)",d="cubic-bezier(.65,0,.35,1)",j="cubic-bezier(.45,.05,.55,.95)",N={draw:"cubic-bezier(.65,.05,.36,1)",fillIn:"ease",popIn:m,fadeIn:"ease",slideIn:m,riseIn:m,dropIn:m,grow:m,growX:m,spin:d,spinBack:d,spinHalf:d,sweep:d,sweepHour:d,orbit:d,launch:"cubic-bezier(.4,.1,.5,.95)",roll:"cubic-bezier(.5,.05,.4,1)"},q={pop:.4,breathe:.5,jelly:.3,swing:.15,wiggle:.2,tilt:.4,nod:.45,strike:.38,hop:.4,lift:.45,sink:.45,nudge:.45,nudgeBack:.45,float:.25,flip:.5,spin:.5,spinBack:.5,spinHalf:1,sweep:.5,sweepHour:.5,blink:1,shake:.18,pulseRing:1,orbit:.5,stretch:.45,buzz:.08,tap:.16,press:.2,beat:.14,flicker:.38,twinkle:.3,sway:.24,flutter:.2,bob:.25,drive:.55,launch:.14,roll:.5,tada:.3,rubber:.3,rattle:.1,spring:.4,knock:.14,wave:.18,pendulum:.2,twirl:.5,flipY:.38,drip:1,fall:1,retrace:1,peek:.28},h="http://www.w3.org/2000/svg",b=()=>typeof document>"u"?null:document,P="path,circle,rect,line,polyline,polygon,ellipse",Y=Object.create(null),$=Object.create(null);let w=null;const p=Object.create(null);function W(t,r){for(const e in t)Y[e]=t[e];if(r)for(const e in r)$[e]=r[e];for(const e in p){const a=k(e);a&&(p[e].forEach(n=>n(a)),delete p[e])}}function G(t){if(w=t,!!t)for(const r in p)Promise.resolve(t(X(r))).then(()=>{const e=p[r];if(!e)return;delete p[r];const a=k(r);e.forEach(n=>n(a))},()=>{})}function X(t){return Y[t]?t:$[t]||t}function k(t){return Y[X(t)]||null}function J(t){const r=k(t);return r?Promise.resolve(r):w?Promise.resolve(w(X(t))).then(()=>k(t)):new Promise(e=>{(p[t]=p[t]||[]).push(e)})}function E(t,r=x.speed){let e=0;return{steps:(t.m||[]).map(([n,s,l,f,o])=>{const c=Math.round(l*r),i=Math.round((f||0)*r);return e=Math.max(e,c+i),{part:n,anim:s,t:c,dl:i,origin:o}}),total:e}}const I=t=>{const r={"--a":`tlp-${t.anim}`,"--t":`${t.t}ms`,"--dl":`${t.dl}ms`,"--e":N[t.anim]||j};return t.origin&&(r["--o"]=t.origin),r},v=t=>`p${t.origin&&/px/.test(t.origin)?" vb":""}${t.anim==="sweepHour"?" hh":""}`,D=(t,r)=>` ${t} `.indexOf(` ${r} `)>=0;function K(t,r=b()){if(!r)return null;const e=r.createElementNS(h,"svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("class","tlp"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false"),e.innerHTML=t.svg;const{steps:a,total:n}=E(t);e.dataset.total=String(n);for(const s of a){let l;if(s.part==="all"){const o=r.createElementNS(h,"g");for(;e.firstChild;)o.appendChild(e.firstChild);e.appendChild(o),l=[o]}else l=Array.prototype.filter.call(e.querySelectorAll("[class]"),o=>D(o.getAttribute("class"),s.part));const f=I(s);for(const o of l){o.setAttribute("class",`${o.getAttribute("class")||""} ${v(s)}`.trim());for(const c in f)o.style.setProperty(c,f[c])}}return e.querySelectorAll(P).forEach(s=>s.setAttribute("pathLength","1")),e}function Q(t,r={}){const e=r.stroke??2,a=r.size??24,n=`<svg xmlns="${h}" width="${a}" height="${a}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="${e}" stroke-linecap="round" stroke-linejoin="round"`;if(!r.animated){const o=t.svg.replace(/ class="([^"]*)"/g,(i,u)=>{const y=u.split(/\s+/).filter(g=>g==="d"||g==="f");return y.length?` class="${y.join(" ")}"`:""}),c=r.duotone?"<style>.d{fill:currentColor;fill-opacity:.16}.f{fill:currentColor}</style>":"<style>.f{fill:currentColor}</style>";return`${n}>${o.includes('class="')?c:""}${o}</svg>`}let s=t.svg;const{steps:l,total:f}=E(t);for(const o of l){const c=Object.entries(I(o)).map(([i,u])=>`${i}:${u}`).join(";");if(o.part==="all"){s=`<g class="${v(o)}" style="${c}">${s}</g>`;continue}s=s.replace(new RegExp(`<([a-z]+)([^>]*?) class="([^"]*\\b${o.part}\\b[^"]*)"`,"g"),(i,u,y,g)=>`<${u}${y} class="${g} ${v(o)}" style="${c}"`)}return s=s.replace(/<(path|circle|rect|line|polyline|polygon|ellipse)\b/g,'<$1 pathLength="1"'),`${n} class="tlp" data-tlp-icon data-total="${f}">${s}</svg>`}const S=()=>typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,C=t=>x.animated===!1||!!t.closest("[animated=false],[data-animated=false]");function H(t,r=0){if(!t||t._tlpBusy||t._tlpHold||S()||C(t))return!1;t._tlpBusy=!0;const e=()=>{t.classList.remove("tlp-run"),t.getBoundingClientRect(),t.classList.add("tlp-run"),setTimeout(()=>{t.querySelectorAll(".hh").forEach(a=>a.style.setProperty("--h0",`${(parseFloat(a.style.getPropertyValue("--h0"))||0)+30}deg`)),t.classList.remove("tlp-run"),t._tlpBusy=!1},(+t.dataset.total||0)+40)};return r?setTimeout(e,r):e(),!0}const F=t=>{const r=t.effect.getTiming();return(+r.delay||0)+(+r.duration||0)};function T(t,r){cancelAnimationFrame(t._tlpRaf);const e=()=>{r()&&(t._tlpRaf=requestAnimationFrame(e))};t._tlpRaf=requestAnimationFrame(e)}function M(t){if(!t||t._tlpBusy||S()||C(t))return!1;if(t._tlpHold==="in")return!0;if(typeof t.getAnimations!="function")return H(t);if(t._tlpHold)for(const r of t._tlpAnims)r._tlpAt<r._tlpEnd&&(r.playbackRate=1,r.play());else{t.classList.remove("tlp-run"),t.getBoundingClientRect(),t.classList.add("tlp-run"),t._tlpAnims=t.getAnimations({subtree:!0});for(const r of t._tlpAnims){const e=q[(r.animationName||"").replace(/^tlp-/,"")],a=r.effect.getTiming();r._tlpEnd=F(r),r._tlpAt=e===void 0?r._tlpEnd:(+a.delay||0)+e*(+a.duration||0),e===void 0&&(r.currentTime=r._tlpEnd,r.pause())}}return t._tlpHold="in",T(t,()=>{let r=!1;for(const e of t._tlpAnims)e.playState!=="running"||e.playbackRate<0||(e._tlpAt<e._tlpEnd&&e.currentTime>=e._tlpAt?(e.currentTime=e._tlpAt,e.pause()):r=!0);return r}),!0}function U(t){if(!t||!t._tlpHold||t._tlpHold==="out")return!1;t._tlpHold="out";const r=t._tlpAnims.filter(e=>e._tlpAt<e._tlpEnd);for(const e of r)e.playbackRate=-1,e.play();return T(t,()=>t._tlpHold!=="out"?!1:r.some(e=>e.playState==="running"&&e.currentTime>0)?!0:(t.classList.remove("tlp-run"),t._tlpHold=null,t._tlpAnims=null,!1)),!0}const z="tlp-icon,svg[data-tlp-icon]",V="button,a,[role=button],[role=menuitem],[role=tab],[role=option],li,tr,td,th,label,summary,input,select,textarea";function _(t){return t.tagName.toLowerCase()==="svg"?t:t.querySelector("svg.tlp")}function L(t){return t.getAttribute("trigger")||t.getAttribute("data-trigger")||x.trigger||"hover"}function A(t){let r=t&&t.nodeType===1?t:t&&t.parentElement;if(!r)return null;const e=r.closest(z);if(e)return e.closest("tlp-icon")||e;for(let a=0;r&&r.nodeType===1&&r!==r.ownerDocument.body&&a<8;a++,r=r.parentElement){const n=r.querySelectorAll(z);let s=0,l=null;for(const f of n)f.tagName.toLowerCase()==="svg"&&f.closest("tlp-icon")||(s++,l=f);if(s>1)return null;if(s===1)return{icon:l,scope:r};if(r.matches(V))return null}return null}let B=!1;function Z(t=b()){B||!t||(B=!0,t.addEventListener("mouseover",r=>{const e=A(r.target);if(!e)return;const a=e.icon||e;if((e.scope||a).contains(r.relatedTarget))return;const s=L(a);s==="hover"?H(_(a)):s==="hold"&&M(_(a))},!0),t.addEventListener("mouseout",r=>{const e=A(r.target);if(!e)return;const a=e.icon||e;if(L(a)!=="hold")return;const n=r.relatedTarget&&A(r.relatedTarget);n&&(n.icon||n)===a||U(_(a))},!0))}let O=!1;const R="tlp-icon{display:inline-flex;align-items:center;justify-content:center;flex:none;width:var(--tlp-size,24px);height:var(--tlp-size,24px);line-height:0;vertical-align:middle;color:inherit}tlp-icon>svg,svg.tlp{width:100%;height:100%}svg.tlp{fill:none;stroke:currentColor;stroke-width:var(--tlp-stroke,2);stroke-linecap:round;stroke-linejoin:round;overflow:visible}svg.tlp .d{fill:currentColor;fill-opacity:var(--tlp-duo,0)}tlp-icon[duotone],.tlp-duotone{--tlp-duo:.16}tlp-icon[duotone=false]{--tlp-duo:0}svg.tlp .f{fill:currentColor}svg.tlp .p{transform-box:fill-box;transform-origin:var(--o,center)}svg.tlp .p.vb{transform-box:view-box}svg.tlp .p.hh{transform:rotate(var(--h0,0deg))}svg.tlp.tlp-run .p{animation:var(--a) var(--t,1000ms) var(--e,cubic-bezier(.45,.05,.55,.95)) var(--dl,0ms) 1 both}tlp-icon[flip=x]>svg,[dir=rtl] tlp-icon[flip=rtl]>svg{transform:scaleX(-1)}@keyframes tlp-draw{0%{stroke-dasharray:1;stroke-dashoffset:1}100%{stroke-dasharray:1;stroke-dashoffset:0}}@keyframes tlp-fillIn{0%{fill-opacity:0}100%{fill-opacity:var(--tlp-duo,0)}}@keyframes tlp-popIn{0%{opacity:0;transform:scale(.4)}55%{opacity:1;transform:scale(1.08)}78%{transform:scale(.98)}100%{opacity:1;transform:scale(1)}}@keyframes tlp-fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes tlp-slideIn{0%{opacity:0;transform:translateX(-4px)}100%{opacity:1;transform:translateX(0)}}@keyframes tlp-riseIn{0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:translateY(0)}}@keyframes tlp-dropIn{0%{opacity:0;transform:translateY(-5px)}60%{opacity:1;transform:translateY(.8px)}80%{transform:translateY(-.3px)}100%{opacity:1;transform:translateY(0)}}@keyframes tlp-grow{0%{transform:scaleY(0)}70%{transform:scaleY(1.06)}100%{transform:scaleY(1)}}@keyframes tlp-growX{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}@keyframes tlp-pop{0%,100%{transform:scale(1)}40%{transform:scale(1.14)}68%{transform:scale(.97)}86%{transform:scale(1.02)}}@keyframes tlp-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}@keyframes tlp-jelly{0%,100%{transform:scale(1,1)}30%{transform:scale(1.1,.9)}50%{transform:scale(.94,1.06)}70%{transform:scale(1.03,.97)}85%{transform:scale(.99,1.01)}}@keyframes tlp-swing{0%,100%{transform:rotate(0)}15%{transform:rotate(13deg)}32%{transform:rotate(-10deg)}50%{transform:rotate(6deg)}68%{transform:rotate(-3deg)}84%{transform:rotate(1deg)}}@keyframes tlp-wiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-8deg)}45%{transform:rotate(6deg)}68%{transform:rotate(-3deg)}86%{transform:rotate(1deg)}}@keyframes tlp-tilt{0%,100%{transform:rotate(0)}40%{transform:rotate(-12deg)}72%{transform:rotate(3deg)}88%{transform:rotate(-1deg)}}@keyframes tlp-nod{0%,100%{transform:rotate(0)}45%{transform:rotate(7deg)}75%{transform:rotate(-1.5deg)}}@keyframes tlp-strike{0%,100%{transform:rotate(0)}38%{transform:rotate(-24deg)}56%{transform:rotate(7deg)}70%{transform:rotate(-2deg)}84%{transform:rotate(.6deg)}}@keyframes tlp-hop{0%,100%{transform:translateY(0) scale(1,1)}10%{transform:translateY(0) scale(1.04,.95)}40%{transform:translateY(-3px) scale(.97,1.04)}68%{transform:translateY(0) scale(1.04,.96)}84%{transform:translateY(0) scale(.99,1.01)}}@keyframes tlp-lift{0%,100%{transform:translateY(0)}45%{transform:translateY(-2.5px)}75%{transform:translateY(.4px)}}@keyframes tlp-sink{0%,100%{transform:translateY(0)}45%{transform:translateY(2.5px)}75%{transform:translateY(-.4px)}}@keyframes tlp-nudge{0%,100%{transform:translateX(0)}45%{transform:translateX(2.6px)}75%{transform:translateX(-.4px)}}@keyframes tlp-nudgeBack{0%,100%{transform:translateX(0)}45%{transform:translateX(-2.6px)}75%{transform:translateX(.4px)}}@keyframes tlp-float{0%,100%{transform:translateY(0)}25%{transform:translateY(-2px)}50%{transform:translateY(0)}75%{transform:translateY(-1.2px)}}@keyframes tlp-flip{0%,100%{transform:scaleX(1)}50%{transform:scaleX(-1)}}@keyframes tlp-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tlp-spinBack{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}@keyframes tlp-spinHalf{0%{transform:rotate(0)}80%{transform:rotate(188deg)}100%{transform:rotate(180deg)}}@keyframes tlp-sweep{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tlp-sweepHour{0%{transform:rotate(var(--h0,0deg))}100%{transform:rotate(calc(var(--h0,0deg) + 30deg))}}@keyframes tlp-blink{0%,100%{transform:scaleY(1)}35%{transform:scaleY(.08)}60%{transform:scaleY(1)}}@keyframes tlp-shake{0%,100%{transform:translateX(0)}18%{transform:translateX(-1.6px)}36%{transform:translateX(1.4px)}54%{transform:translateX(-1px)}72%{transform:translateX(.6px)}88%{transform:translateX(-.2px)}}@keyframes tlp-pulseRing{0%,100%{opacity:1;transform:scale(1)}55%{opacity:0;transform:scale(1.5)}56%{opacity:0;transform:scale(.6)}}@keyframes tlp-orbit{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tlp-stretch{0%,100%{transform:scaleX(1)}45%{transform:scaleX(1.12)}75%{transform:scaleX(.98)}}@keyframes tlp-buzz{0%,100%{transform:translate(0,0) rotate(0)}8%{transform:translate(-.9px,.4px) rotate(-3deg)}16%{transform:translate(.9px,-.4px) rotate(3deg)}24%{transform:translate(-.8px,.4px) rotate(-2.6deg)}32%{transform:translate(.8px,-.3px) rotate(2.6deg)}40%{transform:translate(-.6px,.3px) rotate(-2deg)}48%{transform:translate(.6px,-.2px) rotate(2deg)}58%{transform:translate(-.4px,.2px) rotate(-1.2deg)}68%{transform:translate(.3px,-.1px) rotate(1deg)}80%{transform:translate(-.15px,0) rotate(-.4deg)}}@keyframes tlp-tap{0%,100%{transform:translateY(0) scale(1)}16%{transform:translateY(1.8px) scale(.94)}30%{transform:translateY(-.3px) scale(1.02)}44%{transform:translateY(0) scale(1)}60%{transform:translateY(1.8px) scale(.94)}78%{transform:translateY(-.4px) scale(1.02)}90%{transform:translateY(.1px) scale(.995)}}@keyframes tlp-press{0%,100%{transform:scale(1)}20%{transform:scale(.88)}42%{transform:scale(.88)}62%{transform:scale(1.07)}80%{transform:scale(.98)}91%{transform:scale(1.01)}}@keyframes tlp-beat{0%,100%{transform:scale(1)}14%{transform:scale(1.16)}28%{transform:scale(.98)}42%{transform:scale(1.09)}58%{transform:scale(1)}}@keyframes tlp-flicker{0%,100%{opacity:1;transform:scale(1)}8%{opacity:.55;transform:scale(.97)}16%{opacity:.95;transform:scale(1.02)}26%{opacity:.4;transform:scale(.96)}38%{opacity:1;transform:scale(1.03)}50%{opacity:.7;transform:scale(.99)}62%{opacity:1;transform:scale(1.015)}78%{opacity:.85;transform:scale(1)}}@keyframes tlp-twinkle{0%,100%{transform:scale(1) rotate(0)}30%{transform:scale(.8) rotate(-14deg)}60%{transform:scale(1.18) rotate(8deg)}80%{transform:scale(.97) rotate(-2deg)}}@keyframes tlp-sway{0%,100%{transform:rotate(0)}24%{transform:rotate(6deg)}48%{transform:rotate(-4.5deg)}70%{transform:rotate(2.5deg)}86%{transform:rotate(-1deg)}}@keyframes tlp-flutter{0%,100%{transform:scale(1,1)}20%{transform:skewY(-7deg) scaleX(.95)}42%{transform:skewY(6deg) scaleX(1.03)}62%{transform:skewY(-3.5deg) scaleX(.98)}82%{transform:skewY(1.5deg) scaleX(1.01)}}@keyframes tlp-bob{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-1.8px) rotate(-5deg)}52%{transform:translateY(1.2px) rotate(4deg)}76%{transform:translateY(-.8px) rotate(-2deg)}}@keyframes tlp-drive{0%,100%{transform:translateX(0) rotate(0)}22%{transform:translateX(-1px) rotate(-3.5deg)}55%{transform:translateX(2.4px) rotate(1.2deg)}78%{transform:translateX(-.3px) rotate(-.4deg)}}@keyframes tlp-launch{0%,100%{opacity:1;transform:translate(0,0)}14%{opacity:1;transform:translate(-.8px,.8px)}42%{opacity:0;transform:translate(5px,-5px)}43%{opacity:0;transform:translate(-5px,5px)}72%{opacity:1;transform:translate(.5px,-.5px)}}@keyframes tlp-roll{0%{transform:rotate(0) translateX(0)}50%{transform:rotate(180deg) translateX(1.2px)}100%{transform:rotate(360deg) translateX(0)}}@keyframes tlp-zoomIn{0%{opacity:0;transform:scale(1.35)}55%{opacity:1;transform:scale(.96)}78%{transform:scale(1.02)}100%{opacity:1;transform:scale(1)}}@keyframes tlp-spiralIn{0%{opacity:0;transform:rotate(-120deg) scale(0)}55%{opacity:1;transform:rotate(7deg) scale(1.1)}78%{transform:rotate(-2deg) scale(.98)}100%{opacity:1;transform:rotate(0) scale(1)}}@keyframes tlp-swingIn{0%{opacity:0;transform:rotate(-25deg)}30%{opacity:1;transform:rotate(9deg)}55%{transform:rotate(-4deg)}78%{transform:rotate(1.5deg)}100%{opacity:1;transform:rotate(0)}}@keyframes tlp-flipIn{0%{opacity:0;transform:scaleX(0)}50%{opacity:1;transform:scaleX(1.1)}75%{transform:scaleX(.96)}100%{opacity:1;transform:scaleX(1)}}@keyframes tlp-focusIn{0%{opacity:.15;filter:blur(1.6px);transform:scale(1.12)}60%{opacity:1;filter:blur(.5px);transform:scale(.98)}100%{opacity:1;filter:blur(0);transform:scale(1)}}@keyframes tlp-bloom{0%{opacity:0;transform:rotate(-45deg) scale(0)}55%{opacity:1;transform:rotate(8deg) scale(1.12)}78%{transform:rotate(-2deg) scale(.98)}100%{opacity:1;transform:rotate(0) scale(1)}}@keyframes tlp-rollIn{0%{opacity:0;transform:translateX(-5px) rotate(-180deg)}70%{opacity:1;transform:translateX(.6px) rotate(8deg)}100%{opacity:1;transform:translateX(0) rotate(0)}}@keyframes tlp-tada{0%,100%{transform:scale(1) rotate(0)}10%,20%{transform:scale(.92) rotate(-3deg)}30%,50%,70%{transform:scale(1.1) rotate(3deg)}40%,60%{transform:scale(1.1) rotate(-3deg)}82%{transform:scale(1.02) rotate(0)}}@keyframes tlp-rubber{0%,100%{transform:scale(1,1)}30%{transform:scale(1.2,.8)}45%{transform:scale(.85,1.15)}62%{transform:scale(1.08,.92)}78%{transform:scale(.97,1.03)}90%{transform:scale(1.01,.99)}}@keyframes tlp-rattle{0%,100%{transform:rotate(0)}10%{transform:rotate(-9deg)}22%{transform:rotate(8deg)}34%{transform:rotate(-7deg)}46%{transform:rotate(6deg)}58%{transform:rotate(-4deg)}70%{transform:rotate(3deg)}82%{transform:rotate(-1.5deg)}92%{transform:rotate(.6deg)}}@keyframes tlp-spring{0%,100%{transform:translateY(0) scale(1,1)}16%{transform:translateY(0) scale(1.08,.82)}40%{transform:translateY(-3px) scale(.94,1.12)}62%{transform:translateY(0) scale(1.05,.94)}80%{transform:translateY(0) scale(.99,1.02)}}@keyframes tlp-knock{0%,100%{transform:translateX(0) scale(1,1)}14%{transform:translateX(1.9px) scale(.96,1)}28%{transform:translateX(0) scale(1,1)}42%{transform:translateX(1.9px) scale(.96,1)}58%{transform:translateX(0) scale(1,1)}72%{transform:translateX(.5px) scale(.99,1)}}@keyframes tlp-wave{0%,100%{transform:rotate(0)}18%{transform:rotate(15deg)}36%{transform:rotate(-13deg)}54%{transform:rotate(10deg)}70%{transform:rotate(-6deg)}85%{transform:rotate(2deg)}}@keyframes tlp-pendulum{0%,100%{transform:rotate(0)}20%{transform:rotate(22deg)}42%{transform:rotate(-16deg)}62%{transform:rotate(9deg)}80%{transform:rotate(-4deg)}92%{transform:rotate(1.5deg)}}@keyframes tlp-twirl{0%{transform:rotate(0) scale(1)}50%{transform:rotate(180deg) scale(.82)}100%{transform:rotate(360deg) scale(1)}}@keyframes tlp-flipY{0%,100%{transform:scaleY(1)}38%{transform:scaleY(-1.08)}52%{transform:scaleY(-1)}66%{transform:scaleY(-1.05)}}@keyframes tlp-drip{0%,100%{opacity:1;transform:translateY(0) scale(1)}34%{opacity:0;transform:translateY(3px) scale(.82)}35%{opacity:0;transform:translateY(-3px) scale(.82)}68%{opacity:1;transform:translateY(.6px) scale(1.04)}84%{opacity:1;transform:translateY(-.2px) scale(1)}}@keyframes tlp-fall{0%,100%{opacity:1;transform:translateY(0)}38%{opacity:0;transform:translateY(3.5px)}39%{opacity:0;transform:translateY(-3.5px)}72%{opacity:1;transform:translateY(.7px)}86%{opacity:1;transform:translateY(-.2px)}}@keyframes tlp-retrace{0%,100%{opacity:1;stroke-dasharray:1;stroke-dashoffset:0}30%{opacity:1;stroke-dasharray:1;stroke-dashoffset:.96}33%{opacity:0;stroke-dasharray:1;stroke-dashoffset:1}40%{opacity:0;stroke-dasharray:1;stroke-dashoffset:1}41%{opacity:1;stroke-dasharray:1;stroke-dashoffset:1}}@keyframes tlp-peek{0%,100%{transform:translateY(0)}28%{transform:translateY(2px)}62%{transform:translateY(-1.1px)}82%{transform:translateY(.3px)}}@media (prefers-reduced-motion:reduce){svg.tlp .p{animation:none!important}}";function tt(t=b()){if(O||!t||!t.head||(O=!0,t.getElementById("tlp-icons-style")||R.length<20))return;const r=t.createElement("style");r.id="tlp-icons-style",r.textContent=R,t.head.appendChild(r)}export{R as CSS,N as EASE,q as HOLD,z as ICON_SELECTOR,x as config,K as createSvg,tt as ensureStyles,k as getIcon,M as hold,A as hoverTarget,Z as installHover,J as loadIcon,W as register,U as release,X as resolve,H as run,G as setLoader,E as timings,Q as toSvgString};
|
|
1
|
+
/* tlp-icons 0.5.0 - MIT. Icons from Lucide 1.55.0 (ISC), Tabler Icons 3.49.0 (MIT). Generated file, do not edit. */
|
|
2
|
+
const w={speed:.6,trigger:"hover",animated:!0},f="cubic-bezier(.22,1,.36,1)",d="cubic-bezier(.65,0,.35,1)",F="cubic-bezier(.45,.05,.55,.95)",M={draw:"cubic-bezier(.65,.05,.36,1)",fillIn:"ease",popIn:f,fadeIn:"ease",slideIn:f,riseIn:f,dropIn:f,grow:f,growX:f,spin:d,spinBack:d,spinHalf:d,sweep:d,sweepHour:d,orbit:d,launch:"cubic-bezier(.4,.1,.5,.95)",roll:"cubic-bezier(.5,.05,.4,1)",slideInBack:"cubic-bezier(.22,1,.36,1)",unfold:"cubic-bezier(.22,1,.36,1)",stampIn:"cubic-bezier(.22,1,.36,1)",whooshIn:"cubic-bezier(.22,1,.36,1)",typeIn:"linear",drawReverse:"cubic-bezier(.65,.05,.36,1)",slideDown:"cubic-bezier(.22,1,.36,1)",emerge:"cubic-bezier(.22,1,.36,1)",spinFast:"cubic-bezier(.65,0,.35,1)",windUp:"cubic-bezier(.45,.05,.55,.95)",tumble:"cubic-bezier(.65,0,.35,1)",halfBack:"cubic-bezier(.65,0,.35,1)"},U={pop:.4,breathe:.5,jelly:.3,swing:.15,wiggle:.2,tilt:.4,nod:.45,strike:.38,hop:.4,lift:.45,sink:.45,nudge:.45,nudgeBack:.45,float:.25,flip:.5,spin:.5,spinBack:.5,spinHalf:1,sweep:.5,sweepHour:.5,blink:1,shake:.18,pulseRing:1,orbit:.5,stretch:.45,buzz:.08,tap:.16,press:.2,beat:.14,flicker:.38,twinkle:.3,sway:.24,flutter:.2,bob:.25,drive:.55,launch:.14,roll:.5,tada:.3,rubber:.3,rattle:.1,spring:.4,knock:.14,wave:.18,pendulum:.2,twirl:.5,flipY:.38,drip:1,fall:1,retrace:1,peek:.28,jump:.42,scan:.3,scanX:.3,glow:.6,dim:1,inhale:.45,squeeze:.35,pump:.25,shuttle:.25,dash:.45,recoil:.12,throb:.2,refill:.3,equalize:.2,blip:.35,dig:.3,stir:.24,stamp:.5,pour:.3,magnify:.35,spinFast:.5,windUp:.5,tumble:.5,halfBack:1},x="http://www.w3.org/2000/svg",g=()=>typeof document>"u"?null:document,X="path,circle,rect,line,polyline,polygon,ellipse",k=Object.create(null),C=Object.create(null);let _=null;const u=Object.create(null);function J(t,e){for(const n in t)k[n]=t[n];if(e)for(const n in e)C[n]=e[n];for(const n in u){const r=y(n);r&&(u[n].forEach(o=>o(r)),delete u[n])}}function Q(t){if(_=t,!!t)for(const e in u)Promise.resolve(t(A(e))).then(()=>{const n=u[e];if(!n)return;delete u[e];const r=y(e);n.forEach(o=>o(r))},()=>{})}function A(t){return k[t]?t:C[t]||t}function y(t){return k[A(t)]||null}function Z(t){const e=y(t);return e?Promise.resolve(e):_?Promise.resolve(_(A(t))).then(()=>y(t)):new Promise(n=>{(u[t]=u[t]||[]).push(n)})}function S(t,e=w.speed){let n=0;return{steps:(t.m||[]).map(([o,l,s,c,i])=>{const a=Math.round(s*e),p=Math.round((c||0)*e);return n=Math.max(n,a+p),{part:o,anim:l,t:a,dl:p,origin:i}}),total:n}}const T=t=>{const e={"--a":`tlp-${t.anim}`,"--t":`${t.t}ms`,"--dl":`${t.dl}ms`,"--e":M[t.anim]||F};return t.origin&&(e["--o"]=t.origin),e},v=t=>`p${t.origin&&/px/.test(t.origin)?" vb":""}${t.anim==="sweepHour"?" hh":""}`,K=(t,e)=>` ${t} `.indexOf(` ${e} `)>=0;function tt(t,e=g()){if(!e)return null;const n=e.createElementNS(x,"svg");n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("class","tlp"),n.setAttribute("aria-hidden","true"),n.setAttribute("focusable","false"),n.innerHTML=t.svg;const{steps:r,total:o}=S(t);n.dataset.total=String(o);for(const l of r){let s;if(l.part==="all"){const i=e.createElementNS(x,"g");for(;n.firstChild;)i.appendChild(n.firstChild);n.appendChild(i),s=[i]}else s=Array.prototype.filter.call(n.querySelectorAll("[class]"),i=>K(i.getAttribute("class"),l.part));const c=T(l);for(const i of s){i.setAttribute("class",`${i.getAttribute("class")||""} ${v(l)}`.trim());for(const a in c)i.style.setProperty(a,c[a])}}return n.querySelectorAll(X).forEach(l=>l.setAttribute("pathLength","1")),n}function et(t,e={}){const n=e.stroke??2,r=e.size??24,o=`<svg xmlns="${x}" width="${r}" height="${r}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="${n}" stroke-linecap="round" stroke-linejoin="round"`;if(!e.animated){const i=t.svg.replace(/ class="([^"]*)"/g,(p,m)=>{const b=m.split(/\s+/).filter(h=>h==="d"||h==="f");return b.length?` class="${b.join(" ")}"`:""}),a=e.duotone?"<style>.d{fill:currentColor;fill-opacity:.16}.f{fill:currentColor}</style>":"<style>.f{fill:currentColor}</style>";return`${o}>${i.includes('class="')?a:""}${i}</svg>`}let l=t.svg;const{steps:s,total:c}=S(t);for(const i of s){const a=Object.entries(T(i)).map(([p,m])=>`${p}:${m}`).join(";");if(i.part==="all"){l=`<g class="${v(i)}" style="${a}">${l}</g>`;continue}l=l.replace(new RegExp(`<([a-z]+)([^>]*?) class="([^"]*\\b${i.part}\\b[^"]*)"`,"g"),(p,m,b,h)=>`<${m}${b} class="${h} ${v(i)}" style="${a}"`)}return l=l.replace(/<(path|circle|rect|line|polyline|polygon|ellipse)\b/g,'<$1 pathLength="1"'),`${o} class="tlp" data-tlp-icon data-total="${c}">${l}</svg>`}const H=()=>typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,I=t=>w.animated===!1||!!t.closest("[animated=false],[data-animated=false]");function L(t,e=0){if(!t||t._tlpBusy||t._tlpHold||H()||I(t))return!1;t._tlpBusy=!0;const n=()=>{t.classList.remove("tlp-run"),t.getBoundingClientRect(),t.classList.add("tlp-run"),setTimeout(()=>{t.querySelectorAll(".hh").forEach(r=>r.style.setProperty("--h0",`${(parseFloat(r.style.getPropertyValue("--h0"))||0)+30}deg`)),t.classList.remove("tlp-run"),t._tlpBusy=!1},(+t.dataset.total||0)+40)};return e?setTimeout(n,e):n(),!0}const V=t=>{const e=t.effect.getTiming();return(+e.delay||0)+(+e.duration||0)};function B(t,e){cancelAnimationFrame(t._tlpRaf);const n=()=>{e()&&(t._tlpRaf=requestAnimationFrame(n))};t._tlpRaf=requestAnimationFrame(n)}function W(t){if(!t||t._tlpBusy||H()||I(t))return!1;if(t._tlpHold==="in")return!0;if(typeof t.getAnimations!="function")return L(t);if(t._tlpHold)for(const e of t._tlpAnims)e._tlpAt<e._tlpEnd&&(e.playbackRate=1,e.play());else{t.classList.remove("tlp-run"),t.getBoundingClientRect(),t.classList.add("tlp-run"),t._tlpAnims=t.getAnimations({subtree:!0});for(const e of t._tlpAnims){const n=U[(e.animationName||"").replace(/^tlp-/,"")],r=e.effect.getTiming();e._tlpEnd=V(e),e._tlpAt=n===void 0?e._tlpEnd:(+r.delay||0)+n*(+r.duration||0),n===void 0&&(e.currentTime=e._tlpEnd,e.pause())}}return t._tlpHold="in",B(t,()=>{let e=!1;for(const n of t._tlpAnims)n.playState!=="running"||n.playbackRate<0||(n._tlpAt<n._tlpEnd&&n.currentTime>=n._tlpAt?(n.currentTime=n._tlpAt,n.pause()):e=!0);return e}),!0}function Y(t){if(!t||!t._tlpHold||t._tlpHold==="out")return!1;t._tlpHold="out";const e=t._tlpAnims.filter(n=>n._tlpAt<n._tlpEnd);for(const n of e)n.playbackRate=-1,n.play();return B(t,()=>t._tlpHold!=="out"?!1:e.some(n=>n.playState==="running"&&n.currentTime>0)?!0:(t.classList.remove("tlp-run"),t._tlpHold=null,t._tlpAnims=null,!1)),!0}const O="tlp-icon,svg[data-tlp-icon]",G="button,a,[role=button],[role=menuitem],[role=tab],[role=option],li,tr,td,th,label,summary,input,select,textarea";function $(t){return t.tagName.toLowerCase()==="svg"?t:t.querySelector("svg.tlp")}function R(t){return t.getAttribute("trigger")||t.getAttribute("data-trigger")||w.trigger||"hover"}function z(t){let e=t&&t.nodeType===1?t:t&&t.parentElement;if(!e)return null;const n=e.closest(O);if(n)return n.closest("tlp-icon")||n;for(let r=0;e&&e.nodeType===1&&e!==e.ownerDocument.body&&r<8;r++,e=e.parentElement){const o=e.querySelectorAll(O);let l=0,s=null;for(const c of o)c.tagName.toLowerCase()==="svg"&&c.closest("tlp-icon")||(l++,s=c);if(l>1)return null;if(l===1)return{icon:s,scope:e};if(e.matches(G))return null}return null}let j=!1;function nt(t=g()){j||!t||(j=!0,t.addEventListener("mouseover",e=>{const n=z(e.target);if(!n)return;const r=n.icon||n;if((n.scope||r).contains(e.relatedTarget))return;const l=R(r);l==="hover"?L($(r)):l==="hold"&&W($(r))},!0),t.addEventListener("mouseout",e=>{const n=z(e.target);if(!n)return;const r=n.icon||n;if(R(r)!=="hold")return;const o=e.relatedTarget&&z(e.relatedTarget);o&&(o.icon||o)===r||Y($(r))},!0))}let E=!1;const q="tlp-icon{display:inline-flex;align-items:center;justify-content:center;flex:none;width:var(--tlp-size,24px);height:var(--tlp-size,24px);line-height:0;vertical-align:middle;color:inherit}tlp-icon>svg,svg.tlp{width:100%;height:100%}svg.tlp{fill:none;stroke:currentColor;stroke-width:var(--tlp-stroke,2);stroke-linecap:round;stroke-linejoin:round;overflow:visible}svg.tlp .d{fill:currentColor;fill-opacity:var(--tlp-duo,0)}tlp-icon[duotone],.tlp-duotone{--tlp-duo:.16}tlp-icon[duotone=false]{--tlp-duo:0}svg.tlp .f{fill:currentColor}svg.tlp .p{transform-box:fill-box;transform-origin:var(--o,center)}svg.tlp .p.vb{transform-box:view-box}svg.tlp .p.hh{transform:rotate(var(--h0,0deg))}svg.tlp.tlp-run .p{animation:var(--a) var(--t,1000ms) var(--e,cubic-bezier(.45,.05,.55,.95)) var(--dl,0ms) 1 both}tlp-icon[flip=x]>svg,[dir=rtl] tlp-icon[flip=rtl]>svg{transform:scaleX(-1)}@media (prefers-reduced-motion:reduce){svg.tlp .p{animation:none!important}}",N=Object.create(null);let P="";const D=t=>t&&t.getElementById("tlp-icons-style");function rt(t=g()){if(E||!t||!t.head||(E=!0,D(t)||q.length<20))return;const e=t.createElement("style");e.id="tlp-icons-style",e.textContent=q+P,t.head.appendChild(e)}function lt(t,e=g()){let n="";for(const o in t)N[o]||(N[o]=1,n+=t[o]);if(!n)return;P+=n;const r=E&&D(e);r&&(r.textContent+=n)}export{q as CSS,M as EASE,U as HOLD,O as ICON_SELECTOR,lt as addKeyframes,w as config,tt as createSvg,rt as ensureStyles,y as getIcon,W as hold,z as hoverTarget,nt as installHover,Z as loadIcon,J as register,Y as release,A as resolve,L as run,Q as setLoader,S as timings,et as toSvgString};
|
|
3
3
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["core.js"],
|
|
4
|
-
"sourcesContent": ["/* tlp-icons 0.4.0 - MIT. Icons from Lucide 1.55.0 (ISC), Tabler Icons 3.49.0 (MIT). Generated file, do not edit. */\n/* tlp-icons runtime core: icon registry, choreography baking, run engine and the hover rule.\n Plain ES module without imports so the build can also wrap it into a classic <script> bundle. */\n\n/** speed: duration multiplier. trigger: page default for icons without one. animated: false makes every icon static. */\nexport const config = { speed: 0.6, trigger: 'hover', animated: true };\n\nconst OUT = 'cubic-bezier(.22,1,.36,1)';\nconst TURN = 'cubic-bezier(.65,0,.35,1)';\nconst SINE = 'cubic-bezier(.45,.05,.55,.95)';\nexport const EASE = {\n draw: 'cubic-bezier(.65,.05,.36,1)', fillIn: 'ease', popIn: OUT, fadeIn: 'ease', slideIn: OUT, riseIn: OUT, dropIn: OUT,\n grow: OUT, growX: OUT, spin: TURN, spinBack: TURN, spinHalf: TURN, sweep: TURN, sweepHour: TURN, orbit: TURN,\n launch: \"cubic-bezier(.4,.1,.5,.95)\", roll: \"cubic-bezier(.5,.05,.4,1)\", \n};\n/** trigger=\"hold\": where each animation pauses while hovered (fraction of its duration; generated from the keyframes).\n Animations not listed (entrances) jump to their end. */\nexport const HOLD = { pop: 0.4, breathe: 0.5, jelly: 0.3, swing: 0.15, wiggle: 0.2, tilt: 0.4, nod: 0.45, strike: 0.38, hop: 0.4, lift: 0.45, sink: 0.45, nudge: 0.45, nudgeBack: 0.45, float: 0.25, flip: 0.5, spin: 0.5, spinBack: 0.5, spinHalf: 1, sweep: 0.5, sweepHour: 0.5, blink: 1, shake: 0.18, pulseRing: 1, orbit: 0.5, stretch: 0.45, buzz: 0.08, tap: 0.16, press: 0.2, beat: 0.14, flicker: 0.38, twinkle: 0.3, sway: 0.24, flutter: 0.2, bob: 0.25, drive: 0.55, launch: 0.14, roll: 0.5, tada: 0.3, rubber: 0.3, rattle: 0.1, spring: 0.4, knock: 0.14, wave: 0.18, pendulum: 0.2, twirl: 0.5, flipY: 0.38, drip: 1, fall: 1, retrace: 1, peek: 0.28 };\n\nconst NS = 'http://www.w3.org/2000/svg';\n// SSR safety: never touch `document` unless it exists (Node, workers).\nconst currentDocument = () => (typeof document === 'undefined' ? null : document);\nconst DRAWABLE = 'path,circle,rect,line,polyline,polygon,ellipse';\nconst registry = Object.create(null);\nconst aliases = Object.create(null);\nlet loader = null;\n\n/** Adds icons: { name: { svg, m } }. */\nconst waiting = Object.create(null);\nexport function register(icons, aliasMap) {\n for (const k in icons) registry[k] = icons[k];\n if (aliasMap) for (const k in aliasMap) aliases[k] = aliasMap[k];\n for (const k in waiting) {\n const icon = getIcon(k);\n if (icon) { waiting[k].forEach(fn => fn(icon)); delete waiting[k]; }\n }\n}\n/**\n * Installs the lazy loader. Icons requested before it existed (elements upgraded while the ES module graph was\n * still evaluating, e.g. tags in the HTML before <script type=\"module\">) are loaded now instead of waiting forever.\n */\nexport function setLoader(fn) {\n loader = fn;\n if (!fn) return;\n for (const name in waiting) {\n Promise.resolve(fn(resolve(name))).then(() => {\n const list = waiting[name];\n if (!list) return;\n delete waiting[name];\n const icon = getIcon(name);\n list.forEach(res => res(icon));\n }, () => {});\n }\n}\nexport function resolve(name) { return registry[name] ? name : aliases[name] || name; }\nexport function getIcon(name) { return registry[resolve(name)] || null; }\n/** Resolves with the icon data. Without a loader it waits for a later register() (classic script bundles). */\nexport function loadIcon(name) {\n const icon = getIcon(name);\n if (icon) return Promise.resolve(icon);\n if (loader) return Promise.resolve(loader(resolve(name))).then(() => getIcon(name));\n return new Promise(res => { (waiting[name] = waiting[name] || []).push(res); });\n}\n\n/** Scaled timing of every step and the total length in ms. */\nexport function timings(icon, speed = config.speed) {\n let total = 0;\n const steps = (icon.m || []).map(([part, anim, dur, delay, origin]) => {\n const t = Math.round(dur * speed), dl = Math.round((delay || 0) * speed);\n total = Math.max(total, t + dl);\n return { part, anim, t, dl, origin };\n });\n return { steps, total };\n}\n\nconst varsOf = s => {\n const v = { '--a': `tlp-${s.anim}`, '--t': `${s.t}ms`, '--dl': `${s.dl}ms`, '--e': EASE[s.anim] || SINE };\n if (s.origin) v['--o'] = s.origin;\n return v;\n};\nconst clsOf = s => `p${s.origin && /px/.test(s.origin) ? ' vb' : ''}${s.anim === 'sweepHour' ? ' hh' : ''}`;\nconst hasClass = (cls, part) => (` ${cls} `).indexOf(` ${part} `) >= 0;\n\n/** Builds a live <svg> element (CSP friendly: CSS variables are set through the CSSOM). */\nexport function createSvg(icon, doc = currentDocument()) {\n if (!doc) return null;\n const svg = doc.createElementNS(NS, 'svg');\n svg.setAttribute('viewBox', '0 0 24 24');\n svg.setAttribute('class', 'tlp');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('focusable', 'false');\n svg.innerHTML = icon.svg;\n const { steps, total } = timings(icon);\n svg.dataset.total = String(total);\n for (const s of steps) {\n let targets;\n if (s.part === 'all') {\n const g = doc.createElementNS(NS, 'g');\n while (svg.firstChild) g.appendChild(svg.firstChild);\n svg.appendChild(g);\n targets = [g];\n } else {\n targets = Array.prototype.filter.call(svg.querySelectorAll('[class]'), el => hasClass(el.getAttribute('class'), s.part));\n }\n const vars = varsOf(s);\n for (const el of targets) {\n el.setAttribute('class', `${el.getAttribute('class') || ''} ${clsOf(s)}`.trim());\n for (const k in vars) el.style.setProperty(k, vars[k]);\n }\n }\n svg.querySelectorAll(DRAWABLE).forEach(el => el.setAttribute('pathLength', '1'));\n return svg;\n}\n\n/** Static or animated SVG markup string (animated markup uses inline style for the CSS variables). */\nexport function toSvgString(icon, opts = {}) {\n const sw = opts.stroke ?? 2, size = opts.size ?? 24;\n const head = `<svg xmlns=\"${NS}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"${sw}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"`;\n if (!opts.animated) {\n const clean = icon.svg.replace(/ class=\"([^\"]*)\"/g, (_, c) => {\n const keep = c.split(/\\s+/).filter(x => x === 'd' || x === 'f');\n return keep.length ? ` class=\"${keep.join(' ')}\"` : '';\n });\n const duo = opts.duotone ? '<style>.d{fill:currentColor;fill-opacity:.16}.f{fill:currentColor}</style>' : '<style>.f{fill:currentColor}</style>';\n return `${head}>${clean.includes('class=\"') ? duo : ''}${clean}</svg>`;\n }\n let inner = icon.svg;\n const { steps, total } = timings(icon);\n for (const s of steps) {\n const style = Object.entries(varsOf(s)).map(([k, v]) => `${k}:${v}`).join(';');\n if (s.part === 'all') { inner = `<g class=\"${clsOf(s)}\" style=\"${style}\">${inner}</g>`; continue; }\n inner = inner.replace(new RegExp(`<([a-z]+)([^>]*?) class=\"([^\"]*\\\\b${s.part}\\\\b[^\"]*)\"`, 'g'), (_, tag, pre, c) => `<${tag}${pre} class=\"${c} ${clsOf(s)}\" style=\"${style}\"`);\n }\n inner = inner.replace(/<(path|circle|rect|line|polyline|polygon|ellipse)\\b/g, '<$1 pathLength=\"1\"');\n return `${head} class=\"tlp\" data-tlp-icon data-total=\"${total}\">${inner}</svg>`;\n}\n\nconst reduced = () => typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n/** Static icons never animate: config.animated = false, or animated=\"false\" / data-animated=\"false\" on the icon or an ancestor. */\nconst isStatic = svg => config.animated === false || !!svg.closest('[animated=false],[data-animated=false]');\n\n/** Plays an icon's choreography once. It always finishes, even if the pointer leaves. */\nexport function run(svg, delay = 0) {\n if (!svg || svg._tlpBusy || svg._tlpHold || reduced() || isStatic(svg)) return false;\n svg._tlpBusy = true;\n const go = () => {\n svg.classList.remove('tlp-run');\n void svg.getBoundingClientRect();\n svg.classList.add('tlp-run');\n setTimeout(() => {\n svg.querySelectorAll('.hh').forEach(h => h.style.setProperty('--h0', `${(parseFloat(h.style.getPropertyValue('--h0')) || 0) + 30}deg`));\n svg.classList.remove('tlp-run');\n svg._tlpBusy = false;\n }, (+svg.dataset.total || 0) + 40);\n };\n if (delay) setTimeout(go, delay); else go();\n return true;\n}\n\nconst endOf = a => { const t = a.effect.getTiming(); return (+t.delay || 0) + (+t.duration || 0); };\nfunction track(svg, busy) {\n cancelAnimationFrame(svg._tlpRaf);\n const tick = () => { if (busy()) svg._tlpRaf = requestAnimationFrame(tick); };\n svg._tlpRaf = requestAnimationFrame(tick);\n}\n\n/**\n * trigger=\"hold\": plays forward and pauses each moving part at its hold point (HOLD), entrances jump to their end.\n * release() plays back to rest. Calling hold() while releasing turns around from the current frame.\n */\nexport function hold(svg) {\n if (!svg || svg._tlpBusy || reduced() || isStatic(svg)) return false;\n if (svg._tlpHold === 'in') return true;\n if (typeof svg.getAnimations !== 'function') return run(svg);\n if (!svg._tlpHold) {\n svg.classList.remove('tlp-run');\n void svg.getBoundingClientRect();\n svg.classList.add('tlp-run');\n svg._tlpAnims = svg.getAnimations({ subtree: true });\n for (const a of svg._tlpAnims) {\n const h = HOLD[(a.animationName || '').replace(/^tlp-/, '')];\n const t = a.effect.getTiming();\n a._tlpEnd = endOf(a);\n a._tlpAt = h === undefined ? a._tlpEnd : (+t.delay || 0) + h * (+t.duration || 0);\n if (h === undefined) { a.currentTime = a._tlpEnd; a.pause(); }\n }\n } else {\n for (const a of svg._tlpAnims) if (a._tlpAt < a._tlpEnd) { a.playbackRate = 1; a.play(); }\n }\n svg._tlpHold = 'in';\n track(svg, () => {\n let busy = false;\n for (const a of svg._tlpAnims) {\n if (a.playState !== 'running' || a.playbackRate < 0) continue;\n if (a._tlpAt < a._tlpEnd && a.currentTime >= a._tlpAt) { a.currentTime = a._tlpAt; a.pause(); } else busy = true;\n }\n return busy;\n });\n return true;\n}\n\n/** Ends a hold: held parts play back to rest, then the icon is static again. */\nexport function release(svg) {\n if (!svg || !svg._tlpHold || svg._tlpHold === 'out') return false;\n svg._tlpHold = 'out';\n const back = svg._tlpAnims.filter(a => a._tlpAt < a._tlpEnd);\n for (const a of back) { a.playbackRate = -1; a.play(); }\n track(svg, () => {\n if (svg._tlpHold !== 'out') return false;\n if (back.some(a => a.playState === 'running' && a.currentTime > 0)) return true;\n svg.classList.remove('tlp-run');\n svg._tlpHold = null;\n svg._tlpAnims = null;\n return false;\n });\n return true;\n}\n\nexport const ICON_SELECTOR = 'tlp-icon,svg[data-tlp-icon]';\nconst HOST = 'button,a,[role=button],[role=menuitem],[role=tab],[role=option],li,tr,td,th,label,summary,input,select,textarea';\n\nfunction svgOf(icon) { return icon.tagName.toLowerCase() === 'svg' ? icon : icon.querySelector('svg.tlp'); }\nfunction triggerOf(icon) { return icon.getAttribute('trigger') || icon.getAttribute('data-trigger') || config.trigger || 'hover'; }\n\n/**\n * Hover rule: hovering an icon animates it. Otherwise walk up to the nearest element that contains exactly one\n * icon and animate that one. If an element with several icons is reached first (card, menu, table row), do nothing.\n */\nexport function hoverTarget(target) {\n let el = target && target.nodeType === 1 ? target : target && target.parentElement;\n if (!el) return null;\n const own = el.closest(ICON_SELECTOR);\n if (own) return own.closest('tlp-icon') || own;\n for (let depth = 0; el && el.nodeType === 1 && el !== el.ownerDocument.body && depth < 8; depth++, el = el.parentElement) {\n const list = el.querySelectorAll(ICON_SELECTOR);\n let n = 0, found = null;\n for (const i of list) { if (i.tagName.toLowerCase() === 'svg' && i.closest('tlp-icon')) continue; n++; found = i; }\n if (n > 1) return null;\n if (n === 1) return { icon: found, scope: el };\n if (el.matches(HOST)) return null;\n }\n return null;\n}\n\nlet hoverInstalled = false;\nexport function installHover(doc = currentDocument()) {\n if (hoverInstalled || !doc) return;\n hoverInstalled = true;\n doc.addEventListener('mouseover', e => {\n const hit = hoverTarget(e.target);\n if (!hit) return;\n const icon = hit.icon || hit;\n const scope = hit.scope || icon;\n if (scope.contains(e.relatedTarget)) return;\n const trigger = triggerOf(icon);\n if (trigger === 'hover') run(svgOf(icon));\n else if (trigger === 'hold') hold(svgOf(icon));\n }, true);\n doc.addEventListener('mouseout', e => {\n const hit = hoverTarget(e.target);\n if (!hit) return;\n const icon = hit.icon || hit;\n if (triggerOf(icon) !== 'hold') return;\n // still hovering the same icon by the hover rule (e.g. from the icon onto its card): keep holding\n const next = e.relatedTarget && hoverTarget(e.relatedTarget);\n if (next && (next.icon || next) === icon) return;\n release(svgOf(icon));\n }, true);\n}\n\nlet styleInjected = false;\nexport const CSS = \"tlp-icon{display:inline-flex;align-items:center;justify-content:center;flex:none;width:var(--tlp-size,24px);height:var(--tlp-size,24px);line-height:0;vertical-align:middle;color:inherit}tlp-icon>svg,svg.tlp{width:100%;height:100%}svg.tlp{fill:none;stroke:currentColor;stroke-width:var(--tlp-stroke,2);stroke-linecap:round;stroke-linejoin:round;overflow:visible}svg.tlp .d{fill:currentColor;fill-opacity:var(--tlp-duo,0)}tlp-icon[duotone],.tlp-duotone{--tlp-duo:.16}tlp-icon[duotone=false]{--tlp-duo:0}svg.tlp .f{fill:currentColor}svg.tlp .p{transform-box:fill-box;transform-origin:var(--o,center)}svg.tlp .p.vb{transform-box:view-box}svg.tlp .p.hh{transform:rotate(var(--h0,0deg))}svg.tlp.tlp-run .p{animation:var(--a) var(--t,1000ms) var(--e,cubic-bezier(.45,.05,.55,.95)) var(--dl,0ms) 1 both}tlp-icon[flip=x]>svg,[dir=rtl] tlp-icon[flip=rtl]>svg{transform:scaleX(-1)}@keyframes tlp-draw{0%{stroke-dasharray:1;stroke-dashoffset:1}100%{stroke-dasharray:1;stroke-dashoffset:0}}@keyframes tlp-fillIn{0%{fill-opacity:0}100%{fill-opacity:var(--tlp-duo,0)}}@keyframes tlp-popIn{0%{opacity:0;transform:scale(.4)}55%{opacity:1;transform:scale(1.08)}78%{transform:scale(.98)}100%{opacity:1;transform:scale(1)}}@keyframes tlp-fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes tlp-slideIn{0%{opacity:0;transform:translateX(-4px)}100%{opacity:1;transform:translateX(0)}}@keyframes tlp-riseIn{0%{opacity:0;transform:translateY(4px)}100%{opacity:1;transform:translateY(0)}}@keyframes tlp-dropIn{0%{opacity:0;transform:translateY(-5px)}60%{opacity:1;transform:translateY(.8px)}80%{transform:translateY(-.3px)}100%{opacity:1;transform:translateY(0)}}@keyframes tlp-grow{0%{transform:scaleY(0)}70%{transform:scaleY(1.06)}100%{transform:scaleY(1)}}@keyframes tlp-growX{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}@keyframes tlp-pop{0%,100%{transform:scale(1)}40%{transform:scale(1.14)}68%{transform:scale(.97)}86%{transform:scale(1.02)}}@keyframes tlp-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}@keyframes tlp-jelly{0%,100%{transform:scale(1,1)}30%{transform:scale(1.1,.9)}50%{transform:scale(.94,1.06)}70%{transform:scale(1.03,.97)}85%{transform:scale(.99,1.01)}}@keyframes tlp-swing{0%,100%{transform:rotate(0)}15%{transform:rotate(13deg)}32%{transform:rotate(-10deg)}50%{transform:rotate(6deg)}68%{transform:rotate(-3deg)}84%{transform:rotate(1deg)}}@keyframes tlp-wiggle{0%,100%{transform:rotate(0)}20%{transform:rotate(-8deg)}45%{transform:rotate(6deg)}68%{transform:rotate(-3deg)}86%{transform:rotate(1deg)}}@keyframes tlp-tilt{0%,100%{transform:rotate(0)}40%{transform:rotate(-12deg)}72%{transform:rotate(3deg)}88%{transform:rotate(-1deg)}}@keyframes tlp-nod{0%,100%{transform:rotate(0)}45%{transform:rotate(7deg)}75%{transform:rotate(-1.5deg)}}@keyframes tlp-strike{0%,100%{transform:rotate(0)}38%{transform:rotate(-24deg)}56%{transform:rotate(7deg)}70%{transform:rotate(-2deg)}84%{transform:rotate(.6deg)}}@keyframes tlp-hop{0%,100%{transform:translateY(0) scale(1,1)}10%{transform:translateY(0) scale(1.04,.95)}40%{transform:translateY(-3px) scale(.97,1.04)}68%{transform:translateY(0) scale(1.04,.96)}84%{transform:translateY(0) scale(.99,1.01)}}@keyframes tlp-lift{0%,100%{transform:translateY(0)}45%{transform:translateY(-2.5px)}75%{transform:translateY(.4px)}}@keyframes tlp-sink{0%,100%{transform:translateY(0)}45%{transform:translateY(2.5px)}75%{transform:translateY(-.4px)}}@keyframes tlp-nudge{0%,100%{transform:translateX(0)}45%{transform:translateX(2.6px)}75%{transform:translateX(-.4px)}}@keyframes tlp-nudgeBack{0%,100%{transform:translateX(0)}45%{transform:translateX(-2.6px)}75%{transform:translateX(.4px)}}@keyframes tlp-float{0%,100%{transform:translateY(0)}25%{transform:translateY(-2px)}50%{transform:translateY(0)}75%{transform:translateY(-1.2px)}}@keyframes tlp-flip{0%,100%{transform:scaleX(1)}50%{transform:scaleX(-1)}}@keyframes tlp-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tlp-spinBack{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}@keyframes tlp-spinHalf{0%{transform:rotate(0)}80%{transform:rotate(188deg)}100%{transform:rotate(180deg)}}@keyframes tlp-sweep{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tlp-sweepHour{0%{transform:rotate(var(--h0,0deg))}100%{transform:rotate(calc(var(--h0,0deg) + 30deg))}}@keyframes tlp-blink{0%,100%{transform:scaleY(1)}35%{transform:scaleY(.08)}60%{transform:scaleY(1)}}@keyframes tlp-shake{0%,100%{transform:translateX(0)}18%{transform:translateX(-1.6px)}36%{transform:translateX(1.4px)}54%{transform:translateX(-1px)}72%{transform:translateX(.6px)}88%{transform:translateX(-.2px)}}@keyframes tlp-pulseRing{0%,100%{opacity:1;transform:scale(1)}55%{opacity:0;transform:scale(1.5)}56%{opacity:0;transform:scale(.6)}}@keyframes tlp-orbit{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tlp-stretch{0%,100%{transform:scaleX(1)}45%{transform:scaleX(1.12)}75%{transform:scaleX(.98)}}@keyframes tlp-buzz{0%,100%{transform:translate(0,0) rotate(0)}8%{transform:translate(-.9px,.4px) rotate(-3deg)}16%{transform:translate(.9px,-.4px) rotate(3deg)}24%{transform:translate(-.8px,.4px) rotate(-2.6deg)}32%{transform:translate(.8px,-.3px) rotate(2.6deg)}40%{transform:translate(-.6px,.3px) rotate(-2deg)}48%{transform:translate(.6px,-.2px) rotate(2deg)}58%{transform:translate(-.4px,.2px) rotate(-1.2deg)}68%{transform:translate(.3px,-.1px) rotate(1deg)}80%{transform:translate(-.15px,0) rotate(-.4deg)}}@keyframes tlp-tap{0%,100%{transform:translateY(0) scale(1)}16%{transform:translateY(1.8px) scale(.94)}30%{transform:translateY(-.3px) scale(1.02)}44%{transform:translateY(0) scale(1)}60%{transform:translateY(1.8px) scale(.94)}78%{transform:translateY(-.4px) scale(1.02)}90%{transform:translateY(.1px) scale(.995)}}@keyframes tlp-press{0%,100%{transform:scale(1)}20%{transform:scale(.88)}42%{transform:scale(.88)}62%{transform:scale(1.07)}80%{transform:scale(.98)}91%{transform:scale(1.01)}}@keyframes tlp-beat{0%,100%{transform:scale(1)}14%{transform:scale(1.16)}28%{transform:scale(.98)}42%{transform:scale(1.09)}58%{transform:scale(1)}}@keyframes tlp-flicker{0%,100%{opacity:1;transform:scale(1)}8%{opacity:.55;transform:scale(.97)}16%{opacity:.95;transform:scale(1.02)}26%{opacity:.4;transform:scale(.96)}38%{opacity:1;transform:scale(1.03)}50%{opacity:.7;transform:scale(.99)}62%{opacity:1;transform:scale(1.015)}78%{opacity:.85;transform:scale(1)}}@keyframes tlp-twinkle{0%,100%{transform:scale(1) rotate(0)}30%{transform:scale(.8) rotate(-14deg)}60%{transform:scale(1.18) rotate(8deg)}80%{transform:scale(.97) rotate(-2deg)}}@keyframes tlp-sway{0%,100%{transform:rotate(0)}24%{transform:rotate(6deg)}48%{transform:rotate(-4.5deg)}70%{transform:rotate(2.5deg)}86%{transform:rotate(-1deg)}}@keyframes tlp-flutter{0%,100%{transform:scale(1,1)}20%{transform:skewY(-7deg) scaleX(.95)}42%{transform:skewY(6deg) scaleX(1.03)}62%{transform:skewY(-3.5deg) scaleX(.98)}82%{transform:skewY(1.5deg) scaleX(1.01)}}@keyframes tlp-bob{0%,100%{transform:translateY(0) rotate(0)}25%{transform:translateY(-1.8px) rotate(-5deg)}52%{transform:translateY(1.2px) rotate(4deg)}76%{transform:translateY(-.8px) rotate(-2deg)}}@keyframes tlp-drive{0%,100%{transform:translateX(0) rotate(0)}22%{transform:translateX(-1px) rotate(-3.5deg)}55%{transform:translateX(2.4px) rotate(1.2deg)}78%{transform:translateX(-.3px) rotate(-.4deg)}}@keyframes tlp-launch{0%,100%{opacity:1;transform:translate(0,0)}14%{opacity:1;transform:translate(-.8px,.8px)}42%{opacity:0;transform:translate(5px,-5px)}43%{opacity:0;transform:translate(-5px,5px)}72%{opacity:1;transform:translate(.5px,-.5px)}}@keyframes tlp-roll{0%{transform:rotate(0) translateX(0)}50%{transform:rotate(180deg) translateX(1.2px)}100%{transform:rotate(360deg) translateX(0)}}@keyframes tlp-zoomIn{0%{opacity:0;transform:scale(1.35)}55%{opacity:1;transform:scale(.96)}78%{transform:scale(1.02)}100%{opacity:1;transform:scale(1)}}@keyframes tlp-spiralIn{0%{opacity:0;transform:rotate(-120deg) scale(0)}55%{opacity:1;transform:rotate(7deg) scale(1.1)}78%{transform:rotate(-2deg) scale(.98)}100%{opacity:1;transform:rotate(0) scale(1)}}@keyframes tlp-swingIn{0%{opacity:0;transform:rotate(-25deg)}30%{opacity:1;transform:rotate(9deg)}55%{transform:rotate(-4deg)}78%{transform:rotate(1.5deg)}100%{opacity:1;transform:rotate(0)}}@keyframes tlp-flipIn{0%{opacity:0;transform:scaleX(0)}50%{opacity:1;transform:scaleX(1.1)}75%{transform:scaleX(.96)}100%{opacity:1;transform:scaleX(1)}}@keyframes tlp-focusIn{0%{opacity:.15;filter:blur(1.6px);transform:scale(1.12)}60%{opacity:1;filter:blur(.5px);transform:scale(.98)}100%{opacity:1;filter:blur(0);transform:scale(1)}}@keyframes tlp-bloom{0%{opacity:0;transform:rotate(-45deg) scale(0)}55%{opacity:1;transform:rotate(8deg) scale(1.12)}78%{transform:rotate(-2deg) scale(.98)}100%{opacity:1;transform:rotate(0) scale(1)}}@keyframes tlp-rollIn{0%{opacity:0;transform:translateX(-5px) rotate(-180deg)}70%{opacity:1;transform:translateX(.6px) rotate(8deg)}100%{opacity:1;transform:translateX(0) rotate(0)}}@keyframes tlp-tada{0%,100%{transform:scale(1) rotate(0)}10%,20%{transform:scale(.92) rotate(-3deg)}30%,50%,70%{transform:scale(1.1) rotate(3deg)}40%,60%{transform:scale(1.1) rotate(-3deg)}82%{transform:scale(1.02) rotate(0)}}@keyframes tlp-rubber{0%,100%{transform:scale(1,1)}30%{transform:scale(1.2,.8)}45%{transform:scale(.85,1.15)}62%{transform:scale(1.08,.92)}78%{transform:scale(.97,1.03)}90%{transform:scale(1.01,.99)}}@keyframes tlp-rattle{0%,100%{transform:rotate(0)}10%{transform:rotate(-9deg)}22%{transform:rotate(8deg)}34%{transform:rotate(-7deg)}46%{transform:rotate(6deg)}58%{transform:rotate(-4deg)}70%{transform:rotate(3deg)}82%{transform:rotate(-1.5deg)}92%{transform:rotate(.6deg)}}@keyframes tlp-spring{0%,100%{transform:translateY(0) scale(1,1)}16%{transform:translateY(0) scale(1.08,.82)}40%{transform:translateY(-3px) scale(.94,1.12)}62%{transform:translateY(0) scale(1.05,.94)}80%{transform:translateY(0) scale(.99,1.02)}}@keyframes tlp-knock{0%,100%{transform:translateX(0) scale(1,1)}14%{transform:translateX(1.9px) scale(.96,1)}28%{transform:translateX(0) scale(1,1)}42%{transform:translateX(1.9px) scale(.96,1)}58%{transform:translateX(0) scale(1,1)}72%{transform:translateX(.5px) scale(.99,1)}}@keyframes tlp-wave{0%,100%{transform:rotate(0)}18%{transform:rotate(15deg)}36%{transform:rotate(-13deg)}54%{transform:rotate(10deg)}70%{transform:rotate(-6deg)}85%{transform:rotate(2deg)}}@keyframes tlp-pendulum{0%,100%{transform:rotate(0)}20%{transform:rotate(22deg)}42%{transform:rotate(-16deg)}62%{transform:rotate(9deg)}80%{transform:rotate(-4deg)}92%{transform:rotate(1.5deg)}}@keyframes tlp-twirl{0%{transform:rotate(0) scale(1)}50%{transform:rotate(180deg) scale(.82)}100%{transform:rotate(360deg) scale(1)}}@keyframes tlp-flipY{0%,100%{transform:scaleY(1)}38%{transform:scaleY(-1.08)}52%{transform:scaleY(-1)}66%{transform:scaleY(-1.05)}}@keyframes tlp-drip{0%,100%{opacity:1;transform:translateY(0) scale(1)}34%{opacity:0;transform:translateY(3px) scale(.82)}35%{opacity:0;transform:translateY(-3px) scale(.82)}68%{opacity:1;transform:translateY(.6px) scale(1.04)}84%{opacity:1;transform:translateY(-.2px) scale(1)}}@keyframes tlp-fall{0%,100%{opacity:1;transform:translateY(0)}38%{opacity:0;transform:translateY(3.5px)}39%{opacity:0;transform:translateY(-3.5px)}72%{opacity:1;transform:translateY(.7px)}86%{opacity:1;transform:translateY(-.2px)}}@keyframes tlp-retrace{0%,100%{opacity:1;stroke-dasharray:1;stroke-dashoffset:0}30%{opacity:1;stroke-dasharray:1;stroke-dashoffset:.96}33%{opacity:0;stroke-dasharray:1;stroke-dashoffset:1}40%{opacity:0;stroke-dasharray:1;stroke-dashoffset:1}41%{opacity:1;stroke-dasharray:1;stroke-dashoffset:1}}@keyframes tlp-peek{0%,100%{transform:translateY(0)}28%{transform:translateY(2px)}62%{transform:translateY(-1.1px)}82%{transform:translateY(.3px)}}@media (prefers-reduced-motion:reduce){svg.tlp .p{animation:none!important}}\";\nexport function ensureStyles(doc = currentDocument()) {\n if (styleInjected || !doc || !doc.head) return;\n styleInjected = true;\n if (doc.getElementById('tlp-icons-style') || CSS.length < 20) return;\n const style = doc.createElement('style');\n style.id = 'tlp-icons-style';\n style.textContent = CSS;\n doc.head.appendChild(style);\n}\n"],
|
|
5
|
-
"mappings": ";AAKO,MAAMA,EAAS,CAAE,MAAO,GAAK,QAAS,QAAS,SAAU,EAAK,EAE/DC,EAAM,4BACNC,EAAO,4BACPC,EAAO,gCACAC,EAAO,CAClB,KAAM,8BAA+B,OAAQ,OAAQ,MAAOH,EAAK,OAAQ,OAAQ,QAASA,EAAK,OAAQA,EAAK,OAAQA,EACpH,KAAMA,EAAK,MAAOA,EAAK,KAAMC,EAAM,SAAUA,EAAM,SAAUA,EAAM,MAAOA,EAAM,UAAWA,EAAM,MAAOA,EACxG,OAAQ,6BAA8B,KAAM,
|
|
6
|
-
"names": ["config", "OUT", "TURN", "SINE", "EASE", "HOLD", "NS", "currentDocument", "DRAWABLE", "registry", "aliases", "loader", "waiting", "register", "icons", "aliasMap", "k", "icon", "getIcon", "fn", "setLoader", "name", "resolve", "list", "res", "loadIcon", "timings", "speed", "total", "part", "anim", "dur", "delay", "origin", "t", "dl", "varsOf", "s", "v", "clsOf", "hasClass", "cls", "createSvg", "doc", "svg", "steps", "targets", "g", "el", "vars", "toSvgString", "opts", "sw", "size", "head", "clean", "_", "c", "keep", "x", "duo", "inner", "style", "tag", "pre", "reduced", "isStatic", "run", "go", "h", "endOf", "a", "track", "busy", "tick", "hold", "release", "back", "ICON_SELECTOR", "HOST", "svgOf", "triggerOf", "hoverTarget", "target", "own", "depth", "n", "found", "i", "hoverInstalled", "installHover", "
|
|
4
|
+
"sourcesContent": ["/* tlp-icons 0.5.0 - MIT. Icons from Lucide 1.55.0 (ISC), Tabler Icons 3.49.0 (MIT). Generated file, do not edit. */\n/* tlp-icons runtime core: icon registry, choreography baking, run engine and the hover rule.\n Plain ES module without imports so the build can also wrap it into a classic <script> bundle. */\n\n/** speed: duration multiplier. trigger: page default for icons without one. animated: false makes every icon static. */\nexport const config = { speed: 0.6, trigger: 'hover', animated: true };\n\nconst OUT = 'cubic-bezier(.22,1,.36,1)';\nconst TURN = 'cubic-bezier(.65,0,.35,1)';\nconst SINE = 'cubic-bezier(.45,.05,.55,.95)';\nexport const EASE = {\n draw: 'cubic-bezier(.65,.05,.36,1)', fillIn: 'ease', popIn: OUT, fadeIn: 'ease', slideIn: OUT, riseIn: OUT, dropIn: OUT,\n grow: OUT, growX: OUT, spin: TURN, spinBack: TURN, spinHalf: TURN, sweep: TURN, sweepHour: TURN, orbit: TURN,\n launch: \"cubic-bezier(.4,.1,.5,.95)\", roll: \"cubic-bezier(.5,.05,.4,1)\", slideInBack: \"cubic-bezier(.22,1,.36,1)\", unfold: \"cubic-bezier(.22,1,.36,1)\", stampIn: \"cubic-bezier(.22,1,.36,1)\", whooshIn: \"cubic-bezier(.22,1,.36,1)\", typeIn: \"linear\", drawReverse: \"cubic-bezier(.65,.05,.36,1)\", slideDown: \"cubic-bezier(.22,1,.36,1)\", emerge: \"cubic-bezier(.22,1,.36,1)\", spinFast: \"cubic-bezier(.65,0,.35,1)\", windUp: \"cubic-bezier(.45,.05,.55,.95)\", tumble: \"cubic-bezier(.65,0,.35,1)\", halfBack: \"cubic-bezier(.65,0,.35,1)\", \n};\n/** trigger=\"hold\": where each animation pauses while hovered (fraction of its duration; generated from the keyframes).\n Animations not listed (entrances) jump to their end. */\nexport const HOLD = { pop: 0.4, breathe: 0.5, jelly: 0.3, swing: 0.15, wiggle: 0.2, tilt: 0.4, nod: 0.45, strike: 0.38, hop: 0.4, lift: 0.45, sink: 0.45, nudge: 0.45, nudgeBack: 0.45, float: 0.25, flip: 0.5, spin: 0.5, spinBack: 0.5, spinHalf: 1, sweep: 0.5, sweepHour: 0.5, blink: 1, shake: 0.18, pulseRing: 1, orbit: 0.5, stretch: 0.45, buzz: 0.08, tap: 0.16, press: 0.2, beat: 0.14, flicker: 0.38, twinkle: 0.3, sway: 0.24, flutter: 0.2, bob: 0.25, drive: 0.55, launch: 0.14, roll: 0.5, tada: 0.3, rubber: 0.3, rattle: 0.1, spring: 0.4, knock: 0.14, wave: 0.18, pendulum: 0.2, twirl: 0.5, flipY: 0.38, drip: 1, fall: 1, retrace: 1, peek: 0.28, jump: 0.42, scan: 0.3, scanX: 0.3, glow: 0.6, dim: 1, inhale: 0.45, squeeze: 0.35, pump: 0.25, shuttle: 0.25, dash: 0.45, recoil: 0.12, throb: 0.2, refill: 0.3, equalize: 0.2, blip: 0.35, dig: 0.3, stir: 0.24, stamp: 0.5, pour: 0.3, magnify: 0.35, spinFast: 0.5, windUp: 0.5, tumble: 0.5, halfBack: 1 };\n\nconst NS = 'http://www.w3.org/2000/svg';\n// SSR safety: never touch `document` unless it exists (Node, workers).\nconst currentDocument = () => (typeof document === 'undefined' ? null : document);\nconst DRAWABLE = 'path,circle,rect,line,polyline,polygon,ellipse';\nconst registry = Object.create(null);\nconst aliases = Object.create(null);\nlet loader = null;\n\n/** Adds icons: { name: { svg, m } }. */\nconst waiting = Object.create(null);\nexport function register(icons, aliasMap) {\n for (const k in icons) registry[k] = icons[k];\n if (aliasMap) for (const k in aliasMap) aliases[k] = aliasMap[k];\n for (const k in waiting) {\n const icon = getIcon(k);\n if (icon) { waiting[k].forEach(fn => fn(icon)); delete waiting[k]; }\n }\n}\n/**\n * Installs the lazy loader. Icons requested before it existed (elements upgraded while the ES module graph was\n * still evaluating, e.g. tags in the HTML before <script type=\"module\">) are loaded now instead of waiting forever.\n */\nexport function setLoader(fn) {\n loader = fn;\n if (!fn) return;\n for (const name in waiting) {\n Promise.resolve(fn(resolve(name))).then(() => {\n const list = waiting[name];\n if (!list) return;\n delete waiting[name];\n const icon = getIcon(name);\n list.forEach(res => res(icon));\n }, () => {});\n }\n}\nexport function resolve(name) { return registry[name] ? name : aliases[name] || name; }\nexport function getIcon(name) { return registry[resolve(name)] || null; }\n/** Resolves with the icon data. Without a loader it waits for a later register() (classic script bundles). */\nexport function loadIcon(name) {\n const icon = getIcon(name);\n if (icon) return Promise.resolve(icon);\n if (loader) return Promise.resolve(loader(resolve(name))).then(() => getIcon(name));\n return new Promise(res => { (waiting[name] = waiting[name] || []).push(res); });\n}\n\n/** Scaled timing of every step and the total length in ms. */\nexport function timings(icon, speed = config.speed) {\n let total = 0;\n const steps = (icon.m || []).map(([part, anim, dur, delay, origin]) => {\n const t = Math.round(dur * speed), dl = Math.round((delay || 0) * speed);\n total = Math.max(total, t + dl);\n return { part, anim, t, dl, origin };\n });\n return { steps, total };\n}\n\nconst varsOf = s => {\n const v = { '--a': `tlp-${s.anim}`, '--t': `${s.t}ms`, '--dl': `${s.dl}ms`, '--e': EASE[s.anim] || SINE };\n if (s.origin) v['--o'] = s.origin;\n return v;\n};\nconst clsOf = s => `p${s.origin && /px/.test(s.origin) ? ' vb' : ''}${s.anim === 'sweepHour' ? ' hh' : ''}`;\nconst hasClass = (cls, part) => (` ${cls} `).indexOf(` ${part} `) >= 0;\n\n/** Builds a live <svg> element (CSP friendly: CSS variables are set through the CSSOM). */\nexport function createSvg(icon, doc = currentDocument()) {\n if (!doc) return null;\n const svg = doc.createElementNS(NS, 'svg');\n svg.setAttribute('viewBox', '0 0 24 24');\n svg.setAttribute('class', 'tlp');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('focusable', 'false');\n svg.innerHTML = icon.svg;\n const { steps, total } = timings(icon);\n svg.dataset.total = String(total);\n for (const s of steps) {\n let targets;\n if (s.part === 'all') {\n const g = doc.createElementNS(NS, 'g');\n while (svg.firstChild) g.appendChild(svg.firstChild);\n svg.appendChild(g);\n targets = [g];\n } else {\n targets = Array.prototype.filter.call(svg.querySelectorAll('[class]'), el => hasClass(el.getAttribute('class'), s.part));\n }\n const vars = varsOf(s);\n for (const el of targets) {\n el.setAttribute('class', `${el.getAttribute('class') || ''} ${clsOf(s)}`.trim());\n for (const k in vars) el.style.setProperty(k, vars[k]);\n }\n }\n svg.querySelectorAll(DRAWABLE).forEach(el => el.setAttribute('pathLength', '1'));\n return svg;\n}\n\n/** Static or animated SVG markup string (animated markup uses inline style for the CSS variables). */\nexport function toSvgString(icon, opts = {}) {\n const sw = opts.stroke ?? 2, size = opts.size ?? 24;\n const head = `<svg xmlns=\"${NS}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"${sw}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"`;\n if (!opts.animated) {\n const clean = icon.svg.replace(/ class=\"([^\"]*)\"/g, (_, c) => {\n const keep = c.split(/\\s+/).filter(x => x === 'd' || x === 'f');\n return keep.length ? ` class=\"${keep.join(' ')}\"` : '';\n });\n const duo = opts.duotone ? '<style>.d{fill:currentColor;fill-opacity:.16}.f{fill:currentColor}</style>' : '<style>.f{fill:currentColor}</style>';\n return `${head}>${clean.includes('class=\"') ? duo : ''}${clean}</svg>`;\n }\n let inner = icon.svg;\n const { steps, total } = timings(icon);\n for (const s of steps) {\n const style = Object.entries(varsOf(s)).map(([k, v]) => `${k}:${v}`).join(';');\n if (s.part === 'all') { inner = `<g class=\"${clsOf(s)}\" style=\"${style}\">${inner}</g>`; continue; }\n inner = inner.replace(new RegExp(`<([a-z]+)([^>]*?) class=\"([^\"]*\\\\b${s.part}\\\\b[^\"]*)\"`, 'g'), (_, tag, pre, c) => `<${tag}${pre} class=\"${c} ${clsOf(s)}\" style=\"${style}\"`);\n }\n inner = inner.replace(/<(path|circle|rect|line|polyline|polygon|ellipse)\\b/g, '<$1 pathLength=\"1\"');\n return `${head} class=\"tlp\" data-tlp-icon data-total=\"${total}\">${inner}</svg>`;\n}\n\nconst reduced = () => typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n/** Static icons never animate: config.animated = false, or animated=\"false\" / data-animated=\"false\" on the icon or an ancestor. */\nconst isStatic = svg => config.animated === false || !!svg.closest('[animated=false],[data-animated=false]');\n\n/** Plays an icon's choreography once. It always finishes, even if the pointer leaves. */\nexport function run(svg, delay = 0) {\n if (!svg || svg._tlpBusy || svg._tlpHold || reduced() || isStatic(svg)) return false;\n svg._tlpBusy = true;\n const go = () => {\n svg.classList.remove('tlp-run');\n void svg.getBoundingClientRect();\n svg.classList.add('tlp-run');\n setTimeout(() => {\n svg.querySelectorAll('.hh').forEach(h => h.style.setProperty('--h0', `${(parseFloat(h.style.getPropertyValue('--h0')) || 0) + 30}deg`));\n svg.classList.remove('tlp-run');\n svg._tlpBusy = false;\n }, (+svg.dataset.total || 0) + 40);\n };\n if (delay) setTimeout(go, delay); else go();\n return true;\n}\n\nconst endOf = a => { const t = a.effect.getTiming(); return (+t.delay || 0) + (+t.duration || 0); };\nfunction track(svg, busy) {\n cancelAnimationFrame(svg._tlpRaf);\n const tick = () => { if (busy()) svg._tlpRaf = requestAnimationFrame(tick); };\n svg._tlpRaf = requestAnimationFrame(tick);\n}\n\n/**\n * trigger=\"hold\": plays forward and pauses each moving part at its hold point (HOLD), entrances jump to their end.\n * release() plays back to rest. Calling hold() while releasing turns around from the current frame.\n */\nexport function hold(svg) {\n if (!svg || svg._tlpBusy || reduced() || isStatic(svg)) return false;\n if (svg._tlpHold === 'in') return true;\n if (typeof svg.getAnimations !== 'function') return run(svg);\n if (!svg._tlpHold) {\n svg.classList.remove('tlp-run');\n void svg.getBoundingClientRect();\n svg.classList.add('tlp-run');\n svg._tlpAnims = svg.getAnimations({ subtree: true });\n for (const a of svg._tlpAnims) {\n const h = HOLD[(a.animationName || '').replace(/^tlp-/, '')];\n const t = a.effect.getTiming();\n a._tlpEnd = endOf(a);\n a._tlpAt = h === undefined ? a._tlpEnd : (+t.delay || 0) + h * (+t.duration || 0);\n if (h === undefined) { a.currentTime = a._tlpEnd; a.pause(); }\n }\n } else {\n for (const a of svg._tlpAnims) if (a._tlpAt < a._tlpEnd) { a.playbackRate = 1; a.play(); }\n }\n svg._tlpHold = 'in';\n track(svg, () => {\n let busy = false;\n for (const a of svg._tlpAnims) {\n if (a.playState !== 'running' || a.playbackRate < 0) continue;\n if (a._tlpAt < a._tlpEnd && a.currentTime >= a._tlpAt) { a.currentTime = a._tlpAt; a.pause(); } else busy = true;\n }\n return busy;\n });\n return true;\n}\n\n/** Ends a hold: held parts play back to rest, then the icon is static again. */\nexport function release(svg) {\n if (!svg || !svg._tlpHold || svg._tlpHold === 'out') return false;\n svg._tlpHold = 'out';\n const back = svg._tlpAnims.filter(a => a._tlpAt < a._tlpEnd);\n for (const a of back) { a.playbackRate = -1; a.play(); }\n track(svg, () => {\n if (svg._tlpHold !== 'out') return false;\n if (back.some(a => a.playState === 'running' && a.currentTime > 0)) return true;\n svg.classList.remove('tlp-run');\n svg._tlpHold = null;\n svg._tlpAnims = null;\n return false;\n });\n return true;\n}\n\nexport const ICON_SELECTOR = 'tlp-icon,svg[data-tlp-icon]';\nconst HOST = 'button,a,[role=button],[role=menuitem],[role=tab],[role=option],li,tr,td,th,label,summary,input,select,textarea';\n\nfunction svgOf(icon) { return icon.tagName.toLowerCase() === 'svg' ? icon : icon.querySelector('svg.tlp'); }\nfunction triggerOf(icon) { return icon.getAttribute('trigger') || icon.getAttribute('data-trigger') || config.trigger || 'hover'; }\n\n/**\n * Hover rule: hovering an icon animates it. Otherwise walk up to the nearest element that contains exactly one\n * icon and animate that one. If an element with several icons is reached first (card, menu, table row), do nothing.\n */\nexport function hoverTarget(target) {\n let el = target && target.nodeType === 1 ? target : target && target.parentElement;\n if (!el) return null;\n const own = el.closest(ICON_SELECTOR);\n if (own) return own.closest('tlp-icon') || own;\n for (let depth = 0; el && el.nodeType === 1 && el !== el.ownerDocument.body && depth < 8; depth++, el = el.parentElement) {\n const list = el.querySelectorAll(ICON_SELECTOR);\n let n = 0, found = null;\n for (const i of list) { if (i.tagName.toLowerCase() === 'svg' && i.closest('tlp-icon')) continue; n++; found = i; }\n if (n > 1) return null;\n if (n === 1) return { icon: found, scope: el };\n if (el.matches(HOST)) return null;\n }\n return null;\n}\n\nlet hoverInstalled = false;\nexport function installHover(doc = currentDocument()) {\n if (hoverInstalled || !doc) return;\n hoverInstalled = true;\n doc.addEventListener('mouseover', e => {\n const hit = hoverTarget(e.target);\n if (!hit) return;\n const icon = hit.icon || hit;\n const scope = hit.scope || icon;\n if (scope.contains(e.relatedTarget)) return;\n const trigger = triggerOf(icon);\n if (trigger === 'hover') run(svgOf(icon));\n else if (trigger === 'hold') hold(svgOf(icon));\n }, true);\n doc.addEventListener('mouseout', e => {\n const hit = hoverTarget(e.target);\n if (!hit) return;\n const icon = hit.icon || hit;\n if (triggerOf(icon) !== 'hold') return;\n // still hovering the same icon by the hover rule (e.g. from the icon onto its card): keep holding\n const next = e.relatedTarget && hoverTarget(e.relatedTarget);\n if (next && (next.icon || next) === icon) return;\n release(svgOf(icon));\n }, true);\n}\n\nlet styleInjected = false;\n/** Base styles only; the @keyframes arrive with the icons (addKeyframes), so the core stays small. */\nexport const CSS = \"tlp-icon{display:inline-flex;align-items:center;justify-content:center;flex:none;width:var(--tlp-size,24px);height:var(--tlp-size,24px);line-height:0;vertical-align:middle;color:inherit}tlp-icon>svg,svg.tlp{width:100%;height:100%}svg.tlp{fill:none;stroke:currentColor;stroke-width:var(--tlp-stroke,2);stroke-linecap:round;stroke-linejoin:round;overflow:visible}svg.tlp .d{fill:currentColor;fill-opacity:var(--tlp-duo,0)}tlp-icon[duotone],.tlp-duotone{--tlp-duo:.16}tlp-icon[duotone=false]{--tlp-duo:0}svg.tlp .f{fill:currentColor}svg.tlp .p{transform-box:fill-box;transform-origin:var(--o,center)}svg.tlp .p.vb{transform-box:view-box}svg.tlp .p.hh{transform:rotate(var(--h0,0deg))}svg.tlp.tlp-run .p{animation:var(--a) var(--t,1000ms) var(--e,cubic-bezier(.45,.05,.55,.95)) var(--dl,0ms) 1 both}tlp-icon[flip=x]>svg,[dir=rtl] tlp-icon[flip=rtl]>svg{transform:scaleX(-1)}@media (prefers-reduced-motion:reduce){svg.tlp .p{animation:none!important}}\";\nconst kfDone = Object.create(null);\nlet kfText = '';\nconst styleEl = doc => doc && doc.getElementById('tlp-icons-style');\nexport function ensureStyles(doc = currentDocument()) {\n if (styleInjected || !doc || !doc.head) return;\n styleInjected = true;\n if (styleEl(doc) || CSS.length < 20) return;\n const style = doc.createElement('style');\n style.id = 'tlp-icons-style';\n style.textContent = CSS + kfText;\n doc.head.appendChild(style);\n}\n/** Adds keyframes { name: '@keyframes tlp-name{...}' } once each (no-op for names already added). */\nexport function addKeyframes(map, doc = currentDocument()) {\n let add = '';\n for (const k in map) if (!kfDone[k]) { kfDone[k] = 1; add += map[k]; }\n if (!add) return;\n kfText += add;\n const el = styleInjected && styleEl(doc);\n if (el) el.textContent += add;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["config", "OUT", "TURN", "SINE", "EASE", "HOLD", "NS", "currentDocument", "DRAWABLE", "registry", "aliases", "loader", "waiting", "register", "icons", "aliasMap", "k", "icon", "getIcon", "fn", "setLoader", "name", "resolve", "list", "res", "loadIcon", "timings", "speed", "total", "part", "anim", "dur", "delay", "origin", "t", "dl", "varsOf", "s", "v", "clsOf", "hasClass", "cls", "createSvg", "doc", "svg", "steps", "targets", "g", "el", "vars", "toSvgString", "opts", "sw", "size", "head", "clean", "_", "c", "keep", "x", "duo", "inner", "style", "tag", "pre", "reduced", "isStatic", "run", "go", "h", "endOf", "a", "track", "busy", "tick", "hold", "release", "back", "ICON_SELECTOR", "HOST", "svgOf", "triggerOf", "hoverTarget", "target", "own", "depth", "n", "found", "i", "hoverInstalled", "installHover", "hit", "trigger", "next", "styleInjected", "CSS", "kfDone", "kfText", "styleEl", "ensureStyles", "addKeyframes", "map", "add"]
|
|
7
7
|
}
|
package/dist/element.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/* tlp-icons 0.
|
|
1
|
+
/* tlp-icons 0.5.0 - MIT. Icons from Lucide 1.55.0 (ISC), Tabler Icons 3.49.0 (MIT). Generated file, do not edit. */
|
|
2
2
|
import{loadIcon as h,createSvg as a,run as r,hold as c,release as d,installHover as p,ensureStyles as f}from"./core.js";const g=1200,l=["name","size","stroke","trigger","duotone","flip","animated"],m=["hover","hold","loop","click","none"],u=new Set,b=()=>typeof process<"u"&&!!process.env&&process.env.NODE_ENV==="production";function A(i){u.has(i)||b()||typeof console>"u"||(u.add(i),console.warn(`[tlp-icons] unknown icon "${i}". Browse names at https://tlp-icons.netlify.app/icons/`))}const n=typeof HTMLElement>"u"?void 0:class extends HTMLElement{static get observedAttributes(){return l}constructor(){super(),this._token=0;for(const t of l)if(Object.prototype.hasOwnProperty.call(this,t)){const e=this[t];delete this[t],this[t]=e}}get name(){return this.getAttribute("name")||""}set name(t){this._reflect("name",t)}get size(){return this.getAttribute("size")||""}set size(t){this._reflect("size",t)}get stroke(){return this.getAttribute("stroke")||""}set stroke(t){this._reflect("stroke",t)}get trigger(){const t=this.getAttribute("trigger");return m.includes(t)?t:"hover"}set trigger(t){this._reflect("trigger",t)}get duotone(){return this.hasAttribute("duotone")&&this.getAttribute("duotone")!=="false"}set duotone(t){t===!0||t===""||t==="true"?this.setAttribute("duotone",""):this.removeAttribute("duotone")}get flip(){const t=this.getAttribute("flip");return t==="rtl"||t==="x"?t:null}set flip(t){this._reflect("flip",t)}get animated(){return this.getAttribute("animated")!=="false"}set animated(t){t===!1||t==="false"?this.setAttribute("animated","false"):this.removeAttribute("animated")}_reflect(t,e){e==null||e===!1?this.removeAttribute(t):this.setAttribute(t,String(e))}connectedCallback(){f(this.ownerDocument),p(this.ownerDocument),this.hasAttribute("role")||this.setAttribute("aria-hidden","true"),this.render(),this.setupTrigger()}disconnectedCallback(){clearTimeout(this._loop),this._loop=null,this._token++}attributeChangedCallback(t,e,s){!this.isConnected||e===s||(t==="size"||t==="stroke"?this.applyVars():t==="name"?this.render():t==="trigger"?this.setupTrigger():t==="duotone"||t==="flip"?this.applyFlags():t==="animated"&&s==="false"&&(this.release(),this.setupTrigger()))}applyVars(){const t=this.getAttribute("size"),e=this.getAttribute("stroke");t?this.style.setProperty("--tlp-size",/^\d+(\.\d+)?$/.test(t)?`${t}px`:t):this.style.removeProperty("--tlp-size"),e?this.style.setProperty("--tlp-stroke",e):this.style.removeProperty("--tlp-stroke")}applyFlags(){const t=this.querySelector("svg.tlp");t&&(t.toggleAttribute("data-duotone",this.duotone),this.flip?t.setAttribute("data-flip",this.flip):t.removeAttribute("data-flip"))}render(){this.applyVars();const t=++this._token,e=this.getAttribute("name");if(!e){this.replaceChildren(),this.removeAttribute("data-missing");return}h(e).then(s=>{if(t!==this._token||!this.isConnected||this.getAttribute("name")!==e)return;if(!s){this.replaceChildren(),this.setAttribute("data-missing",""),A(e);return}this.removeAttribute("data-missing");const o=a(s,this.ownerDocument);o&&(this.replaceChildren(o),s.r?this.dataset.dir="":delete this.dataset.dir,this.applyFlags(),this.dispatchEvent(new CustomEvent("tlp-ready",{bubbles:!0,composed:!0,detail:{name:e}})))},()=>{t===this._token&&this.isConnected&&(this.replaceChildren(),this.setAttribute("data-missing",""))})}setupTrigger(){clearTimeout(this._loop),this._loop=null;const t=this.getAttribute("trigger");if(t==="loop"){const e=()=>{const s=this.querySelector("svg.tlp");s&&r(s),this._loop=setTimeout(e,(s&&+s.dataset.total||900)+g)};this._loop=setTimeout(e,60)}t==="click"&&!this._clickBound&&(this._clickBound=!0,this.addEventListener("click",()=>{this.getAttribute("trigger")==="click"&&r(this.querySelector("svg.tlp"))}))}play(){return r(this.querySelector("svg.tlp"))}hold(){return c(this.querySelector("svg.tlp"))}release(){return d(this.querySelector("svg.tlp"))}};function y(i="tlp-icon"){return!n||typeof customElements>"u"?!1:(customElements.get(i)||customElements.define(i,i==="tlp-icon"?n:class extends n{}),!0)}y();export{n as TlpIcon,y as define};
|
|
3
3
|
//# sourceMappingURL=element.js.map
|