@f-ewald/components 1.14.0 → 1.15.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/README.md +2 -0
- package/custom-elements.json +181 -11
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/loading-dots.d.ts +28 -0
- package/dist/loading-dots.d.ts.map +1 -0
- package/dist/loading-dots.js +116 -0
- package/dist/loading-dots.js.map +1 -0
- package/dist/loading-spinner.d.ts +28 -0
- package/dist/loading-spinner.d.ts.map +1 -0
- package/dist/loading-spinner.js +109 -0
- package/dist/loading-spinner.js.map +1 -0
- package/dist/map-circle.d.ts +2 -2
- package/dist/map-circle.d.ts.map +1 -1
- package/dist/map-circle.js +20 -5
- package/dist/map-circle.js.map +1 -1
- package/dist/map-pin.d.ts +1 -1
- package/dist/map-pin.d.ts.map +1 -1
- package/dist/map-pin.js +19 -5
- package/dist/map-pin.js.map +1 -1
- package/docs/loading-dots.md +45 -0
- package/docs/loading-spinner.md +46 -0
- package/docs/map-circle.md +3 -3
- package/docs/map-pin.md +1 -1
- package/llms.txt +49 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -79,6 +79,8 @@ import "@f-ewald/components/roman-numeral.js";
|
|
|
79
79
|
| `<link-card>` | [API reference](https://f-ewald.github.io/components/docs/link-card.html) |
|
|
80
80
|
| `<live-timer>` | [API reference](https://f-ewald.github.io/components/docs/live-timer.html) |
|
|
81
81
|
| `<load-more>` | [API reference](https://f-ewald.github.io/components/docs/load-more.html) |
|
|
82
|
+
| `<loading-dots>` | [API reference](https://f-ewald.github.io/components/docs/loading-dots.html) |
|
|
83
|
+
| `<loading-spinner>` | [API reference](https://f-ewald.github.io/components/docs/loading-spinner.html) |
|
|
82
84
|
| `<map-circle>` | [API reference](https://f-ewald.github.io/components/docs/map-circle.html) |
|
|
83
85
|
| `<map-pin>` | [API reference](https://f-ewald.github.io/components/docs/map-pin.html) |
|
|
84
86
|
| `<markdown-view>` | [API reference](https://f-ewald.github.io/components/docs/markdown-view.html) |
|
package/custom-elements.json
CHANGED
|
@@ -6755,6 +6755,22 @@
|
|
|
6755
6755
|
"module": "./load-more.js"
|
|
6756
6756
|
}
|
|
6757
6757
|
},
|
|
6758
|
+
{
|
|
6759
|
+
"kind": "js",
|
|
6760
|
+
"name": "LoadingSpinner",
|
|
6761
|
+
"declaration": {
|
|
6762
|
+
"name": "LoadingSpinner",
|
|
6763
|
+
"module": "./loading-spinner.js"
|
|
6764
|
+
}
|
|
6765
|
+
},
|
|
6766
|
+
{
|
|
6767
|
+
"kind": "js",
|
|
6768
|
+
"name": "LoadingDots",
|
|
6769
|
+
"declaration": {
|
|
6770
|
+
"name": "LoadingDots",
|
|
6771
|
+
"module": "./loading-dots.js"
|
|
6772
|
+
}
|
|
6773
|
+
},
|
|
6758
6774
|
{
|
|
6759
6775
|
"kind": "js",
|
|
6760
6776
|
"name": "ChatMessage",
|
|
@@ -8575,13 +8591,167 @@
|
|
|
8575
8591
|
}
|
|
8576
8592
|
]
|
|
8577
8593
|
},
|
|
8594
|
+
{
|
|
8595
|
+
"kind": "javascript-module",
|
|
8596
|
+
"path": "src/loading-dots.ts",
|
|
8597
|
+
"declarations": [
|
|
8598
|
+
{
|
|
8599
|
+
"kind": "class",
|
|
8600
|
+
"description": "Three dots that bounce one after another as a lightweight, indeterminate\n\"working\" / \"typing\" indicator. Purely presentational and property-driven —\nshow it while a short operation is pending and remove it when done.\n\nExposes an accessible `role=\"status\"` with `label` as its name, so assistive\ntechnology announces the loading state; the dots themselves are decorative.\nUnder `prefers-reduced-motion` the bounce is removed and the dots rest.",
|
|
8601
|
+
"name": "LoadingDots",
|
|
8602
|
+
"members": [
|
|
8603
|
+
{
|
|
8604
|
+
"kind": "field",
|
|
8605
|
+
"name": "size",
|
|
8606
|
+
"type": {
|
|
8607
|
+
"text": "\"sm\" | \"md\" | \"lg\""
|
|
8608
|
+
},
|
|
8609
|
+
"default": "\"md\"",
|
|
8610
|
+
"description": "Dot-size step — `sm`, `md` (default), or `lg`.",
|
|
8611
|
+
"attribute": "size"
|
|
8612
|
+
},
|
|
8613
|
+
{
|
|
8614
|
+
"kind": "field",
|
|
8615
|
+
"name": "label",
|
|
8616
|
+
"type": {
|
|
8617
|
+
"text": "string"
|
|
8618
|
+
},
|
|
8619
|
+
"default": "\"Loading\"",
|
|
8620
|
+
"description": "Accessible name announced by the `role=\"status\"` live region.",
|
|
8621
|
+
"attribute": "label"
|
|
8622
|
+
}
|
|
8623
|
+
],
|
|
8624
|
+
"attributes": [
|
|
8625
|
+
{
|
|
8626
|
+
"name": "size",
|
|
8627
|
+
"type": {
|
|
8628
|
+
"text": "\"sm\" | \"md\" | \"lg\""
|
|
8629
|
+
},
|
|
8630
|
+
"default": "\"md\"",
|
|
8631
|
+
"description": "Dot-size step — `sm`, `md` (default), or `lg`.",
|
|
8632
|
+
"fieldName": "size"
|
|
8633
|
+
},
|
|
8634
|
+
{
|
|
8635
|
+
"name": "label",
|
|
8636
|
+
"type": {
|
|
8637
|
+
"text": "string"
|
|
8638
|
+
},
|
|
8639
|
+
"default": "\"Loading\"",
|
|
8640
|
+
"description": "Accessible name announced by the `role=\"status\"` live region.",
|
|
8641
|
+
"fieldName": "label"
|
|
8642
|
+
}
|
|
8643
|
+
],
|
|
8644
|
+
"superclass": {
|
|
8645
|
+
"name": "LitElement",
|
|
8646
|
+
"package": "lit"
|
|
8647
|
+
},
|
|
8648
|
+
"tagName": "loading-dots",
|
|
8649
|
+
"customElement": true
|
|
8650
|
+
}
|
|
8651
|
+
],
|
|
8652
|
+
"exports": [
|
|
8653
|
+
{
|
|
8654
|
+
"kind": "js",
|
|
8655
|
+
"name": "LoadingDots",
|
|
8656
|
+
"declaration": {
|
|
8657
|
+
"name": "LoadingDots",
|
|
8658
|
+
"module": "src/loading-dots.ts"
|
|
8659
|
+
}
|
|
8660
|
+
},
|
|
8661
|
+
{
|
|
8662
|
+
"kind": "custom-element-definition",
|
|
8663
|
+
"name": "loading-dots",
|
|
8664
|
+
"declaration": {
|
|
8665
|
+
"name": "LoadingDots",
|
|
8666
|
+
"module": "src/loading-dots.ts"
|
|
8667
|
+
}
|
|
8668
|
+
}
|
|
8669
|
+
]
|
|
8670
|
+
},
|
|
8671
|
+
{
|
|
8672
|
+
"kind": "javascript-module",
|
|
8673
|
+
"path": "src/loading-spinner.ts",
|
|
8674
|
+
"declarations": [
|
|
8675
|
+
{
|
|
8676
|
+
"kind": "class",
|
|
8677
|
+
"description": "Indeterminate circular loading spinner: a rotating arc over a faint track,\nin the style of a browser page-load indicator. Purely presentational and\nproperty-driven — show it while work is in flight and remove it when done.\n\nExposes an accessible `role=\"status\"` with `label` as its name, so assistive\ntechnology announces the loading state; the arc itself is decorative. Under\n`prefers-reduced-motion` it stops rotating and stays a static ring.",
|
|
8678
|
+
"name": "LoadingSpinner",
|
|
8679
|
+
"members": [
|
|
8680
|
+
{
|
|
8681
|
+
"kind": "field",
|
|
8682
|
+
"name": "size",
|
|
8683
|
+
"type": {
|
|
8684
|
+
"text": "\"sm\" | \"md\" | \"lg\""
|
|
8685
|
+
},
|
|
8686
|
+
"default": "\"md\"",
|
|
8687
|
+
"description": "Diameter step — `sm` ≈ 1rem, `md` ≈ 1.5rem (default), `lg` ≈ 2rem.",
|
|
8688
|
+
"attribute": "size"
|
|
8689
|
+
},
|
|
8690
|
+
{
|
|
8691
|
+
"kind": "field",
|
|
8692
|
+
"name": "label",
|
|
8693
|
+
"type": {
|
|
8694
|
+
"text": "string"
|
|
8695
|
+
},
|
|
8696
|
+
"default": "\"Loading\"",
|
|
8697
|
+
"description": "Accessible name announced by the `role=\"status\"` live region.",
|
|
8698
|
+
"attribute": "label"
|
|
8699
|
+
}
|
|
8700
|
+
],
|
|
8701
|
+
"attributes": [
|
|
8702
|
+
{
|
|
8703
|
+
"name": "size",
|
|
8704
|
+
"type": {
|
|
8705
|
+
"text": "\"sm\" | \"md\" | \"lg\""
|
|
8706
|
+
},
|
|
8707
|
+
"default": "\"md\"",
|
|
8708
|
+
"description": "Diameter step — `sm` ≈ 1rem, `md` ≈ 1.5rem (default), `lg` ≈ 2rem.",
|
|
8709
|
+
"fieldName": "size"
|
|
8710
|
+
},
|
|
8711
|
+
{
|
|
8712
|
+
"name": "label",
|
|
8713
|
+
"type": {
|
|
8714
|
+
"text": "string"
|
|
8715
|
+
},
|
|
8716
|
+
"default": "\"Loading\"",
|
|
8717
|
+
"description": "Accessible name announced by the `role=\"status\"` live region.",
|
|
8718
|
+
"fieldName": "label"
|
|
8719
|
+
}
|
|
8720
|
+
],
|
|
8721
|
+
"superclass": {
|
|
8722
|
+
"name": "LitElement",
|
|
8723
|
+
"package": "lit"
|
|
8724
|
+
},
|
|
8725
|
+
"tagName": "loading-spinner",
|
|
8726
|
+
"customElement": true
|
|
8727
|
+
}
|
|
8728
|
+
],
|
|
8729
|
+
"exports": [
|
|
8730
|
+
{
|
|
8731
|
+
"kind": "js",
|
|
8732
|
+
"name": "LoadingSpinner",
|
|
8733
|
+
"declaration": {
|
|
8734
|
+
"name": "LoadingSpinner",
|
|
8735
|
+
"module": "src/loading-spinner.ts"
|
|
8736
|
+
}
|
|
8737
|
+
},
|
|
8738
|
+
{
|
|
8739
|
+
"kind": "custom-element-definition",
|
|
8740
|
+
"name": "loading-spinner",
|
|
8741
|
+
"declaration": {
|
|
8742
|
+
"name": "LoadingSpinner",
|
|
8743
|
+
"module": "src/loading-spinner.ts"
|
|
8744
|
+
}
|
|
8745
|
+
}
|
|
8746
|
+
]
|
|
8747
|
+
},
|
|
8578
8748
|
{
|
|
8579
8749
|
"kind": "javascript-module",
|
|
8580
8750
|
"path": "src/map-circle.ts",
|
|
8581
8751
|
"declarations": [
|
|
8582
8752
|
{
|
|
8583
8753
|
"kind": "class",
|
|
8584
|
-
"description": "A plain circular map marker: a radial-gradient fill with a soft highlight\nand a
|
|
8754
|
+
"description": "A plain circular map marker: a radial-gradient fill with a soft highlight\nand a solid white outer ring, no point/tail (unlike `<map-pin>`) —\nfor markers that don't need to visually \"point\" at their exact\ncoordinate. Purely a visual primitive — it has no `mapbox-gl` (or any\nmapping library) dependency; the consumer positions it, e.g. via\n`new mapboxgl.Marker({ element: el })`. It can also replace the former\n`<map-point>` dense-layer primitive: use `size=\"14\" ring-width=\"3\"`, leave\nthe slot empty, and rasterize one marker per color for use as a map\n`icon-image`.",
|
|
8585
8755
|
"name": "MapCircle",
|
|
8586
8756
|
"slots": [
|
|
8587
8757
|
{
|
|
@@ -8616,7 +8786,7 @@
|
|
|
8616
8786
|
"type": {
|
|
8617
8787
|
"text": "number"
|
|
8618
8788
|
},
|
|
8619
|
-
"default": "
|
|
8789
|
+
"default": "2",
|
|
8620
8790
|
"description": "White outer ring thickness, in the same viewBox units as `size` (scales with it).",
|
|
8621
8791
|
"attribute": "ring-width"
|
|
8622
8792
|
},
|
|
@@ -8626,8 +8796,8 @@
|
|
|
8626
8796
|
"type": {
|
|
8627
8797
|
"text": "number"
|
|
8628
8798
|
},
|
|
8629
|
-
"default": "
|
|
8630
|
-
"description": "Outer ring opacity, 0-1 (Apple Maps-style
|
|
8799
|
+
"default": "1",
|
|
8800
|
+
"description": "Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring).",
|
|
8631
8801
|
"attribute": "ring-opacity"
|
|
8632
8802
|
},
|
|
8633
8803
|
{
|
|
@@ -8673,7 +8843,7 @@
|
|
|
8673
8843
|
"type": {
|
|
8674
8844
|
"text": "number"
|
|
8675
8845
|
},
|
|
8676
|
-
"default": "
|
|
8846
|
+
"default": "2",
|
|
8677
8847
|
"description": "White outer ring thickness, in the same viewBox units as `size` (scales with it).",
|
|
8678
8848
|
"fieldName": "ringWidth"
|
|
8679
8849
|
},
|
|
@@ -8682,8 +8852,8 @@
|
|
|
8682
8852
|
"type": {
|
|
8683
8853
|
"text": "number"
|
|
8684
8854
|
},
|
|
8685
|
-
"default": "
|
|
8686
|
-
"description": "Outer ring opacity, 0-1 (Apple Maps-style
|
|
8855
|
+
"default": "1",
|
|
8856
|
+
"description": "Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring).",
|
|
8687
8857
|
"fieldName": "ringOpacity"
|
|
8688
8858
|
},
|
|
8689
8859
|
{
|
|
@@ -8764,8 +8934,8 @@
|
|
|
8764
8934
|
"type": {
|
|
8765
8935
|
"text": "number"
|
|
8766
8936
|
},
|
|
8767
|
-
"default": "
|
|
8768
|
-
"description": "Outer ring opacity, 0-1 (Apple Maps-style
|
|
8937
|
+
"default": "1",
|
|
8938
|
+
"description": "Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring).",
|
|
8769
8939
|
"attribute": "ring-opacity"
|
|
8770
8940
|
},
|
|
8771
8941
|
{
|
|
@@ -8811,8 +8981,8 @@
|
|
|
8811
8981
|
"type": {
|
|
8812
8982
|
"text": "number"
|
|
8813
8983
|
},
|
|
8814
|
-
"default": "
|
|
8815
|
-
"description": "Outer ring opacity, 0-1 (Apple Maps-style
|
|
8984
|
+
"default": "1",
|
|
8985
|
+
"description": "Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring).",
|
|
8816
8986
|
"fieldName": "ringOpacity"
|
|
8817
8987
|
},
|
|
8818
8988
|
{
|
package/dist/index.d.ts
CHANGED
|
@@ -31,6 +31,8 @@ export { StatusPill, type StatusPillColor } from "./status-pill.js";
|
|
|
31
31
|
export { EditableText } from "./editable-text.js";
|
|
32
32
|
export { LiveTimer } from "./live-timer.js";
|
|
33
33
|
export { LoadMore } from "./load-more.js";
|
|
34
|
+
export { LoadingSpinner } from "./loading-spinner.js";
|
|
35
|
+
export { LoadingDots } from "./loading-dots.js";
|
|
34
36
|
export { ChatMessage, type ChatMessageRole, type ChatMessageVariant, } from "./chat-message.js";
|
|
35
37
|
export { UiCheckbox } from "./ui-checkbox.js";
|
|
36
38
|
export { FormField } from "./form-field.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,YAAY,EACZ,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,UAAU,EACV,KAAK,YAAY,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EACL,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,8 @@ export { StatusPill } from "./status-pill.js";
|
|
|
31
31
|
export { EditableText } from "./editable-text.js";
|
|
32
32
|
export { LiveTimer } from "./live-timer.js";
|
|
33
33
|
export { LoadMore } from "./load-more.js";
|
|
34
|
+
export { LoadingSpinner } from "./loading-spinner.js";
|
|
35
|
+
export { LoadingDots } from "./loading-dots.js";
|
|
34
36
|
export { ChatMessage, } from "./chat-message.js";
|
|
35
37
|
export { UiCheckbox } from "./ui-checkbox.js";
|
|
36
38
|
export { FormField } from "./form-field.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { AnimateConfetti } from \"./animate-confetti.js\";\nexport { GalleryItem } from \"./gallery-item.js\";\nexport { GalleryItemVariant } from \"./gallery-item-variant.js\";\nexport {\n PhotoGallery,\n type PhotoGalleryChangeReason,\n type PhotoGalleryObjectFit,\n type PhotoGallerySlideChangeDetail,\n} from \"./photo-gallery.js\";\nexport { RevealButton } from \"./reveal-button.js\";\nexport { RomanNumeral } from \"./roman-numeral.js\";\nexport { ConfirmDialog } from \"./confirm-dialog.js\";\nexport { ContentDivider } from \"./content-divider.js\";\nexport {\n ToastNotification,\n notifySuccess,\n notifyError,\n notifyInfo,\n type ToastVariant,\n} from \"./toast-notification.js\";\nexport { ScrollToBottom } from \"./scroll-to-bottom.js\";\nexport { ScrollToTop } from \"./scroll-to-top.js\";\nexport { SlidePanel } from \"./slide-panel.js\";\nexport { CopyLinkButton } from \"./copy-link-button.js\";\nexport { RelativeTime } from \"./relative-time.js\";\nexport { DistanceValue } from \"./distance-value.js\";\nexport { PriceHistoryChart, type PricePoint } from \"./price-history-chart.js\";\nexport { DistributionChart, type DistributionValue } from \"./distribution-chart.js\";\nexport { PercentBarChart, type PercentBarGroup } from \"./percent-bar-chart.js\";\nexport { WeightBarChart, type WeightBarItem } from \"./weight-bar-chart.js\";\nexport {\n AddressAutocomplete,\n type AddressSuggestion,\n} from \"./address-autocomplete.js\";\nexport {\n AutocompleteInput,\n type AutocompleteOption,\n} from \"./autocomplete-input.js\";\nexport { UserAvatar } from \"./user-avatar.js\";\nexport { MapPin } from \"./map-pin.js\";\nexport { MapCircle } from \"./map-circle.js\";\nexport { RadioCards, type RadioCardOption } from \"./radio-cards.js\";\nexport { RadioPills, type RadioPillOption } from \"./radio-pills.js\";\nexport { ButtonGroup, type ButtonGroupOption } from \"./button-group.js\";\nexport { UiButton, type ButtonVariant } from \"./ui-button.js\";\nexport { StatMeter } from \"./stat-meter.js\";\nexport { StatusPill, type StatusPillColor } from \"./status-pill.js\";\nexport { EditableText } from \"./editable-text.js\";\nexport { LiveTimer } from \"./live-timer.js\";\nexport { LoadMore } from \"./load-more.js\";\nexport {\n ChatMessage,\n type ChatMessageRole,\n type ChatMessageVariant,\n} from \"./chat-message.js\";\nexport { UiCheckbox } from \"./ui-checkbox.js\";\nexport { FormField } from \"./form-field.js\";\nexport { FormSelect, type SelectOption } from \"./form-select.js\";\nexport {\n MultiSelect,\n type MultiSelectOption,\n type MultiSelectVariant,\n} from \"./multi-select.js\";\nexport { DataTable, type DataTableColumn } from \"./data-table.js\";\nexport { TileGrid } from \"./tile-grid.js\";\nexport { TreeView, type TreeNode } from \"./tree-view.js\";\nexport { PopoverPanel } from \"./popover-panel.js\";\nexport { DropdownButton, type DropdownOption } from \"./dropdown-button.js\";\nexport { IconButton } from \"./icon-button.js\";\nexport { KbdHint, type KbdPlatform } from \"./kbd-hint.js\";\nexport { FrameBox } from \"./frame-box.js\";\nexport { AppShell, type SidebarToggleDetail } from \"./app-shell.js\";\nexport { AppSidebar } from \"./app-sidebar.js\";\nexport { ActionBar } from \"./action-bar.js\";\nexport { PageHeader } from \"./page-header.js\";\nexport { PaginationNav, type PageChangeDetail } from \"./pagination-nav.js\";\nexport { FormActions } from \"./form-actions.js\";\nexport { TimelineContainer } from \"./timeline-container.js\";\nexport { TimelineEntry } from \"./timeline-entry.js\";\nexport { CalendarEntry } from \"./calendar-entry.js\";\nexport { CalendarMonth } from \"./calendar-month.js\";\nexport { CalendarYear } from \"./calendar-year.js\";\nexport {\n KanbanBoard,\n type KanbanCardData,\n type KanbanColumnData,\n type KanbanCardMoveDetail,\n type KanbanCardOpenDetail,\n} from \"./kanban-board.js\";\nexport { KanbanColumn } from \"./kanban-column.js\";\nexport { KanbanCard } from \"./kanban-card.js\";\nexport { TextArea } from \"./text-area.js\";\nexport { LinkCard, type LinkCardStatus } from \"./link-card.js\";\nexport { CardGrid } from \"./card-grid.js\";\nexport { MarkdownView } from \"./markdown-view.js\";\nexport { AutoScroll } from \"./auto-scroll.js\";\nexport { formatDuration, type DurationFormat } from \"./utils/duration.js\";\nexport { tokens, tokenValues, darkTokenValues } from \"./tokens.js\";\nexport * from \"./icons.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { AnimateConfetti } from \"./animate-confetti.js\";\nexport { GalleryItem } from \"./gallery-item.js\";\nexport { GalleryItemVariant } from \"./gallery-item-variant.js\";\nexport {\n PhotoGallery,\n type PhotoGalleryChangeReason,\n type PhotoGalleryObjectFit,\n type PhotoGallerySlideChangeDetail,\n} from \"./photo-gallery.js\";\nexport { RevealButton } from \"./reveal-button.js\";\nexport { RomanNumeral } from \"./roman-numeral.js\";\nexport { ConfirmDialog } from \"./confirm-dialog.js\";\nexport { ContentDivider } from \"./content-divider.js\";\nexport {\n ToastNotification,\n notifySuccess,\n notifyError,\n notifyInfo,\n type ToastVariant,\n} from \"./toast-notification.js\";\nexport { ScrollToBottom } from \"./scroll-to-bottom.js\";\nexport { ScrollToTop } from \"./scroll-to-top.js\";\nexport { SlidePanel } from \"./slide-panel.js\";\nexport { CopyLinkButton } from \"./copy-link-button.js\";\nexport { RelativeTime } from \"./relative-time.js\";\nexport { DistanceValue } from \"./distance-value.js\";\nexport { PriceHistoryChart, type PricePoint } from \"./price-history-chart.js\";\nexport { DistributionChart, type DistributionValue } from \"./distribution-chart.js\";\nexport { PercentBarChart, type PercentBarGroup } from \"./percent-bar-chart.js\";\nexport { WeightBarChart, type WeightBarItem } from \"./weight-bar-chart.js\";\nexport {\n AddressAutocomplete,\n type AddressSuggestion,\n} from \"./address-autocomplete.js\";\nexport {\n AutocompleteInput,\n type AutocompleteOption,\n} from \"./autocomplete-input.js\";\nexport { UserAvatar } from \"./user-avatar.js\";\nexport { MapPin } from \"./map-pin.js\";\nexport { MapCircle } from \"./map-circle.js\";\nexport { RadioCards, type RadioCardOption } from \"./radio-cards.js\";\nexport { RadioPills, type RadioPillOption } from \"./radio-pills.js\";\nexport { ButtonGroup, type ButtonGroupOption } from \"./button-group.js\";\nexport { UiButton, type ButtonVariant } from \"./ui-button.js\";\nexport { StatMeter } from \"./stat-meter.js\";\nexport { StatusPill, type StatusPillColor } from \"./status-pill.js\";\nexport { EditableText } from \"./editable-text.js\";\nexport { LiveTimer } from \"./live-timer.js\";\nexport { LoadMore } from \"./load-more.js\";\nexport { LoadingSpinner } from \"./loading-spinner.js\";\nexport { LoadingDots } from \"./loading-dots.js\";\nexport {\n ChatMessage,\n type ChatMessageRole,\n type ChatMessageVariant,\n} from \"./chat-message.js\";\nexport { UiCheckbox } from \"./ui-checkbox.js\";\nexport { FormField } from \"./form-field.js\";\nexport { FormSelect, type SelectOption } from \"./form-select.js\";\nexport {\n MultiSelect,\n type MultiSelectOption,\n type MultiSelectVariant,\n} from \"./multi-select.js\";\nexport { DataTable, type DataTableColumn } from \"./data-table.js\";\nexport { TileGrid } from \"./tile-grid.js\";\nexport { TreeView, type TreeNode } from \"./tree-view.js\";\nexport { PopoverPanel } from \"./popover-panel.js\";\nexport { DropdownButton, type DropdownOption } from \"./dropdown-button.js\";\nexport { IconButton } from \"./icon-button.js\";\nexport { KbdHint, type KbdPlatform } from \"./kbd-hint.js\";\nexport { FrameBox } from \"./frame-box.js\";\nexport { AppShell, type SidebarToggleDetail } from \"./app-shell.js\";\nexport { AppSidebar } from \"./app-sidebar.js\";\nexport { ActionBar } from \"./action-bar.js\";\nexport { PageHeader } from \"./page-header.js\";\nexport { PaginationNav, type PageChangeDetail } from \"./pagination-nav.js\";\nexport { FormActions } from \"./form-actions.js\";\nexport { TimelineContainer } from \"./timeline-container.js\";\nexport { TimelineEntry } from \"./timeline-entry.js\";\nexport { CalendarEntry } from \"./calendar-entry.js\";\nexport { CalendarMonth } from \"./calendar-month.js\";\nexport { CalendarYear } from \"./calendar-year.js\";\nexport {\n KanbanBoard,\n type KanbanCardData,\n type KanbanColumnData,\n type KanbanCardMoveDetail,\n type KanbanCardOpenDetail,\n} from \"./kanban-board.js\";\nexport { KanbanColumn } from \"./kanban-column.js\";\nexport { KanbanCard } from \"./kanban-card.js\";\nexport { TextArea } from \"./text-area.js\";\nexport { LinkCard, type LinkCardStatus } from \"./link-card.js\";\nexport { CardGrid } from \"./card-grid.js\";\nexport { MarkdownView } from \"./markdown-view.js\";\nexport { AutoScroll } from \"./auto-scroll.js\";\nexport { formatDuration, type DurationFormat } from \"./utils/duration.js\";\nexport { tokens, tokenValues, darkTokenValues } from \"./tokens.js\";\nexport * from \"./icons.js\";\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
2
|
+
/**
|
|
3
|
+
* Three dots that bounce one after another as a lightweight, indeterminate
|
|
4
|
+
* "working" / "typing" indicator. Purely presentational and property-driven —
|
|
5
|
+
* show it while a short operation is pending and remove it when done.
|
|
6
|
+
*
|
|
7
|
+
* Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
8
|
+
* technology announces the loading state; the dots themselves are decorative.
|
|
9
|
+
* Under `prefers-reduced-motion` the bounce is removed and the dots rest.
|
|
10
|
+
*
|
|
11
|
+
* @element loading-dots
|
|
12
|
+
*/
|
|
13
|
+
export declare class LoadingDots extends LitElement {
|
|
14
|
+
static styles: import("lit").CSSResult[];
|
|
15
|
+
/** Dot-size step — `sm`, `md` (default), or `lg`. */
|
|
16
|
+
size: "sm" | "md" | "lg";
|
|
17
|
+
/** Accessible name announced by the `role="status"` live region. */
|
|
18
|
+
label: string;
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
protected updated(changed: PropertyValues): void;
|
|
21
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
22
|
+
}
|
|
23
|
+
declare global {
|
|
24
|
+
interface HTMLElementTagNameMap {
|
|
25
|
+
"loading-dots": LoadingDots;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=loading-dots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-dots.d.ts","sourceRoot":"","sources":["../src/loading-dots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIjE;;;;;;;;;;GAUG;AACH,qBACa,WAAY,SAAQ,UAAU;IACzC,OAAgB,MAAM,4BAyDpB;IAEF,qDAAqD;IACzC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAC5C,oEAAoE;IACxD,KAAK,SAAa;IAErB,iBAAiB,IAAI,IAAI,CAGjC;IAED,UAAmB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAExD;IAEQ,MAAM,yCAQd;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,WAAW,CAAC;KAC7B;CACF"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { LitElement, css, html } from "lit";
|
|
8
|
+
import { customElement, property } from "lit/decorators.js";
|
|
9
|
+
import { tokens } from "./tokens.js";
|
|
10
|
+
/**
|
|
11
|
+
* Three dots that bounce one after another as a lightweight, indeterminate
|
|
12
|
+
* "working" / "typing" indicator. Purely presentational and property-driven —
|
|
13
|
+
* show it while a short operation is pending and remove it when done.
|
|
14
|
+
*
|
|
15
|
+
* Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
16
|
+
* technology announces the loading state; the dots themselves are decorative.
|
|
17
|
+
* Under `prefers-reduced-motion` the bounce is removed and the dots rest.
|
|
18
|
+
*
|
|
19
|
+
* @element loading-dots
|
|
20
|
+
*/
|
|
21
|
+
let LoadingDots = class LoadingDots extends LitElement {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
/** Dot-size step — `sm`, `md` (default), or `lg`. */
|
|
25
|
+
this.size = "md";
|
|
26
|
+
/** Accessible name announced by the `role="status"` live region. */
|
|
27
|
+
this.label = "Loading";
|
|
28
|
+
}
|
|
29
|
+
static { this.styles = [
|
|
30
|
+
tokens,
|
|
31
|
+
css `
|
|
32
|
+
:host {
|
|
33
|
+
display: inline-flex;
|
|
34
|
+
line-height: var(--ui-line-height-glyph, 1);
|
|
35
|
+
}
|
|
36
|
+
.dots {
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
align-items: flex-end;
|
|
39
|
+
gap: 0.25rem;
|
|
40
|
+
}
|
|
41
|
+
.dot {
|
|
42
|
+
width: 0.5rem;
|
|
43
|
+
height: 0.5rem;
|
|
44
|
+
border-radius: 999px;
|
|
45
|
+
background: var(--ui-primary, #4f46e5);
|
|
46
|
+
animation: loading-dots-bounce 1.4s ease-in-out infinite;
|
|
47
|
+
}
|
|
48
|
+
.dot:nth-child(2) {
|
|
49
|
+
animation-delay: 0.16s;
|
|
50
|
+
}
|
|
51
|
+
.dot:nth-child(3) {
|
|
52
|
+
animation-delay: 0.32s;
|
|
53
|
+
}
|
|
54
|
+
.dots.sm .dot {
|
|
55
|
+
width: 0.375rem;
|
|
56
|
+
height: 0.375rem;
|
|
57
|
+
}
|
|
58
|
+
.dots.lg .dot {
|
|
59
|
+
width: 0.625rem;
|
|
60
|
+
height: 0.625rem;
|
|
61
|
+
}
|
|
62
|
+
@keyframes loading-dots-bounce {
|
|
63
|
+
0%,
|
|
64
|
+
80%,
|
|
65
|
+
100% {
|
|
66
|
+
transform: translateY(0);
|
|
67
|
+
opacity: 0.5;
|
|
68
|
+
}
|
|
69
|
+
40% {
|
|
70
|
+
transform: translateY(-0.375rem);
|
|
71
|
+
opacity: 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
@media (prefers-reduced-motion: reduce) {
|
|
75
|
+
.dot {
|
|
76
|
+
animation: none;
|
|
77
|
+
opacity: 1;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
@media (forced-colors: active) {
|
|
81
|
+
.dot {
|
|
82
|
+
background: CanvasText;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
`,
|
|
86
|
+
]; }
|
|
87
|
+
connectedCallback() {
|
|
88
|
+
super.connectedCallback();
|
|
89
|
+
if (!this.hasAttribute("role"))
|
|
90
|
+
this.setAttribute("role", "status");
|
|
91
|
+
}
|
|
92
|
+
updated(changed) {
|
|
93
|
+
if (changed.has("label"))
|
|
94
|
+
this.setAttribute("aria-label", this.label);
|
|
95
|
+
}
|
|
96
|
+
render() {
|
|
97
|
+
return html `
|
|
98
|
+
<span class="dots ${this.size}" aria-hidden="true">
|
|
99
|
+
<span class="dot"></span>
|
|
100
|
+
<span class="dot"></span>
|
|
101
|
+
<span class="dot"></span>
|
|
102
|
+
</span>
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
__decorate([
|
|
107
|
+
property()
|
|
108
|
+
], LoadingDots.prototype, "size", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
property()
|
|
111
|
+
], LoadingDots.prototype, "label", void 0);
|
|
112
|
+
LoadingDots = __decorate([
|
|
113
|
+
customElement("loading-dots")
|
|
114
|
+
], LoadingDots);
|
|
115
|
+
export { LoadingDots };
|
|
116
|
+
//# sourceMappingURL=loading-dots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-dots.js","sourceRoot":"","sources":["../src/loading-dots.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAuB,MAAM,KAAK,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;GAUG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAApC;;QA4DL,qDAAqD;QACzC,SAAI,GAAuB,IAAI,CAAC;QAC5C,oEAAoE;QACxD,UAAK,GAAG,SAAS,CAAC;IAoBhC,CAAC;aAlFiB,WAAM,GAAG;QACvB,MAAM;QACN,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsDF;KACF,AAzDqB,CAyDpB;IAOO,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAEkB,OAAO,CAAC,OAAuB;QAChD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IAEQ,MAAM;QACb,OAAO,IAAI,CAAA;0BACW,IAAI,CAAC,IAAI;;;;;KAK9B,CAAC;IACJ,CAAC;CACF,CAAA;AAtBa;IAAX,QAAQ,EAAE;yCAAiC;AAEhC;IAAX,QAAQ,EAAE;0CAAmB;AA/DnB,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CAmFvB","sourcesContent":["import { LitElement, css, html, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { tokens } from \"./tokens.js\";\n\n/**\n * Three dots that bounce one after another as a lightweight, indeterminate\n * \"working\" / \"typing\" indicator. Purely presentational and property-driven —\n * show it while a short operation is pending and remove it when done.\n *\n * Exposes an accessible `role=\"status\"` with `label` as its name, so assistive\n * technology announces the loading state; the dots themselves are decorative.\n * Under `prefers-reduced-motion` the bounce is removed and the dots rest.\n *\n * @element loading-dots\n */\n@customElement(\"loading-dots\")\nexport class LoadingDots extends LitElement {\n static override styles = [\n tokens,\n css`\n :host {\n display: inline-flex;\n line-height: var(--ui-line-height-glyph, 1);\n }\n .dots {\n display: inline-flex;\n align-items: flex-end;\n gap: 0.25rem;\n }\n .dot {\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 999px;\n background: var(--ui-primary, #4f46e5);\n animation: loading-dots-bounce 1.4s ease-in-out infinite;\n }\n .dot:nth-child(2) {\n animation-delay: 0.16s;\n }\n .dot:nth-child(3) {\n animation-delay: 0.32s;\n }\n .dots.sm .dot {\n width: 0.375rem;\n height: 0.375rem;\n }\n .dots.lg .dot {\n width: 0.625rem;\n height: 0.625rem;\n }\n @keyframes loading-dots-bounce {\n 0%,\n 80%,\n 100% {\n transform: translateY(0);\n opacity: 0.5;\n }\n 40% {\n transform: translateY(-0.375rem);\n opacity: 1;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .dot {\n animation: none;\n opacity: 1;\n }\n }\n @media (forced-colors: active) {\n .dot {\n background: CanvasText;\n }\n }\n `,\n ];\n\n /** Dot-size step — `sm`, `md` (default), or `lg`. */\n @property() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n /** Accessible name announced by the `role=\"status\"` live region. */\n @property() label = \"Loading\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"status\");\n }\n\n protected override updated(changed: PropertyValues): void {\n if (changed.has(\"label\")) this.setAttribute(\"aria-label\", this.label);\n }\n\n override render() {\n return html`\n <span class=\"dots ${this.size}\" aria-hidden=\"true\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"loading-dots\": LoadingDots;\n }\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
2
|
+
/**
|
|
3
|
+
* Indeterminate circular loading spinner: a rotating arc over a faint track,
|
|
4
|
+
* in the style of a browser page-load indicator. Purely presentational and
|
|
5
|
+
* property-driven — show it while work is in flight and remove it when done.
|
|
6
|
+
*
|
|
7
|
+
* Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
8
|
+
* technology announces the loading state; the arc itself is decorative. Under
|
|
9
|
+
* `prefers-reduced-motion` it stops rotating and stays a static ring.
|
|
10
|
+
*
|
|
11
|
+
* @element loading-spinner
|
|
12
|
+
*/
|
|
13
|
+
export declare class LoadingSpinner extends LitElement {
|
|
14
|
+
static styles: import("lit").CSSResult[];
|
|
15
|
+
/** Diameter step — `sm` ≈ 1rem, `md` ≈ 1.5rem (default), `lg` ≈ 2rem. */
|
|
16
|
+
size: "sm" | "md" | "lg";
|
|
17
|
+
/** Accessible name announced by the `role="status"` live region. */
|
|
18
|
+
label: string;
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
protected updated(changed: PropertyValues): void;
|
|
21
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
22
|
+
}
|
|
23
|
+
declare global {
|
|
24
|
+
interface HTMLElementTagNameMap {
|
|
25
|
+
"loading-spinner": LoadingSpinner;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=loading-spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-spinner.d.ts","sourceRoot":"","sources":["../src/loading-spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIjE;;;;;;;;;;GAUG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC5C,OAAgB,MAAM,4BAmDpB;IAEF,yEAAyE;IAC7D,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAC5C,oEAAoE;IACxD,KAAK,SAAa;IAErB,iBAAiB,IAAI,IAAI,CAGjC;IAED,UAAmB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAExD;IAEQ,MAAM,yCAOd;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,cAAc,CAAC;KACnC;CACF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { LitElement, css, html } from "lit";
|
|
8
|
+
import { customElement, property } from "lit/decorators.js";
|
|
9
|
+
import { tokens } from "./tokens.js";
|
|
10
|
+
/**
|
|
11
|
+
* Indeterminate circular loading spinner: a rotating arc over a faint track,
|
|
12
|
+
* in the style of a browser page-load indicator. Purely presentational and
|
|
13
|
+
* property-driven — show it while work is in flight and remove it when done.
|
|
14
|
+
*
|
|
15
|
+
* Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
16
|
+
* technology announces the loading state; the arc itself is decorative. Under
|
|
17
|
+
* `prefers-reduced-motion` it stops rotating and stays a static ring.
|
|
18
|
+
*
|
|
19
|
+
* @element loading-spinner
|
|
20
|
+
*/
|
|
21
|
+
let LoadingSpinner = class LoadingSpinner extends LitElement {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
/** Diameter step — `sm` ≈ 1rem, `md` ≈ 1.5rem (default), `lg` ≈ 2rem. */
|
|
25
|
+
this.size = "md";
|
|
26
|
+
/** Accessible name announced by the `role="status"` live region. */
|
|
27
|
+
this.label = "Loading";
|
|
28
|
+
}
|
|
29
|
+
static { this.styles = [
|
|
30
|
+
tokens,
|
|
31
|
+
css `
|
|
32
|
+
:host {
|
|
33
|
+
display: inline-flex;
|
|
34
|
+
line-height: var(--ui-line-height-glyph, 1);
|
|
35
|
+
}
|
|
36
|
+
.spinner {
|
|
37
|
+
width: 1.5rem;
|
|
38
|
+
height: 1.5rem;
|
|
39
|
+
animation: spin 0.8s linear infinite;
|
|
40
|
+
}
|
|
41
|
+
.spinner.sm {
|
|
42
|
+
width: 1rem;
|
|
43
|
+
height: 1rem;
|
|
44
|
+
}
|
|
45
|
+
.spinner.lg {
|
|
46
|
+
width: 2rem;
|
|
47
|
+
height: 2rem;
|
|
48
|
+
}
|
|
49
|
+
.track {
|
|
50
|
+
fill: none;
|
|
51
|
+
stroke: var(--ui-border, #e2e8f0);
|
|
52
|
+
stroke-width: 3;
|
|
53
|
+
}
|
|
54
|
+
.arc {
|
|
55
|
+
fill: none;
|
|
56
|
+
stroke: var(--ui-primary, #4f46e5);
|
|
57
|
+
stroke-width: 3;
|
|
58
|
+
stroke-linecap: round;
|
|
59
|
+
stroke-dasharray: 42 100;
|
|
60
|
+
}
|
|
61
|
+
@keyframes spin {
|
|
62
|
+
to {
|
|
63
|
+
transform: rotate(360deg);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
@media (prefers-reduced-motion: reduce) {
|
|
67
|
+
.spinner {
|
|
68
|
+
animation: none;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
@media (forced-colors: active) {
|
|
72
|
+
.track {
|
|
73
|
+
stroke: GrayText;
|
|
74
|
+
}
|
|
75
|
+
.arc {
|
|
76
|
+
stroke: CanvasText;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
`,
|
|
80
|
+
]; }
|
|
81
|
+
connectedCallback() {
|
|
82
|
+
super.connectedCallback();
|
|
83
|
+
if (!this.hasAttribute("role"))
|
|
84
|
+
this.setAttribute("role", "status");
|
|
85
|
+
}
|
|
86
|
+
updated(changed) {
|
|
87
|
+
if (changed.has("label"))
|
|
88
|
+
this.setAttribute("aria-label", this.label);
|
|
89
|
+
}
|
|
90
|
+
render() {
|
|
91
|
+
return html `
|
|
92
|
+
<svg class="spinner ${this.size}" viewBox="0 0 24 24" aria-hidden="true">
|
|
93
|
+
<circle class="track" cx="12" cy="12" r="9"></circle>
|
|
94
|
+
<circle class="arc" cx="12" cy="12" r="9"></circle>
|
|
95
|
+
</svg>
|
|
96
|
+
`;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
__decorate([
|
|
100
|
+
property()
|
|
101
|
+
], LoadingSpinner.prototype, "size", void 0);
|
|
102
|
+
__decorate([
|
|
103
|
+
property()
|
|
104
|
+
], LoadingSpinner.prototype, "label", void 0);
|
|
105
|
+
LoadingSpinner = __decorate([
|
|
106
|
+
customElement("loading-spinner")
|
|
107
|
+
], LoadingSpinner);
|
|
108
|
+
export { LoadingSpinner };
|
|
109
|
+
//# sourceMappingURL=loading-spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-spinner.js","sourceRoot":"","sources":["../src/loading-spinner.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAuB,MAAM,KAAK,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;;;;;;;GAUG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,UAAU;IAAvC;;QAsDL,yEAAyE;QAC7D,SAAI,GAAuB,IAAI,CAAC;QAC5C,oEAAoE;QACxD,UAAK,GAAG,SAAS,CAAC;IAmBhC,CAAC;aA3EiB,WAAM,GAAG;QACvB,MAAM;QACN,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgDF;KACF,AAnDqB,CAmDpB;IAOO,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAEkB,OAAO,CAAC,OAAuB;QAChD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;IAEQ,MAAM;QACb,OAAO,IAAI,CAAA;4BACa,IAAI,CAAC,IAAI;;;;KAIhC,CAAC;IACJ,CAAC;CACF,CAAA;AArBa;IAAX,QAAQ,EAAE;4CAAiC;AAEhC;IAAX,QAAQ,EAAE;6CAAmB;AAzDnB,cAAc;IAD1B,aAAa,CAAC,iBAAiB,CAAC;GACpB,cAAc,CA4E1B","sourcesContent":["import { LitElement, css, html, type PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { tokens } from \"./tokens.js\";\n\n/**\n * Indeterminate circular loading spinner: a rotating arc over a faint track,\n * in the style of a browser page-load indicator. Purely presentational and\n * property-driven — show it while work is in flight and remove it when done.\n *\n * Exposes an accessible `role=\"status\"` with `label` as its name, so assistive\n * technology announces the loading state; the arc itself is decorative. Under\n * `prefers-reduced-motion` it stops rotating and stays a static ring.\n *\n * @element loading-spinner\n */\n@customElement(\"loading-spinner\")\nexport class LoadingSpinner extends LitElement {\n static override styles = [\n tokens,\n css`\n :host {\n display: inline-flex;\n line-height: var(--ui-line-height-glyph, 1);\n }\n .spinner {\n width: 1.5rem;\n height: 1.5rem;\n animation: spin 0.8s linear infinite;\n }\n .spinner.sm {\n width: 1rem;\n height: 1rem;\n }\n .spinner.lg {\n width: 2rem;\n height: 2rem;\n }\n .track {\n fill: none;\n stroke: var(--ui-border, #e2e8f0);\n stroke-width: 3;\n }\n .arc {\n fill: none;\n stroke: var(--ui-primary, #4f46e5);\n stroke-width: 3;\n stroke-linecap: round;\n stroke-dasharray: 42 100;\n }\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .spinner {\n animation: none;\n }\n }\n @media (forced-colors: active) {\n .track {\n stroke: GrayText;\n }\n .arc {\n stroke: CanvasText;\n }\n }\n `,\n ];\n\n /** Diameter step — `sm` ≈ 1rem, `md` ≈ 1.5rem (default), `lg` ≈ 2rem. */\n @property() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n /** Accessible name announced by the `role=\"status\"` live region. */\n @property() label = \"Loading\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute(\"role\")) this.setAttribute(\"role\", \"status\");\n }\n\n protected override updated(changed: PropertyValues): void {\n if (changed.has(\"label\")) this.setAttribute(\"aria-label\", this.label);\n }\n\n override render() {\n return html`\n <svg class=\"spinner ${this.size}\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle class=\"track\" cx=\"12\" cy=\"12\" r=\"9\"></circle>\n <circle class=\"arc\" cx=\"12\" cy=\"12\" r=\"9\"></circle>\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"loading-spinner\": LoadingSpinner;\n }\n}\n"]}
|
package/dist/map-circle.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
2
|
/**
|
|
3
3
|
* A plain circular map marker: a radial-gradient fill with a soft highlight
|
|
4
|
-
* and a
|
|
4
|
+
* and a solid white outer ring, no point/tail (unlike `<map-pin>`) —
|
|
5
5
|
* for markers that don't need to visually "point" at their exact
|
|
6
6
|
* coordinate. Purely a visual primitive — it has no `mapbox-gl` (or any
|
|
7
7
|
* mapping library) dependency; the consumer positions it, e.g. via
|
|
@@ -22,7 +22,7 @@ export declare class MapCircle extends LitElement {
|
|
|
22
22
|
size: number;
|
|
23
23
|
/** White outer ring thickness, in the same viewBox units as `size` (scales with it). */
|
|
24
24
|
ringWidth: number;
|
|
25
|
-
/** Outer ring opacity, 0-1 (Apple Maps-style
|
|
25
|
+
/** Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). */
|
|
26
26
|
ringOpacity: number;
|
|
27
27
|
/** Scales and glows the circle — a generic emphasis state (e.g. hover, selection). */
|
|
28
28
|
highlighted: boolean;
|
package/dist/map-circle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-circle.d.ts","sourceRoot":"","sources":["../src/map-circle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAO5C;;;;;;;;;;;;;;GAcG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,OAAgB,MAAM,4BA6CpB;IAEF,gGAAgG;IACpF,KAAK,SAAa;IAC9B,+BAA+B;IACH,IAAI,SAAM;IACtC,wFAAwF;IACnC,SAAS,SAAK;IACnE
|
|
1
|
+
{"version":3,"file":"map-circle.d.ts","sourceRoot":"","sources":["../src/map-circle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAO5C;;;;;;;;;;;;;;GAcG;AACH,qBACa,SAAU,SAAQ,UAAU;IACvC,OAAgB,MAAM,4BA6CpB;IAEF,gGAAgG;IACpF,KAAK,SAAa;IAC9B,+BAA+B;IACH,IAAI,SAAM;IACtC,wFAAwF;IACnC,SAAS,SAAK;IACnE,+GAA+G;IACxD,WAAW,SAAK;IACvE,sFAAsF;IAC1C,WAAW,UAAS;IAEhE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IAE3D,MAAM,yCA8Cd;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,YAAY,EAAE,SAAS,CAAC;KACzB;CACF"}
|
package/dist/map-circle.js
CHANGED
|
@@ -11,7 +11,7 @@ import { mixHex } from "./utils/color.js";
|
|
|
11
11
|
let gradientIdCounter = 0;
|
|
12
12
|
/**
|
|
13
13
|
* A plain circular map marker: a radial-gradient fill with a soft highlight
|
|
14
|
-
* and a
|
|
14
|
+
* and a solid white outer ring, no point/tail (unlike `<map-pin>`) —
|
|
15
15
|
* for markers that don't need to visually "point" at their exact
|
|
16
16
|
* coordinate. Purely a visual primitive — it has no `mapbox-gl` (or any
|
|
17
17
|
* mapping library) dependency; the consumer positions it, e.g. via
|
|
@@ -32,9 +32,9 @@ let MapCircle = class MapCircle extends LitElement {
|
|
|
32
32
|
/** Diameter, in CSS pixels. */
|
|
33
33
|
this.size = 18;
|
|
34
34
|
/** White outer ring thickness, in the same viewBox units as `size` (scales with it). */
|
|
35
|
-
this.ringWidth =
|
|
36
|
-
/** Outer ring opacity, 0-1 (Apple Maps-style
|
|
37
|
-
this.ringOpacity =
|
|
35
|
+
this.ringWidth = 2;
|
|
36
|
+
/** Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). */
|
|
37
|
+
this.ringOpacity = 1;
|
|
38
38
|
/** Scales and glows the circle — a generic emphasis state (e.g. hover, selection). */
|
|
39
39
|
this.highlighted = false;
|
|
40
40
|
this._gradId = `map-circle-grad-${gradientIdCounter++}`;
|
|
@@ -88,6 +88,13 @@ let MapCircle = class MapCircle extends LitElement {
|
|
|
88
88
|
render() {
|
|
89
89
|
const light = mixHex(this.color, "#ffffff", 30);
|
|
90
90
|
const dark = mixHex(this.color, "#000000", 30);
|
|
91
|
+
// A fixed outer radius keeps the marker footprint constant as `ring-width`
|
|
92
|
+
// varies; the ring sits entirely outside the fill (the fill meets the
|
|
93
|
+
// ring's inner edge) so the stroke never straddles the fill edge — which
|
|
94
|
+
// is what used to read as two rings.
|
|
95
|
+
const outerR = 15;
|
|
96
|
+
const fillR = outerR - this.ringWidth;
|
|
97
|
+
const ringR = outerR - this.ringWidth / 2;
|
|
91
98
|
return html `
|
|
92
99
|
<svg
|
|
93
100
|
aria-hidden="true"
|
|
@@ -104,10 +111,18 @@ let MapCircle = class MapCircle extends LitElement {
|
|
|
104
111
|
</radialGradient>
|
|
105
112
|
</defs>
|
|
106
113
|
<circle
|
|
114
|
+
class="fill"
|
|
107
115
|
cx="16"
|
|
108
116
|
cy="16"
|
|
109
|
-
r
|
|
117
|
+
r=${fillR}
|
|
110
118
|
fill="url(#${this._gradId})"
|
|
119
|
+
/>
|
|
120
|
+
<circle
|
|
121
|
+
class="ring"
|
|
122
|
+
cx="16"
|
|
123
|
+
cy="16"
|
|
124
|
+
r=${ringR}
|
|
125
|
+
fill="none"
|
|
111
126
|
stroke="rgb(255 255 255 / ${this.ringOpacity})"
|
|
112
127
|
stroke-width=${this.ringWidth}
|
|
113
128
|
/>
|
package/dist/map-circle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-circle.js","sourceRoot":"","sources":["../src/map-circle.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEI,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QAgDL,gGAAgG;QACpF,UAAK,GAAG,SAAS,CAAC;QAC9B,+BAA+B;QACH,SAAI,GAAG,EAAE,CAAC;QACtC,wFAAwF;QACnC,cAAS,GAAG,CAAC,CAAC;QACnE
|
|
1
|
+
{"version":3,"file":"map-circle.js","sourceRoot":"","sources":["../src/map-circle.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEI,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QAgDL,gGAAgG;QACpF,UAAK,GAAG,SAAS,CAAC;QAC9B,+BAA+B;QACH,SAAI,GAAG,EAAE,CAAC;QACtC,wFAAwF;QACnC,cAAS,GAAG,CAAC,CAAC;QACnE,+GAA+G;QACxD,gBAAW,GAAG,CAAC,CAAC;QACvE,sFAAsF;QAC1C,gBAAW,GAAG,KAAK,CAAC;QAE/C,YAAO,GAAG,mBAAmB,iBAAiB,EAAE,EAAE,CAAC;IAiDtE,CAAC;aA3GiB,WAAM,GAAG;QACvB,MAAM;QACN,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0CF;KACF,AA7CqB,CA6CpB;IAeO,MAAM;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/C,2EAA2E;QAC3E,sEAAsE;QACtE,yEAAyE;QACzE,qCAAqC;QACrC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAA;;;gBAGC,IAAI,CAAC,IAAI;iBACR,IAAI,CAAC,IAAI;;;;;;+BAMK,IAAI,CAAC,OAAO;2CACA,KAAK;6CACH,IAAI;;;;;;;cAOnC,KAAK;uBACI,IAAI,CAAC,OAAO;;;;;;cAMrB,KAAK;;sCAEmB,IAAI,CAAC,WAAW;yBAC7B,IAAI,CAAC,SAAS;;;8CAGO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;;;KAGpE,CAAC;IACJ,CAAC;CACF,CAAA;AA3Da;IAAX,QAAQ,EAAE;wCAAmB;AAEF;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uCAAW;AAEe;IAApD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;4CAAe;AAEZ;IAAtD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;8CAAiB;AAE3B;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;8CAAqB;AAzDrD,SAAS;IADrB,aAAa,CAAC,YAAY,CAAC;GACf,SAAS,CA4GrB","sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { tokens } from \"./tokens.js\";\nimport { mixHex } from \"./utils/color.js\";\n\nlet gradientIdCounter = 0;\n\n/**\n * A plain circular map marker: a radial-gradient fill with a soft highlight\n * and a solid white outer ring, no point/tail (unlike `<map-pin>`) —\n * for markers that don't need to visually \"point\" at their exact\n * coordinate. Purely a visual primitive — it has no `mapbox-gl` (or any\n * mapping library) dependency; the consumer positions it, e.g. via\n * `new mapboxgl.Marker({ element: el })`. It can also replace the former\n * `<map-point>` dense-layer primitive: use `size=\"14\" ring-width=\"3\"`, leave\n * the slot empty, and rasterize one marker per color for use as a map\n * `icon-image`.\n *\n * @element map-circle\n * @slot - Optional badge content shown centered on the circle — a rank\n * number, an emoji, a small icon.\n */\n@customElement(\"map-circle\")\nexport class MapCircle extends LitElement {\n static override styles = [\n tokens,\n css`\n :host {\n display: inline-block;\n position: relative;\n line-height: 0;\n }\n svg {\n display: block;\n filter: drop-shadow(0 1px 2px rgb(0 0 0 / 0.25));\n transition: transform 120ms ease, filter 120ms ease;\n }\n :host([highlighted]) svg {\n transform: scale(1.12);\n filter: brightness(1.08) drop-shadow(0 0 5px rgb(0 0 0 / 0.35));\n }\n .content {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: #fff;\n font-family: var(\n --ui-font,\n ui-sans-serif,\n system-ui,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\"\n );\n font-weight: var(--ui-font-weight-bold, 700);\n line-height: var(--ui-line-height-glyph, 1);\n text-shadow: 0 1px 2px rgb(0 0 0 / 0.35);\n pointer-events: none;\n white-space: nowrap;\n }\n @media (prefers-reduced-motion: reduce) {\n svg {\n transition: none;\n }\n }\n `,\n ];\n\n /** Fill color; the gradient's light (highlight) and dark (edge) stops are derived from this. */\n @property() color = \"#4f46e5\";\n /** Diameter, in CSS pixels. */\n @property({ type: Number }) size = 18;\n /** White outer ring thickness, in the same viewBox units as `size` (scales with it). */\n @property({ type: Number, attribute: \"ring-width\" }) ringWidth = 2;\n /** Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). */\n @property({ type: Number, attribute: \"ring-opacity\" }) ringOpacity = 1;\n /** Scales and glows the circle — a generic emphasis state (e.g. hover, selection). */\n @property({ type: Boolean, reflect: true }) highlighted = false;\n\n private readonly _gradId = `map-circle-grad-${gradientIdCounter++}`;\n\n override render() {\n const light = mixHex(this.color, \"#ffffff\", 30);\n const dark = mixHex(this.color, \"#000000\", 30);\n // A fixed outer radius keeps the marker footprint constant as `ring-width`\n // varies; the ring sits entirely outside the fill (the fill meets the\n // ring's inner edge) so the stroke never straddles the fill edge — which\n // is what used to read as two rings.\n const outerR = 15;\n const fillR = outerR - this.ringWidth;\n const ringR = outerR - this.ringWidth / 2;\n return html`\n <svg\n aria-hidden=\"true\"\n width=${this.size}\n height=${this.size}\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <radialGradient id=${this._gradId} cx=\"35%\" cy=\"30%\" r=\"75%\">\n <stop offset=\"0%\" stop-color=${light} />\n <stop offset=\"100%\" stop-color=${dark} />\n </radialGradient>\n </defs>\n <circle\n class=\"fill\"\n cx=\"16\"\n cy=\"16\"\n r=${fillR}\n fill=\"url(#${this._gradId})\"\n />\n <circle\n class=\"ring\"\n cx=\"16\"\n cy=\"16\"\n r=${ringR}\n fill=\"none\"\n stroke=\"rgb(255 255 255 / ${this.ringOpacity})\"\n stroke-width=${this.ringWidth}\n />\n </svg>\n <div class=\"content\" style=\"font-size:${Math.round(this.size * 0.4)}px\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"map-circle\": MapCircle;\n }\n}\n"]}
|
package/dist/map-pin.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export declare class MapPin extends LitElement {
|
|
|
15
15
|
color: string;
|
|
16
16
|
/** Diameter of the circular head, in CSS pixels. */
|
|
17
17
|
size: number;
|
|
18
|
-
/** Outer ring opacity, 0-1 (Apple Maps-style
|
|
18
|
+
/** Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). */
|
|
19
19
|
ringOpacity: number;
|
|
20
20
|
/** Scales and glows the pin — a generic emphasis state (e.g. hover, selection). */
|
|
21
21
|
highlighted: boolean;
|
package/dist/map-pin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-pin.d.ts","sourceRoot":"","sources":["../src/map-pin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAO5C;;;;;;;;;GASG;AACH,qBACa,MAAO,SAAQ,UAAU;IACpC,OAAgB,MAAM,4BAgDpB;IAEF,gGAAgG;IACpF,KAAK,SAAa;IAC9B,oDAAoD;IACxB,IAAI,SAAM;IACtC
|
|
1
|
+
{"version":3,"file":"map-pin.d.ts","sourceRoot":"","sources":["../src/map-pin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAO5C;;;;;;;;;GASG;AACH,qBACa,MAAO,SAAQ,UAAU;IACpC,OAAgB,MAAM,4BAgDpB;IAEF,gGAAgG;IACpF,KAAK,SAAa;IAC9B,oDAAoD;IACxB,IAAI,SAAM;IACtC,+GAA+G;IACxD,WAAW,SAAK;IACvE,mFAAmF;IACvC,WAAW,UAAS;IAEhE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IAExD,MAAM,yCA4Cd;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
|
package/dist/map-pin.js
CHANGED
|
@@ -26,8 +26,8 @@ let MapPin = class MapPin extends LitElement {
|
|
|
26
26
|
this.color = "#4f46e5";
|
|
27
27
|
/** Diameter of the circular head, in CSS pixels. */
|
|
28
28
|
this.size = 32;
|
|
29
|
-
/** Outer ring opacity, 0-1 (Apple Maps-style
|
|
30
|
-
this.ringOpacity =
|
|
29
|
+
/** Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). */
|
|
30
|
+
this.ringOpacity = 1;
|
|
31
31
|
/** Scales and glows the pin — a generic emphasis state (e.g. hover, selection). */
|
|
32
32
|
this.highlighted = false;
|
|
33
33
|
this._gradId = `map-pin-grad-${gradientIdCounter++}`;
|
|
@@ -85,6 +85,13 @@ let MapPin = class MapPin extends LitElement {
|
|
|
85
85
|
const light = mixHex(this.color, "#ffffff", 30);
|
|
86
86
|
const dark = mixHex(this.color, "#000000", 30);
|
|
87
87
|
const height = Math.round(this.size * (34 / 32));
|
|
88
|
+
const shape = "M16 30 C10 24 4 19.5 4 13 A12 12 0 1 1 28 13 C28 19.5 22 24 16 30 Z";
|
|
89
|
+
const ringWidth = 2;
|
|
90
|
+
// Inset the fill so its head edge meets the ring's inner edge instead of the
|
|
91
|
+
// ring straddling the fill (which reads as two rings): the head arc has
|
|
92
|
+
// radius 12, so scale the fill to (12 - ringWidth / 2) / 12 about the head
|
|
93
|
+
// center (16, 13). The ring is the same outline drawn behind, stroke only.
|
|
94
|
+
const fillScale = (12 - ringWidth / 2) / 12;
|
|
88
95
|
return html `
|
|
89
96
|
<svg
|
|
90
97
|
aria-hidden="true"
|
|
@@ -101,10 +108,17 @@ let MapPin = class MapPin extends LitElement {
|
|
|
101
108
|
</radialGradient>
|
|
102
109
|
</defs>
|
|
103
110
|
<path
|
|
104
|
-
|
|
105
|
-
|
|
111
|
+
class="ring"
|
|
112
|
+
d=${shape}
|
|
113
|
+
fill="none"
|
|
106
114
|
stroke="rgb(255 255 255 / ${this.ringOpacity})"
|
|
107
|
-
stroke-width
|
|
115
|
+
stroke-width=${ringWidth}
|
|
116
|
+
/>
|
|
117
|
+
<path
|
|
118
|
+
class="fill"
|
|
119
|
+
d=${shape}
|
|
120
|
+
fill="url(#${this._gradId})"
|
|
121
|
+
transform="translate(16 13) scale(${fillScale}) translate(-16 -13)"
|
|
108
122
|
/>
|
|
109
123
|
</svg>
|
|
110
124
|
<div class="content" style="font-size:${Math.round(this.size * 0.4)}px">
|
package/dist/map-pin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-pin.js","sourceRoot":"","sources":["../src/map-pin.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B;;;;;;;;;GASG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,UAAU;IAA/B;;QAmDL,gGAAgG;QACpF,UAAK,GAAG,SAAS,CAAC;QAC9B,oDAAoD;QACxB,SAAI,GAAG,EAAE,CAAC;QACtC
|
|
1
|
+
{"version":3,"file":"map-pin.js","sourceRoot":"","sources":["../src/map-pin.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B;;;;;;;;;GASG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,UAAU;IAA/B;;QAmDL,gGAAgG;QACpF,UAAK,GAAG,SAAS,CAAC;QAC9B,oDAAoD;QACxB,SAAI,GAAG,EAAE,CAAC;QACtC,+GAA+G;QACxD,gBAAW,GAAG,CAAC,CAAC;QACvE,mFAAmF;QACvC,gBAAW,GAAG,KAAK,CAAC;QAE/C,YAAO,GAAG,gBAAgB,iBAAiB,EAAE,EAAE,CAAC;IA+CnE,CAAC;aA1GiB,WAAM,GAAG;QACvB,MAAM;QACN,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6CF;KACF,AAhDqB,CAgDpB;IAaO,MAAM;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,qEAAqE,CAAC;QACpF,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,6EAA6E;QAC7E,wEAAwE;QACxE,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAA;;;gBAGC,IAAI,CAAC,IAAI;iBACR,MAAM;;;;;;+BAMQ,IAAI,CAAC,OAAO;2CACA,KAAK;6CACH,IAAI;;;;;cAKnC,KAAK;;sCAEmB,IAAI,CAAC,WAAW;yBAC7B,SAAS;;;;cAIpB,KAAK;uBACI,IAAI,CAAC,OAAO;8CACW,SAAS;;;8CAGT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;;;KAGpE,CAAC;IACJ,CAAC;CACF,CAAA;AAvDa;IAAX,QAAQ,EAAE;qCAAmB;AAEF;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oCAAW;AAEiB;IAAtD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;2CAAiB;AAE3B;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2CAAqB;AA1DrD,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CA2GlB","sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { tokens } from \"./tokens.js\";\nimport { mixHex } from \"./utils/color.js\";\n\nlet gradientIdCounter = 0;\n\n/**\n * A circular \"Apple Maps\"-style map pin: a radial-gradient fill with a soft\n * highlight and a slight point at the bottom. Purely a visual primitive —\n * it has no `mapbox-gl` (or any mapping library) dependency; the consumer\n * positions it, e.g. via `new mapboxgl.Marker({ element: pinEl })`.\n *\n * @element map-pin\n * @slot - Badge content shown centered on the pin's circular head — a rank\n * number, an emoji, a small icon.\n */\n@customElement(\"map-pin\")\nexport class MapPin extends LitElement {\n static override styles = [\n tokens,\n css`\n :host {\n display: inline-block;\n position: relative;\n line-height: 0;\n }\n svg {\n display: block;\n filter: drop-shadow(0 1px 2px rgb(0 0 0 / 0.25));\n transition: transform 120ms ease, filter 120ms ease;\n }\n :host([highlighted]) svg {\n transform: scale(1.12);\n filter: brightness(1.08) drop-shadow(0 0 5px rgb(0 0 0 / 0.35));\n }\n .content {\n position: absolute;\n /* The path's circular head is centered at viewBox y=13 of 34 total\n (13/34 ≈ 38%) — not the pin's full bounding box, which is pulled\n down by the point below the circle. */\n top: 38%;\n left: 50%;\n transform: translate(-50%, -50%);\n color: #fff;\n font-family: var(\n --ui-font,\n ui-sans-serif,\n system-ui,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\"\n );\n font-weight: var(--ui-font-weight-bold, 700);\n line-height: var(--ui-line-height-glyph, 1);\n text-shadow: 0 1px 2px rgb(0 0 0 / 0.35);\n pointer-events: none;\n white-space: nowrap;\n }\n @media (prefers-reduced-motion: reduce) {\n svg {\n transition: none;\n }\n }\n `,\n ];\n\n /** Fill color; the gradient's light (highlight) and dark (edge) stops are derived from this. */\n @property() color = \"#4f46e5\";\n /** Diameter of the circular head, in CSS pixels. */\n @property({ type: Number }) size = 32;\n /** Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). */\n @property({ type: Number, attribute: \"ring-opacity\" }) ringOpacity = 1;\n /** Scales and glows the pin — a generic emphasis state (e.g. hover, selection). */\n @property({ type: Boolean, reflect: true }) highlighted = false;\n\n private readonly _gradId = `map-pin-grad-${gradientIdCounter++}`;\n\n override render() {\n const light = mixHex(this.color, \"#ffffff\", 30);\n const dark = mixHex(this.color, \"#000000\", 30);\n const height = Math.round(this.size * (34 / 32));\n const shape = \"M16 30 C10 24 4 19.5 4 13 A12 12 0 1 1 28 13 C28 19.5 22 24 16 30 Z\";\n const ringWidth = 2;\n // Inset the fill so its head edge meets the ring's inner edge instead of the\n // ring straddling the fill (which reads as two rings): the head arc has\n // radius 12, so scale the fill to (12 - ringWidth / 2) / 12 about the head\n // center (16, 13). The ring is the same outline drawn behind, stroke only.\n const fillScale = (12 - ringWidth / 2) / 12;\n return html`\n <svg\n aria-hidden=\"true\"\n width=${this.size}\n height=${height}\n viewBox=\"0 0 32 34\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <radialGradient id=${this._gradId} gradientUnits=\"userSpaceOnUse\" cx=\"12\" cy=\"9\" r=\"18\">\n <stop offset=\"0%\" stop-color=${light} />\n <stop offset=\"100%\" stop-color=${dark} />\n </radialGradient>\n </defs>\n <path\n class=\"ring\"\n d=${shape}\n fill=\"none\"\n stroke=\"rgb(255 255 255 / ${this.ringOpacity})\"\n stroke-width=${ringWidth}\n />\n <path\n class=\"fill\"\n d=${shape}\n fill=\"url(#${this._gradId})\"\n transform=\"translate(16 13) scale(${fillScale}) translate(-16 -13)\"\n />\n </svg>\n <div class=\"content\" style=\"font-size:${Math.round(this.size * 0.4)}px\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"map-pin\": MapPin;\n }\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# `<loading-dots>`
|
|
2
|
+
|
|
3
|
+
Three dots that bounce one after another as a lightweight, indeterminate
|
|
4
|
+
"working" / "typing" indicator. Purely presentational and property-driven —
|
|
5
|
+
show it while a short operation is pending and remove it when done.
|
|
6
|
+
|
|
7
|
+
Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
8
|
+
technology announces the loading state; the dots themselves are decorative.
|
|
9
|
+
Under `prefers-reduced-motion` the bounce is removed and the dots rest.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import "@f-ewald/components/loading-dots.js";
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<loading-dots></loading-dots>
|
|
21
|
+
<loading-dots size="sm"></loading-dots>
|
|
22
|
+
<loading-dots size="lg" label="Sending message"></loading-dots>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Attributes / properties
|
|
26
|
+
|
|
27
|
+
| Property | Attribute | Type | Default | Description |
|
|
28
|
+
| --- | --- | --- | --- | --- |
|
|
29
|
+
| `size` | `size` | `"sm" | "md" | "lg"` | `"md"` | Dot-size step — `sm`, `md` (default), or `lg`. |
|
|
30
|
+
| `label` | `label` | `string` | `"Loading"` | Accessible name announced by the `role="status"` live region. |
|
|
31
|
+
|
|
32
|
+
## Events
|
|
33
|
+
|
|
34
|
+
_None._
|
|
35
|
+
|
|
36
|
+
## Slots
|
|
37
|
+
|
|
38
|
+
_None._
|
|
39
|
+
|
|
40
|
+
## CSS custom properties
|
|
41
|
+
|
|
42
|
+
| Custom property |
|
|
43
|
+
| --- |
|
|
44
|
+
| `--ui-line-height-glyph` |
|
|
45
|
+
| `--ui-primary` |
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# `<loading-spinner>`
|
|
2
|
+
|
|
3
|
+
Indeterminate circular loading spinner: a rotating arc over a faint track,
|
|
4
|
+
in the style of a browser page-load indicator. Purely presentational and
|
|
5
|
+
property-driven — show it while work is in flight and remove it when done.
|
|
6
|
+
|
|
7
|
+
Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
8
|
+
technology announces the loading state; the arc itself is decorative. Under
|
|
9
|
+
`prefers-reduced-motion` it stops rotating and stays a static ring.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import "@f-ewald/components/loading-spinner.js";
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<loading-spinner></loading-spinner>
|
|
21
|
+
<loading-spinner size="sm"></loading-spinner>
|
|
22
|
+
<loading-spinner size="lg" label="Loading results"></loading-spinner>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Attributes / properties
|
|
26
|
+
|
|
27
|
+
| Property | Attribute | Type | Default | Description |
|
|
28
|
+
| --- | --- | --- | --- | --- |
|
|
29
|
+
| `size` | `size` | `"sm" | "md" | "lg"` | `"md"` | Diameter step — `sm` ≈ 1rem, `md` ≈ 1.5rem (default), `lg` ≈ 2rem. |
|
|
30
|
+
| `label` | `label` | `string` | `"Loading"` | Accessible name announced by the `role="status"` live region. |
|
|
31
|
+
|
|
32
|
+
## Events
|
|
33
|
+
|
|
34
|
+
_None._
|
|
35
|
+
|
|
36
|
+
## Slots
|
|
37
|
+
|
|
38
|
+
_None._
|
|
39
|
+
|
|
40
|
+
## CSS custom properties
|
|
41
|
+
|
|
42
|
+
| Custom property |
|
|
43
|
+
| --- |
|
|
44
|
+
| `--ui-border` |
|
|
45
|
+
| `--ui-line-height-glyph` |
|
|
46
|
+
| `--ui-primary` |
|
package/docs/map-circle.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# `<map-circle>`
|
|
2
2
|
|
|
3
3
|
A plain circular map marker: a radial-gradient fill with a soft highlight
|
|
4
|
-
and a
|
|
4
|
+
and a solid white outer ring, no point/tail (unlike `<map-pin>`) —
|
|
5
5
|
for markers that don't need to visually "point" at their exact
|
|
6
6
|
coordinate. Purely a visual primitive — it has no `mapbox-gl` (or any
|
|
7
7
|
mapping library) dependency; the consumer positions it, e.g. via
|
|
@@ -30,8 +30,8 @@ import "@f-ewald/components/map-circle.js";
|
|
|
30
30
|
| --- | --- | --- | --- | --- |
|
|
31
31
|
| `color` | `color` | `string` | `"#4f46e5"` | Fill color; the gradient's light (highlight) and dark (edge) stops are derived from this. |
|
|
32
32
|
| `size` | `size` | `number` | `18` | Diameter, in CSS pixels. |
|
|
33
|
-
| `ringWidth` | `ring-width` | `number` | `
|
|
34
|
-
| `ringOpacity` | `ring-opacity` | `number` | `
|
|
33
|
+
| `ringWidth` | `ring-width` | `number` | `2` | White outer ring thickness, in the same viewBox units as `size` (scales with it). |
|
|
34
|
+
| `ringOpacity` | `ring-opacity` | `number` | `1` | Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). |
|
|
35
35
|
| `highlighted` | `highlighted` | `boolean` | `false` | Scales and glows the circle — a generic emphasis state (e.g. hover, selection). |
|
|
36
36
|
|
|
37
37
|
## Events
|
package/docs/map-pin.md
CHANGED
|
@@ -24,7 +24,7 @@ import "@f-ewald/components/map-pin.js";
|
|
|
24
24
|
| --- | --- | --- | --- | --- |
|
|
25
25
|
| `color` | `color` | `string` | `"#4f46e5"` | Fill color; the gradient's light (highlight) and dark (edge) stops are derived from this. |
|
|
26
26
|
| `size` | `size` | `number` | `32` | Diameter of the circular head, in CSS pixels. |
|
|
27
|
-
| `ringOpacity` | `ring-opacity` | `number` | `
|
|
27
|
+
| `ringOpacity` | `ring-opacity` | `number` | `1` | Outer ring opacity, 0-1 (default 1 = a solid Apple Maps-style white ring; lower for a translucent ring). |
|
|
28
28
|
| `highlighted` | `highlighted` | `boolean` | `false` | Scales and glows the pin — a generic emphasis state (e.g. hover, selection). |
|
|
29
29
|
|
|
30
30
|
## Events
|
package/llms.txt
CHANGED
|
@@ -992,10 +992,56 @@ Example:
|
|
|
992
992
|
<load-more></load-more>
|
|
993
993
|
```
|
|
994
994
|
|
|
995
|
+
## <loading-dots>
|
|
996
|
+
|
|
997
|
+
Three dots that bounce one after another as a lightweight, indeterminate
|
|
998
|
+
"working" / "typing" indicator. Purely presentational and property-driven —
|
|
999
|
+
show it while a short operation is pending and remove it when done.
|
|
1000
|
+
|
|
1001
|
+
Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
1002
|
+
technology announces the loading state; the dots themselves are decorative.
|
|
1003
|
+
Under `prefers-reduced-motion` the bounce is removed and the dots rest.
|
|
1004
|
+
|
|
1005
|
+
Import: `import "@f-ewald/components/loading-dots.js";`
|
|
1006
|
+
|
|
1007
|
+
Properties: `size` (attribute `size`) : "sm" | "md" | "lg", default "md"; `label` (attribute `label`) : string, default "Loading"
|
|
1008
|
+
Events: none
|
|
1009
|
+
CSS custom properties: `--ui-line-height-glyph`, `--ui-primary`
|
|
1010
|
+
|
|
1011
|
+
Example:
|
|
1012
|
+
```html
|
|
1013
|
+
<loading-dots></loading-dots>
|
|
1014
|
+
<loading-dots size="sm"></loading-dots>
|
|
1015
|
+
<loading-dots size="lg" label="Sending message"></loading-dots>
|
|
1016
|
+
```
|
|
1017
|
+
|
|
1018
|
+
## <loading-spinner>
|
|
1019
|
+
|
|
1020
|
+
Indeterminate circular loading spinner: a rotating arc over a faint track,
|
|
1021
|
+
in the style of a browser page-load indicator. Purely presentational and
|
|
1022
|
+
property-driven — show it while work is in flight and remove it when done.
|
|
1023
|
+
|
|
1024
|
+
Exposes an accessible `role="status"` with `label` as its name, so assistive
|
|
1025
|
+
technology announces the loading state; the arc itself is decorative. Under
|
|
1026
|
+
`prefers-reduced-motion` it stops rotating and stays a static ring.
|
|
1027
|
+
|
|
1028
|
+
Import: `import "@f-ewald/components/loading-spinner.js";`
|
|
1029
|
+
|
|
1030
|
+
Properties: `size` (attribute `size`) : "sm" | "md" | "lg", default "md"; `label` (attribute `label`) : string, default "Loading"
|
|
1031
|
+
Events: none
|
|
1032
|
+
CSS custom properties: `--ui-border`, `--ui-line-height-glyph`, `--ui-primary`
|
|
1033
|
+
|
|
1034
|
+
Example:
|
|
1035
|
+
```html
|
|
1036
|
+
<loading-spinner></loading-spinner>
|
|
1037
|
+
<loading-spinner size="sm"></loading-spinner>
|
|
1038
|
+
<loading-spinner size="lg" label="Loading results"></loading-spinner>
|
|
1039
|
+
```
|
|
1040
|
+
|
|
995
1041
|
## <map-circle>
|
|
996
1042
|
|
|
997
1043
|
A plain circular map marker: a radial-gradient fill with a soft highlight
|
|
998
|
-
and a
|
|
1044
|
+
and a solid white outer ring, no point/tail (unlike `<map-pin>`) —
|
|
999
1045
|
for markers that don't need to visually "point" at their exact
|
|
1000
1046
|
coordinate. Purely a visual primitive — it has no `mapbox-gl` (or any
|
|
1001
1047
|
mapping library) dependency; the consumer positions it, e.g. via
|
|
@@ -1006,7 +1052,7 @@ the slot empty, and rasterize one marker per color for use as a map
|
|
|
1006
1052
|
|
|
1007
1053
|
Import: `import "@f-ewald/components/map-circle.js";`
|
|
1008
1054
|
|
|
1009
|
-
Properties: `color` (attribute `color`) : string, default "#4f46e5"; `size` (attribute `size`) : number, default 18; `ringWidth` (attribute `ring-width`) : number, default
|
|
1055
|
+
Properties: `color` (attribute `color`) : string, default "#4f46e5"; `size` (attribute `size`) : number, default 18; `ringWidth` (attribute `ring-width`) : number, default 2; `ringOpacity` (attribute `ring-opacity`) : number, default 1; `highlighted` (attribute `highlighted`) : boolean, default false
|
|
1010
1056
|
Events: none
|
|
1011
1057
|
CSS custom properties: `--ui-font`, `--ui-font-weight-bold`, `--ui-line-height-glyph`
|
|
1012
1058
|
|
|
@@ -1026,7 +1072,7 @@ positions it, e.g. via `new mapboxgl.Marker({ element: pinEl })`.
|
|
|
1026
1072
|
|
|
1027
1073
|
Import: `import "@f-ewald/components/map-pin.js";`
|
|
1028
1074
|
|
|
1029
|
-
Properties: `color` (attribute `color`) : string, default "#4f46e5"; `size` (attribute `size`) : number, default 32; `ringOpacity` (attribute `ring-opacity`) : number, default
|
|
1075
|
+
Properties: `color` (attribute `color`) : string, default "#4f46e5"; `size` (attribute `size`) : number, default 32; `ringOpacity` (attribute `ring-opacity`) : number, default 1; `highlighted` (attribute `highlighted`) : boolean, default false
|
|
1030
1076
|
Events: none
|
|
1031
1077
|
CSS custom properties: `--ui-font`, `--ui-font-weight-bold`, `--ui-line-height-glyph`
|
|
1032
1078
|
|