@tailng-ui/primitives 0.14.0 → 0.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.
Files changed (52) hide show
  1. package/package.json +3 -2
  2. package/src/index.d.ts +1 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +1 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts +25 -0
  7. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts.map +1 -0
  8. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js +105 -0
  9. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js.map +1 -0
  10. package/src/lib/form/datepicker/datepicker.adapters.d.ts +5 -0
  11. package/src/lib/form/datepicker/datepicker.adapters.d.ts.map +1 -0
  12. package/src/lib/form/datepicker/datepicker.adapters.js +194 -0
  13. package/src/lib/form/datepicker/datepicker.adapters.js.map +1 -0
  14. package/src/lib/form/datepicker/datepicker.state.d.ts +10 -0
  15. package/src/lib/form/datepicker/datepicker.state.d.ts.map +1 -0
  16. package/src/lib/form/datepicker/datepicker.state.js +97 -0
  17. package/src/lib/form/datepicker/datepicker.state.js.map +1 -0
  18. package/src/lib/form/datepicker/datepicker.types.d.ts +269 -0
  19. package/src/lib/form/datepicker/datepicker.types.d.ts.map +1 -0
  20. package/src/lib/form/datepicker/datepicker.types.js +1 -0
  21. package/src/lib/form/datepicker/datepicker.types.js.map +1 -0
  22. package/src/lib/form/datepicker/datepicker.utils.d.ts +75 -0
  23. package/src/lib/form/datepicker/datepicker.utils.d.ts.map +1 -0
  24. package/src/lib/form/datepicker/datepicker.utils.js +238 -0
  25. package/src/lib/form/datepicker/datepicker.utils.js.map +1 -0
  26. package/src/lib/form/datepicker/index.d.ts +3 -0
  27. package/src/lib/form/datepicker/index.d.ts.map +1 -0
  28. package/src/lib/form/datepicker/index.js +3 -0
  29. package/src/lib/form/datepicker/index.js.map +1 -0
  30. package/src/lib/form/datepicker/tng-datepicker.d.ts +5 -0
  31. package/src/lib/form/datepicker/tng-datepicker.d.ts.map +1 -0
  32. package/src/lib/form/datepicker/tng-datepicker.js +1948 -0
  33. package/src/lib/form/datepicker/tng-datepicker.js.map +1 -0
  34. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +60 -0
  35. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -0
  36. package/src/lib/form/datepicker/tng-datepicker.overlay.js +275 -0
  37. package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -0
  38. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts +32 -0
  39. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts.map +1 -0
  40. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js +312 -0
  41. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js.map +1 -0
  42. package/src/lib/layout/grid/tng-grid.d.ts +144 -2
  43. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  44. package/src/lib/layout/grid/tng-grid.js +669 -2
  45. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  46. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
  47. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +0 -1
  48. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
  49. package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -6
  50. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  51. package/src/lib/navigation/tabs/tng-tabs.js +77 -35
  52. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@tailng-ui/primitives",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
+ "license": "MIT",
4
5
  "repository": {
5
6
  "type": "git",
6
7
  "url": "https://github.com/tailng/tailng-ui"
@@ -15,7 +16,7 @@
15
16
  }
16
17
  },
17
18
  "dependencies": {
18
- "@tailng-ui/cdk": "^0.13.0"
19
+ "@tailng-ui/cdk": "^0.14.0"
19
20
  },
20
21
  "peerDependencies": {
21
22
  "@angular/core": "^21.1.0",
package/src/index.d.ts CHANGED
@@ -14,6 +14,7 @@ export * from './lib/form/button-toggle/tng-button-toggle';
14
14
  export * from './lib/form/checkbox/tng-checkbox';
15
15
  export * from './lib/form/chips/tng-chips';
16
16
  export * from './lib/form/combobox/tng-combobox';
17
+ export * from './lib/form/datepicker';
17
18
  export * from './lib/form/input/tng-input';
18
19
  export * from './lib/form/input-otp/tng-input-otp';
19
20
  export * from './lib/form/label/tng-label';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/tailng-ui/primitives/src/index.ts"],"names":[],"mappings":"AACA,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,kDAAkD,CAAC;AACjE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,sDAAsD,CAAC;AACrE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AAGrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AAGzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sDAAsD,CAAC;AACrE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/tailng-ui/primitives/src/index.ts"],"names":[],"mappings":"AACA,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,kDAAkD,CAAC;AACjE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,sDAAsD,CAAC;AACrE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AAGrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AAGzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sDAAsD,CAAC;AACrE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC"}
package/src/index.js CHANGED
@@ -16,6 +16,7 @@ export * from './lib/form/button-toggle/tng-button-toggle';
16
16
  export * from './lib/form/checkbox/tng-checkbox';
17
17
  export * from './lib/form/chips/tng-chips';
18
18
  export * from './lib/form/combobox/tng-combobox';
19
+ export * from './lib/form/datepicker';
19
20
  export * from './lib/form/input/tng-input';
20
21
  export * from './lib/form/input-otp/tng-input-otp';
21
22
  export * from './lib/form/label/tng-label';
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/tailng-ui/primitives/src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,kDAAkD,CAAC;AACjE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,sDAAsD,CAAC;AACrE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AAErD,0DAA0D;AAC1D,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AAEzD,SAAS;AACT,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AAErD,UAAU;AACV,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAElD,WAAW;AACX,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sDAAsD,CAAC;AACrE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAE/C,UAAU;AACV,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC","sourcesContent":["// Navigation\nexport * from './lib/navigation/breadcrumb/tng-breadcrumb';\nexport * from './lib/navigation/context-menu/tng-context-menu';\nexport * from './lib/navigation/dropdown-menu/tng-dropdown-menu';\nexport * from './lib/navigation/menu/tng-menu';\nexport * from './lib/navigation/menubar/tng-menubar';\nexport * from './lib/navigation/navigation-menu/tng-navigation-menu';\nexport * from './lib/navigation/tabs/tng-tabs';\nexport * from './lib/navigation/toolbar/tng-toolbar';\n\n// Form (listbox first - autocomplete/select depend on it)\nexport * from './lib/form/listbox/listbox.directive';\nexport * from './lib/form/listbox/option.directive';\nexport * from './lib/form/listbox/tokens';\nexport * from './lib/form/autocomplete';\nexport * from './lib/form/button-toggle/tng-button-toggle';\nexport * from './lib/form/checkbox/tng-checkbox';\nexport * from './lib/form/chips/tng-chips';\nexport * from './lib/form/combobox/tng-combobox';\nexport * from './lib/form/input/tng-input';\nexport * from './lib/form/input-otp/tng-input-otp';\nexport * from './lib/form/label/tng-label';\nexport * from './lib/form/multiselect/tng-multiselect';\nexport * from './lib/form/multi-select';\nexport * from './lib/form/radio/tng-radio';\nexport * from './lib/form/multi-autocomplete';\n\nexport * from './lib/form/select/tng-select';\nexport * from './lib/form/select/tng-select.parts';\nexport * from './lib/form/select/tng-select.overlay';\nexport * from './lib/form/select/tng-select.listbox';\nexport * from './lib/form/select/tng-select.listbox.types';\n\nexport * from './lib/form/slider/tng-slider';\nexport * from './lib/form/switch/tng-switch';\nexport * from './lib/form/textarea/tng-textarea';\nexport * from './lib/form/toggle/tng-toggle';\nexport * from './lib/form/toggle-group/tng-toggle-group';\n\n// Layout\nexport * from './lib/layout/accordion/tng-accordion';\nexport * from './lib/layout/bottom-sheet/tng-bottom-sheet';\nexport * from './lib/layout/card/tng-card';\nexport * from './lib/layout/collapsible/tng-collapsible';\nexport * from './lib/layout/drawer/tng-drawer';\nexport * from './lib/layout/grid/tng-grid';\nexport * from './lib/layout/separator/tng-separator';\nexport * from './lib/layout/stepper/tng-stepper';\nexport * from './lib/layout/tree/tng-tree';\nexport * from './lib/layout/tree/tng-tree-item';\nexport * from './lib/layout/tree/tng-tree-group';\nexport * from './lib/layout/tree/tng-tree-indicator';\n\n// Overlay\nexport * from './lib/overlay/dialog/tng-dialog';\nexport * from './lib/overlay/popover/tng-popover';\nexport * from './lib/overlay/tooltip/tng-tooltip';\n\n// Feedback\nexport * from './lib/feedback/empty/tng-empty';\nexport * from './lib/feedback/progress-bar/tng-progress-bar';\nexport * from './lib/feedback/progress-spinner/tng-progress-spinner';\nexport * from './lib/feedback/skeleton/tng-skeleton';\nexport * from './lib/feedback/toast/tng-toast';\n\n// Utility\nexport * from './lib/utility/avatar/tng-avatar';\nexport * from './lib/utility/badge/tng-badge';\nexport * from './lib/utility/press/tng-press';\nexport * from './lib/utility/code-block/tng-code-block';\nexport * from './lib/utility/copy/tng-copy';\nexport * from './lib/utility/tag/tng-tag';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/tailng-ui/primitives/src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,kDAAkD,CAAC;AACjE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,sDAAsD,CAAC;AACrE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AAErD,0DAA0D;AAC1D,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AAEzD,SAAS;AACT,cAAc,sCAAsC,CAAC;AACrD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AAErD,UAAU;AACV,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAElD,WAAW;AACX,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sDAAsD,CAAC;AACrE,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAE/C,UAAU;AACV,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC","sourcesContent":["// Navigation\nexport * from './lib/navigation/breadcrumb/tng-breadcrumb';\nexport * from './lib/navigation/context-menu/tng-context-menu';\nexport * from './lib/navigation/dropdown-menu/tng-dropdown-menu';\nexport * from './lib/navigation/menu/tng-menu';\nexport * from './lib/navigation/menubar/tng-menubar';\nexport * from './lib/navigation/navigation-menu/tng-navigation-menu';\nexport * from './lib/navigation/tabs/tng-tabs';\nexport * from './lib/navigation/toolbar/tng-toolbar';\n\n// Form (listbox first - autocomplete/select depend on it)\nexport * from './lib/form/listbox/listbox.directive';\nexport * from './lib/form/listbox/option.directive';\nexport * from './lib/form/listbox/tokens';\nexport * from './lib/form/autocomplete';\nexport * from './lib/form/button-toggle/tng-button-toggle';\nexport * from './lib/form/checkbox/tng-checkbox';\nexport * from './lib/form/chips/tng-chips';\nexport * from './lib/form/combobox/tng-combobox';\nexport * from './lib/form/datepicker';\nexport * from './lib/form/input/tng-input';\nexport * from './lib/form/input-otp/tng-input-otp';\nexport * from './lib/form/label/tng-label';\nexport * from './lib/form/multiselect/tng-multiselect';\nexport * from './lib/form/multi-select';\nexport * from './lib/form/radio/tng-radio';\nexport * from './lib/form/multi-autocomplete';\n\nexport * from './lib/form/select/tng-select';\nexport * from './lib/form/select/tng-select.parts';\nexport * from './lib/form/select/tng-select.overlay';\nexport * from './lib/form/select/tng-select.listbox';\nexport * from './lib/form/select/tng-select.listbox.types';\n\nexport * from './lib/form/slider/tng-slider';\nexport * from './lib/form/switch/tng-switch';\nexport * from './lib/form/textarea/tng-textarea';\nexport * from './lib/form/toggle/tng-toggle';\nexport * from './lib/form/toggle-group/tng-toggle-group';\n\n// Layout\nexport * from './lib/layout/accordion/tng-accordion';\nexport * from './lib/layout/bottom-sheet/tng-bottom-sheet';\nexport * from './lib/layout/card/tng-card';\nexport * from './lib/layout/collapsible/tng-collapsible';\nexport * from './lib/layout/drawer/tng-drawer';\nexport * from './lib/layout/grid/tng-grid';\nexport * from './lib/layout/separator/tng-separator';\nexport * from './lib/layout/stepper/tng-stepper';\nexport * from './lib/layout/tree/tng-tree';\nexport * from './lib/layout/tree/tng-tree-item';\nexport * from './lib/layout/tree/tng-tree-group';\nexport * from './lib/layout/tree/tng-tree-indicator';\n\n// Overlay\nexport * from './lib/overlay/dialog/tng-dialog';\nexport * from './lib/overlay/popover/tng-popover';\nexport * from './lib/overlay/tooltip/tng-tooltip';\n\n// Feedback\nexport * from './lib/feedback/empty/tng-empty';\nexport * from './lib/feedback/progress-bar/tng-progress-bar';\nexport * from './lib/feedback/progress-spinner/tng-progress-spinner';\nexport * from './lib/feedback/skeleton/tng-skeleton';\nexport * from './lib/feedback/toast/tng-toast';\n\n// Utility\nexport * from './lib/utility/avatar/tng-avatar';\nexport * from './lib/utility/badge/tng-badge';\nexport * from './lib/utility/press/tng-press';\nexport * from './lib/utility/code-block/tng-code-block';\nexport * from './lib/utility/copy/tng-copy';\nexport * from './lib/utility/tag/tng-tag';\n"]}
@@ -0,0 +1,25 @@
1
+ import { vi } from 'vitest';
2
+ import { type TngDateAdapter, type TngDatepickerConfig, type TngDatepickerController, type TngDatepickerEvent } from '../tng-datepicker';
3
+ export declare function d(value: string): Date;
4
+ export declare function dateKey(date: Date): string;
5
+ export declare function createController(config?: Partial<TngDatepickerConfig<Date>>): TngDatepickerController<Date>;
6
+ export declare function collectEvents(controller: TngDatepickerController<Date>): readonly TngDatepickerEvent<Date>[];
7
+ export declare function keyboardEvent(key: string, overrides?: Partial<Readonly<{
8
+ altKey: boolean;
9
+ ctrlKey: boolean;
10
+ metaKey: boolean;
11
+ shiftKey: boolean;
12
+ }>>): Readonly<{
13
+ altKey: boolean;
14
+ ctrlKey: boolean;
15
+ key: string;
16
+ metaKey: boolean;
17
+ preventDefault: ReturnType<typeof vi.fn>;
18
+ shiftKey: boolean;
19
+ }>;
20
+ export declare function appendFocusable(tagName?: string): HTMLElement;
21
+ export declare function cleanupDom(): void;
22
+ export declare function createCalendarSystemAdapter(): TngDateAdapter<Date>;
23
+ export declare function createSlashInputAdapter(): TngDateAdapter<Date>;
24
+ export declare function createOverlayMonthYearAdapter(): TngDateAdapter<Date>;
25
+ //# sourceMappingURL=tng-datepicker.test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-datepicker.test-helpers.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMrC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAK1C;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAM,GAC9C,uBAAuB,CAAC,IAAI,CAAC,CAQ/B;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAM5G;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAM,GACP,QAAQ,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CASD;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAW,GAAG,WAAW,CAK/D;AAED,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,wBAAgB,2BAA2B,IAAI,cAAc,CAAC,IAAI,CAAC,CAUlE;AAED,wBAAgB,uBAAuB,IAAI,cAAc,CAAC,IAAI,CAAC,CA+B9D;AAED,wBAAgB,6BAA6B,IAAI,cAAc,CAAC,IAAI,CAAC,CAapE"}
@@ -0,0 +1,105 @@
1
+ import { vi } from 'vitest';
2
+ import { createDatepickerController, defaultDatepickerDateAdapter, } from '../tng-datepicker';
3
+ export function d(value) {
4
+ const parsed = defaultDatepickerDateAdapter.parse(value, 'en-US');
5
+ if (parsed === null) {
6
+ throw new Error(`Unable to parse date: ${value}`);
7
+ }
8
+ return parsed;
9
+ }
10
+ export function dateKey(date) {
11
+ const year = date.getFullYear().toString().padStart(4, '0');
12
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
13
+ const day = date.getDate().toString().padStart(2, '0');
14
+ return `${year}-${month}-${day}`;
15
+ }
16
+ export function createController(config = {}) {
17
+ return createDatepickerController({
18
+ closeOnSelect: false,
19
+ locale: 'en-US',
20
+ showOutsideDays: true,
21
+ today: d('2024-04-18'),
22
+ ...config,
23
+ });
24
+ }
25
+ export function collectEvents(controller) {
26
+ const events = [];
27
+ controller.subscribe((event) => {
28
+ events.push(event);
29
+ });
30
+ return events;
31
+ }
32
+ export function keyboardEvent(key, overrides = {}) {
33
+ return {
34
+ altKey: overrides.altKey ?? false,
35
+ ctrlKey: overrides.ctrlKey ?? false,
36
+ key,
37
+ metaKey: overrides.metaKey ?? false,
38
+ preventDefault: vi.fn(),
39
+ shiftKey: overrides.shiftKey ?? false,
40
+ };
41
+ }
42
+ export function appendFocusable(tagName = 'button') {
43
+ const element = document.createElement(tagName);
44
+ element.tabIndex = 0;
45
+ document.body.appendChild(element);
46
+ return element;
47
+ }
48
+ export function cleanupDom() {
49
+ document.body.innerHTML = '';
50
+ }
51
+ export function createCalendarSystemAdapter() {
52
+ return Object.freeze({
53
+ ...defaultDatepickerDateAdapter,
54
+ format: (date, format, locale) => {
55
+ if (format === 'year-label') {
56
+ return String(defaultDatepickerDateAdapter.getYear(date) + 543);
57
+ }
58
+ return defaultDatepickerDateAdapter.format(date, format, locale);
59
+ },
60
+ });
61
+ }
62
+ export function createSlashInputAdapter() {
63
+ return Object.freeze({
64
+ ...defaultDatepickerDateAdapter,
65
+ format: (date, format, locale) => {
66
+ if (format === 'input') {
67
+ const year = defaultDatepickerDateAdapter.getYear(date).toString().padStart(4, '0');
68
+ const month = (defaultDatepickerDateAdapter.getMonth(date) + 1).toString().padStart(2, '0');
69
+ const day = defaultDatepickerDateAdapter.getDate(date).toString().padStart(2, '0');
70
+ return `${year}/${month}/${day}`;
71
+ }
72
+ return defaultDatepickerDateAdapter.format(date, format, locale);
73
+ },
74
+ parse: (text, locale) => {
75
+ const match = /^(\d{4})\/(\d{2})\/(\d{2})$/.exec(text.trim());
76
+ if (match !== null) {
77
+ const year = Number(match[1]);
78
+ const month = Number(match[2]) - 1;
79
+ const day = Number(match[3]);
80
+ const date = defaultDatepickerDateAdapter.createDate(year, month, day);
81
+ return defaultDatepickerDateAdapter.isValid(date) &&
82
+ defaultDatepickerDateAdapter.getYear(date) === year &&
83
+ defaultDatepickerDateAdapter.getMonth(date) === month &&
84
+ defaultDatepickerDateAdapter.getDate(date) === day
85
+ ? date
86
+ : null;
87
+ }
88
+ return defaultDatepickerDateAdapter.parse(text, locale);
89
+ },
90
+ });
91
+ }
92
+ export function createOverlayMonthYearAdapter() {
93
+ return Object.freeze({
94
+ ...defaultDatepickerDateAdapter,
95
+ format: (date, format, locale) => {
96
+ if (format === 'month-year') {
97
+ const month = (defaultDatepickerDateAdapter.getMonth(date) + 1).toString().padStart(2, '0');
98
+ const year = defaultDatepickerDateAdapter.getYear(date).toString().padStart(4, '0');
99
+ return `${month}/${year}`;
100
+ }
101
+ return defaultDatepickerDateAdapter.format(date, format, locale);
102
+ },
103
+ });
104
+ }
105
+ //# sourceMappingURL=tng-datepicker.test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-datepicker.test-helpers.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { vi } from 'vitest';\nimport {\n createDatepickerController,\n defaultDatepickerDateAdapter,\n type TngDateAdapter,\n type TngDatepickerConfig,\n type TngDatepickerController,\n type TngDatepickerEvent,\n} from '../tng-datepicker';\n\nexport function d(value: string): Date {\n const parsed = defaultDatepickerDateAdapter.parse(value, 'en-US');\n if (parsed === null) {\n throw new Error(`Unable to parse date: ${value}`);\n }\n return parsed;\n}\n\nexport function dateKey(date: Date): string {\n const year = date.getFullYear().toString().padStart(4, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function createController(\n config: Partial<TngDatepickerConfig<Date>> = {},\n): TngDatepickerController<Date> {\n return createDatepickerController<Date>({\n closeOnSelect: false,\n locale: 'en-US',\n showOutsideDays: true,\n today: d('2024-04-18'),\n ...config,\n });\n}\n\nexport function collectEvents(controller: TngDatepickerController<Date>): readonly TngDatepickerEvent<Date>[] {\n const events: TngDatepickerEvent<Date>[] = [];\n controller.subscribe((event) => {\n events.push(event);\n });\n return events;\n}\n\nexport function keyboardEvent(\n key: string,\n overrides: Partial<Readonly<{\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n }>> = {},\n): Readonly<{\n altKey: boolean;\n ctrlKey: boolean;\n key: string;\n metaKey: boolean;\n preventDefault: ReturnType<typeof vi.fn>;\n shiftKey: boolean;\n}> {\n return {\n altKey: overrides.altKey ?? false,\n ctrlKey: overrides.ctrlKey ?? false,\n key,\n metaKey: overrides.metaKey ?? false,\n preventDefault: vi.fn(),\n shiftKey: overrides.shiftKey ?? false,\n };\n}\n\nexport function appendFocusable(tagName = 'button'): HTMLElement {\n const element = document.createElement(tagName);\n element.tabIndex = 0;\n document.body.appendChild(element);\n return element;\n}\n\nexport function cleanupDom(): void {\n document.body.innerHTML = '';\n}\n\nexport function createCalendarSystemAdapter(): TngDateAdapter<Date> {\n return Object.freeze({\n ...defaultDatepickerDateAdapter,\n format: (date, format, locale) => {\n if (format === 'year-label') {\n return String(defaultDatepickerDateAdapter.getYear(date) + 543);\n }\n return defaultDatepickerDateAdapter.format(date, format, locale);\n },\n });\n}\n\nexport function createSlashInputAdapter(): TngDateAdapter<Date> {\n return Object.freeze({\n ...defaultDatepickerDateAdapter,\n format: (date, format, locale) => {\n if (format === 'input') {\n const year = defaultDatepickerDateAdapter.getYear(date).toString().padStart(4, '0');\n const month = (defaultDatepickerDateAdapter.getMonth(date) + 1).toString().padStart(2, '0');\n const day = defaultDatepickerDateAdapter.getDate(date).toString().padStart(2, '0');\n return `${year}/${month}/${day}`;\n }\n\n return defaultDatepickerDateAdapter.format(date, format, locale);\n },\n parse: (text, locale) => {\n const match = /^(\\d{4})\\/(\\d{2})\\/(\\d{2})$/.exec(text.trim());\n if (match !== null) {\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n const date = defaultDatepickerDateAdapter.createDate(year, month, day);\n return defaultDatepickerDateAdapter.isValid(date) &&\n defaultDatepickerDateAdapter.getYear(date) === year &&\n defaultDatepickerDateAdapter.getMonth(date) === month &&\n defaultDatepickerDateAdapter.getDate(date) === day\n ? date\n : null;\n }\n\n return defaultDatepickerDateAdapter.parse(text, locale);\n },\n });\n}\n\nexport function createOverlayMonthYearAdapter(): TngDateAdapter<Date> {\n return Object.freeze({\n ...defaultDatepickerDateAdapter,\n format: (date, format, locale) => {\n if (format === 'month-year') {\n const month = (defaultDatepickerDateAdapter.getMonth(date) + 1).toString().padStart(2, '0');\n const year = defaultDatepickerDateAdapter.getYear(date).toString().padStart(4, '0');\n return `${month}/${year}`;\n }\n\n return defaultDatepickerDateAdapter.format(date, format, locale);\n },\n });\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { TngDateAdapter, TngDateInputValue, TngWeekdayIndex } from './datepicker.types';
2
+ export declare const defaultDatepickerDateAdapter: TngDateAdapter<Date>;
3
+ export declare function normalizeDateInput<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, value: TngDateInputValue<TDate>, locale?: string): TDate | null;
4
+ export declare function coerceWeekStartsOn(value: number): TngWeekdayIndex;
5
+ //# sourceMappingURL=datepicker.adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.adapters.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,iBAAiB,EACjB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAiH5B,eAAO,MAAM,4BAA4B,EAAE,cAAc,CAAC,IAAI,CAsF5D,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EACtC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EACxC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,KAAK,GAAG,IAAI,CA0Bd;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAIjE"}
@@ -0,0 +1,194 @@
1
+ function createLocalDate(year, month, day) {
2
+ return new Date(year, month, day, 12, 0, 0, 0);
3
+ }
4
+ function normalizeDateInstance(date) {
5
+ return createLocalDate(date.getFullYear(), date.getMonth(), date.getDate());
6
+ }
7
+ function toComparableNumber(date) {
8
+ return Number(`${date.getFullYear().toString().padStart(4, '0')}${(date.getMonth() + 1)
9
+ .toString()
10
+ .padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}`);
11
+ }
12
+ function parseIsoDateOnly(value) {
13
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value.trim());
14
+ if (match === null) {
15
+ return null;
16
+ }
17
+ const year = Number(match[1]);
18
+ const month = Number(match[2]) - 1;
19
+ const day = Number(match[3]);
20
+ const date = createLocalDate(year, month, day);
21
+ if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {
22
+ return null;
23
+ }
24
+ return date;
25
+ }
26
+ function parseMonthDayYearDateOnly(value) {
27
+ const match = /^(\d{2})-(\d{2})-(\d{4})$/.exec(value.trim());
28
+ if (match === null) {
29
+ return null;
30
+ }
31
+ const month = Number(match[1]) - 1;
32
+ const day = Number(match[2]);
33
+ const year = Number(match[3]);
34
+ const date = createLocalDate(year, month, day);
35
+ if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {
36
+ return null;
37
+ }
38
+ return date;
39
+ }
40
+ function createFormatter(locale, options) {
41
+ return new Intl.DateTimeFormat(locale ?? 'en-US', options);
42
+ }
43
+ function resolveDateFormatter(date, format, locale) {
44
+ if (format === 'input') {
45
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
46
+ const day = date.getDate().toString().padStart(2, '0');
47
+ const year = date.getFullYear().toString().padStart(4, '0');
48
+ return `${month}-${day}-${year}`;
49
+ }
50
+ if (format === 'month-year') {
51
+ return createFormatter(locale, {
52
+ month: 'long',
53
+ year: 'numeric',
54
+ }).format(date);
55
+ }
56
+ if (format === 'month-long') {
57
+ return createFormatter(locale, { month: 'long' }).format(date);
58
+ }
59
+ if (format === 'month-short') {
60
+ return createFormatter(locale, { month: 'short' }).format(date);
61
+ }
62
+ if (format === 'weekday-short') {
63
+ return createFormatter(locale, { weekday: 'short' }).format(date);
64
+ }
65
+ if (format === 'weekday-narrow') {
66
+ return createFormatter(locale, { weekday: 'narrow' }).format(date);
67
+ }
68
+ if (format === 'day-number') {
69
+ return createFormatter(locale, { day: 'numeric' }).format(date);
70
+ }
71
+ if (format === 'year-label') {
72
+ return createFormatter(locale, { year: 'numeric' }).format(date);
73
+ }
74
+ if (format === 'label') {
75
+ return createFormatter(locale, {
76
+ day: 'numeric',
77
+ month: 'long',
78
+ year: 'numeric',
79
+ }).format(date);
80
+ }
81
+ return createFormatter(locale, {
82
+ day: 'numeric',
83
+ month: 'long',
84
+ year: 'numeric',
85
+ }).format(date);
86
+ }
87
+ export const defaultDatepickerDateAdapter = Object.freeze({
88
+ addDays: (date, amount) => {
89
+ const next = createLocalDate(date.getFullYear(), date.getMonth(), date.getDate() + amount);
90
+ return next;
91
+ },
92
+ addMonths: (date, amount) => {
93
+ const targetMonth = date.getMonth() + amount;
94
+ const result = createLocalDate(date.getFullYear(), targetMonth, 1);
95
+ const lastDay = createLocalDate(result.getFullYear(), result.getMonth() + 1, 0).getDate();
96
+ return createLocalDate(result.getFullYear(), result.getMonth(), Math.min(date.getDate(), lastDay));
97
+ },
98
+ addYears: (date, amount) => {
99
+ const result = createLocalDate(date.getFullYear() + amount, date.getMonth(), 1);
100
+ const lastDay = createLocalDate(result.getFullYear(), result.getMonth() + 1, 0).getDate();
101
+ return createLocalDate(result.getFullYear(), result.getMonth(), Math.min(date.getDate(), lastDay));
102
+ },
103
+ compare: (left, right) => {
104
+ const leftValue = toComparableNumber(left);
105
+ const rightValue = toComparableNumber(right);
106
+ if (leftValue < rightValue)
107
+ return -1;
108
+ if (leftValue > rightValue)
109
+ return 1;
110
+ return 0;
111
+ },
112
+ createDate: (year, month, day) => createLocalDate(year, month, day),
113
+ deserialize: (value) => {
114
+ if (value === null || value === undefined) {
115
+ return null;
116
+ }
117
+ if (value instanceof Date) {
118
+ return Number.isNaN(value.getTime()) ? null : normalizeDateInstance(value);
119
+ }
120
+ if (typeof value === 'string') {
121
+ const monthDayYearDate = parseMonthDayYearDateOnly(value);
122
+ if (monthDayYearDate !== null) {
123
+ return monthDayYearDate;
124
+ }
125
+ const isoDate = parseIsoDateOnly(value);
126
+ if (isoDate !== null) {
127
+ return isoDate;
128
+ }
129
+ const parsed = new Date(value);
130
+ return Number.isNaN(parsed.getTime()) ? null : normalizeDateInstance(parsed);
131
+ }
132
+ return null;
133
+ },
134
+ endOfMonth: (date) => createLocalDate(date.getFullYear(), date.getMonth() + 1, 0),
135
+ format: (date, format, locale) => resolveDateFormatter(date, format, locale),
136
+ getDate: (date) => date.getDate(),
137
+ getDay: (date) => date.getDay(),
138
+ getMonth: (date) => date.getMonth(),
139
+ getYear: (date) => date.getFullYear(),
140
+ isValid: (date) => Number.isFinite(date.getTime()),
141
+ parse: (text, locale) => {
142
+ const monthDayYearDate = parseMonthDayYearDateOnly(text);
143
+ if (monthDayYearDate !== null) {
144
+ return monthDayYearDate;
145
+ }
146
+ const isoDate = parseIsoDateOnly(text);
147
+ if (isoDate !== null) {
148
+ return isoDate;
149
+ }
150
+ const parsed = new Date(text);
151
+ if (Number.isNaN(parsed.getTime())) {
152
+ return null;
153
+ }
154
+ const formatted = resolveDateFormatter(parsed, 'label', locale);
155
+ if (formatted.trim().length === 0) {
156
+ return null;
157
+ }
158
+ return normalizeDateInstance(parsed);
159
+ },
160
+ startOfMonth: (date) => createLocalDate(date.getFullYear(), date.getMonth(), 1),
161
+ startOfWeek: (date, weekStartsOn) => {
162
+ const diff = (date.getDay() - weekStartsOn + 7) % 7;
163
+ return createLocalDate(date.getFullYear(), date.getMonth(), date.getDate() - diff);
164
+ },
165
+ today: () => normalizeDateInstance(new Date()),
166
+ });
167
+ export function normalizeDateInput(adapter, value, locale) {
168
+ if (value === null || value === undefined) {
169
+ return null;
170
+ }
171
+ if (adapter.deserialize !== undefined) {
172
+ const normalized = adapter.deserialize(value, locale);
173
+ if (normalized !== null && adapter.isValid(normalized)) {
174
+ return normalized;
175
+ }
176
+ }
177
+ if (typeof value === 'string') {
178
+ const parsed = adapter.parse(value, locale);
179
+ return parsed !== null && adapter.isValid(parsed) ? parsed : null;
180
+ }
181
+ if (value instanceof Date && adapter.isValid(value)) {
182
+ return value;
183
+ }
184
+ if (adapter.isValid(value)) {
185
+ return value;
186
+ }
187
+ return null;
188
+ }
189
+ export function coerceWeekStartsOn(value) {
190
+ const normalized = Number.isFinite(value) ? Math.trunc(value) : 0;
191
+ const wrapped = ((normalized % 7) + 7) % 7;
192
+ return wrapped;
193
+ }
194
+ //# sourceMappingURL=datepicker.adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.adapters.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.adapters.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n TngDateAdapter,\n TngDateFormatToken,\n TngDateInputValue,\n TngWeekdayIndex,\n} from './datepicker.types';\n\nfunction createLocalDate(year: number, month: number, day: number): Date {\n return new Date(year, month, day, 12, 0, 0, 0);\n}\n\nfunction normalizeDateInstance(date: Date): Date {\n return createLocalDate(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nfunction toComparableNumber(date: Date): number {\n return Number(\n `${date.getFullYear().toString().padStart(4, '0')}${(date.getMonth() + 1)\n .toString()\n .padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}`,\n );\n}\n\nfunction parseIsoDateOnly(value: string): Date | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value.trim());\n if (match === null) {\n return null;\n }\n\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n const date = createLocalDate(year, month, day);\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction parseMonthDayYearDateOnly(value: string): Date | null {\n const match = /^(\\d{2})-(\\d{2})-(\\d{4})$/.exec(value.trim());\n if (match === null) {\n return null;\n }\n\n const month = Number(match[1]) - 1;\n const day = Number(match[2]);\n const year = Number(match[3]);\n const date = createLocalDate(year, month, day);\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n return null;\n }\n\n return date;\n}\n\nfunction createFormatter(\n locale: string | undefined,\n options: Readonly<Intl.DateTimeFormatOptions>,\n): Intl.DateTimeFormat {\n return new Intl.DateTimeFormat(locale ?? 'en-US', options);\n}\n\nfunction resolveDateFormatter(date: Date, format: TngDateFormatToken | string, locale?: string): string {\n if (format === 'input') {\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n const year = date.getFullYear().toString().padStart(4, '0');\n return `${month}-${day}-${year}`;\n }\n\n if (format === 'month-year') {\n return createFormatter(locale, {\n month: 'long',\n year: 'numeric',\n }).format(date);\n }\n\n if (format === 'month-long') {\n return createFormatter(locale, { month: 'long' }).format(date);\n }\n\n if (format === 'month-short') {\n return createFormatter(locale, { month: 'short' }).format(date);\n }\n\n if (format === 'weekday-short') {\n return createFormatter(locale, { weekday: 'short' }).format(date);\n }\n\n if (format === 'weekday-narrow') {\n return createFormatter(locale, { weekday: 'narrow' }).format(date);\n }\n\n if (format === 'day-number') {\n return createFormatter(locale, { day: 'numeric' }).format(date);\n }\n\n if (format === 'year-label') {\n return createFormatter(locale, { year: 'numeric' }).format(date);\n }\n\n if (format === 'label') {\n return createFormatter(locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(date);\n }\n\n return createFormatter(locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(date);\n}\n\nexport const defaultDatepickerDateAdapter: TngDateAdapter<Date> = Object.freeze({\n addDays: (date, amount) => {\n const next = createLocalDate(date.getFullYear(), date.getMonth(), date.getDate() + amount);\n return next;\n },\n addMonths: (date, amount) => {\n const targetMonth = date.getMonth() + amount;\n const result = createLocalDate(date.getFullYear(), targetMonth, 1);\n const lastDay = createLocalDate(result.getFullYear(), result.getMonth() + 1, 0).getDate();\n return createLocalDate(result.getFullYear(), result.getMonth(), Math.min(date.getDate(), lastDay));\n },\n addYears: (date, amount) => {\n const result = createLocalDate(date.getFullYear() + amount, date.getMonth(), 1);\n const lastDay = createLocalDate(result.getFullYear(), result.getMonth() + 1, 0).getDate();\n return createLocalDate(result.getFullYear(), result.getMonth(), Math.min(date.getDate(), lastDay));\n },\n compare: (left, right) => {\n const leftValue = toComparableNumber(left);\n const rightValue = toComparableNumber(right);\n if (leftValue < rightValue) return -1;\n if (leftValue > rightValue) return 1;\n return 0;\n },\n createDate: (year, month, day) => createLocalDate(year, month, day),\n deserialize: (value) => {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : normalizeDateInstance(value);\n }\n\n if (typeof value === 'string') {\n const monthDayYearDate = parseMonthDayYearDateOnly(value);\n if (monthDayYearDate !== null) {\n return monthDayYearDate;\n }\n\n const isoDate = parseIsoDateOnly(value);\n if (isoDate !== null) {\n return isoDate;\n }\n\n const parsed = new Date(value);\n return Number.isNaN(parsed.getTime()) ? null : normalizeDateInstance(parsed);\n }\n\n return null;\n },\n endOfMonth: (date) => createLocalDate(date.getFullYear(), date.getMonth() + 1, 0),\n format: (date, format, locale) => resolveDateFormatter(date, format, locale),\n getDate: (date) => date.getDate(),\n getDay: (date) => date.getDay(),\n getMonth: (date) => date.getMonth(),\n getYear: (date) => date.getFullYear(),\n isValid: (date) => Number.isFinite(date.getTime()),\n parse: (text, locale) => {\n const monthDayYearDate = parseMonthDayYearDateOnly(text);\n if (monthDayYearDate !== null) {\n return monthDayYearDate;\n }\n\n const isoDate = parseIsoDateOnly(text);\n if (isoDate !== null) {\n return isoDate;\n }\n\n const parsed = new Date(text);\n if (Number.isNaN(parsed.getTime())) {\n return null;\n }\n\n const formatted = resolveDateFormatter(parsed, 'label', locale);\n if (formatted.trim().length === 0) {\n return null;\n }\n\n return normalizeDateInstance(parsed);\n },\n startOfMonth: (date) => createLocalDate(date.getFullYear(), date.getMonth(), 1),\n startOfWeek: (date, weekStartsOn) => {\n const diff = (date.getDay() - weekStartsOn + 7) % 7;\n return createLocalDate(date.getFullYear(), date.getMonth(), date.getDate() - diff);\n },\n today: () => normalizeDateInstance(new Date()),\n});\n\nexport function normalizeDateInput<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n value: TngDateInputValue<TDate>,\n locale?: string,\n): TDate | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (adapter.deserialize !== undefined) {\n const normalized = adapter.deserialize(value, locale);\n if (normalized !== null && adapter.isValid(normalized)) {\n return normalized;\n }\n }\n\n if (typeof value === 'string') {\n const parsed = adapter.parse(value, locale);\n return parsed !== null && adapter.isValid(parsed) ? parsed : null;\n }\n\n if (value instanceof Date && adapter.isValid(value as TDate)) {\n return value as TDate;\n }\n\n if (adapter.isValid(value as TDate)) {\n return value as TDate;\n }\n\n return null;\n}\n\nexport function coerceWeekStartsOn(value: number): TngWeekdayIndex {\n const normalized = Number.isFinite(value) ? Math.trunc(value) : 0;\n const wrapped = ((normalized % 7) + 7) % 7;\n return wrapped as TngWeekdayIndex;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { TngDateAdapter, TngDateSelectionInput, TngDateValue, TngDatepickerSelectionMode } from './datepicker.types';
2
+ export declare function normalizeSelectionInput<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, selectionMode: TngDatepickerSelectionMode, value: TngDateSelectionInput<TDate>, locale?: string): Readonly<{
3
+ validationError: string | null;
4
+ value: TngDateValue<TDate>;
5
+ }>;
6
+ export declare function selectionValuesEqual<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, selectionMode: TngDatepickerSelectionMode, left: TngDateValue<TDate>, right: TngDateValue<TDate>): boolean;
7
+ export declare function clearSelectionForMode<TDate>(selectionMode: TngDatepickerSelectionMode): TngDateValue<TDate>;
8
+ export declare function valueIncludesDate<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, selectionMode: TngDatepickerSelectionMode, value: TngDateValue<TDate>, date: TDate): boolean;
9
+ export declare function rangeIncludesDate<TDate>(adapter: Readonly<TngDateAdapter<TDate>>, value: TngDateValue<TDate>, date: TDate): boolean;
10
+ //# sourceMappingURL=datepicker.state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.state.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.state.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EAId,qBAAqB,EACrB,YAAY,EACZ,0BAA0B,EAC3B,MAAM,oBAAoB,CAAC;AAY5B,wBAAgB,uBAAuB,CAAC,KAAK,EAC3C,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EACxC,aAAa,EAAE,0BAA0B,EACzC,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,EACnC,MAAM,CAAC,EAAE,MAAM,GACd,QAAQ,CAAC;IACV,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;CAC5B,CAAC,CAuDD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EACxC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EACxC,aAAa,EAAE,0BAA0B,EACzC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,EACzB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,GACzB,OAAO,CA6BT;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EACzC,aAAa,EAAE,0BAA0B,GACxC,YAAY,CAAC,KAAK,CAAC,CAUrB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EACrC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EACxC,aAAa,EAAE,0BAA0B,EACzC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAC1B,IAAI,EAAE,KAAK,GACV,OAAO,CAET;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EACrC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EACxC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAC1B,IAAI,EAAE,KAAK,GACV,OAAO,CAET"}
@@ -0,0 +1,97 @@
1
+ import { normalizeDateInput } from './datepicker.adapters';
2
+ import { datesEqual, isDateInRange, isValueSelected, normalizeRangeOrder, sortAndUniqueDates, } from './datepicker.utils';
3
+ function isRangeInput(value) {
4
+ return typeof value === 'object' && value !== null && !Array.isArray(value) && 'start' in value && 'end' in value;
5
+ }
6
+ function isRangeValue(value) {
7
+ return typeof value === 'object' && value !== null && !Array.isArray(value) && 'start' in value && 'end' in value;
8
+ }
9
+ export function normalizeSelectionInput(adapter, selectionMode, value, locale) {
10
+ if (value === null || value === undefined) {
11
+ return Object.freeze({ validationError: null, value: null });
12
+ }
13
+ if (selectionMode === 'range') {
14
+ if (!isRangeInput(value)) {
15
+ const singleDate = normalizeDateInput(adapter, value, locale);
16
+ if (singleDate === null) {
17
+ return Object.freeze({ validationError: 'invalid-value', value: null });
18
+ }
19
+ return Object.freeze({
20
+ validationError: null,
21
+ value: Object.freeze({ end: null, start: singleDate }),
22
+ });
23
+ }
24
+ const start = normalizeDateInput(adapter, value.start, locale);
25
+ const end = normalizeDateInput(adapter, value.end, locale);
26
+ if (value.start !== null && value.start !== undefined && start === null) {
27
+ return Object.freeze({ validationError: 'invalid-value', value: null });
28
+ }
29
+ if (value.end !== null && value.end !== undefined && end === null) {
30
+ return Object.freeze({ validationError: 'invalid-value', value: null });
31
+ }
32
+ return Object.freeze({
33
+ validationError: null,
34
+ value: normalizeRangeOrder(adapter, Object.freeze({ end, start })),
35
+ });
36
+ }
37
+ if (selectionMode === 'multiple') {
38
+ const list = Array.isArray(value) ? value : [value];
39
+ const normalized = list
40
+ .map((item) => normalizeDateInput(adapter, item, locale))
41
+ .filter((item) => item !== null);
42
+ if (normalized.length !== list.length) {
43
+ return Object.freeze({
44
+ validationError: 'invalid-value',
45
+ value: Object.freeze(sortAndUniqueDates(adapter, normalized)),
46
+ });
47
+ }
48
+ return Object.freeze({
49
+ validationError: null,
50
+ value: Object.freeze(sortAndUniqueDates(adapter, normalized)),
51
+ });
52
+ }
53
+ const date = normalizeDateInput(adapter, value, locale);
54
+ return Object.freeze({
55
+ validationError: date === null ? 'invalid-value' : null,
56
+ value: date,
57
+ });
58
+ }
59
+ export function selectionValuesEqual(adapter, selectionMode, left, right) {
60
+ if (left === right) {
61
+ return true;
62
+ }
63
+ if (left === null || right === null) {
64
+ return left === right;
65
+ }
66
+ if (selectionMode === 'single') {
67
+ return datesEqual(adapter, left, right);
68
+ }
69
+ if (selectionMode === 'multiple') {
70
+ const leftDates = left;
71
+ const rightDates = right;
72
+ if (leftDates.length !== rightDates.length) {
73
+ return false;
74
+ }
75
+ return leftDates.every((date, index) => datesEqual(adapter, date, rightDates[index] ?? null));
76
+ }
77
+ const leftRange = left;
78
+ const rightRange = right;
79
+ return (datesEqual(adapter, leftRange.start, rightRange.start) &&
80
+ datesEqual(adapter, leftRange.end, rightRange.end));
81
+ }
82
+ export function clearSelectionForMode(selectionMode) {
83
+ if (selectionMode === 'range') {
84
+ return Object.freeze({ end: null, start: null });
85
+ }
86
+ if (selectionMode === 'multiple') {
87
+ return Object.freeze([]);
88
+ }
89
+ return null;
90
+ }
91
+ export function valueIncludesDate(adapter, selectionMode, value, date) {
92
+ return isValueSelected(adapter, selectionMode, value, date);
93
+ }
94
+ export function rangeIncludesDate(adapter, value, date) {
95
+ return isDateInRange(adapter, value, date);
96
+ }
97
+ //# sourceMappingURL=datepicker.state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.state.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/datepicker/datepicker.state.ts"],"names":[],"mappings":"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","sourcesContent":["import { normalizeDateInput } from './datepicker.adapters';\nimport {\n datesEqual,\n isDateInRange,\n isValueSelected,\n normalizeRangeOrder,\n sortAndUniqueDates,\n} from './datepicker.utils';\nimport type {\n TngDateAdapter,\n TngDateInputValue,\n TngDateRange,\n TngDateRangeInput,\n TngDateSelectionInput,\n TngDateValue,\n TngDatepickerSelectionMode,\n} from './datepicker.types';\n\nfunction isRangeInput<TDate>(\n value: TngDateSelectionInput<TDate>,\n): value is Readonly<TngDateRangeInput<TDate>> {\n return typeof value === 'object' && value !== null && !Array.isArray(value) && 'start' in value && 'end' in value;\n}\n\nfunction isRangeValue<TDate>(value: TngDateValue<TDate>): value is TngDateRange<TDate> {\n return typeof value === 'object' && value !== null && !Array.isArray(value) && 'start' in value && 'end' in value;\n}\n\nexport function normalizeSelectionInput<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n selectionMode: TngDatepickerSelectionMode,\n value: TngDateSelectionInput<TDate>,\n locale?: string,\n): Readonly<{\n validationError: string | null;\n value: TngDateValue<TDate>;\n}> {\n if (value === null || value === undefined) {\n return Object.freeze({ validationError: null, value: null });\n }\n\n if (selectionMode === 'range') {\n if (!isRangeInput(value)) {\n const singleDate = normalizeDateInput(adapter, value as TngDateInputValue<TDate>, locale);\n if (singleDate === null) {\n return Object.freeze({ validationError: 'invalid-value', value: null });\n }\n return Object.freeze({\n validationError: null,\n value: Object.freeze({ end: null, start: singleDate }),\n });\n }\n\n const start = normalizeDateInput(adapter, value.start, locale);\n const end = normalizeDateInput(adapter, value.end, locale);\n if (value.start !== null && value.start !== undefined && start === null) {\n return Object.freeze({ validationError: 'invalid-value', value: null });\n }\n if (value.end !== null && value.end !== undefined && end === null) {\n return Object.freeze({ validationError: 'invalid-value', value: null });\n }\n\n return Object.freeze({\n validationError: null,\n value: normalizeRangeOrder(adapter, Object.freeze({ end, start })),\n });\n }\n\n if (selectionMode === 'multiple') {\n const list = Array.isArray(value) ? value : [value];\n const normalized = list\n .map((item) => normalizeDateInput(adapter, item as TngDateInputValue<TDate>, locale))\n .filter((item): item is TDate => item !== null);\n if (normalized.length !== list.length) {\n return Object.freeze({\n validationError: 'invalid-value',\n value: Object.freeze(sortAndUniqueDates(adapter, normalized)),\n });\n }\n\n return Object.freeze({\n validationError: null,\n value: Object.freeze(sortAndUniqueDates(adapter, normalized)),\n });\n }\n\n const date = normalizeDateInput(adapter, value as TngDateInputValue<TDate>, locale);\n return Object.freeze({\n validationError: date === null ? 'invalid-value' : null,\n value: date,\n });\n}\n\nexport function selectionValuesEqual<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n selectionMode: TngDatepickerSelectionMode,\n left: TngDateValue<TDate>,\n right: TngDateValue<TDate>,\n): boolean {\n if (left === right) {\n return true;\n }\n\n if (left === null || right === null) {\n return left === right;\n }\n\n if (selectionMode === 'single') {\n return datesEqual(adapter, left as TDate, right as TDate);\n }\n\n if (selectionMode === 'multiple') {\n const leftDates = left as readonly TDate[];\n const rightDates = right as readonly TDate[];\n if (leftDates.length !== rightDates.length) {\n return false;\n }\n\n return leftDates.every((date, index) => datesEqual(adapter, date, rightDates[index] ?? null));\n }\n\n const leftRange = left as TngDateRange<TDate>;\n const rightRange = right as TngDateRange<TDate>;\n return (\n datesEqual(adapter, leftRange.start, rightRange.start) &&\n datesEqual(adapter, leftRange.end, rightRange.end)\n );\n}\n\nexport function clearSelectionForMode<TDate>(\n selectionMode: TngDatepickerSelectionMode,\n): TngDateValue<TDate> {\n if (selectionMode === 'range') {\n return Object.freeze({ end: null, start: null });\n }\n\n if (selectionMode === 'multiple') {\n return Object.freeze([]);\n }\n\n return null;\n}\n\nexport function valueIncludesDate<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n selectionMode: TngDatepickerSelectionMode,\n value: TngDateValue<TDate>,\n date: TDate,\n): boolean {\n return isValueSelected(adapter, selectionMode, value, date);\n}\n\nexport function rangeIncludesDate<TDate>(\n adapter: Readonly<TngDateAdapter<TDate>>,\n value: TngDateValue<TDate>,\n date: TDate,\n): boolean {\n return isDateInRange(adapter, value, date);\n}\n"]}