loading-state-zoo 0.2.0 → 0.4.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.
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$comment": "loading-state-zoo v0.2.0 — machine-readable spec. Source of truth for all 21 components. Defaults match the rendered site.",
3
+ "$comment": "loading-state-zoo v0.4.0 — machine-readable spec. Source of truth for all 30 components. Defaults match the rendered site.",
4
4
  "package": {
5
5
  "name": "loading-state-zoo",
6
- "version": "0.2.0",
6
+ "version": "0.4.0",
7
7
  "entrypoints": {
8
8
  "webComponents": "loading-state-zoo",
9
9
  "react": "loading-state-zoo/react",
@@ -287,7 +287,7 @@
287
287
  "reactComponent": "ScanSweep",
288
288
  "category": "Spinners",
289
289
  "role": "status",
290
- "description": "Concentric rings with a sweeping radar beam.",
290
+ "description": "Concentric rings with crosshair ticks, a counter-rotating dial and a sweeping radar beam.",
291
291
  "useCases": ["scanning", "searching", "syncing"],
292
292
  "defaults": { "size": 44, "color": "#f5f5f7", "speed": 1 },
293
293
  "attributes": [
@@ -646,6 +646,262 @@
646
646
  "html": "<lz-skeleton-list width=\"220\" rows=\"5\"></lz-skeleton-list>",
647
647
  "react": "<SkeletonList width={220} rows={5} />"
648
648
  }
649
+ },
650
+ {
651
+ "id": "ios-27-orb",
652
+ "tag": "lz-ios-27-orb",
653
+ "reactComponent": "Ios27Orb",
654
+ "category": "Orbs",
655
+ "role": "status",
656
+ "description": "An orb of 27 dots where a bright glow travels from one touched dot to the next, spiraling inward like an iOS listening animation.",
657
+ "useCases": ["voice assistants", "AI thinking", "holographic waits"],
658
+ "defaults": { "size": 44, "accent": "#0a84ff", "color": "#f5f5f7", "speed": 1 },
659
+ "attributes": [
660
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 44 },
661
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#0a84ff" },
662
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
663
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
664
+ ],
665
+ "cssVars": [
666
+ { "name": "--lz-size", "default": "44px", "purpose": "Orb diameter" },
667
+ { "name": "--lz-accent", "default": "#0a84ff", "purpose": "Warm pole hue" },
668
+ { "name": "--lz-color", "default": "#f5f5f7", "purpose": "Cool pole hue" }
669
+ ],
670
+ "keyframeVars": [
671
+ { "name": "--lz-ios-fade", "default": "0.2", "purpose": "Resting dot opacity" },
672
+ { "name": "--lz-ios-min", "default": "0.5", "purpose": "Resting dot scale" },
673
+ { "name": "--lz-ios-peak", "default": "1.25", "purpose": "Glowing dot scale" }
674
+ ],
675
+ "examples": {
676
+ "html": "<lz-ios-27-orb size=\"64\" accent=\"#64d2ff\" color=\"#bf5af2\"></lz-ios-27-orb>",
677
+ "react": "<Ios27Orb size={64} accent=\"#64d2ff\" color=\"#bf5af2\" />"
678
+ }
679
+ },
680
+ {
681
+ "id": "ai-orb",
682
+ "tag": "lz-ai-orb",
683
+ "reactComponent": "AiOrb",
684
+ "category": "AI",
685
+ "role": "status",
686
+ "description": "A breathing gradient sphere with an orbiting light dot and twinkling sparkles — an AI assist orb.",
687
+ "useCases": ["AI assistants", "generative waits", "smart ready states"],
688
+ "defaults": { "size": 44, "accent": "#0a84ff", "color": "#f5f5f7", "speed": 1 },
689
+ "attributes": [
690
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 44 },
691
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#0a84ff" },
692
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
693
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
694
+ ],
695
+ "cssVars": [
696
+ { "name": "--lz-size", "default": "44px", "purpose": "Orb diameter" },
697
+ { "name": "--lz-accent", "default": "#0a84ff", "purpose": "Orb gradient hue" },
698
+ { "name": "--lz-color", "default": "#f5f5f7", "purpose": "Sparkle color" }
699
+ ],
700
+ "keyframeVars": [],
701
+ "examples": {
702
+ "html": "<lz-ai-orb size=\"64\" accent=\"#bf5af2\"></lz-ai-orb>",
703
+ "react": "<AiOrb size={64} accent=\"#bf5af2\" />"
704
+ }
705
+ },
706
+ {
707
+ "id": "ai-thinking",
708
+ "tag": "lz-ai-thinking",
709
+ "reactComponent": "AiThinking",
710
+ "category": "AI",
711
+ "role": "status",
712
+ "description": "A rounded thinking field with typing dots wrapped in a rotating accent ring.",
713
+ "useCases": ["chat completions", "AI replies", "waiting on answers"],
714
+ "defaults": { "size": 40, "accent": "#0a84ff", "color": "#f5f5f7", "speed": 1 },
715
+ "attributes": [
716
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 40 },
717
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#0a84ff" },
718
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
719
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
720
+ ],
721
+ "cssVars": [
722
+ { "name": "--lz-size", "default": "40px", "purpose": "Field height" },
723
+ { "name": "--lz-accent", "default": "#0a84ff", "purpose": "Rotating ring color" },
724
+ { "name": "--lz-color", "default": "#f5f5f7", "purpose": "Typing dot color" },
725
+ { "name": "--lz-surface", "default": "rgba(255,255,255,0.07)", "purpose": "Field background" }
726
+ ],
727
+ "keyframeVars": [],
728
+ "examples": {
729
+ "html": "<lz-ai-thinking size=\"44\" accent=\"#30d158\"></lz-ai-thinking>",
730
+ "react": "<AiThinking size={44} accent=\"#30d158\" />"
731
+ }
732
+ },
733
+ {
734
+ "id": "ai-neural",
735
+ "tag": "lz-ai-neural",
736
+ "reactComponent": "AiNeural",
737
+ "category": "AI",
738
+ "role": "status",
739
+ "description": "A grid of dots pulsing like an artificial neural network with a diagonal activation wave.",
740
+ "useCases": ["neural nets", "model training", "data pipelines"],
741
+ "defaults": { "size": 6, "rows": 3, "cols": 5, "gap": 10, "accent": "#0a84ff", "color": "#f5f5f7", "speed": 1 },
742
+ "attributes": [
743
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 6 },
744
+ { "name": "rows", "reactProp": "rows", "type": "number", "unit": "rows", "default": 3 },
745
+ { "name": "cols", "reactProp": "cols", "type": "number", "unit": "cols", "default": 5 },
746
+ { "name": "gap", "reactProp": "gap", "type": "number", "unit": "px", "default": 10 },
747
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#0a84ff" },
748
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
749
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
750
+ ],
751
+ "cssVars": [
752
+ { "name": "--lz-size", "default": "6px", "purpose": "Dot diameter" },
753
+ { "name": "--lz-cols", "default": "5", "purpose": "Grid column count" },
754
+ { "name": "--lz-grid-gap", "default": "10px", "purpose": "Grid gap" },
755
+ { "name": "--lz-accent", "default": "#0a84ff", "purpose": "Checking neurons color" },
756
+ { "name": "--lz-color", "default": "#f5f5f7", "purpose": "Resting neurons color" }
757
+ ],
758
+ "keyframeVars": [
759
+ { "name": "--lz-grid-min", "default": "0.3", "purpose": "Resting dot scale" },
760
+ { "name": "--lz-grid-fade", "default": "0.15", "purpose": "Resting dot opacity" }
761
+ ],
762
+ "examples": {
763
+ "html": "<lz-ai-neural rows=\"4\" cols=\"7\" accent=\"#fa114f\"></lz-ai-neural>",
764
+ "react": "<AiNeural rows={4} cols={7} accent=\"#fa114f\" />"
765
+ }
766
+ },
767
+ {
768
+ "id": "waveform",
769
+ "tag": "lz-waveform",
770
+ "reactComponent": "Waveform",
771
+ "category": "Music",
772
+ "role": "status",
773
+ "description": "A mirrored audio waveform pulsing around a center line.",
774
+ "useCases": ["audio apps", "playing states", "podcast waits"],
775
+ "defaults": { "size": 32, "count": 11, "color": "#f5f5f7", "accent": "#0a84ff", "speed": 1 },
776
+ "attributes": [
777
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 32 },
778
+ { "name": "count", "reactProp": "count", "type": "number", "unit": "bars", "default": 11 },
779
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
780
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#0a84ff" },
781
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
782
+ ],
783
+ "cssVars": [
784
+ { "name": "--lz-size", "default": "32px", "purpose": "Wave height" },
785
+ { "name": "--lz-bar-width", "default": "4px", "purpose": "Bar thickness" },
786
+ { "name": "--lz-gap", "default": "4px", "purpose": "Bar spacing" }
787
+ ],
788
+ "keyframeVars": [
789
+ { "name": "--lz-wf-min", "default": "0.22", "purpose": "Resting bar scale" }
790
+ ],
791
+ "examples": {
792
+ "html": "<lz-waveform count=\"15\" accent=\"#bf5af2\"></lz-waveform>",
793
+ "react": "<Waveform count={15} accent=\"#bf5af2\" />"
794
+ }
795
+ },
796
+ {
797
+ "id": "vinyl",
798
+ "tag": "lz-vinyl",
799
+ "reactComponent": "Vinyl",
800
+ "category": "Music",
801
+ "role": "status",
802
+ "description": "A spinning record with a light sheen, label, spindle and a gently bobbing tonearm.",
803
+ "useCases": ["music apps", "retro waits", "album screens"],
804
+ "defaults": { "size": 48, "accent": "#0a84ff", "color": "#f5f5f7", "speed": 1 },
805
+ "attributes": [
806
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 48 },
807
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#0a84ff" },
808
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
809
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
810
+ ],
811
+ "cssVars": [
812
+ { "name": "--lz-size", "default": "48px", "purpose": "Record diameter" },
813
+ { "name": "--lz-accent", "default": "#0a84ff", "purpose": "Label / stylus color" },
814
+ { "name": "--lz-color", "default": "#f5f5f7", "purpose": "Tonearm color" }
815
+ ],
816
+ "keyframeVars": [],
817
+ "examples": {
818
+ "html": "<lz-vinyl accent=\"#fa114f\" color=\"#f5f5f7\"></lz-vinyl>",
819
+ "react": "<Vinyl accent=\"#fa114f\" />"
820
+ }
821
+ },
822
+ {
823
+ "id": "sonar",
824
+ "tag": "lz-sonar",
825
+ "reactComponent": "Sonar",
826
+ "category": "Spinners",
827
+ "role": "status",
828
+ "description": "A pulsing core emitting expanding sonar rings.",
829
+ "useCases": ["radar pings", "location detection", "motion waits"],
830
+ "defaults": { "size": 44, "count": 3, "accent": "#0a84ff", "color": "#f5f5f7", "speed": 1 },
831
+ "attributes": [
832
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 44 },
833
+ { "name": "count", "reactProp": "count", "type": "number", "unit": "rings", "default": 3 },
834
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#0a84ff" },
835
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
836
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
837
+ ],
838
+ "cssVars": [
839
+ { "name": "--lz-size", "default": "44px", "purpose": "Radar size" },
840
+ { "name": "--lz-accent", "default": "#0a84ff", "purpose": "Ring color" },
841
+ { "name": "--lz-color", "default": "#f5f5f7", "purpose": "Core color" }
842
+ ],
843
+ "keyframeVars": [
844
+ { "name": "--lz-sonar-fade", "default": "0.9", "purpose": "Ring start opacity" }
845
+ ],
846
+ "examples": {
847
+ "html": "<lz-sonar count=\"4\" accent=\"#30d158\"></lz-sonar>",
848
+ "react": "<Sonar count={4} accent=\"#30d158\" />"
849
+ }
850
+ },
851
+ {
852
+ "id": "music-note",
853
+ "tag": "lz-music-note",
854
+ "reactComponent": "MusicNote",
855
+ "category": "Music",
856
+ "role": "status",
857
+ "description": "Drawn musical notes with heads, stems and flags bobbing in a sing-song rhythm.",
858
+ "useCases": ["music players", "karaoke", "playful waits"],
859
+ "defaults": { "size": 32, "count": 2, "color": "#f5f5f7", "speed": 1 },
860
+ "attributes": [
861
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 32 },
862
+ { "name": "count", "reactProp": "count", "type": "number", "unit": "notes", "default": 2 },
863
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#f5f5f7" },
864
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
865
+ ],
866
+ "cssVars": [
867
+ { "name": "--lz-size", "default": "32px", "purpose": "Note size" },
868
+ { "name": "--lz-color", "default": "#f5f5f7", "purpose": "Note color" }
869
+ ],
870
+ "keyframeVars": [
871
+ { "name": "--lz-note-bob", "default": "0.35em", "purpose": "Note bob height" }
872
+ ],
873
+ "examples": {
874
+ "html": "<lz-music-note count=\"3\" color=\"#bf5af2\"></lz-music-note>",
875
+ "react": "<MusicNote count={3} color=\"#bf5af2\" />"
876
+ }
877
+ },
878
+ {
879
+ "id": "activity-rings",
880
+ "tag": "lz-activity-rings",
881
+ "reactComponent": "ActivityRings",
882
+ "category": "Bars & rings",
883
+ "role": "img",
884
+ "description": "Three Apple Watch-style activity rings spinning at different speeds and directions.",
885
+ "useCases": ["fitness apps", "health dashboards", "workout sync"],
886
+ "defaults": { "size": 44, "accent": "#fa114f", "color": "#30d158", "colorWeak": "#32d7ff", "speed": 1 },
887
+ "attributes": [
888
+ { "name": "size", "reactProp": "size", "type": "number", "unit": "px", "default": 44 },
889
+ { "name": "accent", "reactProp": "accent", "type": "string", "default": "#fa114f" },
890
+ { "name": "color", "reactProp": "color", "type": "string", "default": "#30d158" },
891
+ { "name": "color-weak", "reactProp": "colorWeak", "type": "string", "default": "#32d7ff" },
892
+ { "name": "speed", "reactProp": "speed", "type": "number", "default": 1 }
893
+ ],
894
+ "cssVars": [
895
+ { "name": "--lz-size", "default": "44px", "purpose": "Ring box size" },
896
+ { "name": "--lz-accent", "default": "#fa114f", "purpose": "Outer ring color" },
897
+ { "name": "--lz-color", "default": "#30d158", "purpose": "Middle ring color" },
898
+ { "name": "--lz-color-weak", "default": "#32d7ff", "purpose": "Inner ring color" }
899
+ ],
900
+ "keyframeVars": [],
901
+ "examples": {
902
+ "html": "<lz-activity-rings size=\"64\"></lz-activity-rings>",
903
+ "react": "<ActivityRings size={64} />"
904
+ }
649
905
  }
650
906
  ]
651
907
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "loading-state-zoo",
3
- "version": "0.2.0",
4
- "description": "17 smooth, transform-only loading patterns as framework-agnostic web components with a thin React wrapper. Works in React, plain web, iOS and Android WebViews.",
3
+ "version": "0.4.0",
4
+ "description": "30 smooth, transform-only loading patterns as framework-agnostic web components with a thin React wrapper. Works in React, plain web, iOS and Android WebViews.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
7
  "module": "./dist/index.js",