@shohojdhara/atomix 0.5.5 → 0.5.7

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 (74) hide show
  1. package/README.md +43 -21
  2. package/dist/atomix.css +1016 -1681
  3. package/dist/atomix.css.map +1 -1
  4. package/dist/atomix.min.css +5 -5
  5. package/dist/atomix.min.css.map +1 -1
  6. package/dist/core.d.ts +102 -9
  7. package/dist/core.js +89 -79
  8. package/dist/core.js.map +1 -1
  9. package/dist/forms.js +1 -7
  10. package/dist/forms.js.map +1 -1
  11. package/dist/heavy.js +7 -3
  12. package/dist/heavy.js.map +1 -1
  13. package/dist/index.d.ts +181 -55
  14. package/dist/index.esm.js +112 -99
  15. package/dist/index.esm.js.map +1 -1
  16. package/dist/index.js +112 -99
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.min.js +1 -1
  19. package/dist/index.min.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/components/Accordion/Accordion.tsx +40 -25
  22. package/src/components/Breadcrumb/Breadcrumb.tsx +23 -14
  23. package/src/components/Button/Button.tsx +4 -5
  24. package/src/components/Callout/Callout.tsx +98 -96
  25. package/src/components/Card/Card.tsx +117 -103
  26. package/src/components/Card/index.ts +7 -5
  27. package/src/components/Dropdown/Dropdown.tsx +27 -8
  28. package/src/components/EdgePanel/EdgePanel.tsx +7 -2
  29. package/src/components/Modal/Modal.tsx +27 -8
  30. package/src/components/Spinner/Spinner.tsx +60 -43
  31. package/src/components/Tabs/Tabs.tsx +163 -149
  32. package/src/lib/composables/useInput.ts +11 -9
  33. package/src/lib/types/components.ts +84 -0
  34. package/src/styles/01-settings/_settings.background.scss +2 -1
  35. package/src/styles/02-tools/_tools.background.scss +100 -294
  36. package/src/styles/06-components/_components.avatar-group.scss +1 -3
  37. package/src/styles/06-components/_components.avatar.scss +1 -1
  38. package/src/styles/06-components/_components.badge.scss +2 -2
  39. package/src/styles/06-components/_components.button.scss +3 -3
  40. package/src/styles/06-components/_components.callout.scss +5 -5
  41. package/src/styles/06-components/_components.card.scss +4 -7
  42. package/src/styles/06-components/_components.checkbox.scss +1 -1
  43. package/src/styles/06-components/_components.data-table.scss +1 -1
  44. package/src/styles/06-components/_components.datepicker.scss +1 -1
  45. package/src/styles/06-components/_components.dropdown.scss +3 -3
  46. package/src/styles/06-components/_components.edge-panel.scss +5 -9
  47. package/src/styles/06-components/_components.footer.scss +12 -13
  48. package/src/styles/06-components/_components.hero.scss +2 -2
  49. package/src/styles/06-components/_components.input.scss +3 -3
  50. package/src/styles/06-components/_components.list.scss +1 -1
  51. package/src/styles/06-components/_components.menu.scss +2 -2
  52. package/src/styles/06-components/_components.messages.scss +16 -18
  53. package/src/styles/06-components/_components.modal.scss +6 -6
  54. package/src/styles/06-components/_components.nav.scss +0 -3
  55. package/src/styles/06-components/_components.navbar.scss +3 -3
  56. package/src/styles/06-components/_components.pagination.scss +3 -3
  57. package/src/styles/06-components/_components.photoviewer.scss +3 -3
  58. package/src/styles/06-components/_components.popover.scss +3 -3
  59. package/src/styles/06-components/_components.product-review.scss +2 -2
  60. package/src/styles/06-components/_components.progress.scss +2 -2
  61. package/src/styles/06-components/_components.river.scss +1 -1
  62. package/src/styles/06-components/_components.sectionintro.scss +1 -1
  63. package/src/styles/06-components/_components.select.scss +5 -6
  64. package/src/styles/06-components/_components.side-menu.scss +6 -6
  65. package/src/styles/06-components/_components.skeleton.scss +8 -8
  66. package/src/styles/06-components/_components.slider.scss +6 -6
  67. package/src/styles/06-components/_components.steps.scss +2 -2
  68. package/src/styles/06-components/_components.tabs.scss +2 -2
  69. package/src/styles/06-components/_components.todo.scss +1 -1
  70. package/src/styles/06-components/_components.toggle.scss +3 -5
  71. package/src/styles/06-components/_components.tooltip.scss +2 -4
  72. package/src/styles/06-components/_components.upload.scss +1 -2
  73. package/src/styles/06-components/_components.video-player.scss +2 -2
  74. package/src/styles/99-utilities/_utilities.link.scss +4 -5
package/dist/index.esm.js CHANGED
@@ -4431,29 +4431,30 @@ const AccordionImpl = memo((({title: title, children: children, defaultOpen: de
4431
4431
  }), headerClassNames = generateHeaderClassNames(), panelClassNames = ACCORDION.SELECTORS.PANEL.replace(".", ""), hasCompoundComponents = React.Children.toArray(children).some((child => {
4432
4432
  var _context;
4433
4433
 
4434
- return React.isValidElement(child) && _includesInstanceProperty(_context = [ "AccordionHeader", "AccordionBody" ]).call(_context, child.type.displayName);
4434
+ return React.isValidElement(child) && _includesInstanceProperty(_context = [ "AccordionHeader", "AccordionBody" ]).call(_context, child.type.displayName || "");
4435
4435
  })), content = jsx("div", {
4436
4436
  className: generateClassNames(className) + (glass ? " c-accordion--glass" : ""),
4437
4437
  style: style,
4438
4438
  children: hasCompoundComponents ? React.Children.map(children, (child => {
4439
4439
  if ( React.isValidElement(child)) {
4440
+ const childProps = child.props;
4440
4441
  if ("AccordionHeader" === child.type.displayName)
4441
4442
  return React.cloneElement(child, {
4442
4443
  id: buttonId,
4443
- className: `${headerClassNames} ${child.props.className || ""}`.trim(),
4444
+ className: `${headerClassNames} ${childProps.className || ""}`.trim(),
4444
4445
  onClick: e => {
4445
- toggle(), child.props.onClick?.(e);
4446
+ toggle(), childProps?.onClick?.(e);
4446
4447
  },
4447
4448
  "aria-expanded": state.isOpen,
4448
4449
  "aria-controls": panelId,
4449
4450
  "aria-disabled": disabled,
4450
4451
  disabled: disabled,
4451
- iconPosition: child.props.iconPosition || iconPosition
4452
+ iconPosition: childProps.iconPosition || iconPosition
4452
4453
  });
4453
4454
  if ("AccordionBody" === child.type.displayName)
4454
4455
  return React.cloneElement(child, {
4455
4456
  id: panelId,
4456
- className: `${panelClassNames} ${child.props.className || ""}`.trim(),
4457
+ className: `${panelClassNames} ${childProps.className || ""}`.trim(),
4457
4458
  "aria-labelledby": buttonId,
4458
4459
  panelRef: panelRef,
4459
4460
  contentRef: contentRef
@@ -5133,8 +5134,9 @@ const BreadcrumbComponent = memo((function({items: items, divider: divider, cla
5133
5134
  const childrenCount = Children.count(children);
5134
5135
  content = Children.map(children, ((child, index) => {
5135
5136
  if ( isValidElement(child)) {
5136
- const isLast = index === childrenCount - 1, childProps = child.props, {active: active, linkAs: linkAs, ...otherProps} = childProps;
5137
-
5137
+ const isLast = index === childrenCount - 1, {active: active, linkAs: linkAs, ...otherProps} = child.props;
5138
+ // Extract props from the child element with proper typing
5139
+
5138
5140
  return cloneElement(child, {
5139
5141
  active: active ?? (!!isLast || void 0),
5140
5142
  linkAs: linkAs ?? linkComponent
@@ -5181,7 +5183,7 @@ function useSpinner(initialProps) {
5181
5183
 
5182
5184
  Breadcrumb.displayName = "Breadcrumb", Breadcrumb.Item = BreadcrumbItem;
5183
5185
 
5184
- const Spinner = memo((({size: size = "md", variant: variant = "primary", fullscreen: fullscreen = !1, className: className = "", style: style, glass: glass, "aria-label": ariaLabel, role: role = "status"}) => {
5186
+ const Spinner = memo( forwardRef((({size: size = "md", variant: variant = "primary", fullscreen: fullscreen = !1, className: className = "", style: style, glass: glass, "aria-label": ariaLabel, role: role = "status", "aria-live": ariaLive = "polite", "aria-describe": ariaDescribe, ...rest}, ref) => {
5185
5187
  const {generateSpinnerClass: generateSpinnerClass} = useSpinner({
5186
5188
  size: size,
5187
5189
  variant: variant,
@@ -5192,13 +5194,17 @@ const Spinner = memo((({size: size = "md", variant: variant = "primary", fullsc
5192
5194
  fullscreen: fullscreen,
5193
5195
  className: `${className} ${glass ? "c-spinner--glass" : ""}`.trim()
5194
5196
  }), spinnerContent = jsx("div", {
5197
+ ref: ref,
5195
5198
  className: spinnerClass,
5196
5199
  style: style,
5197
5200
  role: role,
5198
5201
  "aria-label": ariaLabel || "Loading",
5202
+ "aria-live": ariaLive,
5203
+ "aria-describe": ariaDescribe,
5204
+ ...rest,
5199
5205
  children: jsx("span", {
5200
5206
  className: SPINNER.VISUALLY_HIDDEN,
5201
- children: ariaLabel || "Loading..."
5207
+ children: ariaLabel || "Loading content..."
5202
5208
  })
5203
5209
  });
5204
5210
  if (glass) {
@@ -5217,7 +5223,7 @@ const Spinner = memo((({size: size = "md", variant: variant = "primary", fullsc
5217
5223
  });
5218
5224
  }
5219
5225
  return spinnerContent;
5220
- }));
5226
+ })));
5221
5227
 
5222
5228
  Spinner.displayName = "Spinner";
5223
5229
 
@@ -5735,7 +5741,7 @@ const Callout = memo((({title: title, children: children, icon: icon, variant:
5735
5741
  }, calloutContent = React.Children.toArray(children).some((child => {
5736
5742
  var _context3;
5737
5743
 
5738
- return React.isValidElement(child) && _includesInstanceProperty(_context3 = [ "CalloutIcon", "CalloutMessage", "CalloutTitle", "CalloutText", "CalloutActions", "CalloutContent" ]).call(_context3, child.type.displayName);
5744
+ return React.isValidElement(child) && _includesInstanceProperty(_context3 = [ "CalloutIcon", "CalloutMessage", "CalloutTitle", "CalloutText", "CalloutActions", "CalloutContent" ]).call(_context3, child.type.displayName || "");
5739
5745
  })) ? children : jsxs(Fragment, {
5740
5746
  children: [ jsxs("div", {
5741
5747
  className: "c-callout__content",
@@ -5820,7 +5826,66 @@ Callout.Icon = CalloutIcon, Callout.Message = CalloutMessage, Callout.Title = Ca
5820
5826
  Callout.Text = CalloutText, Callout.Actions = CalloutActions, Callout.CloseButton = CalloutCloseButton,
5821
5827
  Callout.Content = CalloutContent;
5822
5828
 
5823
- const Card = React.memo( forwardRef((({
5829
+ const CardHeader = forwardRef((({title: title, subtitle: subtitle, action: action, icon: icon, children: children, className: className = "", ...props}, ref) => {
5830
+ const headerClasses = `${CARD.SELECTORS.HEADER.substring(1)} ${className}`.trim();
5831
+ return jsxs("div", {
5832
+ ref: ref,
5833
+ className: headerClasses,
5834
+ ...props,
5835
+ children: [ icon && jsx("div", {
5836
+ className: CARD.SELECTORS.ICON.substring(1),
5837
+ children: icon
5838
+ }), (title || subtitle) && jsxs("div", {
5839
+ children: [ title && jsx("h3", {
5840
+ className: CARD.SELECTORS.TITLE.substring(1),
5841
+ children: title
5842
+ }), subtitle && jsx("p", {
5843
+ className: CARD.SELECTORS.TEXT.substring(1),
5844
+ children: subtitle
5845
+ }) ]
5846
+ }), action && jsx("div", {
5847
+ className: CARD.SELECTORS.ACTIONS.substring(1),
5848
+ children: action
5849
+ }), children ]
5850
+ });
5851
+ }));
5852
+
5853
+ CardHeader.displayName = "CardHeader";
5854
+
5855
+ const CardBody = forwardRef((({scrollable: scrollable = !1, maxHeight: maxHeight, children: children, className: className = "", style: style, ...props}, ref) => {
5856
+ const bodyClasses = `${CARD.SELECTORS.BODY.substring(1)} ${scrollable ? "c-card__body--scrollable" : ""} ${className}`.trim(), bodyStyle = {
5857
+ ...style,
5858
+ ...scrollable && maxHeight ? {
5859
+ maxHeight: "number" == typeof maxHeight ? `${maxHeight}px` : maxHeight,
5860
+ overflowY: "auto"
5861
+ } : {}
5862
+ };
5863
+ return jsx("div", {
5864
+ ref: ref,
5865
+ className: bodyClasses,
5866
+ style: bodyStyle,
5867
+ ...props,
5868
+ children: children
5869
+ });
5870
+ }));
5871
+
5872
+ CardBody.displayName = "CardBody";
5873
+
5874
+ const CardFooter = forwardRef((({align: align, children: children, className: className = "", style: style, ...props}, ref) => {
5875
+ const footerClasses = `${CARD.SELECTORS.FOOTER.substring(1)} ${align ? `c-card__footer--align-${align}` : ""} ${className}`.trim();
5876
+ return jsx("div", {
5877
+ ref: ref,
5878
+ className: footerClasses,
5879
+ style: style,
5880
+ ...props,
5881
+ children: children
5882
+ });
5883
+ }));
5884
+
5885
+ CardFooter.displayName = "CardFooter";
5886
+
5887
+ // Main Card component implementation
5888
+ const CardImpl = React.memo( forwardRef((({
5824
5889
  // Variants
5825
5890
  size: size = "md", variant: variant = "", appearance: appearance = "filled", elevation: elevation = "none", hoverable: hoverable = !1, hoverElevation: hoverElevation = "md",
5826
5891
  // Layout
@@ -5951,75 +6016,15 @@ className: className = "", style: style, ...rest}, ref) => {
5951
6016
  }) : divElement;
5952
6017
  })));
5953
6018
 
5954
- Card.displayName = "Card";
5955
-
5956
- const CardHeader = forwardRef((({title: title, subtitle: subtitle, action: action, icon: icon, children: children, className: className = "", ...props}, ref) => {
5957
- const headerClasses = `${CARD.SELECTORS.HEADER.substring(1)} ${className}`.trim();
5958
- return jsxs("div", {
5959
- ref: ref,
5960
- className: headerClasses,
5961
- ...props,
5962
- children: [ icon && jsx("div", {
5963
- className: CARD.SELECTORS.ICON.substring(1),
5964
- children: icon
5965
- }), (title || subtitle) && jsxs("div", {
5966
- children: [ title && jsx("h3", {
5967
- className: CARD.SELECTORS.TITLE.substring(1),
5968
- children: title
5969
- }), subtitle && jsx("p", {
5970
- className: CARD.SELECTORS.TEXT.substring(1),
5971
- children: subtitle
5972
- }) ]
5973
- }), action && jsx("div", {
5974
- className: CARD.SELECTORS.ACTIONS.substring(1),
5975
- children: action
5976
- }), children ]
5977
- });
5978
- }));
5979
-
5980
- CardHeader.displayName = "CardHeader";
6019
+ CardImpl.displayName = "Card";
5981
6020
 
5982
- const CardBody = forwardRef((({scrollable: scrollable = !1, maxHeight: maxHeight, children: children, className: className = "", style: style, ...props}, ref) => {
5983
- const bodyClasses = `${CARD.SELECTORS.BODY.substring(1)} ${scrollable ? "c-card__body--scrollable" : ""} ${className}`.trim(), bodyStyle = {
5984
- ...style,
5985
- ...scrollable && maxHeight ? {
5986
- maxHeight: "number" == typeof maxHeight ? `${maxHeight}px` : maxHeight,
5987
- overflowY: "auto"
5988
- } : {}
5989
- };
5990
- return jsx("div", {
5991
- ref: ref,
5992
- className: bodyClasses,
5993
- style: bodyStyle,
5994
- ...props,
5995
- children: children
5996
- });
5997
- }));
6021
+ // Create compound component with proper typing
6022
+ const CardWithSubcomponents = CardImpl;
5998
6023
 
5999
- CardBody.displayName = "CardBody";
6024
+ CardWithSubcomponents.Header = CardHeader, CardWithSubcomponents.Body = CardBody,
6025
+ CardWithSubcomponents.Footer = CardFooter;
6000
6026
 
6001
- const CardFooter = forwardRef((({align: align, children: children, className: className = "", style: style, ...props}, ref) => {
6002
- const footerClasses = `${CARD.SELECTORS.FOOTER.substring(1)} ${align ? `c-card__footer--align-${align}` : ""} ${className}`.trim();
6003
- return jsx("div", {
6004
- ref: ref,
6005
- className: footerClasses,
6006
- style: style,
6007
- ...props,
6008
- children: children
6009
- });
6010
- }));
6011
-
6012
- CardFooter.displayName = "CardFooter",
6013
- // Attach subcomponents to Card
6014
- Card.Header = CardHeader, Card.Body = CardBody, Card.Footer = CardFooter;
6015
-
6016
- /**
6017
- * Hook for managing Card component state and behaviors
6018
- *
6019
- * @param options - Configuration options for the card
6020
- * @returns Card state and handlers
6021
- */
6022
- const ElevationCard = ({elevationClass: elevationClass = "is-elevated", className: className = "", style: style, children: children, onClick: onClick, ...props}) => {
6027
+ const Card = CardWithSubcomponents, ElevationCard = ({elevationClass: elevationClass = "is-elevated", className: className = "", style: style, children: children, onClick: onClick, ...props}) => {
6023
6028
  const {getCardProps: getCardProps} = ((options = {}) => {
6024
6029
  const {elevationEffect: elevationEffect = !1, elevationClass: elevationClass = CARD.CLASSES.ACTIVE, flipEffect: flipEffect = !1, flipTrigger: flipTrigger = "click", focusEffect: focusEffect = !1, clickable: clickable = !1, onClick: onClick} = options, cardRef = useRef(null), frontRef = useRef(null), backRef = useRef(null), [isFlipped, setIsFlipped] = useState(!1), [isElevated, setIsElevated] = useState(!1), [isFocused, setIsFocused] = useState(!1), [isHovered, setIsHovered] = useState(!1), handleClick = useCallback((event => {
6025
6030
  flipEffect && "click" === flipTrigger && setIsFlipped((prev => !prev)), onClick && onClick(event);
@@ -6090,6 +6095,12 @@ const ElevationCard = ({elevationClass: elevationClass = "is-elevated", classNam
6090
6095
  });
6091
6096
  };
6092
6097
 
6098
+ /**
6099
+ * Hook for managing Card component state and behaviors
6100
+ *
6101
+ * @param options - Configuration options for the card
6102
+ * @returns Card state and handlers
6103
+ */
6093
6104
  /**
6094
6105
  * Comprehensive chart hook with shared functionality
6095
6106
  * @param initialProps - Initial chart properties
@@ -10840,23 +10851,29 @@ const DropdownStyleContext = createContext({}), Dropdown = memo((function({chi
10840
10851
  React.Children.toArray(children).some((child => {
10841
10852
  var _context;
10842
10853
 
10843
- return React.isValidElement(child) && _includesInstanceProperty(_context = [ "DropdownTrigger", "DropdownMenu" ]).call(_context, child.type.displayName);
10854
+ return React.isValidElement(child) && _includesInstanceProperty(_context = [ "DropdownTrigger", "DropdownMenu" ]).call(_context, child.type.displayName || "");
10844
10855
  })) ?
10845
10856
  // Find Trigger and Menu in children
10846
10857
  React.Children.forEach(children, (child => {
10847
- React.isValidElement(child) && ("DropdownTrigger" === child.type.displayName ? triggerContent = React.cloneElement(child, {
10848
- ref: toggleRef,
10849
- onClick: e => {
10850
- handleToggleClick(e), child.props.onClick?.(e);
10851
- },
10852
- onKeyDown: e => {
10853
- handleToggleKeyDown(e), child.props.onKeyDown?.(e);
10854
- },
10855
- "aria-haspopup": "menu",
10856
- "aria-expanded": isOpen,
10857
- "aria-controls": dropdownId,
10858
- tabIndex: 0
10859
- }) : "DropdownMenu" === child.type.displayName && (menuContentNode = child));
10858
+ if ( React.isValidElement(child)) {
10859
+ const component = child.type;
10860
+ if ("DropdownTrigger" === component.displayName) {
10861
+ const triggerProps = {
10862
+ ref: toggleRef,
10863
+ onClick: e => {
10864
+ handleToggleClick(e), child.props.onClick?.(e);
10865
+ },
10866
+ onKeyDown: e => {
10867
+ handleToggleKeyDown(e), child.props.onKeyDown?.(e);
10868
+ },
10869
+ "aria-haspopup": "menu",
10870
+ "aria-expanded": isOpen,
10871
+ "aria-controls": dropdownId,
10872
+ tabIndex: 0
10873
+ };
10874
+ triggerContent = React.cloneElement(child, triggerProps);
10875
+ } else "DropdownMenu" === component.displayName && (menuContentNode = child);
10876
+ }
10860
10877
  })) : (
10861
10878
  // Legacy mode
10862
10879
  triggerContent = jsx("div", {
@@ -12230,7 +12247,7 @@ const EdgePanel = memo((({title: title, children: children, position: position
12230
12247
  }, panelContent = React.Children.toArray(children).some((child => {
12231
12248
  var _context;
12232
12249
 
12233
- return React.isValidElement(child) && _includesInstanceProperty(_context = [ "EdgePanelHeader", "EdgePanelBody", "EdgePanelFooter" ]).call(_context, child.type.displayName);
12250
+ return React.isValidElement(child) && _includesInstanceProperty(_context = [ "EdgePanelHeader", "EdgePanelBody", "EdgePanelFooter" ]).call(_context, child.type.displayName || "");
12234
12251
  })) ? children : jsxs(Fragment, {
12235
12252
  children: [ jsxs("div", {
12236
12253
  className: "c-edge-panel__header",
@@ -12396,11 +12413,6 @@ const FormGroup = ({children: children, label: label, helperText: helperText, ht
12396
12413
  });
12397
12414
  };
12398
12415
 
12399
- /**
12400
- * Input state and functionality
12401
- * @param initialProps - Initial input properties
12402
- * @returns Input state and methods
12403
- */
12404
12416
  function useInput(initialProps) {
12405
12417
  // Default input properties
12406
12418
  const defaultProps = {
@@ -15359,11 +15371,12 @@ const ModalImpl = memo((({children: children, isOpen: isOpen = !1, onOpenChange
15359
15371
  const modalClasses = [ "c-modal", isOpenState ? MODAL.CLASSES.IS_OPEN : "", size ? `c-modal--${size}` : "", glass ? "c-modal--glass" : "", className ].filter(Boolean).join(" "), hasCompoundComponents = React.Children.toArray(children).some((child => {
15360
15372
  var _context;
15361
15373
 
15362
- return React.isValidElement(child) && _includesInstanceProperty(_context = [ "ModalHeader", "ModalBody", "ModalFooter" ]).call(_context, child.type.displayName);
15374
+ return React.isValidElement(child) && _includesInstanceProperty(_context = [ "ModalHeader", "ModalBody", "ModalFooter" ]).call(_context, child.type.displayName || "");
15363
15375
  })), modalContent = jsx("div", {
15364
15376
  className: "c-modal__content",
15365
15377
  ref: contentRef,
15366
15378
  children: hasCompoundComponents ? React.Children.map(children, (child => React.isValidElement(child) && "ModalHeader" === child.type.displayName ? React.cloneElement(child, {
15379
+ ...child.props,
15367
15380
  onClose: child.props.onClose || close,
15368
15381
  id: titleId
15369
15382
  }) : child)) : jsxs(Fragment, {