@duskmoon-dev/core 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -4568,6 +4568,425 @@ html {
4568
4568
  }
4569
4569
  }
4570
4570
 
4571
+ /**
4572
+ * Cascader Component Styles
4573
+ * DuskMoonUI - Multi-level dropdown selection with horizontal panels
4574
+ */
4575
+
4576
+ @layer components {
4577
+ /* Base Cascader */
4578
+ .cascader {
4579
+ position: relative;
4580
+ display: inline-flex;
4581
+ flex-direction: column;
4582
+ width: 100%;
4583
+ }
4584
+
4585
+ /* Cascader Trigger */
4586
+ .cascader-trigger {
4587
+ display: flex;
4588
+ align-items: center;
4589
+ justify-content: space-between;
4590
+ width: 100%;
4591
+ padding: 0.75rem 1rem;
4592
+ font-size: 1rem;
4593
+ line-height: 1.5rem;
4594
+ color: var(--color-on-surface);
4595
+ background-color: var(--color-surface);
4596
+ border: 1px solid var(--color-outline);
4597
+ border-radius: 0.5rem;
4598
+ cursor: pointer;
4599
+ transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
4600
+ }
4601
+
4602
+ .cascader-trigger:hover:not(:disabled) {
4603
+ border-color: var(--color-on-surface-variant);
4604
+ }
4605
+
4606
+ .cascader-trigger:focus {
4607
+ outline: none;
4608
+ border-color: var(--color-primary);
4609
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
4610
+ }
4611
+
4612
+ .cascader-trigger:disabled {
4613
+ cursor: not-allowed;
4614
+ opacity: 0.5;
4615
+ background-color: var(--color-surface-container);
4616
+ }
4617
+
4618
+ /* Value Display */
4619
+ .cascader-value {
4620
+ flex: 1;
4621
+ display: flex;
4622
+ align-items: center;
4623
+ gap: 0.5rem;
4624
+ overflow: hidden;
4625
+ text-overflow: ellipsis;
4626
+ white-space: nowrap;
4627
+ color: var(--color-on-surface);
4628
+ }
4629
+
4630
+ /* Placeholder */
4631
+ .cascader-placeholder {
4632
+ color: var(--color-on-surface-variant);
4633
+ }
4634
+
4635
+ /* Path Display (breadcrumb-style) */
4636
+ .cascader-path {
4637
+ display: flex;
4638
+ align-items: center;
4639
+ gap: 0.25rem;
4640
+ overflow: hidden;
4641
+ text-overflow: ellipsis;
4642
+ white-space: nowrap;
4643
+ }
4644
+
4645
+ .cascader-path-separator {
4646
+ color: var(--color-on-surface-variant);
4647
+ font-size: 0.875rem;
4648
+ }
4649
+
4650
+ /* Dropdown Arrow */
4651
+ .cascader-arrow {
4652
+ display: flex;
4653
+ align-items: center;
4654
+ justify-content: center;
4655
+ width: 1.25rem;
4656
+ height: 1.25rem;
4657
+ color: var(--color-on-surface-variant);
4658
+ flex-shrink: 0;
4659
+ transition: transform 150ms ease-in-out;
4660
+ }
4661
+
4662
+ .cascader-open .cascader-arrow {
4663
+ transform: rotate(180deg);
4664
+ }
4665
+
4666
+ /* Clear Button */
4667
+ .cascader-clear {
4668
+ display: flex;
4669
+ align-items: center;
4670
+ justify-content: center;
4671
+ width: 1.25rem;
4672
+ height: 1.25rem;
4673
+ padding: 0;
4674
+ color: var(--color-on-surface-variant);
4675
+ background-color: transparent;
4676
+ border: none;
4677
+ border-radius: 50%;
4678
+ cursor: pointer;
4679
+ flex-shrink: 0;
4680
+ transition: background-color 150ms ease-in-out;
4681
+ }
4682
+
4683
+ .cascader-clear:hover {
4684
+ background-color: var(--color-surface-container-high);
4685
+ }
4686
+
4687
+ /* Cascader Dropdown */
4688
+ .cascader-dropdown {
4689
+ position: absolute;
4690
+ top: 100%;
4691
+ left: 0;
4692
+ z-index: 50;
4693
+ display: none;
4694
+ margin-top: 0.25rem;
4695
+ background-color: var(--color-surface);
4696
+ border: 1px solid var(--color-outline-variant);
4697
+ border-radius: 0.5rem;
4698
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
4699
+ overflow: hidden;
4700
+ }
4701
+
4702
+ .cascader-open .cascader-dropdown {
4703
+ display: flex;
4704
+ }
4705
+
4706
+ /* Popover API Support */
4707
+ .cascader-dropdown[popover] {
4708
+ inset: unset;
4709
+ margin: 0;
4710
+ border: 1px solid var(--color-outline-variant);
4711
+ }
4712
+
4713
+ .cascader-dropdown[popover]:popover-open {
4714
+ display: flex;
4715
+ }
4716
+
4717
+ /* CSS Anchor Positioning for modern browsers */
4718
+ @supports (anchor-name: --anchor) {
4719
+ .cascader-trigger {
4720
+ anchor-name: --cascader-anchor;
4721
+ }
4722
+
4723
+ .cascader-dropdown[popover] {
4724
+ position-anchor: --cascader-anchor;
4725
+ top: anchor(bottom);
4726
+ left: anchor(left);
4727
+ margin-top: 0.25rem;
4728
+ position-try-fallbacks: flip-block;
4729
+ }
4730
+ }
4731
+
4732
+ /* Fallback for browsers without anchor positioning */
4733
+ @supports not (anchor-name: --anchor) {
4734
+ .cascader {
4735
+ position: relative;
4736
+ }
4737
+
4738
+ .cascader-dropdown[popover]:popover-open {
4739
+ position: absolute;
4740
+ top: 100%;
4741
+ left: 0;
4742
+ margin-top: 0.25rem;
4743
+ }
4744
+ }
4745
+
4746
+ /* Panels Container (horizontal layout) */
4747
+ .cascader-panels {
4748
+ display: flex;
4749
+ max-height: 16rem;
4750
+ }
4751
+
4752
+ /* Individual Panel */
4753
+ .cascader-panel {
4754
+ display: flex;
4755
+ flex-direction: column;
4756
+ min-width: 10rem;
4757
+ max-width: 14rem;
4758
+ overflow-y: auto;
4759
+ border-right: 1px solid var(--color-outline-variant);
4760
+ }
4761
+
4762
+ .cascader-panel:last-child {
4763
+ border-right: none;
4764
+ }
4765
+
4766
+ /* Panel Header (optional) */
4767
+ .cascader-panel-header {
4768
+ padding: 0.5rem 0.75rem;
4769
+ font-size: 0.75rem;
4770
+ font-weight: 600;
4771
+ color: var(--color-on-surface-variant);
4772
+ text-transform: uppercase;
4773
+ letter-spacing: 0.05em;
4774
+ background-color: var(--color-surface-container);
4775
+ border-bottom: 1px solid var(--color-outline-variant);
4776
+ }
4777
+
4778
+ /* Panel Options */
4779
+ .cascader-options {
4780
+ display: flex;
4781
+ flex-direction: column;
4782
+ padding: 0.25rem;
4783
+ flex: 1;
4784
+ overflow-y: auto;
4785
+ }
4786
+
4787
+ /* Cascader Option */
4788
+ .cascader-option {
4789
+ display: flex;
4790
+ align-items: center;
4791
+ justify-content: space-between;
4792
+ gap: 0.5rem;
4793
+ padding: 0.5rem 0.75rem;
4794
+ font-size: 0.875rem;
4795
+ color: var(--color-on-surface);
4796
+ background-color: transparent;
4797
+ border: none;
4798
+ border-radius: 0.375rem;
4799
+ cursor: pointer;
4800
+ text-align: left;
4801
+ width: 100%;
4802
+ transition: background-color 150ms ease-in-out;
4803
+ }
4804
+
4805
+ .cascader-option:hover {
4806
+ background-color: var(--color-surface-container);
4807
+ }
4808
+
4809
+ .cascader-option-active {
4810
+ background-color: var(--color-surface-container-high);
4811
+ }
4812
+
4813
+ .cascader-option-selected {
4814
+ background-color: var(--color-primary-container);
4815
+ color: var(--color-on-primary-container);
4816
+ }
4817
+
4818
+ .cascader-option-selected:hover {
4819
+ background-color: color-mix(in oklch, var(--color-primary-container), black 5%);
4820
+ }
4821
+
4822
+ .cascader-option-disabled {
4823
+ opacity: 0.5;
4824
+ cursor: not-allowed;
4825
+ }
4826
+
4827
+ .cascader-option-disabled:hover {
4828
+ background-color: transparent;
4829
+ }
4830
+
4831
+ /* Option Label */
4832
+ .cascader-option-label {
4833
+ flex: 1;
4834
+ overflow: hidden;
4835
+ text-overflow: ellipsis;
4836
+ white-space: nowrap;
4837
+ }
4838
+
4839
+ /* Option Arrow (indicates has children) */
4840
+ .cascader-option-arrow {
4841
+ display: flex;
4842
+ align-items: center;
4843
+ justify-content: center;
4844
+ width: 1rem;
4845
+ height: 1rem;
4846
+ color: var(--color-on-surface-variant);
4847
+ flex-shrink: 0;
4848
+ }
4849
+
4850
+ .cascader-option-selected .cascader-option-arrow {
4851
+ color: var(--color-on-primary-container);
4852
+ }
4853
+
4854
+ /* Search Input */
4855
+ .cascader-search {
4856
+ display: flex;
4857
+ padding: 0.5rem;
4858
+ border-bottom: 1px solid var(--color-outline-variant);
4859
+ }
4860
+
4861
+ .cascader-search-input {
4862
+ flex: 1;
4863
+ padding: 0.5rem 0.75rem;
4864
+ font-size: 0.875rem;
4865
+ color: var(--color-on-surface);
4866
+ background-color: var(--color-surface-container);
4867
+ border: none;
4868
+ border-radius: 0.375rem;
4869
+ outline: none;
4870
+ }
4871
+
4872
+ .cascader-search-input:focus {
4873
+ background-color: var(--color-surface-container-high);
4874
+ }
4875
+
4876
+ .cascader-search-input::placeholder {
4877
+ color: var(--color-on-surface-variant);
4878
+ }
4879
+
4880
+ /* Empty State */
4881
+ .cascader-empty {
4882
+ padding: 1.5rem;
4883
+ text-align: center;
4884
+ color: var(--color-on-surface-variant);
4885
+ font-size: 0.875rem;
4886
+ }
4887
+
4888
+ /* Size Variants */
4889
+ .cascader-sm .cascader-trigger {
4890
+ padding: 0.5rem 0.75rem;
4891
+ font-size: 0.875rem;
4892
+ border-radius: 0.375rem;
4893
+ }
4894
+
4895
+ .cascader-sm .cascader-panel {
4896
+ min-width: 8rem;
4897
+ max-width: 12rem;
4898
+ }
4899
+
4900
+ .cascader-sm .cascader-option {
4901
+ padding: 0.375rem 0.5rem;
4902
+ font-size: 0.8125rem;
4903
+ }
4904
+
4905
+ .cascader-lg .cascader-trigger {
4906
+ padding: 1rem 1.25rem;
4907
+ font-size: 1.125rem;
4908
+ border-radius: 0.625rem;
4909
+ }
4910
+
4911
+ .cascader-lg .cascader-panel {
4912
+ min-width: 12rem;
4913
+ max-width: 16rem;
4914
+ }
4915
+
4916
+ .cascader-lg .cascader-option {
4917
+ padding: 0.625rem 1rem;
4918
+ font-size: 1rem;
4919
+ }
4920
+
4921
+ /* Outlined Variant (Default) */
4922
+ .cascader-outlined .cascader-trigger {
4923
+ background-color: var(--color-surface);
4924
+ border: 1px solid var(--color-outline);
4925
+ }
4926
+
4927
+ /* Filled Variant */
4928
+ .cascader-filled .cascader-trigger {
4929
+ background-color: var(--color-surface-container);
4930
+ border: none;
4931
+ border-bottom: 2px solid var(--color-outline);
4932
+ border-radius: 0.5rem 0.5rem 0 0;
4933
+ }
4934
+
4935
+ .cascader-filled .cascader-trigger:focus {
4936
+ border-bottom-color: var(--color-primary);
4937
+ box-shadow: none;
4938
+ }
4939
+
4940
+ /* Error State */
4941
+ .cascader-error .cascader-trigger {
4942
+ border-color: var(--color-error);
4943
+ }
4944
+
4945
+ .cascader-error .cascader-trigger:focus {
4946
+ border-color: var(--color-error);
4947
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
4948
+ }
4949
+
4950
+ /* Disabled State */
4951
+ .cascader-disabled .cascader-trigger {
4952
+ cursor: not-allowed;
4953
+ opacity: 0.5;
4954
+ background-color: var(--color-surface-container);
4955
+ }
4956
+
4957
+ /* Loading State */
4958
+ .cascader-loading .cascader-trigger {
4959
+ cursor: wait;
4960
+ }
4961
+
4962
+ .cascader-spinner {
4963
+ display: inline-block;
4964
+ width: 1rem;
4965
+ height: 1rem;
4966
+ border: 2px solid var(--color-outline);
4967
+ border-top-color: var(--color-primary);
4968
+ border-radius: 50%;
4969
+ animation: cascader-spin 0.8s linear infinite;
4970
+ }
4971
+
4972
+ @keyframes cascader-spin {
4973
+ to { transform: rotate(360deg); }
4974
+ }
4975
+
4976
+ /* Reduce Motion */
4977
+ @media (prefers-reduced-motion: reduce) {
4978
+ .cascader-trigger,
4979
+ .cascader-arrow,
4980
+ .cascader-option,
4981
+ .cascader-clear {
4982
+ transition: none;
4983
+ }
4984
+ .cascader-spinner {
4985
+ animation: none;
4986
+ }
4987
+ }
4988
+ }
4989
+
4571
4990
  /**
4572
4991
  * Checkbox Component Styles
4573
4992
  * DuskMoonUI - Material Design 3 inspired checkbox
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duskmoon-dev/core",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "DuskMoonUI - Tailwind CSS v4 plugin with Material Design 3 color system and component styles",
5
5
  "type": "module",
6
6
  "main": "./dist/index.css",