@malilion/block-ui-react 0.1.0 → 0.2.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.
Files changed (97) hide show
  1. package/dist/components/actions/BlockMenu/BlockMenu.d.ts +9 -0
  2. package/dist/components/actions/BlockMenu/BlockMenu.d.ts.map +1 -0
  3. package/dist/components/actions/BlockMenu/BlockMenu.js +211 -0
  4. package/dist/components/actions/BlockMenu/BlockMenu.js.map +1 -0
  5. package/dist/components/actions/BlockMenu/BlockMenu.module.js +23 -0
  6. package/dist/components/actions/BlockMenu/BlockMenu.module.js.map +1 -0
  7. package/dist/components/actions/BlockMenu/BlockMenu.types.d.ts +42 -0
  8. package/dist/components/actions/BlockMenu/BlockMenu.types.d.ts.map +1 -0
  9. package/dist/components/actions/BlockMenu/BlockMenu.utils.d.ts +10 -0
  10. package/dist/components/actions/BlockMenu/BlockMenu.utils.d.ts.map +1 -0
  11. package/dist/components/actions/BlockMenu/BlockMenu.utils.js +26 -0
  12. package/dist/components/actions/BlockMenu/BlockMenu.utils.js.map +1 -0
  13. package/dist/components/actions/BlockMenu/index.d.ts +3 -0
  14. package/dist/components/actions/BlockMenu/index.d.ts.map +1 -0
  15. package/dist/components/actions/index.d.ts +1 -0
  16. package/dist/components/actions/index.d.ts.map +1 -1
  17. package/dist/components/display/BlockTable/BlockTable.d.ts +8 -0
  18. package/dist/components/display/BlockTable/BlockTable.d.ts.map +1 -0
  19. package/dist/components/display/BlockTable/BlockTable.js +92 -0
  20. package/dist/components/display/BlockTable/BlockTable.js.map +1 -0
  21. package/dist/components/display/BlockTable/BlockTable.module.js +31 -0
  22. package/dist/components/display/BlockTable/BlockTable.module.js.map +1 -0
  23. package/dist/components/display/BlockTable/BlockTable.types.d.ts +49 -0
  24. package/dist/components/display/BlockTable/BlockTable.types.d.ts.map +1 -0
  25. package/dist/components/display/BlockTable/BlockTable.utils.d.ts +8 -0
  26. package/dist/components/display/BlockTable/BlockTable.utils.d.ts.map +1 -0
  27. package/dist/components/display/BlockTable/BlockTable.utils.js +48 -0
  28. package/dist/components/display/BlockTable/BlockTable.utils.js.map +1 -0
  29. package/dist/components/display/BlockTable/index.d.ts +3 -0
  30. package/dist/components/display/BlockTable/index.d.ts.map +1 -0
  31. package/dist/components/display/BlockTooltip/BlockTooltip.d.ts +8 -0
  32. package/dist/components/display/BlockTooltip/BlockTooltip.d.ts.map +1 -0
  33. package/dist/components/display/BlockTooltip/BlockTooltip.js +83 -0
  34. package/dist/components/display/BlockTooltip/BlockTooltip.js.map +1 -0
  35. package/dist/components/display/BlockTooltip/BlockTooltip.module.js +11 -0
  36. package/dist/components/display/BlockTooltip/BlockTooltip.module.js.map +1 -0
  37. package/dist/components/display/BlockTooltip/BlockTooltip.types.d.ts +20 -0
  38. package/dist/components/display/BlockTooltip/BlockTooltip.types.d.ts.map +1 -0
  39. package/dist/components/display/BlockTooltip/BlockTooltip.types.js +11 -0
  40. package/dist/components/display/BlockTooltip/BlockTooltip.types.js.map +1 -0
  41. package/dist/components/display/BlockTooltip/index.d.ts +4 -0
  42. package/dist/components/display/BlockTooltip/index.d.ts.map +1 -0
  43. package/dist/components/display/index.d.ts +2 -0
  44. package/dist/components/display/index.d.ts.map +1 -1
  45. package/dist/components/layout/BlockDivider/BlockDivider.d.ts +7 -0
  46. package/dist/components/layout/BlockDivider/BlockDivider.d.ts.map +1 -0
  47. package/dist/components/layout/BlockDivider/BlockDivider.js +54 -0
  48. package/dist/components/layout/BlockDivider/BlockDivider.js.map +1 -0
  49. package/dist/components/layout/BlockDivider/BlockDivider.module.js +13 -0
  50. package/dist/components/layout/BlockDivider/BlockDivider.module.js.map +1 -0
  51. package/dist/components/layout/BlockDivider/BlockDivider.types.d.ts +14 -0
  52. package/dist/components/layout/BlockDivider/BlockDivider.types.d.ts.map +1 -0
  53. package/dist/components/layout/BlockDivider/BlockDivider.types.js +10 -0
  54. package/dist/components/layout/BlockDivider/BlockDivider.types.js.map +1 -0
  55. package/dist/components/layout/BlockDivider/index.d.ts +4 -0
  56. package/dist/components/layout/BlockDivider/index.d.ts.map +1 -0
  57. package/dist/components/layout/BlockStack/BlockStack.d.ts +4 -0
  58. package/dist/components/layout/BlockStack/BlockStack.d.ts.map +1 -0
  59. package/dist/components/layout/BlockStack/BlockStack.js +22 -0
  60. package/dist/components/layout/BlockStack/BlockStack.js.map +1 -0
  61. package/dist/components/layout/BlockStack/BlockStack.module.js +7 -0
  62. package/dist/components/layout/BlockStack/BlockStack.module.js.map +1 -0
  63. package/dist/components/layout/BlockStack/BlockStack.types.d.ts +24 -0
  64. package/dist/components/layout/BlockStack/BlockStack.types.d.ts.map +1 -0
  65. package/dist/components/layout/BlockStack/BlockStack.types.js +18 -0
  66. package/dist/components/layout/BlockStack/BlockStack.types.js.map +1 -0
  67. package/dist/components/layout/BlockStack/index.d.ts +4 -0
  68. package/dist/components/layout/BlockStack/index.d.ts.map +1 -0
  69. package/dist/components/layout/index.d.ts +2 -0
  70. package/dist/components/layout/index.d.ts.map +1 -1
  71. package/dist/components/navigation/BlockPagination/BlockPagination.d.ts +7 -0
  72. package/dist/components/navigation/BlockPagination/BlockPagination.d.ts.map +1 -0
  73. package/dist/components/navigation/BlockPagination/BlockPagination.js +83 -0
  74. package/dist/components/navigation/BlockPagination/BlockPagination.js.map +1 -0
  75. package/dist/components/navigation/BlockPagination/BlockPagination.module.js +19 -0
  76. package/dist/components/navigation/BlockPagination/BlockPagination.module.js.map +1 -0
  77. package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts +22 -0
  78. package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts.map +1 -0
  79. package/dist/components/navigation/BlockPagination/BlockPagination.utils.d.ts +7 -0
  80. package/dist/components/navigation/BlockPagination/BlockPagination.utils.d.ts.map +1 -0
  81. package/dist/components/navigation/BlockPagination/BlockPagination.utils.js +26 -0
  82. package/dist/components/navigation/BlockPagination/BlockPagination.utils.js.map +1 -0
  83. package/dist/components/navigation/BlockPagination/index.d.ts +5 -0
  84. package/dist/components/navigation/BlockPagination/index.d.ts.map +1 -0
  85. package/dist/components/navigation/index.d.ts +1 -0
  86. package/dist/components/navigation/index.d.ts.map +1 -1
  87. package/dist/hooks/useAnchoredPosition.d.ts +17 -0
  88. package/dist/hooks/useAnchoredPosition.d.ts.map +1 -0
  89. package/dist/hooks/useAnchoredPosition.js +62 -0
  90. package/dist/hooks/useAnchoredPosition.js.map +1 -0
  91. package/dist/index.js +11 -1
  92. package/dist/styles.css +529 -0
  93. package/dist/utils/position.d.ts +41 -0
  94. package/dist/utils/position.d.ts.map +1 -0
  95. package/dist/utils/position.js +48 -0
  96. package/dist/utils/position.js.map +1 -0
  97. package/package.json +4 -4
package/dist/styles.css CHANGED
@@ -730,6 +730,105 @@
730
730
  padding-top: 0;
731
731
  filter: drop-shadow(1px 1px 0 var(--block-border));
732
732
  }
733
+ .block-root-YWJbx {
734
+ position: relative;
735
+ display: inline-flex;
736
+ }
737
+
738
+ .block-chevron-KdTgQ {
739
+ display: inline-flex;
740
+ transition: transform var(--block-duration-instant) var(--block-ease-step);
741
+ }
742
+
743
+ .block-root-YWJbx[data-open] .block-chevron-KdTgQ {
744
+ transform: rotate(180deg);
745
+ }
746
+
747
+ .block-menu-KgvDw {
748
+ position: fixed;
749
+ top: var(--block-float-y, 0);
750
+ left: var(--block-float-x, 0);
751
+ z-index: var(--block-z-dropdown);
752
+ display: flex;
753
+ flex-direction: column;
754
+ min-width: max(var(--block-float-anchor-width, 0px), 200px);
755
+ max-width: min(320px, calc(100vw - var(--block-space-4)));
756
+ max-height: calc(100vh - var(--block-space-4));
757
+ overflow-y: auto;
758
+ padding: var(--block-space-1);
759
+ background-color: var(--block-surface);
760
+ border: var(--block-border-width) solid var(--block-border);
761
+ box-shadow: var(--block-shadow-bevel), var(--block-shadow-drop);
762
+ }
763
+
764
+ .block-menu-KgvDw[hidden] {
765
+ display: none;
766
+ }
767
+
768
+ .block-item-u39c- {
769
+ display: flex;
770
+ align-items: center;
771
+ gap: var(--block-space-2);
772
+ width: 100%;
773
+ min-height: var(--block-size-control-sm);
774
+ padding: var(--block-space-1) var(--block-space-2);
775
+ font: inherit;
776
+ font-size: var(--block-font-size-sm);
777
+ font-weight: var(--block-font-weight-medium);
778
+ text-align: left;
779
+ color: var(--block-text);
780
+ background: transparent;
781
+ border: var(--block-border-width-thin) solid transparent;
782
+ cursor: pointer;
783
+ }
784
+
785
+ .block-item-u39c-:hover:not([aria-disabled]),
786
+ .block-item-u39c-:focus-visible {
787
+ background-color: var(--block-slot-hover);
788
+ border-color: var(--block-border);
789
+ }
790
+
791
+ .block-item-u39c-:focus-visible {
792
+ outline: 3px solid var(--block-focus);
793
+ outline-offset: -3px;
794
+ }
795
+
796
+ .block-item-u39c-[aria-disabled] {
797
+ color: var(--block-text-muted);
798
+ cursor: not-allowed;
799
+ opacity: 0.6;
800
+ }
801
+
802
+ .block-item-u39c-[data-danger] {
803
+ color: var(--block-redstone-light);
804
+ }
805
+
806
+ .block-icon-OVCC3 {
807
+ display: inline-flex;
808
+ flex-shrink: 0;
809
+ width: 16px;
810
+ }
811
+
812
+ .block-label-r-rZl {
813
+ flex: 1;
814
+ min-width: 0;
815
+ overflow-wrap: anywhere;
816
+ }
817
+
818
+ .block-shortcut-5Sekq {
819
+ flex-shrink: 0;
820
+ margin-left: var(--block-space-3);
821
+ font-family: var(--block-font-mono);
822
+ font-size: var(--block-font-size-xs);
823
+ color: var(--block-text-muted);
824
+ }
825
+
826
+ .block-separator-xmDN6 {
827
+ height: 4px;
828
+ margin: var(--block-space-1) 0;
829
+ background-color: var(--block-shadow-bevel-dark);
830
+ box-shadow: inset -2px -2px 0 var(--block-shadow-bevel-light);
831
+ }
733
832
  .block-field-mjy2g {
734
833
  display: flex;
735
834
  flex-direction: column;
@@ -2549,6 +2648,221 @@ div.block-slot-ZIG6g:not([role="gridcell"]):not([tabindex]) {
2549
2648
  .block-play-3bOpR {
2550
2649
  flex-shrink: 0;
2551
2650
  }
2651
+ .block-anchor-3LOJ3 {
2652
+ display: inline-flex;
2653
+ vertical-align: middle;
2654
+ }
2655
+
2656
+ .block-tooltip-K9Jn9 {
2657
+ position: fixed;
2658
+ top: var(--block-float-y, 0);
2659
+ left: var(--block-float-x, 0);
2660
+ z-index: var(--block-z-tooltip);
2661
+ width: max-content;
2662
+ max-width: min(280px, calc(100vw - var(--block-space-4)));
2663
+ padding: var(--block-space-1) var(--block-space-2);
2664
+ font-family: var(--block-font-body);
2665
+ font-size: var(--block-font-size-sm);
2666
+ font-weight: var(--block-font-weight-medium);
2667
+ line-height: var(--block-line-height-tight);
2668
+ text-align: left;
2669
+ text-transform: none;
2670
+ white-space: normal;
2671
+ color: var(--block-text-primary);
2672
+ background-color: var(--block-obsidian-dark);
2673
+ border: var(--block-border-width-thin) solid var(--block-black);
2674
+ box-shadow:
2675
+ inset 0 0 0 2px var(--block-obsidian-light),
2676
+ var(--block-shadow-drop);
2677
+ }
2678
+
2679
+ .block-tooltip-K9Jn9[hidden] {
2680
+ display: none;
2681
+ }
2682
+
2683
+ .block-tooltip-K9Jn9[data-size="sm"] {
2684
+ max-width: min(200px, calc(100vw - var(--block-space-4)));
2685
+ }
2686
+
2687
+ /* Pixel arrow, aligned with the anchor's center even when the box slides. */
2688
+ .block-tooltip-K9Jn9::after {
2689
+ content: "";
2690
+ position: absolute;
2691
+ width: 8px;
2692
+ height: 8px;
2693
+ background-color: var(--block-obsidian-light);
2694
+ }
2695
+
2696
+ .block-tooltip-K9Jn9[data-placement="top"]::after,
2697
+ .block-tooltip-K9Jn9[data-placement="bottom"]::after {
2698
+ left: calc(var(--block-float-arrow, 50%) - 4px);
2699
+ }
2700
+
2701
+ .block-tooltip-K9Jn9[data-placement="left"]::after,
2702
+ .block-tooltip-K9Jn9[data-placement="right"]::after {
2703
+ top: calc(var(--block-float-arrow, 50%) - 4px);
2704
+ }
2705
+
2706
+ .block-tooltip-K9Jn9[data-placement="top"]::after {
2707
+ top: 100%;
2708
+ clip-path: polygon(0 0, 100% 0, 50% 100%);
2709
+ }
2710
+
2711
+ .block-tooltip-K9Jn9[data-placement="bottom"]::after {
2712
+ bottom: 100%;
2713
+ clip-path: polygon(50% 0, 100% 100%, 0 100%);
2714
+ }
2715
+
2716
+ .block-tooltip-K9Jn9[data-placement="left"]::after {
2717
+ left: 100%;
2718
+ clip-path: polygon(0 0, 100% 50%, 0 100%);
2719
+ }
2720
+
2721
+ .block-tooltip-K9Jn9[data-placement="right"]::after {
2722
+ right: 100%;
2723
+ clip-path: polygon(100% 0, 100% 100%, 0 50%);
2724
+ }
2725
+ .block-wrapper-tQfa- {
2726
+ max-width: 100%;
2727
+ overflow-x: auto;
2728
+ background-color: var(--block-surface);
2729
+ border: var(--block-border-width) solid var(--block-border);
2730
+ box-shadow: var(--block-shadow-bevel);
2731
+ scrollbar-width: thin;
2732
+ }
2733
+
2734
+ .block-wrapper-tQfa-:focus-visible {
2735
+ outline: 3px solid var(--block-focus);
2736
+ outline-offset: 2px;
2737
+ }
2738
+
2739
+ .block-table-x1Qnx {
2740
+ width: 100%;
2741
+ border-collapse: collapse;
2742
+ font-size: var(--block-font-size-sm);
2743
+ color: var(--block-text);
2744
+ font-variant-numeric: tabular-nums;
2745
+ }
2746
+
2747
+ .block-caption-T-Obe {
2748
+ padding: var(--block-space-2) var(--block-space-3);
2749
+ font-family: var(--block-font-display);
2750
+ font-size: var(--block-font-size-md);
2751
+ font-weight: var(--block-font-weight-bold);
2752
+ letter-spacing: var(--block-letter-spacing-wide);
2753
+ text-align: left;
2754
+ text-transform: uppercase;
2755
+ text-shadow: var(--block-shadow-text);
2756
+ background-color: var(--block-surface-header);
2757
+ border-bottom: var(--block-border-width-thin) solid var(--block-border);
2758
+ }
2759
+
2760
+ .block-col-L7kx6 {
2761
+ width: var(--block-table-col-width);
2762
+ }
2763
+
2764
+ .block-headerCell-LQKy8 {
2765
+ padding: var(--block-space-2) var(--block-space-3);
2766
+ font-family: var(--block-font-display);
2767
+ font-size: var(--block-font-size-xs);
2768
+ font-weight: var(--block-font-weight-bold);
2769
+ letter-spacing: var(--block-letter-spacing-wide);
2770
+ text-transform: uppercase;
2771
+ white-space: nowrap;
2772
+ color: var(--block-text-muted);
2773
+ background-color: var(--block-surface-alt);
2774
+ border-bottom: var(--block-border-width) solid var(--block-border);
2775
+ }
2776
+
2777
+ .block-sticky-M7fKZ {
2778
+ overflow: visible;
2779
+ }
2780
+
2781
+ .block-sticky-M7fKZ .block-headerCell-LQKy8 {
2782
+ position: sticky;
2783
+ top: 0;
2784
+ z-index: var(--block-z-sticky);
2785
+ }
2786
+
2787
+ .block-cell-yLLKH {
2788
+ padding: var(--block-space-2) var(--block-space-3);
2789
+ border-bottom: var(--block-border-width-thin) solid var(--block-shadow-bevel-dark);
2790
+ vertical-align: middle;
2791
+ }
2792
+
2793
+ .block-table-x1Qnx[data-size="sm"] .block-headerCell-LQKy8,
2794
+ .block-table-x1Qnx[data-size="sm"] .block-cell-yLLKH {
2795
+ padding: var(--block-space-1) var(--block-space-2);
2796
+ }
2797
+
2798
+ .block-rowHeader-cYBI3 {
2799
+ font-weight: var(--block-font-weight-bold);
2800
+ text-align: left;
2801
+ }
2802
+
2803
+ .block-row-cNM95:last-child .block-cell-yLLKH {
2804
+ border-bottom: 0;
2805
+ }
2806
+
2807
+ .block-table-x1Qnx[data-striped] .block-row-cNM95:nth-child(even) {
2808
+ background-color: color-mix(in srgb, var(--block-surface-alt) 70%, transparent);
2809
+ }
2810
+
2811
+ .block-row-cNM95:hover {
2812
+ background-color: var(--block-slot-hover);
2813
+ }
2814
+
2815
+ .block-table-x1Qnx [data-align="start"] {
2816
+ text-align: start;
2817
+ }
2818
+
2819
+ .block-table-x1Qnx [data-align="center"] {
2820
+ text-align: center;
2821
+ }
2822
+
2823
+ .block-table-x1Qnx [data-align="end"] {
2824
+ text-align: end;
2825
+ }
2826
+
2827
+ .block-sortButton-Lr2ri {
2828
+ display: inline-flex;
2829
+ align-items: center;
2830
+ gap: var(--block-space-1);
2831
+ margin: calc(-1 * var(--block-space-1));
2832
+ padding: var(--block-space-1);
2833
+ font: inherit;
2834
+ letter-spacing: inherit;
2835
+ text-transform: inherit;
2836
+ color: inherit;
2837
+ background: none;
2838
+ border: 0;
2839
+ cursor: pointer;
2840
+ }
2841
+
2842
+ .block-sortButton-Lr2ri:hover,
2843
+ .block-sortButton-Lr2ri[data-direction] {
2844
+ color: var(--block-text);
2845
+ }
2846
+
2847
+ .block-sortButton-Lr2ri:focus-visible {
2848
+ outline: 3px solid var(--block-focus);
2849
+ outline-offset: 0;
2850
+ }
2851
+
2852
+ .block-sortIcon-tm-Vg {
2853
+ display: inline-flex;
2854
+ opacity: 0.35;
2855
+ }
2856
+
2857
+ .block-sortButton-Lr2ri[data-direction] .block-sortIcon-tm-Vg {
2858
+ opacity: 1;
2859
+ }
2860
+
2861
+ .block-empty-B21lk {
2862
+ padding: var(--block-space-6) var(--block-space-3);
2863
+ text-align: center;
2864
+ color: var(--block-text-muted);
2865
+ }
2552
2866
  .block-sidebar-h3ahB {
2553
2867
  display: flex;
2554
2868
  flex-direction: column;
@@ -2971,6 +3285,221 @@ div.block-slot-ZIG6g:not([role="gridcell"]):not([tabindex]) {
2971
3285
  display: none;
2972
3286
  }
2973
3287
  }
3288
+ .block-pagination-jR1nM {
3289
+ min-width: 0;
3290
+ }
3291
+
3292
+ .block-list-Z1jbw {
3293
+ display: flex;
3294
+ flex-wrap: wrap;
3295
+ align-items: center;
3296
+ gap: var(--block-space-1);
3297
+ margin: 0;
3298
+ padding: 0;
3299
+ list-style: none;
3300
+ }
3301
+
3302
+ .block-page-BkAnx,
3303
+ .block-arrow-ry9f4 {
3304
+ min-width: var(--block-size-control-md);
3305
+ padding-inline: var(--block-space-2);
3306
+ font-variant-numeric: tabular-nums;
3307
+ }
3308
+
3309
+ .block-pagination-jR1nM[data-size="sm"] .block-page-BkAnx,
3310
+ .block-pagination-jR1nM[data-size="sm"] .block-arrow-ry9f4 {
3311
+ min-width: var(--block-size-control-sm);
3312
+ padding-inline: var(--block-space-1);
3313
+ }
3314
+
3315
+ .block-ellipsis-nx5KR {
3316
+ display: inline-flex;
3317
+ justify-content: center;
3318
+ min-width: var(--block-space-6);
3319
+ font-family: var(--block-font-display);
3320
+ color: var(--block-text-muted);
3321
+ }
3322
+
3323
+ .block-status-jjwdn {
3324
+ padding-inline: var(--block-space-3);
3325
+ font-family: var(--block-font-display);
3326
+ font-size: var(--block-font-size-sm);
3327
+ font-weight: var(--block-font-weight-bold);
3328
+ text-transform: uppercase;
3329
+ white-space: nowrap;
3330
+ color: var(--block-text);
3331
+ }
3332
+ .block-stack-z5qhc {
3333
+ display: flex;
3334
+ flex-direction: column;
3335
+ min-width: 0;
3336
+ margin: 0;
3337
+ padding: 0;
3338
+ list-style: none;
3339
+ }
3340
+
3341
+ .block-stack-z5qhc[data-direction="row"] {
3342
+ flex-direction: row;
3343
+ }
3344
+
3345
+ .block-stack-z5qhc[data-wrap] {
3346
+ flex-wrap: wrap;
3347
+ }
3348
+
3349
+ .block-stack-z5qhc[data-gap="0"] {
3350
+ gap: var(--block-space-0);
3351
+ }
3352
+
3353
+ .block-stack-z5qhc[data-gap="1"] {
3354
+ gap: var(--block-space-1);
3355
+ }
3356
+
3357
+ .block-stack-z5qhc[data-gap="2"] {
3358
+ gap: var(--block-space-2);
3359
+ }
3360
+
3361
+ .block-stack-z5qhc[data-gap="3"] {
3362
+ gap: var(--block-space-3);
3363
+ }
3364
+
3365
+ .block-stack-z5qhc[data-gap="4"] {
3366
+ gap: var(--block-space-4);
3367
+ }
3368
+
3369
+ .block-stack-z5qhc[data-gap="5"] {
3370
+ gap: var(--block-space-5);
3371
+ }
3372
+
3373
+ .block-stack-z5qhc[data-gap="6"] {
3374
+ gap: var(--block-space-6);
3375
+ }
3376
+
3377
+ .block-stack-z5qhc[data-gap="8"] {
3378
+ gap: var(--block-space-8);
3379
+ }
3380
+
3381
+ .block-stack-z5qhc[data-gap="10"] {
3382
+ gap: var(--block-space-10);
3383
+ }
3384
+
3385
+ .block-stack-z5qhc[data-gap="12"] {
3386
+ gap: var(--block-space-12);
3387
+ }
3388
+
3389
+ .block-stack-z5qhc[data-align="start"] {
3390
+ align-items: flex-start;
3391
+ }
3392
+
3393
+ .block-stack-z5qhc[data-align="center"] {
3394
+ align-items: center;
3395
+ }
3396
+
3397
+ .block-stack-z5qhc[data-align="end"] {
3398
+ align-items: flex-end;
3399
+ }
3400
+
3401
+ .block-stack-z5qhc[data-align="stretch"] {
3402
+ align-items: stretch;
3403
+ }
3404
+
3405
+ .block-stack-z5qhc[data-align="baseline"] {
3406
+ align-items: baseline;
3407
+ }
3408
+
3409
+ .block-stack-z5qhc[data-justify="start"] {
3410
+ justify-content: flex-start;
3411
+ }
3412
+
3413
+ .block-stack-z5qhc[data-justify="center"] {
3414
+ justify-content: center;
3415
+ }
3416
+
3417
+ .block-stack-z5qhc[data-justify="end"] {
3418
+ justify-content: flex-end;
3419
+ }
3420
+
3421
+ .block-stack-z5qhc[data-justify="between"] {
3422
+ justify-content: space-between;
3423
+ }
3424
+
3425
+ .block-stack-z5qhc[data-justify="around"] {
3426
+ justify-content: space-around;
3427
+ }
3428
+
3429
+ @media (max-width: 767.98px) {
3430
+ .block-stack-z5qhc[data-stack-mobile] {
3431
+ flex-direction: column;
3432
+ }
3433
+ }
3434
+ .block-divider-7wQzM {
3435
+ --divider-thickness: 4px;
3436
+ flex-shrink: 0;
3437
+ margin: 0;
3438
+ padding: 0;
3439
+ border: 0;
3440
+ color: var(--block-text-muted);
3441
+ }
3442
+
3443
+ /* Horizontal / vertical lines share one look, drawn by .divider or .line. */
3444
+ .block-divider-7wQzM:not([data-labelled]),
3445
+ .block-line-WiUib {
3446
+ background-color: var(--block-border);
3447
+ }
3448
+
3449
+ .block-divider-7wQzM[data-orientation="horizontal"]:not([data-labelled]),
3450
+ .block-line-WiUib {
3451
+ width: 100%;
3452
+ height: var(--divider-thickness);
3453
+ }
3454
+
3455
+ .block-divider-7wQzM[data-orientation="vertical"] {
3456
+ align-self: stretch;
3457
+ width: var(--divider-thickness);
3458
+ min-height: 1em;
3459
+ }
3460
+
3461
+ .block-divider-7wQzM[data-variant="bevel"]:not([data-labelled]),
3462
+ .block-divider-7wQzM[data-variant="bevel"] .block-line-WiUib {
3463
+ background-color: var(--block-shadow-bevel-dark);
3464
+ box-shadow: inset -2px -2px 0 var(--block-shadow-bevel-light);
3465
+ }
3466
+
3467
+ .block-divider-7wQzM[data-variant="line"] {
3468
+ --divider-thickness: 2px;
3469
+ }
3470
+
3471
+ .block-divider-7wQzM[data-variant="dashed"]:not([data-labelled]),
3472
+ .block-divider-7wQzM[data-variant="dashed"] .block-line-WiUib {
3473
+ background-color: transparent;
3474
+ background-image: linear-gradient(90deg, var(--block-border) 50%, transparent 50%);
3475
+ background-size: 8px 100%;
3476
+ }
3477
+
3478
+ .block-divider-7wQzM[data-orientation="vertical"][data-variant="dashed"] {
3479
+ background-image: linear-gradient(180deg, var(--block-border) 50%, transparent 50%);
3480
+ background-size: 100% 8px;
3481
+ }
3482
+
3483
+ .block-divider-7wQzM[data-labelled] {
3484
+ display: flex;
3485
+ align-items: center;
3486
+ gap: var(--block-space-3);
3487
+ width: 100%;
3488
+ }
3489
+
3490
+ .block-line-WiUib {
3491
+ flex: 1;
3492
+ min-width: var(--block-space-4);
3493
+ }
3494
+
3495
+ .block-label-5tJ-t {
3496
+ flex-shrink: 0;
3497
+ font-family: var(--block-font-display);
3498
+ font-size: var(--block-font-size-sm);
3499
+ font-weight: var(--block-font-weight-bold);
3500
+ letter-spacing: var(--block-letter-spacing-wide);
3501
+ text-transform: uppercase;
3502
+ }
2974
3503
  .block-overlay-gc2QW {
2975
3504
  position: fixed;
2976
3505
  inset: 0;
@@ -0,0 +1,41 @@
1
+ export type FloatingSide = "top" | "bottom" | "left" | "right";
2
+ export type FloatingAlign = "start" | "center" | "end";
3
+ export interface FloatingPosition {
4
+ /** Viewport coordinates for a `position: fixed` element. */
5
+ x: number;
6
+ y: number;
7
+ /** The side actually used after flipping. */
8
+ side: FloatingSide;
9
+ /** Anchor center along the floating element's edge, for an arrow. */
10
+ arrow: number;
11
+ }
12
+ interface Rect {
13
+ top: number;
14
+ bottom: number;
15
+ left: number;
16
+ right: number;
17
+ width: number;
18
+ height: number;
19
+ }
20
+ /**
21
+ * Places a floating box next to an anchor: on `side` if it fits, otherwise on
22
+ * the opposite side (when that fits better), then slides it along the edge so
23
+ * it stays inside the viewport.
24
+ */
25
+ export declare function computePosition({ anchor, floating, viewport, side, align, gap, margin, }: {
26
+ anchor: Rect;
27
+ floating: {
28
+ width: number;
29
+ height: number;
30
+ };
31
+ viewport: {
32
+ width: number;
33
+ height: number;
34
+ };
35
+ side: FloatingSide;
36
+ align?: FloatingAlign;
37
+ gap?: number;
38
+ margin?: number;
39
+ }): FloatingPosition;
40
+ export {};
41
+ //# sourceMappingURL=position.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/utils/position.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,6CAA6C;IAC7C,IAAI,EAAE,YAAY,CAAC;IACnB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,IAAI;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAaD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,KAAgB,EAChB,GAAO,EACP,MAAU,GACX,EAAE;IACD,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,gBAAgB,CAgCnB"}
@@ -0,0 +1,48 @@
1
+ //#region src/utils/position.ts
2
+ var OPPOSITE = {
3
+ top: "bottom",
4
+ bottom: "top",
5
+ left: "right",
6
+ right: "left"
7
+ };
8
+ function clampInto(value, size, viewport, margin) {
9
+ return Math.max(margin, Math.min(value, viewport - margin - size));
10
+ }
11
+ /**
12
+ * Places a floating box next to an anchor: on `side` if it fits, otherwise on
13
+ * the opposite side (when that fits better), then slides it along the edge so
14
+ * it stays inside the viewport.
15
+ */
16
+ function computePosition({ anchor, floating, viewport, side, align = "center", gap = 8, margin = 8 }) {
17
+ const space = {
18
+ top: anchor.top - gap - margin,
19
+ bottom: viewport.height - anchor.bottom - gap - margin,
20
+ left: anchor.left - gap - margin,
21
+ right: viewport.width - anchor.right - gap - margin
22
+ };
23
+ const needed = side === "top" || side === "bottom" ? floating.height : floating.width;
24
+ const flipped = OPPOSITE[side];
25
+ const actual = space[side] < needed && space[flipped] > space[side] ? flipped : side;
26
+ if (actual === "top" || actual === "bottom") {
27
+ const y = actual === "top" ? anchor.top - gap - floating.height : anchor.bottom + gap;
28
+ const x = clampInto(align === "start" ? anchor.left : align === "end" ? anchor.right - floating.width : anchor.left + (anchor.width - floating.width) / 2, floating.width, viewport.width, margin);
29
+ return {
30
+ x,
31
+ y,
32
+ side: actual,
33
+ arrow: anchor.left + anchor.width / 2 - x
34
+ };
35
+ }
36
+ const x = actual === "left" ? anchor.left - gap - floating.width : anchor.right + gap;
37
+ const y = clampInto(align === "start" ? anchor.top : align === "end" ? anchor.bottom - floating.height : anchor.top + (anchor.height - floating.height) / 2, floating.height, viewport.height, margin);
38
+ return {
39
+ x,
40
+ y,
41
+ side: actual,
42
+ arrow: anchor.top + anchor.height / 2 - y
43
+ };
44
+ }
45
+ //#endregion
46
+ export { computePosition };
47
+
48
+ //# sourceMappingURL=position.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.js","names":[],"sources":["../../src/utils/position.ts"],"sourcesContent":["export type FloatingSide = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type FloatingAlign = \"start\" | \"center\" | \"end\";\n\nexport interface FloatingPosition {\n /** Viewport coordinates for a `position: fixed` element. */\n x: number;\n y: number;\n /** The side actually used after flipping. */\n side: FloatingSide;\n /** Anchor center along the floating element's edge, for an arrow. */\n arrow: number;\n}\n\ninterface Rect {\n top: number;\n bottom: number;\n left: number;\n right: number;\n width: number;\n height: number;\n}\n\nconst OPPOSITE: Record<FloatingSide, FloatingSide> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\nfunction clampInto(value: number, size: number, viewport: number, margin: number): number {\n return Math.max(margin, Math.min(value, viewport - margin - size));\n}\n\n/**\n * Places a floating box next to an anchor: on `side` if it fits, otherwise on\n * the opposite side (when that fits better), then slides it along the edge so\n * it stays inside the viewport.\n */\nexport function computePosition({\n anchor,\n floating,\n viewport,\n side,\n align = \"center\",\n gap = 8,\n margin = 8,\n}: {\n anchor: Rect;\n floating: { width: number; height: number };\n viewport: { width: number; height: number };\n side: FloatingSide;\n align?: FloatingAlign;\n gap?: number;\n margin?: number;\n}): FloatingPosition {\n const space: Record<FloatingSide, number> = {\n top: anchor.top - gap - margin,\n bottom: viewport.height - anchor.bottom - gap - margin,\n left: anchor.left - gap - margin,\n right: viewport.width - anchor.right - gap - margin,\n };\n const needed = side === \"top\" || side === \"bottom\" ? floating.height : floating.width;\n const flipped = OPPOSITE[side];\n const actual = space[side] < needed && space[flipped] > space[side] ? flipped : side;\n\n if (actual === \"top\" || actual === \"bottom\") {\n const y = actual === \"top\" ? anchor.top - gap - floating.height : anchor.bottom + gap;\n const start =\n align === \"start\"\n ? anchor.left\n : align === \"end\"\n ? anchor.right - floating.width\n : anchor.left + (anchor.width - floating.width) / 2;\n const x = clampInto(start, floating.width, viewport.width, margin);\n return { x, y, side: actual, arrow: anchor.left + anchor.width / 2 - x };\n }\n\n const x = actual === \"left\" ? anchor.left - gap - floating.width : anchor.right + gap;\n const start =\n align === \"start\"\n ? anchor.top\n : align === \"end\"\n ? anchor.bottom - floating.height\n : anchor.top + (anchor.height - floating.height) / 2;\n const y = clampInto(start, floating.height, viewport.height, margin);\n return { x, y, side: actual, arrow: anchor.top + anchor.height / 2 - y };\n}\n"],"mappings":";AAsBA,IAAM,WAA+C;CACnD,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;AACT;AAEA,SAAS,UAAU,OAAe,MAAc,UAAkB,QAAwB;CACxF,OAAO,KAAK,IAAI,QAAQ,KAAK,IAAI,OAAO,WAAW,SAAS,IAAI,CAAC;AACnE;;;;;;AAOA,SAAgB,gBAAgB,EAC9B,QACA,UACA,UACA,MACA,QAAQ,UACR,MAAM,GACN,SAAS,KASU;CACnB,MAAM,QAAsC;EAC1C,KAAK,OAAO,MAAM,MAAM;EACxB,QAAQ,SAAS,SAAS,OAAO,SAAS,MAAM;EAChD,MAAM,OAAO,OAAO,MAAM;EAC1B,OAAO,SAAS,QAAQ,OAAO,QAAQ,MAAM;CAC/C;CACA,MAAM,SAAS,SAAS,SAAS,SAAS,WAAW,SAAS,SAAS,SAAS;CAChF,MAAM,UAAU,SAAS;CACzB,MAAM,SAAS,MAAM,QAAQ,UAAU,MAAM,WAAW,MAAM,QAAQ,UAAU;CAEhF,IAAI,WAAW,SAAS,WAAW,UAAU;EAC3C,MAAM,IAAI,WAAW,QAAQ,OAAO,MAAM,MAAM,SAAS,SAAS,OAAO,SAAS;EAOlF,MAAM,IAAI,UALR,UAAU,UACN,OAAO,OACP,UAAU,QACR,OAAO,QAAQ,SAAS,QACxB,OAAO,QAAQ,OAAO,QAAQ,SAAS,SAAS,GAC7B,SAAS,OAAO,SAAS,OAAO,MAAM;EACjE,OAAO;GAAE;GAAG;GAAG,MAAM;GAAQ,OAAO,OAAO,OAAO,OAAO,QAAQ,IAAI;EAAE;CACzE;CAEA,MAAM,IAAI,WAAW,SAAS,OAAO,OAAO,MAAM,SAAS,QAAQ,OAAO,QAAQ;CAOlF,MAAM,IAAI,UALR,UAAU,UACN,OAAO,MACP,UAAU,QACR,OAAO,SAAS,SAAS,SACzB,OAAO,OAAO,OAAO,SAAS,SAAS,UAAU,GAC9B,SAAS,QAAQ,SAAS,QAAQ,MAAM;CACnE,OAAO;EAAE;EAAG;EAAG,MAAM;EAAQ,OAAO,OAAO,MAAM,OAAO,SAAS,IAAI;CAAE;AACzE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malilion/block-ui-react",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Block UI — block / pixel / crafting game-style React components: inventory, crafting, HUD, cards, forms and more.",
5
5
  "license": "MIT",
6
6
  "author": "Block UI Contributors",
@@ -42,9 +42,9 @@
42
42
  "react-dom": "^18.2.0 || ^19.0.0"
43
43
  },
44
44
  "dependencies": {
45
- "@malilion/block-ui-icons": "^0.1.0",
46
- "@malilion/block-ui-themes": "^0.1.0",
47
- "@malilion/block-ui-tokens": "^0.1.0"
45
+ "@malilion/block-ui-themes": "^0.2.0",
46
+ "@malilion/block-ui-icons": "^0.2.0",
47
+ "@malilion/block-ui-tokens": "^0.2.0"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@storybook/react-vite": "^10.6.1",